[
  {
    "path": ".github/dependabot.yml",
    "content": "version: 2\nupdates:\n- package-ecosystem: gomod\n  directory: \"/\"\n  schedule:\n    interval: daily\n  open-pull-requests-limit: 10\n"
  },
  {
    "path": ".gitignore",
    "content": "tmp/\nbeancounter\n*.csv\n"
  },
  {
    "path": ".travis.yml",
    "content": "---\n\nlanguage: go\n\ngo:\n  - '1.13.4'\n\nbefore_install:\n  - go get github.com/mattn/goveralls\n\ninstall:\n  - GOOS=linux GOARCH=amd64 go build -o beancounter-${TRAVIS_TAG}-linux-amd64\n  - GOOS=darwin GOARCH=amd64 go build -o beancounter-${TRAVIS_TAG}-osx-amd64\n  - GOOS=windows GOARCH=amd64 go build -o beancounter-${TRAVIS_TAG}-windows-amd64.exe\n\nscript:\n  - go test -v ./... -coverprofile coverage.out\n\nafter_success:\n  - $HOME/gopath/bin/goveralls -coverprofile coverage.out -service=travis-ci\n"
  },
  {
    "path": "BUG-BOUNTY.md",
    "content": "Serious about security\n======================\n\nSquare recognizes the important contributions the security research community\ncan make. We therefore encourage reporting security issues with the code\ncontained in this repository.\n\nIf you believe you have discovered a security vulnerability, please follow the\nguidelines at <https://bugcrowd.com/squareopensource>.\n\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing\n\nWe appreciate your desire to contribute code to this repo. You may do so through GitHub\nby forking the repository and sending a pull request.\n\nWhen submitting code, please make every effort to follow existing conventions\nand style in order to keep the code as readable as possible. Please also make\nsure all tests pass.\n\nBefore your code can be accepted into the project you must also sign the\n[Individual Contributor License Agreement (CLA)][1].\n\nPull requests need to be approved by two members of Square's security engineering team.\n\nCommits are signed by Square's security engineers. Merges are signed by GitHub. Contributors\nare not required to sign their commits.\n\n [1]: https://spreadsheets.google.com/spreadsheet/viewform?formkey=dDViT2xzUHAwRkI3X3k5Z0lQM091OGc6MQ&ndplr=1\n"
  },
  {
    "path": "LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "README.md",
    "content": "Beancounter\n==========\n\n[![license](http://img.shields.io/badge/license-apache_2.0-blue.svg?style=flat)](https://raw.githubusercontent.com/square/beancounter/master/LICENSE) [![travis](https://img.shields.io/travis/com/square/beancounter.svg?maxAge=3600&logo=travis&label=travis)](https://travis-ci.com/square/beancounter)\n[![coverage](https://coveralls.io/repos/github/square/beancounter/badge.svg?branch=master)](https://coveralls.io/r/square/beancounter) [![report](https://goreportcard.com/badge/github.com/square/beancounter)](https://goreportcard.com/report/github.com/square/beancounter)\n\nBeancounter is a command line utility to audit the balance of [Hierarchical Deterministic (HD)][bip32] wallets at a given point in time (or block height). The tool is designed to scale and work for wallets with a large number of addresses or a large number of transactions, with support ranging from simple watch wallets to more complicated multisig + segwit. If you're curious, [here's why we decided to write Beancounter](WHY.md) in the first place.\n\nBeancounter currently supports two types of backends to query the blockchain:\n1. Electrum public servers. When using these servers, Beancounter behaves in a similar fashion to an Electrum client wallet. The servers are queried for transaction history for specific addresses. Using Electrum servers is easiest but requires trusting public servers to return accurate information. There is also potential privacy exposure.\n\n2. Private Btcd node. Btcd is a Bitcoin full node which implements transaction indexes. Setting up a Btcd node can take some time (the initial sync takes ~7 days) and requires maintaining the node up-to-date. The benefit is however a higher level of guarantee that the transaction history is accurate.\n\n![logo](https://raw.githubusercontent.com/square/beancounter/master/coffee.jpg)\n\n[bip32]: https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki\n\nGetting Started\n===============\n\nInstalling\n----------\nRequires Go 1.11 or higher.\n\n```\n$ git clone https://github.com/square/beancounter/\n$ cd beancounter\n$ go build -mod=vendor\n```\n\nDeriving the child pubkey\n-------------------------\nLet's imagine we want to track the balance of `tpubD8L6UhrL8ML9...` and the derivation being used is `m/1'/1234/change/index`.\n\nWe need to manually perform the `1234` derivation:\n\n```\n$ ./beancounter keytree 1234\nEnter pubkey #1 out of #1:\ntpubD8L6UhrL8ML9Ao47k4pmdvUoiA6QUJVzrJ9BXLgU9idRKnvdRFGgjcxmVxojWGvCcjMi6QWCp8uMpCwWdSFRDNJ7utizxLy27sVWXQT4Jz7\nChild pubkey #1: tpubDBrCAXucLxvjC9n9nZGGcYS8pk4X1N97YJmUgdDSwG2p36gbSqeRuytHYCHe2dHxLsV2EchX9ePaFdRwp7cNLrSpnr3PsoPLUQqbvLBDWvh\n```\n\nWe can then use `tpubDBrCAXucLxvj...` to compute the balance.\n\nCompute balance of a HD wallet (using Electrum)\n-----------------------------------------------\n```\n$ ./beancounter compute-balance --type multisig --block-height 1438791\nEnter pubkey #1 out of #1:\ntpubDBrCAXucLxvjC9n9nZGGcYS8pk4X1N97YJmUgdDSwG2p36gbSqeRuytHYCHe2dHxLsV2EchX9ePaFdRwp7cNLrSpnr3PsoPLUQqbvLBDWvh\n...\nBalance: 267893477\n```\n\nCompute balance of a single address (using Electrum)\n----------------------------------------------------\n```\n$ ./beancounter compute-balance --type single-address --lookahead 1 --block-height 1438791\nEnter single address:\nmzoeuyGqMudyvKbkNx5dtNBNN59oKEAsPn\n...\nBalance: 111168038\n```\n\nCompute balance of a HD wallet (using Btcd)\n-------------------------------------------\n\n[https://github.com/btcsuite/btcd](https://github.com/btcsuite/btcd) contains information on how to setup a node.\n\nBeancounter requires `addrindex=1`, `txindex=1`, and `notls=1`. If your node is on a remote server,\nwe recommend tunneling the RPC traffic over ssh or some other secure tunnel.\n\n```\nrpcuser=mia\nrpcpass=ilovebrownies\nrpclisten=127.0.0.1:8334\nnotls=1\n\nblocksonly=1\naddrindex=1\ntxindex=1\n```\n\nOnce the Btcd is up and running, you can do:\n```\n$ ./beancounter compute-balance --type multisig --block-height 1438791 --backend btcd --addr localhost:8334 --rpcuser mia --rpcpass ilovebrownies\nEnter pubkey #1 out of #1:\ntpubDBrCAXucLxvjC9n9nZGGcYS8pk4X1N97YJmUgdDSwG2p36gbSqeRuytHYCHe2dHxLsV2EchX9ePaFdRwp7cNLrSpnr3PsoPLUQqbvLBDWvh\n...\nBalance: 267893477\n```\n\nDetails\n=======\n\nBeancounter is implemented in Go. We picked Go because we wanted an easy build and distribution process. We appreciate the ability to cross-compile and distribute static binaries which don't have external dependencies.\n\nWe use the following process to determine a deterministic wallet's balance at a given block height:\n\n1. Derive external (receive) and internal (change) addresses.\n2. For each address, query the backend for a list of transactions. We keep deriving additional addresses until we find a large number of unused addresses.\n3. Prune the transaction list to remove transactions newer than the block height.\n4. For each transaction, query the backend for the raw transaction.\n5. For each transaction, track whether the output belongs to the wallet and whether\n   it got spent.\n6. Iterate over the transactions and compute the final balance.\n\nContributing\n============\n\nWe appreciate any pull request which fixes bugs or adds features!\n\nIf you need ideas on how to contribute, we would enjoy a 3rd backend (Bitcoin-core based, processing\neach block by streaming the entire blockchain) as well as additional wallet types (e.g. multisig non-segwit).\n\nAdditional unittests and improvements to comments/docs are also always welcome.\n\nLicense\n=======\n\n    Copyright 2018 Square, Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n"
  },
  {
    "path": "WHY.md",
    "content": "# Why we wrote Beancounter\n### _and why it wasn't trivial_\nIntuitively, computing the balance for a Bitcoin wallet should be easy. This document explains the issues we ran into with both, our hot and cold wallets. We solved these issues by implementing Beancounter, a tool we then open-sourced.\n\n# How is the blockchain structured?\nA simplified explanation: Bitcoin stores transactions on a blockchain. A blockchain is a list of blocks. Each block contains transactions.\n\nA transaction consumes previous transaction:index pairs (debits) and creates new outputs (credits). The outputs are address:amount pairs and are called unspent transactions (UTXO) until they get consumed in a subsequent transaction.\n\n```\n            [...] -> [block dc52a] -> [...]\n                           |\n                           +-- transaction d1e6d\n                           | +-- debit: prevtx 068aa:1\n                           | +-- debit: prevtx bfa74:4\n                           | +-- credit: some address:amount\n                           | +-- credit: another address:amount\n                           | ...\n                           |\n                           +- transaction 1c867\n                           | ...\n                           |\n                           ...\n```\n\nThe important point for our discussion is that the funds are the UTXOs and there’s no per-address state. Each Bitcoin client needs to compute the per-address balance for the wallets they care about.\n\n_Note: not all cryptocurrencies are implemented in this way. For instance, Ethereum maintains contract state._\n\nhttps://github.com/bitcoinbook/bitcoinbook (or the paper version of the book) is a good place to learn more about the underlying structures.\n\n# What is a Bitcoin wallet?\nA wallet is a collection of addresses. For [Hierarchical Deterministic wallets][bip32] (which is what we use), each wallet has a huge number of addresses (typically 2^31 * 2). To figure out the balance, we need to find each addresses’ balance and sum things up. Doing the following would however be extremely slow:\n\n```\nbalance = 0;\nfor (int i=0; i<2^31; i++) {\n  address = wallet.get(i)\n  balance += lookup(address)\n}\n\n```\n\n[bip32]: https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki\n\n# How does [insert favorite wallet software] do it?\nMost Bitcoin software defines a gap window (called lookahead in [BitcoinJ][btcj]). The software initially has a small set of addresses (the size of the gap, say 20) and watches for transactions which include addresses from this set. As the software sees transactions, it computes the 20 following addresses and adds them to the set.\n\nNote: the gap heuristic does not always work well in practice (there have been cases where the default was too small).\n\n[btcj]: https://bitcoinj.github.io/\n\n# What happened when we tried using Electrum\n- Our hot wallets have a large number of transactions at a high velocity (multiple transactions per block).\n  - We could potentially fix Electrum. Would require learning the code base and contributing patches (or filing bugs and hoping maintainers will be interested to address them).\n- Our cold wallet were initially using a custom derivation scheme, not compatible with Electrum.\n  - This is no longer true, we eventually switched to using the same scheme as our hot wallets.\n\n\n# Why we can’t simply use our core Bitcoin nodes\n- Square runs a few Bitcoin nodes. We explored using them (although we would need to figure out a way to safely expose the RPC protocol only to specific people).\n- The standard Bitcoin node however does not maintain an index of address => balance. It also does not maintain an index of address => transaction. The only index the core nodes maintain is transaction => block (for all transaction or only for unspent transaction depending whether prunning is enabled or not).\n  - ([there][pr1] [were][pr2] [some][pr3] PRs to address this, but none of them were ready).\n  - We could query the entire history, pick out the addresses we care about and compute the balance. But it requires writing a fair amount of code.\n\n[pr1]: https://github.com/bitcoin/bitcoin/pull/5048\n[pr2]: https://github.com/bitcoin/bitcoin/pull/8660\n[pr3]: https://github.com/bitcoin/bitcoin/pull/9806\n\n\n# What about alternative Bitcoin nodes?\n- There are multiple alternative implementations which maintain an address => transactions index (and also an address => balance):\n  - Electrum servers ([original unmaintained implementation][elect] and [ElectrumX][electx])\n  - [btcd][btcd] (Alternative Bitcoin implementation in Go)\n  - [Bitcoin fork][btcfork] with an index patch (the author tried to upstream the changes).\n  - [indexd-server][btcidx] which sits on top of a core node.\n- The simplest API (address => balance) however does not take a max block height as a parameter (at least neither Electrum nor btcd’s APIs). A new block is mined every ~10 min, but it takes much longer to iterate over all the addresses in our large hot wallets. We are thus unable to determine the wallet balance.\n- We had to use two indexes, the address => transactions index combined with the transactions => block index to compute the balance. This turns out to be quite a bit of engineering effort!\n\n[btcd]:    https://github.com/btcsuite/btcd\n[btcfork]: https://github.com/btcdrak/bitcoin\n[btcidx]:  https://github.com/CounterpartyXCP/indexd-server\n[elect]:   https://github.com/spesmilo/electrum-server\n[electx]:  https://github.com/kyuupichan/electrumx\n\n# What about trust. Can we trust Electrum nodes?\n- Beancounter allows us to connect to our own Electrum node, our own btcd node, or public Electrum nodes. This allows us to pick the trust model we care about.\n- Engineers can connect to their own nodes (e.g. when debugging).\nnon-technical people can still use Beancounter without having to worry about getting access to a full node.\n\n# Converting human dates to block height.\n- The tool we built works with blocks. Auditors want to know the wallet’s balance on a specific date (e.g. 3/31/18 at 00:00:00 GMT)\n- Each block on the blockchain carries a timestamp, but the timestamps are not monotonic!\n- However, the median of any [11][blk_height] consecutive blocks is guaranteed to be monotonic.\n- We can therefore map a block to a monotonic time (by defining the block’s time as being the median of its timestamp, its previous 5 blocks and its next 5 blocks) and perform a binary search to map a human date (e.g. 3/31/18 at 00:00:00 GMT) to the (closest) specific block.\n\n[blk_height]: https://github.com/bitcoin/bitcoin/blob/e8ad580f51532f6bfa6cb55688bffcc12196c0ac/src/chain.h#L324\n\n\n# Random other issues/thoughts\n- Electrum API is a little painful to use. E.g. some methods return a stream of results, but we only want one result. No way to unsubscribe from the stream.\n- Electrum’s API versioning is a little messy—not 100% backwards compatible and the initial client library we picked wasn’t very well implemented.\n- Running a node (for development purpose) takes a long time to sync and requires a large SSD (at least 250GB ~ Oct ‘18). For some reason, the btcd node takes ~7 days for its initial sync (what is it doing?).\n- We cannot easily give random people (e.g. external auditors) access to our private Bitcoin or btcd node. The RPC mechanism does not support fine grained permissions / read-only access.\n- We had to deal with potential race conditions when generating additional addresses to watch while synchronously scanning the blockchain. Our hands were tied when it came to parallelism. Talking to Electrum servers can be slow and needs to be multiplexed.\n- Many other random issues (see github commit history for a full list).\nPerhaps we could have leveraged some other tool? Some kind of Hadoop map-reduce over the blockchain.\n"
  },
  {
    "path": "accounter/accounter.go",
    "content": "package accounter\n\nimport (\n\t\"encoding/hex\"\n\t\"fmt\"\n\t\"log\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/btcsuite/btcutil\"\n\t\"github.com/square/beancounter/reporter\"\n\n\t\"github.com/square/beancounter/backend\"\n\t\"github.com/square/beancounter/deriver\"\n\t. \"github.com/square/beancounter/utils\"\n)\n\n// Accounter is the main struct that can tally the balance for a given wallet.\n// The main elements of Accounter are backend and deriver. Deriver is used to\n// derive new addresses for a given config, and backend fetches transactions for each address.\n//\n// Note:\n// - We don't track fees. I.e. we don't answer the question: how much have we spent in fees. It\n//   shouldn't be hard to answer that question.\ntype Accounter struct {\n\taccount     string\n\tnet         Network\n\txpubs       []string\n\tblockHeight uint32 // height at which we want to compute the balance\n\n\taddresses    map[string]address     // map of address script => (Address, txHashes)\n\ttransactions map[string]transaction // map of txhash => transaction\n\n\tbackend   backend.Backend\n\tderiver   *deriver.AddressDeriver\n\tlookahead uint32\n\n\tcountMu            sync.Mutex // protects lastAddresses, derivedAddrCount and processedAddrCount\n\tlastAddresses      [2]uint32\n\tderivedAddrCount   uint32\n\tprocessedAddrCount uint32\n\tseenTxCount        uint32\n\tprocessedTxCount   uint32\n\n\taddrResponses <-chan *backend.AddrResponse\n\ttxResponses   <-chan *backend.TxResponse\n}\n\ntype address struct {\n\tpath     *deriver.Address\n\ttxHashes []string\n}\n\ntype transaction struct {\n\theight int64\n\thex    string\n\tvin    []vin\n\tvout   []vout\n}\n\ntype vin struct {\n\tprevHash string // hash of previous transaction\n\tindex    uint32 // offset. 0-indexed.\n}\n\ntype vout struct {\n\tvalue   int64 // in Satoshi. We use signed int64 so we don't have to worry about underflow.\n\taddress string\n\tours    bool\n\tspentBy *string // txhash of spending transaction; nil for unspent transactions.\n}\n\n// New instantiates a new Accounter.\n// TODO: find a better way to pass options to the NewCounter. Maybe thru a config or functional option params?\nfunc New(b backend.Backend, addressDeriver *deriver.AddressDeriver, lookahead uint32, blockHeight uint32) *Accounter {\n\ta := &Accounter{\n\t\tblockHeight:   blockHeight,\n\t\tbackend:       b,\n\t\tderiver:       addressDeriver,\n\t\tlookahead:     lookahead,\n\t\tlastAddresses: [2]uint32{lookahead, lookahead},\n\t}\n\ta.addresses = make(map[string]address)\n\ta.transactions = make(map[string]transaction)\n\ta.addrResponses = b.AddrResponses()\n\ta.txResponses = b.TxResponses()\n\treturn a\n}\n\nfunc (a *Accounter) ComputeBalance() uint64 {\n\t// Fetch all the transactions\n\ta.fetchTransactions()\n\n\t// Process the data\n\ta.processTransactions()\n\n\t// Compute the balance\n\treturn a.balance()\n}\n\n// Fetch all the transactions related to our wallet. We tally the balance after we have fetched\n// all the transactions so that we don't need to worry about receiving transactions out-of-order.\nfunc (a *Accounter) fetchTransactions() {\n\t// send work runs forever\n\tgo a.sendWork()\n\n\ta.recvWork()\n\n\treporter.GetInstance().Log(\"done fetching addresses; waiting to finish...\")\n\ta.backend.Finish()\n\treporter.GetInstance().Log(\"done fetching transactions\")\n}\n\nfunc (a *Accounter) processTransactions() {\n\tfor hash, tx := range a.transactions {\n\t\t// remove transactions which are too recent\n\t\tif tx.height > int64(a.blockHeight) {\n\t\t\treporter.GetInstance().Logf(\"transaction %s has height %d > BLOCK HEIGHT (%d)\", hash, tx.height, a.blockHeight)\n\t\t\tdelete(a.transactions, hash)\n\t\t}\n\t\t// remove transactions which haven't been mined\n\t\tif tx.height <= 0 {\n\t\t\treporter.GetInstance().Logf(\"transaction %s has not been mined, yet (height=%d)\", hash, tx.height)\n\t\t\tdelete(a.transactions, hash)\n\t\t}\n\t}\n\treporter.GetInstance().SetTxAfterFilter(int32(len(a.transactions)))\n\treporter.GetInstance().Log(\"done filtering\")\n\n\t// TODO: we could check that scheduled == fetched in the metrics we track in reporter.\n\n\t// parse the transaction hex\n\tfor hash, tx := range a.transactions {\n\t\tb, err := hex.DecodeString(tx.hex)\n\t\tif err != nil {\n\t\t\tfmt.Printf(\"failed to unhex transaction %s: %s\", hash, tx.hex)\n\t\t}\n\t\tparsedTx, err := btcutil.NewTxFromBytes(b)\n\t\tif err != nil {\n\t\t\tfmt.Printf(\"failed to parse transaction %s: %s\", hash, tx.hex)\n\t\t\tcontinue\n\t\t}\n\t\tfor _, txin := range parsedTx.MsgTx().TxIn {\n\t\t\ttx.vin = append(tx.vin, vin{\n\t\t\t\tprevHash: txin.PreviousOutPoint.Hash.String(),\n\t\t\t\tindex:    txin.PreviousOutPoint.Index,\n\t\t\t})\n\t\t}\n\n\t\tfor _, txout := range parsedTx.MsgTx().TxOut {\n\t\t\taddr := hex.EncodeToString(txout.PkScript)\n\t\t\t_, exists := a.addresses[addr]\n\t\t\ttx.vout = append(tx.vout, vout{\n\t\t\t\tvalue:   txout.Value,\n\t\t\t\taddress: addr,\n\t\t\t\tours:    exists,\n\t\t\t\tspentBy: nil,\n\t\t\t})\n\t\t}\n\n\t\t// ugly...\n\t\ta.transactions[hash] = tx\n\t}\n}\n\nfunc (a *Accounter) balance() uint64 {\n\tbalance := int64(0)\n\n\t// TODO: we could check that every transaction either has an input which belongs to us or an\n\t// output. Otherwise, it would not have appeared in the list. It's also a good check, given\n\t// that we filter some transactions out.\n\n\t// compute all credits\n\tfor _, tx := range a.transactions {\n\t\tfor _, txout := range tx.vout {\n\t\t\tif txout.ours {\n\t\t\t\tbalance += txout.value\n\t\t\t}\n\t\t}\n\t}\n\n\t// TODO: log a warning if an address is being used multiple times. Ideally, a given address\n\t// should only have one incoming and one outgoing transaction.\n\n\t// TODO: log a warning if a receive address is getting change.\n\n\t// TODO: log a warning if a change address is receiving funds from an address we don't own.\n\n\t// compute all debits\n\tfor hash, tx := range a.transactions {\n\t\tfor _, txin := range tx.vin {\n\t\t\tprev, exists := a.transactions[txin.prevHash]\n\t\t\tif !exists {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif int(txin.index) >= len(prev.vout) {\n\t\t\t\tpanic(\"prev index > vouts\")\n\t\t\t}\n\t\t\tif prev.vout[txin.index].ours {\n\t\t\t\tbalance -= prev.vout[txin.index].value\n\t\t\t\tif prev.vout[txin.index].spentBy != nil {\n\t\t\t\t\t// sanity check: an output can only be spent by one transaction.\n\t\t\t\t\tlog.Panicf(\"%s and %s, both spending %s\", hash, *prev.vout[txin.index].spentBy, txin.prevHash)\n\t\t\t\t}\n\t\t\t\tprev.vout[txin.index].spentBy = &hash\n\t\t\t}\n\t\t}\n\t}\n\n\tif balance < 0 {\n\t\tpanic(\"balance is negative\")\n\t}\n\treturn uint64(balance)\n}\n\n// sendWork starts the send loop that derives new addresses and sends them to a\n// a backend.\n// Addresses are derived in batches (up to a `lookahead` index) and the range can\n// be extended if a transaction for a given address is found. E.g.:\n// only addresses 0-99 are initially checked, but there was a transaction at\n// index 43, so now all addresses up to 142 are checked.\nfunc (a *Accounter) sendWork() {\n\tindexes := []uint32{0, 0}\n\tfor {\n\t\tfor _, change := range []uint32{0, 1} {\n\t\t\tlastAddr := a.getLastAddress(change)\n\t\t\tfor indexes[change] < lastAddr {\n\t\t\t\t// increment the number of addresses which have been derived\n\t\t\t\taddr := a.deriver.Derive(change, indexes[change])\n\t\t\t\ta.countMu.Lock()\n\t\t\t\ta.derivedAddrCount++\n\t\t\t\ta.countMu.Unlock()\n\t\t\t\ta.backend.AddrRequest(addr)\n\t\t\t\tindexes[change]++\n\t\t\t}\n\t\t}\n\t\t// apparently no more work for us, so we can sleep a bit\n\t\ttime.Sleep(time.Millisecond * 100)\n\t}\n}\n\nfunc (a *Accounter) recvWork() {\n\taddrResponses := a.addrResponses\n\ttxResponses := a.txResponses\n\tfor {\n\t\tselect {\n\t\tcase resp, ok := <-addrResponses:\n\t\t\t// channel is closed now, so ignore this case by blocking forever\n\t\t\tif !ok {\n\t\t\t\taddrResponses = nil\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treporter.GetInstance().IncAddressesFetched()\n\n\t\t\ta.countMu.Lock()\n\t\t\ta.processedAddrCount++\n\t\t\ta.countMu.Unlock()\n\n\t\t\ta.addresses[resp.Address.Script()] = address{\n\t\t\t\tpath:     resp.Address,\n\t\t\t\ttxHashes: resp.TxHashes,\n\t\t\t}\n\n\t\t\ta.countMu.Lock()\n\t\t\tfor _, txHash := range resp.TxHashes {\n\t\t\t\tif _, exists := a.transactions[txHash]; !exists {\n\t\t\t\t\ta.backend.TxRequest(txHash)\n\t\t\t\t\ta.seenTxCount++\n\t\t\t\t}\n\t\t\t}\n\t\t\ta.countMu.Unlock()\n\n\t\t\treporter.GetInstance().Logf(\"address %s has %d transactions\", resp.Address, len(resp.TxHashes))\n\n\t\t\tif resp.HasTransactions() {\n\t\t\t\ta.countMu.Lock()\n\t\t\t\ta.lastAddresses[resp.Address.Change()] = Max(a.lastAddresses[resp.Address.Change()], resp.Address.Index()+a.lookahead)\n\t\t\t\ta.countMu.Unlock()\n\t\t\t}\n\t\tcase resp, ok := <-txResponses:\n\t\t\t// channel is closed now, so ignore this case by blocking forever\n\t\t\tif !ok {\n\t\t\t\ttxResponses = nil\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\treporter.GetInstance().IncTxFetched()\n\n\t\t\ta.countMu.Lock()\n\t\t\ta.processedTxCount++\n\t\t\ta.countMu.Unlock()\n\n\t\t\ttx := transaction{\n\t\t\t\theight: resp.Height,\n\t\t\t\thex:    resp.Hex,\n\t\t\t\tvin:    []vin{},\n\t\t\t\tvout:   []vout{},\n\t\t\t}\n\t\t\ta.transactions[resp.Hash] = tx\n\t\tcase <-time.Tick(1 * time.Second):\n\t\t\tif a.complete() {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n}\n\n// getLastAddress synchronizes access to lastAddresses array\nfunc (a *Accounter) getLastAddress(change uint32) uint32 {\n\ta.countMu.Lock()\n\tdefer a.countMu.Unlock()\n\n\treturn a.lastAddresses[change]\n}\n\n// complete checks if all addresses have been derived and checked.\n// Since most of the work happens asynchronuously, there needs to be a termination\n// condition.\nfunc (a *Accounter) complete() bool {\n\ta.countMu.Lock()\n\tdefer a.countMu.Unlock()\n\n\t// We are done when the right number of addresses were scheduled, fetched and processed\n\t// *and* all the transactions that were seen have been scheduled, fetched and processed.\n\tindexes := a.lastAddresses[0] + a.lastAddresses[1]\n\taddrsDone := a.derivedAddrCount == indexes && a.processedAddrCount == indexes\n\ttxsDone := a.seenTxCount == a.processedTxCount\n\n\treturn addrsDone && txsDone\n}\n"
  },
  {
    "path": "accounter/accounter_test.go",
    "content": "package accounter\n\nimport (\n\t\"testing\"\n\n\t\"github.com/square/beancounter/backend\"\n\t\"github.com/square/beancounter/deriver\"\n\t. \"github.com/square/beancounter/utils\"\n\t\"github.com/stretchr/testify/assert\"\n)\n\nfunc TestProcessTransactions(t *testing.T) {\n\ta := Accounter{\n\t\tblockHeight:  100,\n\t\ttransactions: make(map[string]transaction),\n\t}\n\t// https://api.blockcypher.com/v1/btc/main/txs/38f6366700f12dc902718ab5222c8ae67a4514ed07ee8aea364feec22bf6424f?limit=50&includeHex=true\n\ta.transactions[\"1\"] = transaction{\n\t\theight: 10,\n\t\thex:    \"020000000001012afcb974e6a5404d4a93d051746a2fe419d92f5c04a2f8cd19c80fc0068defa8010000001716001423819adc0d76e951ba8b0568d8e05b141d4ba5adfeffffff025b2297080000000017a9149ae902bcdf8859abc54a1baf253ea294336a212e87283463660000000017a9140662710b351b7834914b0303cf32c08f3e937c6d87024830450221008a52e1944137e724bebb477b9bf545b62b83d14e435ce9fb25b05bb9857a038202204b79214c7f90b76372d3ce11d9d645b159abcd1038fa20201c4168b09b103192012102f3ccaceecb31987e00e0d159459dcafea4c9bcd64f36b0dee034279bab96d1985c510800\",\n\t\tvin:    []vin{},\n\t\tvout:   []vout{},\n\t}\n\n\t// https://api.blockcypher.com/v1/btc/main/txs/8e6c5effcc2d31b55bb7964747338db3a273b62c9b2385de50117ea09baefcb4?limit=50&includeHex=true\n\ta.transactions[\"2\"] = transaction{\n\t\theight: 100,\n\t\thex:    \"0100000001c75e0c4591ca1a9a2b0d899b4312407fe4b220e6ad5cdee9c3e02be4bc99f321cd0300008b483045022100d0d49ae3f43a3a7799faa2c951dec497a867f6b904b7edba9f87755be15fd67e02200a454de50d7b582d0ed033403fac99d9e41536c018bf0b68058a79f85ef060a6014104fcf07bb1222f7925f2b7cc15183a40443c578e62ea17100aa3b44ba66905c95d4980aec4cd2f6eb426d1b1ec45d76724f26901099416b9265b76ba67c8b0b73dffffffff0388080000000000001976a914fa0692278afe508514b5ffee8fe5e97732ce066988ac0000000000000000166a146f6d6e69000000000000002700000022abdcac9622020000000000001976a9146d17f31f8cef7831b87896402bf2986d4361afb988ac00000000\",\n\t\tvin:    []vin{},\n\t\tvout:   []vout{},\n\t}\n\n\t// https://api.blockcypher.com/v1/btc/main/txs/72abc310daf35dd21d3ba92e72bc39c47f245ba99441db7d8b05642842dbd62c?limit=50&includeHex=true\n\ta.transactions[\"3\"] = transaction{\n\t\theight: 120,\n\t\thex:    \"020000000126a2fd32e2a97ce4d1ef244247edb1fa986b20f5e1d4b2a9f4279ac3f8c97fee020000006a473044022079d203284b5d656d229500451c03bf9f9242e865e205a883c2a3f847a598e579022008e7912074faaa343b0fbe8107f773ec19dcd2371a592c28f38d3ce68ab5bb3201210267759b65b67634ce5fb3114b3c9547f7efcd5a095fa6fc2bb8c532ec5df9d479feffffff0294cb43000000000017a914d237f4c583a567ab7e3ba091ee14953774b1ceda87198025000000000017a914bd706cbfc32ffaff0d2604f4bfbe490e0b36e211875d510800\",\n\t\tvin:    []vin{},\n\t\tvout:   []vout{},\n\t}\n\n\t// https://api.blockcypher.com/v1/btc/main/txs/da47ec573c7639e61ca1bc77ab866f17fe0f1c55ee4aeb6c6daa8d35e3df950c?limit=50&includeHex=true\n\ta.transactions[\"4\"] = transaction{\n\t\theight: 0,\n\t\thex:    \"02000000000105201000e0ad28b2c06cc333f9325f49b6e1532dc47b071a0b0e9039a2eecc2f3f000000001716001403ff881365a8c3318c645b2db7de3d0e9bb01e32feffffff2cd6db422864058b7ddb4194a95b247fc439bc722ea93b1dd25df3da10c3ab720100000017160014d970197441c15e71fa5926dcf494ecca0540de39feffffff68e8dcb6ac8e0edba261b953059839390738eca19139b7bbe97658c5f9866cc90000000000feffffffb3fe4a69cc708263cf3281e0a876c657ea6a424065d5d92f251802c28c7b422f00000000171600148a3e01c8043955c6d2cd754fbc9e0c063a69fcf1feffffffdbce7c09a67bfa1a2737a04205e5d145b689f98c634326a8be92d3aadd2787450000000017160014e0ae2e0c87f5ec2a885457af322550652265141cfeffffff02e00f9700000000001976a914c8bfd11d19fbdab3a0a0b525c8040b96ccac183f88ac02880c000000000017a9141c0aab9855abc6d9564714dbbfc0b8da5a8f2aca870247304402202f750e6b1e5b6759a784178ab9ce4162f2812c597690202655ad569e90a7f30802204cdb33c66c31da483e4c4bfac7d85bc9f1552fc2aa7b0eb060311cfc8db0c623012102d007f6f2ce40cc13c295598bb447faa5cb0a42cdacd39fbcb15d1152d87dc898024730440220561b78a66d16ab1f741a1f4c6cc42ad7257cfac9238f14bb10f9e351f2535c9002202383c70c4daa3b69229081b00a69732023b1dd1474eb0b9e32a7c08e112f642b012102c3bc868e47418bdef127d702af9593ce42790038a27f019ec467b0cd3802fbc802473044022076c69f83accbe0a5a42bbc8b03e4c77205a2bbb64da03ed0a8ece9bd9248e5b902204694c3ac5ec87ba4d93da30e9871a1e5581555722d60a534c79e92f55012d1080121037cd588476186076662d993913a9450ee12816efa5dbfbf1a41208694966c7c6c02483045022100b182661da8afbb51b6528e63a566b06d915e8d6cb3375bf7c26e825c9c89cb54022065bb0af673614611a5c9574dd2d47cf941afc6752dba7c6456f9a3e3beab74e30121029f0e39491bcebac56a52ce46c0bf0a782563698108bba3f290fdf232cb0c0635024830450221008a7d81574993ad3944102aac990e584ec09aa1071f31b0fdefa4adde21da613c022009d7ed96ddebe52ac760e5799dab659f53a961a79dda4929d18e1eb525372bfe012102f2eafee2c4ab2197c5394fb388128cd986b6c880eb0ba27e025ed74c64e7e6a75d510800\",\n\t\tvin:    []vin{},\n\t\tvout:   []vout{},\n\t}\n\n\ta.processTransactions()\n\n\tassert.Equal(t, len(a.transactions), 2)\n\tassert.Equal(t, len(a.transactions[\"1\"].vin), 1)\n\tassert.Equal(t, a.transactions[\"1\"].vin[0], vin{\n\t\tprevHash: \"a8ef8d06c00fc819cdf8a2045c2fd919e42f6a7451d0934a4d40a5e674b9fc2a\",\n\t\tindex:    1,\n\t})\n\tassert.Equal(t, len(a.transactions[\"1\"].vout), 2)\n\tassert.Equal(t, a.transactions[\"1\"].vout[0], vout{\n\t\tvalue:   144122459,\n\t\taddress: \"a9149ae902bcdf8859abc54a1baf253ea294336a212e87\",\n\t\tours:    false,\n\t})\n\tassert.Equal(t, a.transactions[\"1\"].vout[1], vout{\n\t\tvalue:   1717777448,\n\t\taddress: \"a9140662710b351b7834914b0303cf32c08f3e937c6d87\",\n\t\tours:    false,\n\t})\n\n\tassert.Equal(t, len(a.transactions[\"2\"].vin), 1)\n\tassert.Equal(t, a.transactions[\"2\"].vin[0], vin{\n\t\tprevHash: \"21f399bce42be0c3e9de5cade620b2e47f4012439b890d2b9a1aca91450c5ec7\",\n\t\tindex:    973,\n\t})\n\tassert.Equal(t, len(a.transactions[\"2\"].vout), 3)\n\tassert.Equal(t, a.transactions[\"2\"].vout[0], vout{\n\t\tvalue:   2184,\n\t\taddress: \"76a914fa0692278afe508514b5ffee8fe5e97732ce066988ac\",\n\t\tours:    false,\n\t})\n\tassert.Equal(t, a.transactions[\"2\"].vout[1], vout{\n\t\tvalue:   0,\n\t\taddress: \"6a146f6d6e69000000000000002700000022abdcac96\",\n\t\tours:    false,\n\t})\n\tassert.Equal(t, a.transactions[\"2\"].vout[2], vout{\n\t\tvalue:   546,\n\t\taddress: \"76a9146d17f31f8cef7831b87896402bf2986d4361afb988ac\",\n\t\tours:    false,\n\t})\n}\n\nfunc TestComputeBalanceTestnet(t *testing.T) {\n\tpubs := []string{\"tpubDBrCAXucLxvjC9n9nZGGcYS8pk4X1N97YJmUgdDSwG2p36gbSqeRuytHYCHe2dHxLsV2EchX9ePaFdRwp7cNLrSpnr3PsoPLUQqbvLBDWvh\"}\n\tderiver := deriver.NewAddressDeriver(Testnet, pubs, 1, \"\")\n\tb, err := backend.NewFixtureBackend(\"testdata/tpub_data.json\")\n\tassert.NoError(t, err)\n\ta := New(b, deriver, 100, 1435169)\n\n\tassert.Equal(t, uint64(267893477), a.ComputeBalance())\n}\n"
  },
  {
    "path": "accounter/testdata/tpub_data.json",
    "content": "{\n    \"addresses\": [\n        {\n            \"address\": \"mfsNoNz57ANkYrCzHaLZDLoMGujBW8u3zv\",\n            \"path\": \"m/1'/1234/0/61\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 61,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mftB8c4Uikunhk6McopZGsX4C2sDiejCDr\",\n            \"path\": \"m/1'/1234/1/100\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 100,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mg5YBWZKm5H6uoLmHZNxTJ27uzXwmea8H8\",\n            \"path\": \"m/1'/1234/1/22\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 22,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mgQQthmwgZJYs4FbeLhNCfoZY3smveNGpu\",\n            \"path\": \"m/1'/1234/0/106\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 106,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mgRj5bH333zCWdmprd5L4ta9xQUhwm9hTd\",\n            \"path\": \"m/1'/1234/0/115\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 115,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mgTMRBbe9owZQQs5BmaD1nJj6ZF3A619UC\",\n            \"path\": \"m/1'/1234/1/43\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 43,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mgXB4w1t3c4usHNx5iEWEJf7CBmqKNnbVB\",\n            \"path\": \"m/1'/1234/0/82\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 82,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mgc1u2A5NkkX8zUiFzZgKYCfXD4dCmnoB6\",\n            \"path\": \"m/1'/1234/1/70\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 70,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mgpkrTCfA3t9CegigXhURUDVqCdAKhYEB2\",\n            \"path\": \"m/1'/1234/1/73\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 73,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mgtnmFbtmKKmhqjD8rQkXdoTczUxGdcXmG\",\n            \"path\": \"m/1'/1234/1/95\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 95,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mh972ndpUc46sa81vqDNz31U9QvdRpYgUB\",\n            \"path\": \"m/1'/1234/0/28\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 28,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mhShbkWNfpUysxi41vRSXZYRh9pJ3oDumF\",\n            \"path\": \"m/1'/1234/1/33\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 33,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mhdPpFJ2GKWyXab3zWsPFxifraRcrfRueb\",\n            \"path\": \"m/1'/1234/0/74\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 74,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mhkVpsFWMMnrVaL2SQ2EBn28ZTYSssdZ8Y\",\n            \"path\": \"m/1'/1234/0/110\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 110,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mhsYkK2ZdHjCWVYYiZ93k3mzez1eCZcJ6H\",\n            \"path\": \"m/1'/1234/0/71\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 71,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mhx1M6yV58z9LAyEKemU6dcn5vNSdHU6rN\",\n            \"path\": \"m/1'/1234/1/4\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 4,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mhx3rJ9UwPHWcUkPzWNkJYaD8tpdHSt93e\",\n            \"path\": \"m/1'/1234/0/37\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 37,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mhzVmvofakaS8W1sQ1jW2JVhq8971qh52X\",\n            \"path\": \"m/1'/1234/0/63\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 63,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mhzcM1Uy2ZVvmf8U2WxUhwipzo3QtF7xyy\",\n            \"path\": \"m/1'/1234/0/38\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 38,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mi2udMvJHeeJJNp5wWKToa86L2cJUKzrby\",\n            \"path\": \"m/1'/1234/0/7\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 7,\n            \"tx_hashes\": [\n                \"5554c15d13002786a70a7151aad4eddce76633c60bc7f90e3dc70eb4f9c4b2b0\",\n                \"bd09a74381ffad78c162976ec27fc9c1dceda3c2bfe367541a7140b8dd6e1f4c\"\n            ]\n        },\n        {\n            \"address\": \"miNGFhhzfoaWQ23DZNLXsSFwJbmHLgFrMt\",\n            \"path\": \"m/1'/1234/1/82\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 82,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"miNHQsiKCGSYmvx8jwQ1RP1nKAryepop65\",\n            \"path\": \"m/1'/1234/1/89\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 89,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"miPXS6eR2nV3MyF8WGueWe7Xc6P1jWwV6E\",\n            \"path\": \"m/1'/1234/1/45\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 45,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"minf4VcGeR18sAp7DscjH8hLrvNbL8LgZ1\",\n            \"path\": \"m/1'/1234/1/59\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 59,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mj8NcycxuyDcSUwenLpEFST9d1zX3QWV8x\",\n            \"path\": \"m/1'/1234/1/57\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 57,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mjAdhYPB2bTNvxWjSicMqHamAo7zNUCVy5\",\n            \"path\": \"m/1'/1234/0/67\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 67,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mjUrtMvK9GZMzPSgzzBfTWmrtREVecZhAf\",\n            \"path\": \"m/1'/1234/1/17\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 17,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mjYhm1Fr7CFXHmfBGYC6UwBAg7nmeMMKRw\",\n            \"path\": \"m/1'/1234/1/47\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 47,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mjghdrqA6sK34ve5M3dd3UbL4LNssqe8Ry\",\n            \"path\": \"m/1'/1234/1/58\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 58,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mjymM61vCSK2huPkvxFKRD5cKn1eaJv6ZR\",\n            \"path\": \"m/1'/1234/0/33\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 33,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mk6VcQnRsPcS97VptsyFvLRqjY2MeN41wL\",\n            \"path\": \"m/1'/1234/1/91\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 91,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mk9UXXdGJxKRn9k1YwsdxaHtur8J9x14p1\",\n            \"path\": \"m/1'/1234/1/66\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 66,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mkKF25gBCNLwWZkU9f9sRb7sbHGru6YnXD\",\n            \"path\": \"m/1'/1234/1/83\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 83,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mkU6sFjs3LPVKQw8yKNKJuwvMPeLCfCEiP\",\n            \"path\": \"m/1'/1234/1/39\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 39,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mkUgGrxWHKM7AYGUQov7GHgFBSHsaDxpVx\",\n            \"path\": \"m/1'/1234/1/94\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 94,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mkcUjuzzs8TaZkTtkeWeHstnpLNs9Vh9oB\",\n            \"path\": \"m/1'/1234/1/15\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 15,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mkkvscKE8dpNPzcpJutaLXvMzKBXCdevK1\",\n            \"path\": \"m/1'/1234/0/55\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 55,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mkm2Y4d4ymoFaVmY2sZ3UtqCaVWnfwM5FF\",\n            \"path\": \"m/1'/1234/1/93\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 93,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mkpqj3g9tG7NR4WAd35r5Uuaj6UDQ3hmnt\",\n            \"path\": \"m/1'/1234/1/21\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 21,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mm51Xdq9NhGcWXrL8ckQiXBWK2t1ryV8Qq\",\n            \"path\": \"m/1'/1234/0/109\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 109,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mmNXWy7aXQoiKfqyYpX2yfDvqUKjMEp9SL\",\n            \"path\": \"m/1'/1234/0/26\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 26,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mmSYwPHjdmdYtkceBkivQo2xLPj7hPQd4F\",\n            \"path\": \"m/1'/1234/0/68\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 68,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mmV4mpV1MyhzUnESU2XLTyg2wSyy8CjieH\",\n            \"path\": \"m/1'/1234/1/68\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 68,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mmcRhTrHnA1vXgpxQKdmFWFqxTg3QBCjoJ\",\n            \"path\": \"m/1'/1234/0/86\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 86,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mmfFY4UJHJBSjz3ve7tvaSrxNwCReVtifC\",\n            \"path\": \"m/1'/1234/0/14\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 14,\n            \"tx_hashes\": [\n                \"c499c223f401175b14c8cb28893219dcd8b49563e59b9b4865dd4407c2de27c8\",\n                \"df47e4bf599ecf27d8f3b34e85fcd7384d753823208d06171ff16899bc1709ce\"\n            ]\n        },\n        {\n            \"address\": \"mmk4YsZTafv7hvuiv2zCb9dEdHrgZoEi69\",\n            \"path\": \"m/1'/1234/1/16\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 16,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mmruYbefQY3FAco7ArQwYWgBDKwL8bY4xq\",\n            \"path\": \"m/1'/1234/0/48\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 48,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mmxTm1AKp6ffRHf2W4hdh2vrSbfCFFQV94\",\n            \"path\": \"m/1'/1234/0/111\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 111,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mn4pqFru248g51ZzHU5GCqsy4Jk35SRN3W\",\n            \"path\": \"m/1'/1234/1/53\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 53,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mnJBZg297ETSQZrJKGHDLLfuQwTMmK5U9h\",\n            \"path\": \"m/1'/1234/1/8\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 8,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mnLdhS2ACwRRMcBtfTNz6yH1R2QZ9hr7PJ\",\n            \"path\": \"m/1'/1234/0/103\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 103,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mndsBLfSpvirT9e7wvXt9oNQUNTkpaAGth\",\n            \"path\": \"m/1'/1234/1/27\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 27,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mnwUsRHDVUjfPJbRye9yhXgctCyJdjbKXU\",\n            \"path\": \"m/1'/1234/0/92\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 92,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mnxS7AKE3PE2MGdKMnu4ZUVAR3dCcvRWCs\",\n            \"path\": \"m/1'/1234/0/114\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 114,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"moHN13u4RoMxujdaPxvuaTaawgWZ3LaGyo\",\n            \"path\": \"m/1'/1234/1/0\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 0,\n            \"tx_hashes\": [\n                \"f2e6bc46d8bf08d19854bc8dfde1a3d4968fa8d09f2185ea6e2711ec0ce449ec\"\n            ]\n        },\n        {\n            \"address\": \"moYk4SHFJQXeyH1N6SMZfcJy3jst1JgPXv\",\n            \"path\": \"m/1'/1234/0/88\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 88,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mofjpvyi5Hn5veLnU6xvWiFvuuN9ABMiez\",\n            \"path\": \"m/1'/1234/0/10\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 10,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"moo5ASJxjmYomHXFRsqV9DFdbd9j5Knk2w\",\n            \"path\": \"m/1'/1234/0/23\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 23,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mosHkEQ17EzDbBotFeZdUdw9JymCB6ygdD\",\n            \"path\": \"m/1'/1234/0/11\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 11,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"motvDs4CXSEtfqZAig6AiYmQQSSx6tpUs7\",\n            \"path\": \"m/1'/1234/0/52\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 52,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mp1eTBsFMfE1akuhEad4z2GaYLXRxnQ5wR\",\n            \"path\": \"m/1'/1234/0/16\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 16,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mp4jnJRU6JtUFjpdxNKGf5LdG8ZBLyuDnX\",\n            \"path\": \"m/1'/1234/1/85\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 85,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mp7MjuSGBuV4sz7YWdKN65za6ahMvRXvbV\",\n            \"path\": \"m/1'/1234/0/70\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 70,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mp9MMATLEzuJgmCVodLeN385zcB7J4crRR\",\n            \"path\": \"m/1'/1234/1/5\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 5,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mp9QjnKCNZ2QeyePGssYpCZ3cVagCAW6G9\",\n            \"path\": \"m/1'/1234/1/92\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 92,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mp9T4m9veiFRkaB6mqu2JBpRTgF4RnJbBv\",\n            \"path\": \"m/1'/1234/1/30\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 30,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mpMrwsAcYpNV5DsDq3HBv4F45TzZwvFCNo\",\n            \"path\": \"m/1'/1234/0/20\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 20,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mpPHEz5X6mfkGhuGwhEK51Wv6nHM2TjPED\",\n            \"path\": \"m/1'/1234/1/52\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 52,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mpU6xAiBzXYHymccHYjfJjQ8VUsPDZanC8\",\n            \"path\": \"m/1'/1234/0/80\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 80,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mpY7Miopd7hsTfpLzUFssYHjLJdERPHBFv\",\n            \"path\": \"m/1'/1234/0/51\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 51,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mpk446eNYsryipfyK9AxdKBC28pSGC23Pn\",\n            \"path\": \"m/1'/1234/0/57\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 57,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mpkyCtaEhuL9w9HbCdA9MwDyo8rC6VyBBJ\",\n            \"path\": \"m/1'/1234/1/24\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 24,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mpnVuRaDw6K65g5n1kJtPEBJtLhF4gsf8F\",\n            \"path\": \"m/1'/1234/0/93\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 93,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mppV3tmErBc6cfchvrGxVTurpWQMTba72M\",\n            \"path\": \"m/1'/1234/0/87\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 87,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mpt3dnSox3y2B6GcvmqzEhq9thXbpFTN3w\",\n            \"path\": \"m/1'/1234/1/79\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 79,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mpxinSSCvMj4kSQb3HLCWDkw4q3tiQs3u4\",\n            \"path\": \"m/1'/1234/0/56\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 56,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mq9Thu4q58hC9mPmHjcr88FPwN742vteEe\",\n            \"path\": \"m/1'/1234/0/104\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 104,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mq9UNt51a59ak957F954bJLdyvZTNyS6nU\",\n            \"path\": \"m/1'/1234/0/29\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 29,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mqDx2C9mt3aG45LFxwGDs2g1J7HL1v6Noc\",\n            \"path\": \"m/1'/1234/1/29\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 29,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mqFdzF3V3MYg7PSqcexqJsRUHWEDradAHp\",\n            \"path\": \"m/1'/1234/0/98\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 98,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mqRHRhMwGv1eARSicG4Jr2PGjnNomTJvU1\",\n            \"path\": \"m/1'/1234/0/18\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 18,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mqTyj6kBhsSnRoHQrDdX5GkYiAJ8Z2JtYT\",\n            \"path\": \"m/1'/1234/0/49\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 49,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mqXA3V26DQ7V5nMxGXnHYbYX4TTipP853H\",\n            \"path\": \"m/1'/1234/0/85\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 85,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mqbdgR8pkovntrVag3DbqGsMLzQU2as3iR\",\n            \"path\": \"m/1'/1234/0/46\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 46,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mqeXweck99WEnF9uhzymmk8mijE5LrYW9G\",\n            \"path\": \"m/1'/1234/0/95\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 95,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mqvMS1eVvwLuDBu9KJmMTu9NK7kvtGqxro\",\n            \"path\": \"m/1'/1234/0/45\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 45,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mqyEEeArE2VdWcvkRCE14kKPxngJn5vrw3\",\n            \"path\": \"m/1'/1234/0/17\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 17,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mqzRYTKFnWvt39Hu4m5b78ZHnAK2FHn6gb\",\n            \"path\": \"m/1'/1234/1/25\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 25,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mr6ovHpa4XsYiNt8bw3XtcApH7jdXW7eW9\",\n            \"path\": \"m/1'/1234/0/62\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 62,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mr7aZaSHxAtuznkkRUdYo712CstgXqrKCe\",\n            \"path\": \"m/1'/1234/0/89\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 89,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mr8eizdRF395r1fUZMwW8zNeVif7Q98amB\",\n            \"path\": \"m/1'/1234/0/79\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 79,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mrE1BYykjMsuYgD7HVkfZTRx3aGGFx5SR8\",\n            \"path\": \"m/1'/1234/0/44\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 44,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mrJmZ4dnyitSHgY3vyFWNVwyqkSUGFBGTP\",\n            \"path\": \"m/1'/1234/1/49\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 49,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mrKnN6aRKm5YAYX8p2XybawiMLskZJrMXR\",\n            \"path\": \"m/1'/1234/0/30\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 30,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mrPU48eWP35wVcAWHf63eDKW9giqFiWVxC\",\n            \"path\": \"m/1'/1234/1/34\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 34,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mriYno5gzqN8ywsM1tcwpT1oGcZVQjVKSo\",\n            \"path\": \"m/1'/1234/1/81\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 81,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mrkzRJCSmtxXXxxmYnKTDHwkDVSeuuk7kC\",\n            \"path\": \"m/1'/1234/1/88\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 88,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mrofucNwQJsu8hdvFLYtrxbxeLK4MaHd86\",\n            \"path\": \"m/1'/1234/0/91\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 91,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mrqAS4K81RftZ1n6TJPDMMJUzThNZh1SVV\",\n            \"path\": \"m/1'/1234/1/10\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 10,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mrsoYh5mrwXJj9KfoP8DCBZStzPZyV3yxF\",\n            \"path\": \"m/1'/1234/1/55\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 55,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mruXWptxXo5z6UZUZKKJjaRURzHJ5VUftF\",\n            \"path\": \"m/1'/1234/0/83\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 83,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mrwXnJR97ZNpshJ29DVv4eFBMMCRKu1RyF\",\n            \"path\": \"m/1'/1234/0/72\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 72,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mrzFvDuYEs5k4N8xzEPBoWT1gTWFN7ZbuB\",\n            \"path\": \"m/1'/1234/1/87\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 87,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mrzk5FmMx45GMpGQCHN9sLcu4KkBJ3SQoA\",\n            \"path\": \"m/1'/1234/0/65\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 65,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mrzkhstGYAJqXH7e7LfADSwp5fHnUNm7yN\",\n            \"path\": \"m/1'/1234/1/80\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 80,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"ms2f9UsMBE1n71kDZrH2yiUTSCoaS3C1sX\",\n            \"path\": \"m/1'/1234/0/22\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 22,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"ms5JDaW3P7WDxXmBiMcj7ZH8Xevq3ZAJFa\",\n            \"path\": \"m/1'/1234/0/118\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 118,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"msESZ1NKuCBMpk5aF5ExK5spiPvLjjbPgw\",\n            \"path\": \"m/1'/1234/0/54\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 54,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"msFYTUMb4WqwWXUDBXkYzWkxcMsjqS2xCn\",\n            \"path\": \"m/1'/1234/1/42\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 42,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"msTVNykCYKL3ipCnPkUWD1RepW3zQD1nDf\",\n            \"path\": \"m/1'/1234/0/75\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 75,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mscgVLhdDXKBc6dtKfNoPXfTmDqkeu5ysv\",\n            \"path\": \"m/1'/1234/1/97\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 97,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"msiEtXVMb5vt83zMYPaBosnKzvQ1i8Nycj\",\n            \"path\": \"m/1'/1234/1/75\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 75,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mskQduVL7QBZCEWJUit8u9N8Cj4CFouPWX\",\n            \"path\": \"m/1'/1234/0/19\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 19,\n            \"tx_hashes\": [\n                \"77bddf5ea1feef8eaf52375fdda8e08a5df6a581d0f34f5b3a849448f54c8d83\"\n            ]\n        },\n        {\n            \"address\": \"msvuWQLQw9wyEFg4kEFMYyrinaurPPqta9\",\n            \"path\": \"m/1'/1234/1/44\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 44,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mt1erM5cCp66z9YtRd8cHvSdQywM5ad1ab\",\n            \"path\": \"m/1'/1234/1/41\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 41,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mt2ZjRQfAQKF1f2Gte82ABGYR5KCqeqcmz\",\n            \"path\": \"m/1'/1234/0/113\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 113,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mt5k6nJnZFNLsZaoDuTcxf1kz1DGpj2xBQ\",\n            \"path\": \"m/1'/1234/0/31\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 31,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mtDYtVtSYRvgakwgf6Upawq3ijKCe8HE4F\",\n            \"path\": \"m/1'/1234/1/18\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 18,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mtNKHAT3fKCT9zSe69szyUbFqEWH7YtyPT\",\n            \"path\": \"m/1'/1234/1/72\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 72,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mtTDS4ifBzEVqwYj1mD26mrrsod7bSzijA\",\n            \"path\": \"m/1'/1234/1/40\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 40,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mth1ebF5qiGeQdxAyAmQgk3yNf7FLTQ54f\",\n            \"path\": \"m/1'/1234/0/43\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 43,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mth6eDXa7Yx6Bccci6j2PfgWgGVPZYw8qo\",\n            \"path\": \"m/1'/1234/1/3\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 3,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mtkqSGHacariaSmCYXjcb4nLHVJ58mWFQa\",\n            \"path\": \"m/1'/1234/1/78\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 78,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mtrbVX1MLVwjJwhLgMP2hLPUkdduUR9Kty\",\n            \"path\": \"m/1'/1234/0/53\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 53,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mtwTkqd8KX2xLhcrrDcTvkaoFAWgPEo5Cj\",\n            \"path\": \"m/1'/1234/0/116\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 116,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mtwTrVKh4E1Xancvxx59xaJsV5Kn7zVVSA\",\n            \"path\": \"m/1'/1234/1/19\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 19,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mtyw6R4vXcnHNj4DPLaz5UcXa8hhMfXEpP\",\n            \"path\": \"m/1'/1234/0/41\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 41,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"muGDdgcwgj1oVmMX6vR1FqTMeeKb5JhgQX\",\n            \"path\": \"m/1'/1234/1/74\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 74,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"muRPtvEdEiHU5K9V2TiTrkVCK1fR8SgPYC\",\n            \"path\": \"m/1'/1234/1/77\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 77,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"murQifvdqKxaWZoLNdZ72XkJeqB55oWS6j\",\n            \"path\": \"m/1'/1234/0/42\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 42,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"muvmkzDG6UmLX2MsfrhZ4pksk1KEawyZ1B\",\n            \"path\": \"m/1'/1234/1/12\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 12,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"muxFaecKfqKt98G4VNUyqEVwVvqoPAtspj\",\n            \"path\": \"m/1'/1234/1/11\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 11,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"muzujo9NwJYE1tACwzSRZiDgCkumsA1DEh\",\n            \"path\": \"m/1'/1234/1/98\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 98,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mv5dfNyTKMwED5g26LMZJYwN5QckEXrqe2\",\n            \"path\": \"m/1'/1234/1/2\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 2,\n            \"tx_hashes\": [\n                \"df47e4bf599ecf27d8f3b34e85fcd7384d753823208d06171ff16899bc1709ce\"\n            ]\n        },\n        {\n            \"address\": \"mv6HgQTYwfNYsZmr9jcxK2wA9cfQunVuV8\",\n            \"path\": \"m/1'/1234/1/14\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 14,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mvAbNajPbcHp4qJ41TnW2rnAhrXwabt6Br\",\n            \"path\": \"m/1'/1234/1/63\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 63,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mvEno3oRvHpJQRVdJ67QFsWQZcXnqBXd8A\",\n            \"path\": \"m/1'/1234/0/107\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 107,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mvNTkMyRAFDtWZeCg48y5NUqjKovkVHd3v\",\n            \"path\": \"m/1'/1234/1/61\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 61,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mvaqsto6jVBUTX7Fxgzx6GW3un94xuGW3D\",\n            \"path\": \"m/1'/1234/1/9\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 9,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mveavhcorRjFUnnBoi6AY13U7hdjA7ucPA\",\n            \"path\": \"m/1'/1234/0/69\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 69,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mvwZE9bqfoy1gzE3s2whuw5kiJWuArvajN\",\n            \"path\": \"m/1'/1234/1/64\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 64,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mw1k8k5yRiVbE8cGpGoxwyxEfZPt8Vh8T1\",\n            \"path\": \"m/1'/1234/1/60\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 60,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mwA4LShWwYsLWtN24qPMNLuzUBEUCy1SUV\",\n            \"path\": \"m/1'/1234/1/13\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 13,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mwCGFyMPHYzYsXFCXEZKncTy7VTDMzemC8\",\n            \"path\": \"m/1'/1234/0/101\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 101,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mwEAAdykUVGQU51X9H4yk6KLcBhCHFbpj9\",\n            \"path\": \"m/1'/1234/0/108\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 108,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mwWcaS79Gnx93nwtsPV6vs559wzN2moxCo\",\n            \"path\": \"m/1'/1234/1/26\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 26,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mwZZvqyWkhjq7o399R7K4Rr5Hk674DTryA\",\n            \"path\": \"m/1'/1234/0/73\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 73,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mwfNyfjegvwoPvygYpAKugbHozUttjanvT\",\n            \"path\": \"m/1'/1234/0/105\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 105,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mwgXcj5Pz96UwD37enQ5GyiWmLUfMyH7mF\",\n            \"path\": \"m/1'/1234/0/102\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 102,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mwiGFquFDNhCE7z66xU1GPZxr3Vr838ayJ\",\n            \"path\": \"m/1'/1234/0/8\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 8,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mwwE6di2VoZuoespVUAkcWMkchuC3ouukv\",\n            \"path\": \"m/1'/1234/0/112\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 112,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mwyxsPfSrWEsbtnAqn82FY8rL7hNdL3VmQ\",\n            \"path\": \"m/1'/1234/0/39\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 39,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mxBqGqtGwqqLvaNJ1AcLcfMiCruXu8GCkX\",\n            \"path\": \"m/1'/1234/1/101\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 101,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mxFCGy4UGM7U32UNQs2ZC3h1vBfb8rUUgq\",\n            \"path\": \"m/1'/1234/1/48\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 48,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mxPDcrdY7vTC7GBiu31g5xNtWVyiuVgF6A\",\n            \"path\": \"m/1'/1234/1/20\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 20,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mxcJppiQL2NSYmLJUWmqKjAVQ5ryBfK8M4\",\n            \"path\": \"m/1'/1234/1/32\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 32,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mxmWr8evxoXVUVSg9tCjdc4Uxv5oompHyv\",\n            \"path\": \"m/1'/1234/0/60\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 60,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mxvsvBsrVW8tPLfcUZUVEwdbkRXaEetXzX\",\n            \"path\": \"m/1'/1234/0/84\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 84,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mxzp9QJkS6c8Roc1WxXMRbwHKjN3hzozWv\",\n            \"path\": \"m/1'/1234/0/59\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 59,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"my1FMCXyo84tC1LkFXX8LctbtpycUmUnPx\",\n            \"path\": \"m/1'/1234/0/3\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 3,\n            \"tx_hashes\": [\n                \"7d9abe7323077358acfb80ef2ec0374a37c07bc097609c48da486d6a9266581e\",\n                \"f2e6bc46d8bf08d19854bc8dfde1a3d4968fa8d09f2185ea6e2711ec0ce449ec\"\n            ]\n        },\n        {\n            \"address\": \"my3U16MBzNVyUaEzibEdoUdYkLcubNgi8s\",\n            \"path\": \"m/1'/1234/1/67\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 67,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"myDwY4oQ6HLz3u2tW1b23sg2T7QYqDw5dV\",\n            \"path\": \"m/1'/1234/1/23\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 23,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"myEyz9WPaZmXqnhtN86xM8S66wVysBRNtN\",\n            \"path\": \"m/1'/1234/0/15\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 15,\n            \"tx_hashes\": [\n                \"acffdca982d1ce6fcd1f51dbb9dda686441058f93686008a2c446c42a94a66a7\",\n                \"df47e4bf599ecf27d8f3b34e85fcd7384d753823208d06171ff16899bc1709ce\"\n            ]\n        },\n        {\n            \"address\": \"myQVApRvQgKm4snLmMPeheni6K2KmESAgu\",\n            \"path\": \"m/1'/1234/1/28\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 28,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"myXa6suFx4dqSyRKwMHqkkrpPFqhEHgvhB\",\n            \"path\": \"m/1'/1234/0/117\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 117,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"myZRdPAtn9mkR6iGe41wbPbQ6pEKGEd7DR\",\n            \"path\": \"m/1'/1234/0/97\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 97,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mybf8GEdfxqBRhzwPMfxu1LNnCWoR2oSro\",\n            \"path\": \"m/1'/1234/0/13\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 13,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"myfv2zdA8Fe7PaGACv5yXn3Bm2JpLBAdfE\",\n            \"path\": \"m/1'/1234/0/96\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 96,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mymP5DUfubfRzNfhGyguTrqb93VYvX13NY\",\n            \"path\": \"m/1'/1234/0/99\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 99,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mz37noAanMGMW1BMGvyhNnY1fqfTg726Ka\",\n            \"path\": \"m/1'/1234/0/1\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 1,\n            \"tx_hashes\": [\n                \"820198df9af70251fdfcc3cae3f2995f09093a1677e6ac7800f6417d6679e929\"\n            ]\n        },\n        {\n            \"address\": \"mzLPXBnBRszfNRagBhPkn3fruUbfAMR7SZ\",\n            \"path\": \"m/1'/1234/1/31\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 31,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mzM6TL37rneU98z7CMuw9r9t6d5MPjeqVm\",\n            \"path\": \"m/1'/1234/0/40\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 40,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mzMF12VsXCL23ov7RwSbZdVnLzJ1MnxEzT\",\n            \"path\": \"m/1'/1234/0/5\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 5,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mzMu7Rd3StZhMQYxX2QR5MrjmPAQeLE6xY\",\n            \"path\": \"m/1'/1234/1/86\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 86,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mzP6VxjWxnfNSXerXXz8Hpr76rytF3EkmU\",\n            \"path\": \"m/1'/1234/1/90\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 90,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mzPCbXLqiHLNhVj6reah8VWXVT8X69Ssuf\",\n            \"path\": \"m/1'/1234/0/2\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 2,\n            \"tx_hashes\": [\n                \"60014a64f5c808ce7af726ae28e60ad986dff519a5d8014528df39976b10d705\"\n            ]\n        },\n        {\n            \"address\": \"mzQinQemMnnfKtJmqvnwC4PcvmJrKxnSMi\",\n            \"path\": \"m/1'/1234/0/9\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 9,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mzgzBJxEZATE9npaMi1yXYsGxRHqTq8cWL\",\n            \"path\": \"m/1'/1234/0/66\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 66,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mzi6HLho5eRptPscGUWnqndv4Wddcaw5vT\",\n            \"path\": \"m/1'/1234/0/50\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 50,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"mzoeuyGqMudyvKbkNx5dtNBNN59oKEAsPn\",\n            \"path\": \"m/1'/1234/0/0\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 0,\n            \"tx_hashes\": [\n                \"ac3b83a9f90f73c7cac1e07b017d5c78ce6c79e74a0d72a6c80e84fb0adeb6ba\",\n                \"d2ccea06bad8711a1c95e66f1b3a8d658c447a061c856cf284075f7a152d45fb\"\n            ]\n        },\n        {\n            \"address\": \"n14trLkKhqU53tvR8f6kohGTH128EiVaXk\",\n            \"path\": \"m/1'/1234/0/35\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 35,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"n1Bw5SsvMHpfhTz8NghK4t7qcQ2rwLbpga\",\n            \"path\": \"m/1'/1234/1/51\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 51,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"n1Bz6vRenfopHFKHY8EBwUxxxWiY2E5hwV\",\n            \"path\": \"m/1'/1234/0/58\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 58,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"n1EstV7h4Jyx1XKLY7fdx6ufFRMxBVdieN\",\n            \"path\": \"m/1'/1234/0/6\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 6,\n            \"tx_hashes\": [\n                \"f49001a572942a506bd414c51f5a0e9cd349899d05c868b1de2fa6742a66d5aa\"\n            ]\n        },\n        {\n            \"address\": \"n1GohMiYdx8Q8PSBynH34vdgZXH1tid7cW\",\n            \"path\": \"m/1'/1234/0/4\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 4,\n            \"tx_hashes\": [\n                \"6b344d0823c3f3ff1e084232674320e1409a12d2af50a6320063cd8cf5797e9a\",\n                \"75b465e8785b87fe11b625f5fd030e4f314c028c25b3ea84ae96bb1a3d369796\"\n            ]\n        },\n        {\n            \"address\": \"n1iKWWj6cH9UXSxpXBgn9XYx5rTv45NFB1\",\n            \"path\": \"m/1'/1234/0/32\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 32,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"n1rH2G1VjPNgTD24h5tZXgo8pqvuCdyEUs\",\n            \"path\": \"m/1'/1234/0/34\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 34,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"n1rvn6484NvPXtfwQyQoGicXKSWxnJY5oh\",\n            \"path\": \"m/1'/1234/1/50\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 50,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"n1sFJNToHZojWVnkz65H1ZjUbWJBs5Fdy2\",\n            \"path\": \"m/1'/1234/0/100\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 100,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"n1y9yLpqQk68R34CW6xGnssiRjWbsrsjNB\",\n            \"path\": \"m/1'/1234/1/96\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 96,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"n1zC5hkhcYdNVSx8pztiqZSNbFrGjbKun2\",\n            \"path\": \"m/1'/1234/1/36\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 36,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"n234ZK9Kt3fzjpntiTepFQP8m1WUj1kV3i\",\n            \"path\": \"m/1'/1234/1/46\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 46,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"n23P5CnY3dwZuGx1u5tEYLK3an2XsAE9GL\",\n            \"path\": \"m/1'/1234/0/78\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 78,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"n2AYb9qVFmBtyBQSUonFMcaqo1pXDwhHKC\",\n            \"path\": \"m/1'/1234/0/24\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 24,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"n2JQXfzuVyFygt2aK6MG5XXMGegVMMzbFW\",\n            \"path\": \"m/1'/1234/0/47\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 47,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"n2NEWUDyKTDpSZa9jzP2TWywRUAFuU3aVF\",\n            \"path\": \"m/1'/1234/0/90\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 90,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"n2QtR7UYnNvPZPJCXxsXm4xELfWmdS9KC4\",\n            \"path\": \"m/1'/1234/1/99\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 99,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"n2TuRXSL1yTxs9PaB5sueEwcrPkd2Q2P6B\",\n            \"path\": \"m/1'/1234/0/94\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 94,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"n2X8igCsDFvqRXBYuBdYnTG6L7ZqWaUpWc\",\n            \"path\": \"m/1'/1234/1/38\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 38,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"n2aNi43rgX8YD5NMJK55dgHp7n7rdGzbYj\",\n            \"path\": \"m/1'/1234/1/1\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 1,\n            \"tx_hashes\": [\n                \"bd09a74381ffad78c162976ec27fc9c1dceda3c2bfe367541a7140b8dd6e1f4c\"\n            ]\n        },\n        {\n            \"address\": \"n2eB9gA1ywoUh1tszRSwBHTW4kunQqCPJm\",\n            \"path\": \"m/1'/1234/1/6\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 6,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"n2fo4VZADUoboCbGhyw3Rrp5s9HtdeiS1L\",\n            \"path\": \"m/1'/1234/0/12\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 12,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"n2krZjLK1msP3m9iNCHYAVRkW8enVX3KqK\",\n            \"path\": \"m/1'/1234/0/81\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 81,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"n2v2BmxR3exxQFGuYXnsBqJWmpv5yfBZch\",\n            \"path\": \"m/1'/1234/1/37\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 37,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"n2wNGGF9mm4Dfc1YoPUaMYwMjPmxkcXvB7\",\n            \"path\": \"m/1'/1234/1/84\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 84,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"n34T3oB2u9BEWwSCMujSyr13umHGtRAnYa\",\n            \"path\": \"m/1'/1234/0/36\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 36,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"n3Ps57oVeysLKB1bzDVLSKEMHmUoVhL2xC\",\n            \"path\": \"m/1'/1234/1/65\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 65,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"n3c52Bp8nperb72Ub9mi7pWgtiGm1SKVE9\",\n            \"path\": \"m/1'/1234/0/76\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 76,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"n3dXhVju9R2kJPjhnZME2E1yiQm1Scq6yn\",\n            \"path\": \"m/1'/1234/0/21\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 21,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"n3dsSCmWNsg3Xb3yD4zKqMor2F6c1JHjJu\",\n            \"path\": \"m/1'/1234/1/54\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 54,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"n3kUJbGHZKm5oCU4XWS4tUaAf7XqpGtLxQ\",\n            \"path\": \"m/1'/1234/1/76\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 76,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"n3xqY2WwtZ64kJ7y7MWJDAZEt6KotqLyqe\",\n            \"path\": \"m/1'/1234/1/69\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 69,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"n46v3LvVf5q8ytgJYEYWfPbNrHJjg78Fp1\",\n            \"path\": \"m/1'/1234/1/56\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 56,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"n47c8ma14yQAhjCCrLmHxTSKuLgEEjFDsK\",\n            \"path\": \"m/1'/1234/1/35\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 35,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"n47vcpTx38g4hKbfFximHnxrSkDs9G6xb2\",\n            \"path\": \"m/1'/1234/0/64\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 64,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"n4FWvGyuimxGjQJd7ZWht56vF3nudxYVeo\",\n            \"path\": \"m/1'/1234/0/25\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 25,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"n4JwUCCNtmpTjgcpALtVsZRT8zmqNuKRuV\",\n            \"path\": \"m/1'/1234/0/77\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 77,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"n4X23dNHutdq9ANMzfbr4Dt6c8FCU2V6kg\",\n            \"path\": \"m/1'/1234/1/71\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 71,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"n4Yt3Wng8waeykRC8Tgr1JQ6Gz5SQFZaYD\",\n            \"path\": \"m/1'/1234/1/7\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 7,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"n4Z9HtF2YWZQgHuoWCTrm5cjNjEaoYZ3nU\",\n            \"path\": \"m/1'/1234/1/62\",\n            \"network\": \"testnet\",\n            \"change\": 1,\n            \"addr_index\": 62,\n            \"tx_hashes\": []\n        },\n        {\n            \"address\": \"n4rT8fSspf7WRSE46drbdEPjyYvncbrdgz\",\n            \"path\": \"m/1'/1234/0/27\",\n            \"network\": \"testnet\",\n            \"change\": 0,\n            \"addr_index\": 27,\n            \"tx_hashes\": []\n        }\n    ],\n    \"transactions\": [\n        {\n            \"hash\": \"5554c15d13002786a70a7151aad4eddce76633c60bc7f90e3dc70eb4f9c4b2b0\",\n            \"height\": 1414324,\n            \"hex\": \"0100000001c83c4eaf22da0d76cde59dac7a9938a8e08d3dceadd8ca7d89cdedb6c05393f5000000006b4830450221009919e035d23b9766b0042c3edf2f6215d2286ed37ab7dff4e9e82322de14eafe0220207ed9d98f8fc1e845b1e499e34dfb57b98df0f8928ef394b6b1b5cce780b3dc0121029f60b3dc24028d9691d66332aef968c3c2c253a7a296f5d520b6e547f0ef44eefeffffff0380969800000000001976a9141b9a8107f5f50cc8e23696463bf53c4350ab4b2f88ac002d3101000000001976a9141b9a8107f5f50cc8e23696463bf53c4350ab4b2f88accc064f01000000001976a914c1f9b2c439390d03e31af23fc644dc2c328cf00f88acb3941500\"\n        },\n        {\n            \"hash\": \"60014a64f5c808ce7af726ae28e60ad986dff519a5d8014528df39976b10d705\",\n            \"height\": 1414323,\n            \"hex\": \"010000000167f30ff3b6b69cc720aabcf82c3e393d748d416edd449d4e90bf23836beb2fb2000000006b483045022100fcf379dbebdd4454e008f185cb7495fd0ed121c77a3bd0bf440e638a0bac1f040220021c649aea9b327265c639fb2441bdf029e7271b0306d7c03a3b82ee689446390121024fb6ed463d79ec0054754c0f83daeab09b486ae402c76235c2e38bd36e92fb99feffffff0380969800000000001976a914cef3000fea380079b0f0f9ac42a0d02865f969d588ac002d3101000000001976a914cef3000fea380079b0f0f9ac42a0d02865f969d588ac74714101000000001976a9147b095685f1d510541d85e4dff8522492b92155b688acb2941500\"\n        },\n        {\n            \"hash\": \"6b344d0823c3f3ff1e084232674320e1409a12d2af50a6320063cd8cf5797e9a\",\n            \"height\": 1414324,\n            \"hex\": \"01000000011261d81baeda09130ac8335670dcd09cfcc79ec7b694908d99d8db0f9c3ff538000000006a473044022009ea4b27feb568599ecedfab05e500c1a5e606d0e2b377e2172a84d4c951145d022004e30f4e79dd821ad87bba5f51b65ba2409ee90137a366fa705646262c7c3ef3012103fc65f6bb061aa539fd3d77605d19a645fedb4f5b9cd55c793930f6b47eca3bb1feffffff0240420f00000000001976a914d8b583c92d10515efe9fe2207ec2add7efd004f588ac105b8500000000001976a91485db998e1b0efb278cbf8836918a6d7bb87723f688acb3941500\"\n        },\n        {\n            \"hash\": \"75b465e8785b87fe11b625f5fd030e4f314c028c25b3ea84ae96bb1a3d369796\",\n            \"height\": 1414324,\n            \"hex\": \"01000000019a7e79f58ccd630032a650afd2129a40e12043673242081efff3c323084d346b000000006a473044022023d0afcb1189ce37db32e9a6b34e614112475a2215087ca73ba00b803da4fa1702206017ac791bf31003a0fc2fa158e3064eaf09e23c1ed7ee817d32c41c458172dc0121028f95f33011dd9c58e21b9d0fdae9e5fb191ea359d5a88d7b112f57d61061e912feffffff0100350c00000000001976a9143b16eb02e1a6bd4d7acd422981b627467de27bf988acb3941500\"\n        },\n        {\n            \"hash\": \"77bddf5ea1feef8eaf52375fdda8e08a5df6a581d0f34f5b3a849448f54c8d83\",\n            \"height\": 1414325,\n            \"hex\": \"01000000010d6d83612869cb1e9c9c5eedc562051a31e62dff2e891cf76fb2145500098561010000006b483045022100a2d8a549f332c26f88c80946b8b7ca41b005c9b309f38efd63f76601fb57aaba022063563fce96f575a70cb24433faa77c321a85539411b7cb2b489fadff13b613c60121024c7300c2c72f1c093ddfeb804e100c6829ab808df4d424c5dad5d217ea35f51ffeffffff0240420f00000000001976a914862ce8053a5fe68982bd024d1056672a07f40c1588ac84ec1a01000000001976a914862f9e457fa471d9869bebb0da6f796c4d19c50288acb4941500\"\n        },\n        {\n            \"hash\": \"7d9abe7323077358acfb80ef2ec0374a37c07bc097609c48da486d6a9266581e\",\n            \"height\": 1414324,\n            \"hex\": \"0100000001d1cf29d4fcfff1715da9923d845c609a59b21fc90aba8c2ce87021bb14156ff6000000006a473044022000fd83bda85b19a05d58ee622843e6ffecd980071bde1ed94f64bc399c7363a102204dc17ee9c013d4d908dda03a542ae096141d941c8b85d13be9daa26a8a109e960121025c7aca87b69cf7e218304870aa2a6e7728bf02c27ad260eb701218d17bc078fbfeffffff0240420f00000000001976a914bfd4057b55dc53aee566594fc3a75e32e726f2ae88acfc031e00000000001976a914f855559d7dc8ebef46040c2267ce16edc70bc50688acb3941500\"\n        },\n        {\n            \"hash\": \"820198df9af70251fdfcc3cae3f2995f09093a1677e6ac7800f6417d6679e929\",\n            \"height\": 1414323,\n            \"hex\": \"0200000001a074c52fe346ea647e375b3c4022c29602d3f65170535ef208c55d0e9b3e066b0100000017160014a908377801306d6ebe1e01561dae031114788571feffffff02472cef00000000001976a914cb26ab61b853a553c7adeaa01bc2686c0a76759a88ac5cb215f57100000017a914d3da18055b22d2f9283f643d14cc257ba3b4380e87b2941500\"\n        },\n        {\n            \"hash\": \"ac3b83a9f90f73c7cac1e07b017d5c78ce6c79e74a0d72a6c80e84fb0adeb6ba\",\n            \"height\": 1414323,\n            \"hex\": \"01000000013a58f1fad756f5dc31eb0dee4c8667dad67f88fe31e72468876a2c55fa9cc2c7010000006a47304402203c15565344616ddee3c8b29c6f7dfe8328604fb0af99d75b96e8114589c7230902202996abf233e86ed4d46bdf002c118851ae9456c3458bb2b996f68cea5f66c4fb0121034648933562681ff2b8f8e31a1ccb4fd3c902304c2754ac33f96fa2206f420341feffffff0200e1f505000000001976a914d392f3d90559efbf0a53e091ea86aba41324a53a88aca0870ef3030000001976a9144107eaf57b36f840ce06c0326953a6d9de7250c588acb2941500\"\n        },\n        {\n            \"hash\": \"acffdca982d1ce6fcd1f51dbb9dda686441058f93686008a2c446c42a94a66a7\",\n            \"height\": 1414324,\n            \"hex\": \"01000000016b26fd5fcad7389079c468dab95fbf12a4ae6646b31a9c3fd9c449c8874ea37a000000006b483045022100d27e0104c86f295821ac5b032a3b4661fb7a65bc1df447f0955ed9f63295a0430220511699e2455fb6094a46c0646667f1d5b43a479cc90334b6630d97c24ef626b6012103e0a55b7d32efb3dbc9ba698f192ef161a4851572817cfb0685a48e27c0420fbffeffffff0280841e00000000001976a914c26d0540a4c20b867c83cb303c8ea1fa8cdf2b8b88ac28e83a05000000001976a914c1f9b2c439390d03e31af23fc644dc2c328cf00f88acb3941500\"\n        },\n        {\n            \"hash\": \"bd09a74381ffad78c162976ec27fc9c1dceda3c2bfe367541a7140b8dd6e1f4c\",\n            \"height\": 1414324,\n            \"hex\": \"0100000002b0b2c4f9b40ec73d0ef9c70bc63366e7dcedd4aa51710aa7862700135dc15455000000006a47304402202a2ecc628a92560bc1382bf8867424f2aec59b1b9b8d7217e8e19126fb562027022031f8b15de547ba75f2a84513178c5a2744f7573c62c2c4af4dd48e7793b54a530121033334a7401df9930e726905963c9f535fdeff975a84cdc85067217c2ee403db8afeffffffb0b2c4f9b40ec73d0ef9c70bc63366e7dcedd4aa51710aa7862700135dc15455010000006a4730440220286db3a120b29c448fb6fdc93d472cf41caa14b3c2ae37717d0beee72c1754a0022079e849ce5a3e9ead451c02ee2271bf637b8714dfcf77e96f3574f7d48d35f3240121033334a7401df9930e726905963c9f535fdeff975a84cdc85067217c2ee403db8afeffffff0440420f00000000001976a9141b9a8107f5f50cc8e23696463bf53c4350ab4b2f88ac80841e00000000001976a9141b9a8107f5f50cc8e23696463bf53c4350ab4b2f88acd03f6300000000001976a914e70044d98006524a1a032f507d10427dca87f5fb88ac002d3101000000001976a9143b16eb02e1a6bd4d7acd422981b627467de27bf988acb3941500\"\n        },\n        {\n            \"hash\": \"c499c223f401175b14c8cb28893219dcd8b49563e59b9b4865dd4407c2de27c8\",\n            \"height\": 1414324,\n            \"hex\": \"01000000016720cbbd13dd812d1c92abf21767aeae8c0f74762c555e1d51920c3b0f58e5ee000000006a47304402204b1ad610a6f803780406e863907df748ecc36ae08af18a70d6a868be91c43e19022071f27d527bebdc54bea2955d63778582533c3e23f46b50d008fd3125b2a78aac01210251925ad4fee452bdec4000ac008264127f967171a0c629cbe5204d1a86d39d5bfeffffff0240420f00000000001976a914436279912756fcf86f046911c465e07c3015726388acc48ee800000000001976a9144107eaf57b36f840ce06c0326953a6d9de7250c588acb3941500\"\n        },\n        {\n            \"hash\": \"d2ccea06bad8711a1c95e66f1b3a8d658c447a061c856cf284075f7a152d45fb\",\n            \"height\": 1414995,\n            \"hex\": \"02000000000101c75d20b25fc8d9330ebd5b898200dec2e4006283ed0921b2febe992431a591fc000000001716001447519c784d680319752e25c11f40f55f511fafc7feffffff02400fb7066c00000017a914839852e194269cf3e71179b49712974b858d2d06872669aa00000000001976a914d392f3d90559efbf0a53e091ea86aba41324a53a88ac02483045022100d75c69fd521bcb21285fb289b3b999d623ea9496fb561f60fb92d07dfba079400220667e2b2ebc970c17e19c88cc2ced316144c85ad493eabaad919d79c76fddb3f70121021d6110c5773cd692b46cbfe39539343e576a69d5df95c8ec92210ca892a7a89b4d971500\"\n        },\n        {\n            \"hash\": \"df47e4bf599ecf27d8f3b34e85fcd7384d753823208d06171ff16899bc1709ce\",\n            \"height\": 1414324,\n            \"hex\": \"0100000002a7664aa9426c442c8a008636f958104486a6ddb9db511fcd6fced182a9dcffac000000006b483045022100de8365c8a9f4364a97f540d96acdedd6b64231607016d3bec2e673ab65c4f2dc02205cf22e2f0e382dea3e46dabec821a4d3d6dfeebc46e117df01d72ebdda2720fe0121027f8d509060eac49ec1459a6026de7bd126e8c64d0f67a11cb55e1d34553b1085fdffffffc827dec20744dd65489b9be56395b4d8dc19328928cbc8145b1701f423c299c4000000006a47304402202c776d8a1a84d8eded4208f302768be2985eb4c5f1dd7c9b509fcd24f78650fd022060d6f8e1dcdeeb16901ec2d33015d84cef72fd4792935c7b5b3abba2cc7e1fd90121021497743c1fa69e9c4961cf0cc8e2d55790087e918d5ba92eb166aa0da2a3a8a9fdffffff02e0930400000000001976a9149fbfef2a2f386818a33b5e2e94b5c753f741846888aca0252600000000001976a9143b16eb02e1a6bd4d7acd422981b627467de27bf988acb3941500\"\n        },\n        {\n            \"hash\": \"f2e6bc46d8bf08d19854bc8dfde1a3d4968fa8d09f2185ea6e2711ec0ce449ec\",\n            \"height\": 1414324,\n            \"hex\": \"01000000011e5866926a6d48da489c6097c07bc0374a37c02eef80fbac5873072373be9a7d000000006b483045022100caac9a30da1805898c2cb1b7e1a666174175776711e029a95533e7c1b94fe646022002452c0a3f983ce7b4784e149f0e1264b83c3c5745a7db61aa22197326f998610121035fd185ba86d1a69809a6a4906c6229022748125d8eb56b0bc6fb8e1074b47ff9feffffff0248c30300000000001976a914552ef8e748705cbcf09820f398084d54a488593a88ac20a10700000000001976a9143b16eb02e1a6bd4d7acd422981b627467de27bf988acb3941500\"\n        },\n        {\n            \"hash\": \"f49001a572942a506bd414c51f5a0e9cd349899d05c868b1de2fa6742a66d5aa\",\n            \"height\": 1414324,\n            \"hex\": \"010000000162a80d2afb2d687c5b3924c22a36ad0e1bc6b621cde7b5484acb2c874a521b33000000006a473044022056ec2e7ed4197a8bb9ee47ed083aee4318b108055b61c4cb6f38b722af20f45b022022d1887d4bb9a648109b5591e2beaba72da28dc77b25b37490cb1bae032e44200121025456608e1c1912d18ef2b09e5280d1117d1a02c6efc90393801b5586ed0e4de0feffffff0200e1f505000000001976a914d8582e9ac212e9be0e364e764e97977f2f5791c688ac4405d329000000001976a914862f9e457fa471d9869bebb0da6f796c4d19c50288acb3941500\"\n        }\n    ]\n}\n"
  },
  {
    "path": "backend/backend.go",
    "content": "package backend\n\nimport (\n\t\"github.com/square/beancounter/deriver\"\n\ttime \"time\"\n)\n\n// Backend is an interface which abstracts different types of backends.\n//\n// The Backends are responsible for fetching all the transactions related to an address.\n// For each transaction, the Backend must grab:\n// - the height\n// - the raw transaction bytes\n//\n// In addition, the backend must know the chain height. The backend is allowed to fetch this value\n// once (at startup) and cache it.\n//\n// In general, we tried to keep the backends minimal and move as much (common) logic as possible\n// into the accounter.\n//\n// There are a few differences between Electrum and Btcd (and potentially any other Backend we\n// decide to add in the future). For instance, Electrum returns the block height when fetching all\n// the transactions for a given address, but Btcd doesn't. On the other hand, Btcd returns the raw\n// transaction information right away but Electrum requires additional requests.\n//\n// Because of these differences, the Backend exposes a Finish() method. This method allows the\n// Accounter to wait until the Backend is done with any additional requests. In theory, we could\n// forgo the Finish() method and have the Accounter read from the TxResponses channel until it has\n// all the data it needs. This would require the Accounter to maintain its own set of transactions.\ntype Backend interface {\n\tChainHeight() uint32\n\n\tAddrRequest(addr *deriver.Address)\n\tAddrResponses() <-chan *AddrResponse\n\tTxRequest(txHash string)\n\tTxResponses() <-chan *TxResponse\n\tBlockRequest(height uint32)\n\tBlockResponses() <-chan *BlockResponse\n\n\tFinish()\n}\n\n// AddrResponse lists transaction hashes for a given address\ntype AddrResponse struct {\n\tAddress  *deriver.Address\n\tTxHashes []string\n}\n\n// TxResponse contains raw transaction, transaction hash and a block height in which\n// it was confirmed.\ntype TxResponse struct {\n\tHash   string\n\tHeight int64\n\tHex    string\n}\n\ntype BlockResponse struct {\n\tHeight    uint32\n\tTimestamp time.Time\n}\n\n// HasTransactions returns true if the Response contains any transactions\nfunc (r *AddrResponse) HasTransactions() bool {\n\treturn len(r.TxHashes) > 0\n}\n"
  },
  {
    "path": "backend/btcd_backend.go",
    "content": "package backend\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"sync\"\n\n\t\"github.com/btcsuite/btcd/btcjson\"\n\t\"github.com/btcsuite/btcd/chaincfg/chainhash\"\n\t\"github.com/btcsuite/btcd/rpcclient\"\n\t\"github.com/pkg/errors\"\n\t\"github.com/square/beancounter/deriver\"\n\t\"github.com/square/beancounter/reporter\"\n\t. \"github.com/square/beancounter/utils\"\n)\n\n// BtcdBackend wraps Btcd node and its API to provide a simple\n// balance and transaction history information for a given address.\n// BtcdBackend implements Backend interface.\ntype BtcdBackend struct {\n\tchainHeight uint32\n\n\tclient            *rpcclient.Client\n\tnetwork           Network\n\tblockHeightMu     sync.Mutex // mutex to guard read/writes to blockHeightLookup map\n\tblockHeightLookup map[string]int64\n\n\t// channels used to communicate with the Accounter\n\taddrRequests  chan *deriver.Address\n\taddrResponses chan *AddrResponse\n\ttxRequests    chan string\n\ttxResponses   chan *TxResponse\n\n\t// channels used to communicate with the Blockfinder\n\tblockRequests  chan uint32\n\tblockResponses chan *BlockResponse\n\n\t// internal channels\n\ttransactionsMu     sync.Mutex // mutex to guard read/writes to transactions map\n\tcachedTransactions map[string]*TxResponse\n\tdoneCh             chan bool\n}\n\nconst (\n\t// For now assume that there cannot be more than maxTxsPerAddr.\n\t// Ideally, if maxTxsPerAddr is reached then we should paginate and retrieve\n\t// all the transactions.\n\tmaxTxsPerAddr = 1000\n\n\taddrRequestsChanSize = 100\n\tblockRequestChanSize = 100\n\n\tconcurrency = 100\n)\n\n// NewBtcdBackend returns a new BtcdBackend structs or errors.\n//\n// BtcdBackend is meants to connect to a personal Btcd node (because public nodes don't expose the\n// API we need). There's no TLS support. If your node is not co-located with Beancounter, we\n// recommend wrapping your connection in a ssh or other secure tunnel.\nfunc NewBtcdBackend(host, port, user, pass string, network Network) (*BtcdBackend, error) {\n\tconnCfg := &rpcclient.ConnConfig{\n\t\tHost:         fmt.Sprintf(\"%s:%s\", host, port),\n\t\tUser:         user,\n\t\tPass:         pass,\n\t\tHTTPPostMode: true, // Bitcoin core only supports HTTP POST mode\n\t\tDisableTLS:   true, // Since we're assuming a personal bitcoin node for now, skip TLS\n\t}\n\tclient, err := rpcclient.New(connCfg, nil)\n\tif err != nil {\n\t\treturn nil, errors.Wrap(err, \"could not create a Btcd RPC client\")\n\t}\n\n\t// Check that we are talking to the right chain\n\tgenesis, err := client.GetBlockHash(0)\n\tif err != nil {\n\t\treturn nil, errors.Wrap(err, \"GetBlockHash(0) failed\")\n\t}\n\tif genesis.String() != GenesisBlock(network) {\n\t\treturn nil, errors.Errorf(\"Unexpected genesis block %s != %s\", genesis.String(), GenesisBlock(network))\n\t}\n\n\theight, err := client.GetBlockCount()\n\tif err != nil {\n\t\treturn nil, errors.Wrap(err, \"could not connect to the Btcd server\")\n\t}\n\n\tb := &BtcdBackend{\n\t\tclient:         client,\n\t\tnetwork:        network,\n\t\tchainHeight:    uint32(height),\n\t\taddrRequests:   make(chan *deriver.Address, addrRequestsChanSize),\n\t\taddrResponses:  make(chan *AddrResponse, addrRequestsChanSize),\n\t\ttxRequests:     make(chan string, 2*maxTxsPerAddr),\n\t\ttxResponses:    make(chan *TxResponse, 2*maxTxsPerAddr),\n\t\tblockRequests:  make(chan uint32, 2*blockRequestChanSize),\n\t\tblockResponses: make(chan *BlockResponse, 2*blockRequestChanSize),\n\n\t\tblockHeightLookup:  make(map[string]int64),\n\t\tcachedTransactions: make(map[string]*TxResponse),\n\t\tdoneCh:             make(chan bool),\n\t}\n\n\t// launch\n\tfor i := 0; i < concurrency; i++ {\n\t\tgo b.processRequests()\n\t}\n\treturn b, nil\n}\n\n// AddrRequest schedules a request to the backend to lookup information related\n// to the given address.\nfunc (b *BtcdBackend) AddrRequest(addr *deriver.Address) {\n\treporter.GetInstance().IncAddressesScheduled()\n\treporter.GetInstance().Logf(\"scheduling address: %s\", addr)\n\tb.addrRequests <- addr\n}\n\n// AddrResponses exposes a channel that allows to consume backend's responses to\n// address requests created with AddrRequest()\nfunc (b *BtcdBackend) AddrResponses() <-chan *AddrResponse {\n\treturn b.addrResponses\n}\n\n// TxRequest schedules a request to the backend to lookup information related\n// to the given transaction hash.\nfunc (b *BtcdBackend) TxRequest(txHash string) {\n\treporter.GetInstance().IncTxScheduled()\n\treporter.GetInstance().Logf(\"scheduling tx: %s\", txHash)\n\tb.txRequests <- txHash\n}\n\n// TxResponses exposes a channel that allows to consume backend's responses to\n// address requests created with addrrequest().\n// if an address has any transactions then they will be sent to this channel by the\n// backend.\nfunc (b *BtcdBackend) TxResponses() <-chan *TxResponse {\n\treturn b.txResponses\n}\n\nfunc (b *BtcdBackend) BlockRequest(height uint32) {\n\tb.blockRequests <- height\n}\n\nfunc (b *BtcdBackend) BlockResponses() <-chan *BlockResponse {\n\treturn b.blockResponses\n}\n\n// Finish informs the backend to stop doing its work.\nfunc (b *BtcdBackend) Finish() {\n\tclose(b.doneCh)\n\tb.client.Disconnect()\n}\n\nfunc (b *BtcdBackend) ChainHeight() uint32 {\n\treturn b.chainHeight\n}\n\nfunc (b *BtcdBackend) processRequests() {\n\tfor {\n\t\tselect {\n\t\tcase addr := <-b.addrRequests:\n\t\t\terr := b.processAddrRequest(addr)\n\t\t\tif err != nil {\n\t\t\t\tlog.Panicf(\"processAddrRequest failed: %+v\", err)\n\t\t\t}\n\t\tcase tx := <-b.txRequests:\n\t\t\terr := b.processTxRequest(tx)\n\t\t\tif err != nil {\n\t\t\t\tlog.Panicf(\"processTxRequest failed: %+v\", err)\n\t\t\t}\n\t\tcase block := <-b.blockRequests:\n\t\t\terr := b.processBlockRequest(block)\n\t\t\tif err != nil {\n\t\t\t\tlog.Panicf(\"processBlockRequest failed: %+v\", err)\n\t\t\t}\n\t\tcase <-b.doneCh:\n\t\t\tbreak\n\t\t}\n\t}\n}\n\nfunc (b *BtcdBackend) processAddrRequest(address *deriver.Address) error {\n\taddr := address.Script()\n\ttxs, err := b.client.SearchRawTransactionsVerbose(address.Address(), 0, maxTxsPerAddr+1, true, false, nil)\n\tif err != nil {\n\t\tif jerr, ok := err.(*btcjson.RPCError); ok {\n\t\t\tswitch jerr.Code {\n\t\t\tcase btcjson.ErrRPCInvalidAddressOrKey:\n\t\t\t\t// the address doesn't exist in the blockchain - either because it was not used\n\t\t\t\t// or given backend doesn't have a complete blockchain\n\t\t\t\tb.addrResponses <- &AddrResponse{\n\t\t\t\t\tAddress:  address,\n\t\t\t\t\tTxHashes: []string{},\n\t\t\t\t}\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t\treturn errors.Wrap(err, \"could not fetch transactions for \"+addr)\n\t}\n\n\tif len(txs) > maxTxsPerAddr {\n\t\treturn fmt.Errorf(\"address %s has more than max allowed transactions of %d\", addr, maxTxsPerAddr)\n\t}\n\n\ttxHashes := make([]string, 0, len(txs))\n\tfor _, tx := range txs {\n\t\ttxHashes = append(txHashes, tx.Txid)\n\t}\n\n\tb.cacheTxs(txs)\n\n\tb.addrResponses <- &AddrResponse{\n\t\tAddress:  address,\n\t\tTxHashes: txHashes,\n\t}\n\n\treturn nil\n}\n\nfunc (b *BtcdBackend) processTxRequest(txHash string) error {\n\tb.transactionsMu.Lock()\n\ttx, exists := b.cachedTransactions[txHash]\n\tb.transactionsMu.Unlock()\n\n\tif exists {\n\t\tb.txResponses <- tx\n\n\t\treturn nil\n\t}\n\n\thash, err := chainhash.NewHashFromStr(txHash)\n\tif err != nil {\n\t\treturn err\n\t}\n\ttxResp, err := b.client.GetRawTransactionVerbose(hash)\n\tif err != nil {\n\t\tif jerr, ok := err.(*btcjson.RPCError); ok {\n\t\t\tswitch jerr.Code {\n\t\t\tcase btcjson.ErrRPCInvalidAddressOrKey:\n\t\t\t\treturn errors.Wrap(err, \"blockchain doesn't have transaction \"+txHash)\n\t\t\t}\n\t\t}\n\t\treturn errors.Wrap(err, \"could not fetch transaction \"+txHash)\n\t}\n\theight, err := b.getBlockHeight(txResp.BlockHash)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tb.txResponses <- &TxResponse{\n\t\tHash:   txHash,\n\t\tHeight: height,\n\t\tHex:    txResp.Hex,\n\t}\n\treturn nil\n}\n\nfunc (b *BtcdBackend) processBlockRequest(height uint32) error {\n\thash, err := b.client.GetBlockHash(int64(height))\n\tif err != nil {\n\t\tif jerr, ok := err.(*btcjson.RPCError); ok {\n\t\t\tswitch jerr.Code {\n\t\t\tcase btcjson.ErrRPCInvalidAddressOrKey:\n\t\t\t\treturn errors.Wrapf(err, \"blockchain doesn't have block %d\", height)\n\t\t\t}\n\t\t}\n\t\treturn errors.Wrapf(err, \"could not fetch block %d\", height)\n\t}\n\n\theader, err := b.client.GetBlockHeader(hash)\n\tif err != nil {\n\t\tif jerr, ok := err.(*btcjson.RPCError); ok {\n\t\t\tswitch jerr.Code {\n\t\t\tcase btcjson.ErrRPCInvalidAddressOrKey:\n\t\t\t\treturn errors.Wrapf(err, \"blockchain doesn't have block %d\", height)\n\t\t\t}\n\t\t}\n\t\treturn errors.Wrapf(err, \"could not fetch block %d\", height)\n\t}\n\n\tb.blockResponses <- &BlockResponse{\n\t\tHeight:    height,\n\t\tTimestamp: header.Timestamp,\n\t}\n\treturn nil\n}\n\nfunc (b *BtcdBackend) cacheTxs(txs []*btcjson.SearchRawTransactionsResult) {\n\tfor _, tx := range txs {\n\t\tb.transactionsMu.Lock()\n\t\t_, exists := b.cachedTransactions[tx.Txid]\n\t\tb.transactionsMu.Unlock()\n\n\t\tif exists {\n\t\t\treturn\n\t\t}\n\n\t\theight, err := b.getBlockHeight(tx.BlockHash)\n\t\tif err != nil {\n\t\t\tlog.Panicf(\"error getting block height for hash %s: %s\", tx.BlockHash, err.Error())\n\t\t}\n\n\t\tb.transactionsMu.Lock()\n\t\tb.cachedTransactions[tx.Txid] = &TxResponse{\n\t\t\tHash:   tx.Txid,\n\t\t\tHeight: height,\n\t\t\tHex:    tx.Hex,\n\t\t}\n\t\tb.transactionsMu.Unlock()\n\t}\n}\n\n// getBlockHeight returns a block height for a given block hash or returns an error\nfunc (b *BtcdBackend) getBlockHeight(hash string) (int64, error) {\n\tb.blockHeightMu.Lock()\n\theight, exists := b.blockHeightLookup[hash]\n\tb.blockHeightMu.Unlock()\n\tif exists {\n\t\treturn height, nil\n\t}\n\n\th, err := chainhash.NewHashFromStr(hash)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\tresp, err := b.client.GetBlockVerbose(h)\n\tif err != nil {\n\t\tif jerr, ok := err.(*btcjson.RPCError); ok {\n\t\t\tswitch jerr.Code {\n\t\t\tcase btcjson.ErrRPCInvalidAddressOrKey:\n\t\t\t\treturn -1, errors.Wrap(err, \"blockchain doesn't have block \"+hash)\n\t\t\t}\n\t\t}\n\t\treturn -1, errors.Wrap(err, \"could not fetch block \"+hash)\n\t}\n\n\tb.blockHeightMu.Lock()\n\tb.blockHeightLookup[hash] = resp.Height\n\tb.blockHeightMu.Unlock()\n\n\treturn resp.Height, nil\n}\n"
  },
  {
    "path": "backend/common.go",
    "content": "package backend\n\nimport (\n\t. \"github.com/square/beancounter/utils\"\n\t\"time\"\n)\n\n// index, address and transaction and helper structs used by recorder and fixture\n// backends marshal/unmarshal address and transaction data\n\ntype index struct {\n\tMetadata     metadata      `json:\"metadata\"`\n\tAddresses    []address     `json:\"addresses\"`\n\tTransactions []transaction `json:\"transactions\"`\n\tBlocks       []block       `json:\"blocks\"`\n}\n\ntype metadata struct {\n\tHeight uint32 `json:\"height\"`\n}\n\ntype address struct {\n\tAddress      string   `json:\"address\"`\n\tPath         string   `json:\"path\"`\n\tNetwork      Network  `json:\"network\"`\n\tChange       uint32   `json:\"change\"`\n\tAddressIndex uint32   `json:\"addr_index\"`\n\tTxHashes     []string `json:\"tx_hashes\"`\n}\n\ntype byAddress []address\n\nfunc (a byAddress) Len() int           { return len(a) }\nfunc (a byAddress) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }\nfunc (a byAddress) Less(i, j int) bool { return a[i].Address < a[j].Address }\n\ntype transaction struct {\n\tHash   string `json:\"hash\"`\n\tHeight int64  `json:\"height\"`\n\tHex    string `json:\"hex\"`\n}\n\ntype byTransactionID []transaction\n\nfunc (a byTransactionID) Len() int           { return len(a) }\nfunc (a byTransactionID) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }\nfunc (a byTransactionID) Less(i, j int) bool { return a[i].Hash < a[j].Hash }\n\ntype block struct {\n\tHeight    uint32    `json:\"height\"`\n\tTimestamp time.Time `json:\"timestamp\"`\n}\n"
  },
  {
    "path": "backend/electrum/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2015 Tristan Rice\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n"
  },
  {
    "path": "backend/electrum/README.md",
    "content": "This code was imported from github.com/mbyczkowski/go-electrum, a fork of\ngithub.com/qshuai/go-electrum, a fork of github.com/d4l3k/go-electrum.\n"
  },
  {
    "path": "backend/electrum/blockchain.go",
    "content": "package electrum\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"log\"\n\t\"strings\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\t\"github.com/bcext/cashutil\"\n\t. \"github.com/square/beancounter/utils\"\n)\n\nconst (\n\tsleep = 200 * time.Millisecond // Be nice to the Electrum nodes\n)\n\ntype Node struct {\n\t// Ident is a an identifier of the form 127.0.0.1|s1234 or ::1|t5432.\n\tIdent   string\n\tNetwork Network\n\n\ttransport Transport\n\n\t// Next ID for request. Store/load this via sync/atomic.\n\tnextId uint64\n}\n\ntype Feature struct {\n\tPrunning string `json:\"prunning\"`\n\tProtocol string `json:\"protocol_max\"`\n\tGenesis  string `json:\"genesis_hash\"`\n}\n\ntype BlockchainHeader struct {\n\tNonce         uint32 `json:\"nonce\"`\n\tPrevBlockHash string `json:\"prev_block_hash\"`\n\tTimestamp     int64  `json:\"timestamp\"`\n\tMerkleRoot    string `json:\"merkle_root\"`\n\tBlockHeight   int32  `json:\"block_height\"`\n\tUtxoRoot      string `json:\"utxo_root\"`\n\tVersion       int32  `json:\"version\"`\n\tBits          int64  `json:\"bits\"`\n}\n\ntype Balance struct {\n\t// Address field is unnecessary for Electrumx server protocol,\n\t// but is required for user of this library.\n\tAddress string `json:\"address\"`\n\n\tConfirmed   cashutil.Amount `json:\"confirmed\"`\n\tUnconfirmed cashutil.Amount `json:\"unconfirmed\"`\n}\n\ntype Transaction struct {\n\tHash   string `json:\"tx_hash\"`\n\tHeight uint32 `json:\"height\"`\n\tValue  int64  `json:\"value\"`\n\tPos    uint32 `json:\"tx_pos\"`\n}\n\ntype GetTransaction struct {\n\tHex           string `json:\"hex\"`\n\tTxid          string `json:\"txid\"`\n\tVersion       int32  `json:\"version\"`\n\tLocktime      uint32 `json:\"locktime\"`\n\tVin           []Vin  `json:\"vin\"`\n\tVout          []Vout `json:\"vout\"`\n\tBlockHash     string `json:\"blockhash\"`\n\tConfirmations int32  `json:\"confirmations\"`\n\tTime          int64  `json:\"time\"`\n\tBlocktime     int64  `json:\"blocktime\"`\n}\n\n// Vin models parts of the tx data.\ntype Vin struct {\n\tCoinbase  string     `json:\"coinbase\"`\n\tTxid      string     `json:\"txid\"`\n\tVout      uint32     `json:\"vout\"`\n\tScriptSig *ScriptSig `json:\"scriptSig\"`\n\tSequence  uint32     `json:\"sequence\"`\n}\n\n// ScriptPubKeyResult models the scriptPubKey data of a tx script.  It is\n// defined separately since it is used by multiple commands.\ntype ScriptPubKeyResult struct {\n\tAsm       string   `json:\"asm\"`\n\tHex       string   `json:\"hex,omitempty\"`\n\tReqSigs   int32    `json:\"reqSigs,omitempty\"`\n\tType      string   `json:\"type\"`\n\tAddresses []string `json:\"addresses,omitempty\"`\n}\n\n// Vout models parts of the tx data.\ntype Vout struct {\n\tValue        float64            `json:\"value\"`\n\tN            uint32             `json:\"n\"`\n\tScriptPubKey ScriptPubKeyResult `json:\"scriptPubKey\"`\n}\n\n// ScriptSig models a signature script.  It is defined separately since it only\n// applies to non-coinbase.  Therefore the field in the Vin structure needs\n// to be a pointer.\ntype ScriptSig struct {\n\tAsm string `json:\"asm\"`\n\tHex string `json:\"hex\"`\n}\n\ntype Peer struct {\n\tIP       string\n\tHost     string\n\tVersion  string\n\tFeatures []string\n}\n\ntype Header struct {\n\tHeight uint32 `json:\"height\"`\n\tHex    string `json:\"hex\"`\n}\n\ntype Block struct {\n\tCount uint   `json:\"count\"`\n\tHex   string `json:\"hex\"`\n\tMax   uint   `json:\"max\"`\n}\n\nfunc NewNode(addr, port string, network Network) (*Node, error) {\n\tn := &Node{}\n\tvar a string\n\tvar t Transport\n\tvar err error\n\n\tdefaultTCP, defaultSSL := defaultPorts(network)\n\n\tif strings.Contains(addr, \":\") {\n\t\ta = fmt.Sprintf(\"[%s]\", addr)\n\t} else {\n\t\ta = addr\n\t}\n\n\tif port[0] == 't' {\n\t\t// TCP\n\t\tvar p string\n\t\tif len(port) == 1 {\n\t\t\tp = defaultTCP\n\t\t} else {\n\t\t\tp = port[1:]\n\t\t}\n\t\tt, err = NewTCPTransport(fmt.Sprintf(\"%s:%s\", a, p))\n\t} else if port[0] == 's' {\n\t\t// TLS\n\t\tvar p string\n\t\tif len(port) == 1 {\n\t\t\tp = defaultSSL\n\t\t} else {\n\t\t\tp = port[1:]\n\t\t}\n\t\tt, err = NewSSLTransport(fmt.Sprintf(\"%s:%s\", a, p))\n\t} else {\n\t\tlog.Panicf(\"port (%s) must start with t or s\", port)\n\t}\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tn.transport = t\n\tn.Network = network\n\tn.Ident = NodeIdent(addr, port)\n\treturn n, nil\n}\n\nfunc (n *Node) Disconnect() error {\n\treturn n.transport.Shutdown()\n}\n\nfunc NodeIdent(addr, port string) string {\n\treturn fmt.Sprintf(\"%s|%s\", addr, port)\n}\n\n// IsCoinBase returns a bool to show if a Vin is a Coinbase one or not.\nfunc (v *Vin) IsCoinBase() bool {\n\treturn len(v.Coinbase) > 0\n}\n\n// ServerFeatures returns the server features dictionary.\n// method: \"server.features\"\n//\n// version 1.1\n// https://electrumx.readthedocs.io/en/latest/protocol-methods.html#server-features\nfunc (n *Node) ServerFeatures() (*Feature, error) {\n\tvar result Feature\n\terr := n.request(\"server.features\", []interface{}{}, &result)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &result, nil\n}\n\n// ServerVersion allows negotiating a min protocol version. This is required, as various methods\n// appeared (or were removed) in various versions.\n//\n// version 1.1\n// https://electrumx.readthedocs.io/en/latest/protocol-methods.html#server-version\nfunc (n *Node) ServerVersion(ver string) error {\n\tvar ignored []string\n\treturn n.request(\"server.version\", []interface{}{\"beancounter\", ver}, &ignored)\n}\n\n// BlockchainAddressGetHistory returns the history of an address.\n//\n// version 1.1 and version 1.2 only\n// https://electrumx.readthedocs.io/en/latest/protocol-methods.html#blockchain-scripthash-get_history\nfunc (n *Node) BlockchainAddressGetHistory(address string) ([]*Transaction, error) {\n\tvar result []*Transaction\n\terr := n.request(\"blockchain.address.get_history\", []interface{}{address}, &result)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn result, nil\n}\n\n// BlockchainTransactionGet returns a raw transaction.\n//\n// https://electrumx.readthedocs.io/en/latest/protocol-methods.html#blockchain-transaction-get\nfunc (n *Node) BlockchainTransactionGet(txid string) (string, error) {\n\tvar hex string\n\terr := n.request(\"blockchain.transaction.get\", []interface{}{txid, false}, &hex)\n\treturn hex, err\n}\n\n// Subscribe to receive block headers when a new block is found.\n//\n// Note: there's no way to unsubscribe, and the rest of this code doesn't know how to deal with\n// notifications. It is advisable to only call this method once and disconnect/reconnect after\n// getting the block height.\n//\n// https://electrumx.readthedocs.io/en/latest/protocol-methods.html#blockchain-headers-subscribe\nfunc (n *Node) BlockchainHeadersSubscribe() (*Header, error) {\n\tvar header Header\n\terr := n.request(\"blockchain.headers.subscribe\", []interface{}{true}, &header)\n\treturn &header, err\n}\n\n// ServerPeersSubscribe requests peers from a server.\n//\n// https://electrumx.readthedocs.io/en/latest/protocol-methods.html#server-peers-subscribe\nfunc (n *Node) ServerPeersSubscribe() ([]Peer, error) {\n\tvar peers [][]interface{}\n\terr := n.request(\"server.peers.subscribe\", []interface{}{}, &peers)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tout := []Peer{}\n\tfor _, peer := range peers {\n\t\tfeatures := make([]string, 0, len(peer[2].([]interface{})))\n\t\tfor _, feature := range peer[2].([]interface{}) {\n\t\t\tfeatures = append(features, feature.(string))\n\t\t}\n\n\t\tp := Peer{\n\t\t\tIP:       peer[0].(string),\n\t\t\tHost:     peer[1].(string),\n\t\t\tVersion:  features[0],\n\t\t\tFeatures: features[1:],\n\t\t}\n\t\tout = append(out, p)\n\t}\n\n\treturn out, nil\n}\n\n// BlockchainBlockHeaders returns a block header (160 hex).\nfunc (n *Node) BlockchainBlockHeaders(height uint32, count uint) (Block, error) {\n\tvar block Block\n\terr := n.request(\"blockchain.block.headers\", []interface{}{height, count}, &block)\n\treturn block, err\n}\n\nfunc (n *Node) request(method string, params []interface{}, result interface{}) error {\n\tmsg := RequestMessage{\n\t\tId:     atomic.AddUint64(&n.nextId, 1),\n\t\tMethod: method,\n\t\tParams: params,\n\t}\n\n\tresp, err := n.transport.SendMessage(msg)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tr, err := json.Marshal(resp.Result)\n\tif err != nil {\n\t\treturn err\n\t}\n\tjson.Unmarshal(r, result)\n\ttime.Sleep(sleep)\n\treturn nil\n}\n\nfunc defaultPorts(network Network) (string, string) {\n\tswitch network {\n\tcase Mainnet:\n\t\treturn \"50001\", \"50002\"\n\tcase Testnet:\n\t\treturn \"50101\", \"50102\"\n\tdefault:\n\t\tpanic(\"unreachable\")\n\t}\n}\n"
  },
  {
    "path": "backend/electrum/tcp.go",
    "content": "package electrum\n\nimport (\n\t\"bufio\"\n\t\"crypto/tls\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"log\"\n\t\"net\"\n\t\"time\"\n)\n\nvar DebugMode bool\n\nconst (\n\tconnTimeout  = 2 * time.Second\n\twriteTimeout = 10 * time.Second\n\treadTimeout  = 10 * time.Second\n\tmessageDelim = byte('\\n')\n)\n\nvar (\n\tErrNotImplemented = errors.New(\"not implemented\")\n\tErrNodeConnected  = errors.New(\"node already connected\")\n\tErrNodeShutdown   = errors.New(\"node has shutdown\")\n\tErrIdMismatch     = errors.New(\"response id mismatch\")\n\tErrUnknown        = errors.New(\"unknown error\")\n\tErrNetwork        = errors.New(\"network error\")\n\tErrAPI            = errors.New(\"received API error\")\n)\n\ntype ErrorResponse struct {\n\tCode    int    `json:\"code\"`\n\tMessage string `json:\"message\"`\n}\n\ntype RequestMessage struct {\n\tId     uint64        `json:\"id\"`\n\tMethod string        `json:\"method\"`\n\tParams []interface{} `json:\"params\"`\n}\n\ntype ResponseMessage struct {\n\tId      uint64         `json:\"id\"`\n\tJsonRpc string         `json:\"jsonrpc\"`\n\tResult  interface{}    `json:\"result\"`\n\tError   *ErrorResponse `json:\"error\"`\n}\n\ntype Transport interface {\n\tSendMessage(RequestMessage) (*ResponseMessage, error)\n\tShutdown() error\n}\n\ntype TCPTransport struct {\n\tconn net.Conn\n}\n\nfunc NewTCPTransport(addr string) (Transport, error) {\n\tconn, err := net.DialTimeout(\"tcp\", addr, connTimeout)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tt := &TCPTransport{conn: conn}\n\n\treturn t, nil\n}\n\nfunc NewSSLTransport(addr string) (Transport, error) {\n\td := &net.Dialer{\n\t\tTimeout: connTimeout,\n\t}\n\n\tconn, err := tls.DialWithDialer(d, \"tcp\", addr, &tls.Config{InsecureSkipVerify: true})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tt := &TCPTransport{conn: conn}\n\n\treturn t, nil\n}\n\nfunc (t *TCPTransport) SendMessage(request RequestMessage) (*ResponseMessage, error) {\n\tif t.conn == nil {\n\t\treturn nil, ErrNodeShutdown\n\t}\n\n\tbody, err := json.Marshal(request)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tbody = append(body, messageDelim)\n\n\t// Set write deadline\n\t_ = t.conn.SetWriteDeadline(time.Now().Add(writeTimeout))\n\n\t// Send message\n\tn, err := t.conn.Write(body)\n\tif err != nil {\n\t\t_ = t.Shutdown()\n\t\tif DebugMode {\n\t\t\tlog.Printf(\"error on send to %s: %s\", t.conn.RemoteAddr(), err)\n\t\t}\n\t\treturn nil, ErrNetwork\n\t}\n\tif n != len(body) {\n\t\t_ = t.Shutdown()\n\t\tif DebugMode {\n\t\t\tlog.Printf(\"error on send to %s: short write (%d < %d)\", t.conn.RemoteAddr(), n, len(body))\n\t\t}\n\t\treturn nil, ErrNetwork\n\t}\n\n\tif DebugMode {\n\t\tlog.Printf(\"%s <- %s\", t.conn.RemoteAddr(), body)\n\t}\n\n\t// Clear write deadline, set read deadline\n\t_ = t.conn.SetWriteDeadline(time.Time{})\n\t_ = t.conn.SetReadDeadline(time.Now().Add(readTimeout))\n\n\t// Wait for response\n\treader := bufio.NewReader(t.conn)\n\n\tline, err := reader.ReadBytes(messageDelim)\n\tif err != nil {\n\t\t_ = t.Shutdown()\n\t\tif DebugMode {\n\t\t\tlog.Printf(\"error on recv from %s: %s\", t.conn.RemoteAddr(), err)\n\t\t}\n\t\treturn nil, ErrNetwork\n\t}\n\n\t// Clear deadline\n\t_ = t.conn.SetReadDeadline(time.Time{})\n\n\tif DebugMode {\n\t\tlog.Printf(\"%s -> %s\", t.conn.RemoteAddr(), line)\n\t}\n\n\t// Parse & process message\n\tresp := ResponseMessage{}\n\terr = json.Unmarshal(line, &resp)\n\tif err != nil {\n\t\t_ = t.Shutdown()\n\t\tif DebugMode {\n\t\t\tlog.Printf(\"error on recv from %s: %s\", t.conn.RemoteAddr(), err)\n\t\t}\n\t\treturn nil, ErrUnknown\n\t}\n\n\tif resp.Id != request.Id {\n\t\t_ = t.Shutdown()\n\t\tif DebugMode {\n\t\t\tlog.Printf(\"error on recv from %s: id mismatch (%d != %d)\", t.conn.RemoteAddr(), request.Id, resp.Id)\n\t\t}\n\t\treturn nil, ErrIdMismatch\n\t}\n\n\tif resp.Error != nil {\n\t\tif DebugMode {\n\t\t\tlog.Printf(\"error on recv from %s: server error (%d: %s)\", t.conn.RemoteAddr(), resp.Error.Code, resp.Error.Message)\n\t\t}\n\t\treturn nil, ErrAPI\n\t}\n\n\treturn &resp, nil\n}\n\nfunc (t *TCPTransport) Shutdown() error {\n\treturn t.conn.Close()\n}\n"
  },
  {
    "path": "backend/electrum_backend.go",
    "content": "package backend\n\nimport (\n\t\"bytes\"\n\t\"encoding/hex\"\n\t\"errors\"\n\t\"fmt\"\n\t\"log\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/btcsuite/btcd/wire\"\n\n\t\"github.com/Masterminds/semver\"\n\t\"github.com/square/beancounter/backend/electrum\"\n\t\"github.com/square/beancounter/deriver\"\n\t\"github.com/square/beancounter/reporter\"\n\t. \"github.com/square/beancounter/utils\"\n)\n\n// Fetches transaction information from Electrum servers.\n// Electrum protocol docs: https://electrumx.readthedocs.io/en/latest/protocol.html\n//\n// When we connect to an Electrum server, we:\n// - ensure the server talks v1.2\n// - has the right genesis block\n// - has crossed the height we are interested in.\n// - we then negotiate protocol v1.2\n//\n// A background goroutine continuously connects to peers.\n\n// ElectrumBackend wraps Electrum node and its API to provide a simple\n// balance and transaction history information for a given address.\n// ElectrumBackend implements Backend interface.\ntype ElectrumBackend struct {\n\tchainHeight uint32\n\n\t// peer management\n\tnodeMu sync.RWMutex // mutex to guard reads/writes to nodes map\n\tnodes  map[string]*electrum.Node\n\t// todo: blacklistedNodes should be a timestamp and we should re-try after a certain amount of\n\t// time has elapsed.\n\tblacklistedNodes map[string]struct{}\n\tnetwork          Network\n\n\t// channels used to communicate with the Accounter\n\taddrRequests  chan *deriver.Address\n\taddrResponses chan *AddrResponse\n\ttxResponses   chan *TxResponse\n\ttxRequests    chan string\n\n\t// channels used to communicate with the Blockfinder\n\tblockRequests  chan uint32\n\tblockResponses chan *BlockResponse\n\n\t// internal channels\n\tpeersRequests  chan struct{}\n\ttransactionsMu sync.Mutex // mutex to guard read/writes to transactions map\n\ttransactions   map[string]int64\n\tdoneCh         chan bool\n}\n\nconst (\n\tmaxPeers          = 100\n\tpeerFetchInterval = 30 * time.Second // How often to fetch additional peers?\n)\n\nvar (\n\t// ErrIncorrectGenesisBlock means electrum is set-up to for wrong currency\n\tErrIncorrectGenesisBlock = errors.New(\"Incorrect genesis block\")\n\t// ErrIncompatibleVersion means electrum server version is not compatible with electrum client lib\n\tErrIncompatibleVersion = errors.New(\"Incompatible version\")\n\t// ErrFailedNegotiateVersion means electrum server doesn't support version(s) used by the electrum client lib\n\tErrFailedNegotiateVersion = errors.New(\"Failed negotiate version\")\n)\n\n// NewElectrumBackend returns a new ElectrumBackend structs or errors.\n// Initially connects to 1 node. A background job handles connecting to\n// additional peers. The background job fails if there are no peers left.\nfunc NewElectrumBackend(addr, port string, network Network) (*ElectrumBackend, error) {\n\n\t// TODO: should the channels have k * maxPeers buffers? Each node needs to enqueue a\n\t// potentially large number of transactions. If all nodes are doing that at the same time,\n\t// there's a deadlock risk?\n\teb := &ElectrumBackend{\n\t\tnodes:            make(map[string]*electrum.Node),\n\t\tblacklistedNodes: make(map[string]struct{}),\n\t\tnetwork:          network,\n\t\taddrRequests:     make(chan *deriver.Address, 2*maxPeers),\n\t\taddrResponses:    make(chan *AddrResponse, 2*maxPeers),\n\t\ttxRequests:       make(chan string, 2*maxPeers),\n\t\ttxResponses:      make(chan *TxResponse, 2*maxPeers),\n\t\tblockRequests:    make(chan uint32, 2*maxPeers),\n\t\tblockResponses:   make(chan *BlockResponse, 2*maxPeers),\n\n\t\tpeersRequests: make(chan struct{}),\n\t\ttransactions:  make(map[string]int64),\n\t\tdoneCh:        make(chan bool),\n\t}\n\n\t// Connect to a node to fetch the height\n\theight, err := eb.getHeight(addr, port, network)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\teb.chainHeight = height\n\n\t// Connect to a node and handle requests\n\tif err := eb.addNode(addr, port, network); err != nil {\n\t\tfmt.Printf(\"failed to connect to initial node: %+v\", err)\n\t\treturn nil, err\n\t}\n\n\t// goroutine to continuously fetch additional peers\n\tgo func() {\n\t\teb.findPeers()\n\t\tfor {\n\t\t\tselect {\n\t\t\tcase <-time.Tick(peerFetchInterval):\n\t\t\t\teb.findPeers()\n\t\t\tcase <-eb.doneCh:\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}()\n\n\treturn eb, nil\n}\n\n// AddrRequest schedules a request to the backend to lookup information related\n// to the given address.\nfunc (eb *ElectrumBackend) AddrRequest(addr *deriver.Address) {\n\treporter.GetInstance().IncAddressesScheduled()\n\treporter.GetInstance().Logf(\"scheduling address: %s\", addr)\n\teb.addrRequests <- addr\n}\n\n// AddrResponses exposes a channel that allows to consume backend's responses to\n// address requests created with AddrRequest()\nfunc (eb *ElectrumBackend) AddrResponses() <-chan *AddrResponse {\n\treturn eb.addrResponses\n}\n\n// TxRequest schedules a request to the backend to lookup information related\n// to the given transaction hash.\nfunc (eb *ElectrumBackend) TxRequest(txHash string) {\n\treporter.GetInstance().IncTxScheduled()\n\treporter.GetInstance().Logf(\"scheduling tx: %s\", txHash)\n\teb.txRequests <- txHash\n}\n\n// TxResponses exposes a channel that allows to consume backend's responses to\n// address requests created with AddrRequest().\n// If an address has any transactions then they will be sent to this channel by the\n// backend.\nfunc (eb *ElectrumBackend) TxResponses() <-chan *TxResponse {\n\treturn eb.txResponses\n}\n\nfunc (eb *ElectrumBackend) BlockRequest(height uint32) {\n\teb.blockRequests <- height\n}\n\nfunc (eb *ElectrumBackend) BlockResponses() <-chan *BlockResponse {\n\treturn eb.blockResponses\n}\n\n// Finish informs the backend to stop doing its work.\nfunc (eb *ElectrumBackend) Finish() {\n\tclose(eb.doneCh)\n\teb.removeAllNodes()\n\t// TODO: we could gracefully disconnect from all the nodes. We currently don't, because the\n\t// program is going to terminate soon anyways.\n}\n\nfunc (eb *ElectrumBackend) ChainHeight() uint32 {\n\treturn eb.chainHeight\n}\n\n// Connect to a node and add it to the map of nodes\nfunc (eb *ElectrumBackend) addNode(addr, port string, network Network) error {\n\tident := electrum.NodeIdent(addr, port)\n\n\teb.nodeMu.RLock()\n\t_, existsGood := eb.nodes[ident]\n\t_, existsBad := eb.blacklistedNodes[ident]\n\teb.nodeMu.RUnlock()\n\tif existsGood {\n\t\treturn fmt.Errorf(\"already connected to %s\", addr)\n\t}\n\tif existsBad {\n\t\t// TODO: if we can't connect to a node over TCP, we should try the TLS port?\n\t\treturn fmt.Errorf(\"%s is known to be unreachable\", addr)\n\t}\n\n\tlog.Printf(\"connecting to %s\", addr)\n\tnode, err := electrum.NewNode(addr, port, network)\n\tif err != nil {\n\t\teb.nodeMu.Lock()\n\t\teb.blacklistedNodes[ident] = struct{}{}\n\t\teb.nodeMu.Unlock()\n\t\treturn err\n\t}\n\n\t// Get the server's features\n\tfeature, err := node.ServerFeatures()\n\tif err != nil {\n\t\teb.nodeMu.Lock()\n\t\teb.blacklistedNodes[ident] = struct{}{}\n\t\teb.nodeMu.Unlock()\n\t\treturn err\n\t}\n\t// Check genesis block\n\tif feature.Genesis != GenesisBlock(network) {\n\t\teb.nodeMu.Lock()\n\t\teb.blacklistedNodes[ident] = struct{}{}\n\t\teb.nodeMu.Unlock()\n\t\treturn ErrIncorrectGenesisBlock\n\t}\n\t// TODO: check pruning. Currently, servers currently don't prune, so it's fine to skip for now.\n\n\t// Check version\n\terr = checkVersion(feature.Protocol)\n\tif err != nil {\n\t\teb.nodeMu.Lock()\n\t\teb.blacklistedNodes[ident] = struct{}{}\n\t\teb.nodeMu.Unlock()\n\t\treturn err\n\t}\n\n\t// Negotiate version\n\terr = node.ServerVersion(\"1.2\")\n\tif err != nil {\n\t\teb.nodeMu.Lock()\n\t\teb.blacklistedNodes[ident] = struct{}{}\n\t\teb.nodeMu.Unlock()\n\t\treturn ErrFailedNegotiateVersion\n\t}\n\n\t// TODO: ask the server for info on the block height we care about. If the server doesn't have\n\t// that block, we'll automatically disconnect.\n\n\teb.nodeMu.Lock()\n\teb.nodes[ident] = node\n\teb.nodeMu.Unlock()\n\n\t// We can process requests\n\tgo eb.processRequests(node)\n\n\treturn nil\n}\n\n// Connect to a node without registering it, fetch height and disconnect.\nfunc (eb *ElectrumBackend) getHeight(addr, port string, network Network) (uint32, error) {\n\tlog.Printf(\"connecting to %s\", addr)\n\tnode, err := electrum.NewNode(addr, port, network)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tdefer node.Disconnect()\n\n\t// Get the server's features\n\tfeature, err := node.ServerFeatures()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\t// Check genesis block\n\tif feature.Genesis != GenesisBlock(network) {\n\t\treturn 0, ErrIncorrectGenesisBlock\n\t}\n\t// TODO: check pruning. Currently, servers currently don't prune, so it's fine to skip for now.\n\n\t// Check version\n\terr = checkVersion(feature.Protocol)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\t// Negotiate version\n\terr = node.ServerVersion(\"1.2\")\n\tif err != nil {\n\t\treturn 0, ErrFailedNegotiateVersion\n\t}\n\n\theader, err := node.BlockchainHeadersSubscribe()\n\tif err != nil {\n\t\tlog.Printf(\"BlockchainHeadersSubscribe failed: %+v\", err)\n\t\treturn 0, err\n\t}\n\n\treturn header.Height, nil\n}\n\nfunc (eb *ElectrumBackend) processRequests(node *electrum.Node) {\n\tfor {\n\t\tselect {\n\t\tcase _ = <-eb.peersRequests:\n\t\t\terr := eb.processPeersRequest(node)\n\t\t\tif err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\tcase addr := <-eb.addrRequests:\n\t\t\terr := eb.processAddrRequest(node, addr)\n\t\t\tif err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\tcase tx := <-eb.txRequests:\n\t\t\terr := eb.processTxRequest(node, tx)\n\t\t\tif err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\tcase block := <-eb.blockRequests:\n\t\t\terr := eb.processBlockRequest(node, block)\n\t\t\tif err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc (eb *ElectrumBackend) processPeersRequest(node *electrum.Node) error {\n\teb.nodeMu.Lock()\n\tnumNodes := len(eb.nodes)\n\teb.nodeMu.Unlock()\n\n\tif numNodes >= maxPeers {\n\t\treturn nil\n\t}\n\tpeers, err := node.ServerPeersSubscribe()\n\tif err != nil {\n\t\tlog.Printf(\"ServerPeersSubscribe failed: %+v\", err)\n\t\treturn err\n\t}\n\tfor _, peer := range peers {\n\t\teb.addPeer(peer)\n\t}\n\treturn nil\n}\n\nfunc (eb *ElectrumBackend) processTxRequest(node *electrum.Node, txHash string) error {\n\thex, err := node.BlockchainTransactionGet(txHash)\n\tif err != nil {\n\t\tlog.Printf(\"processTxRequest failed with: %s, %+v\", node.Ident, err)\n\t\teb.removeNode(node.Ident)\n\n\t\t// requeue request\n\t\t// TODO: we should have a retry counter and fail gracefully if a transaction fails\n\t\t//       too many times.\n\t\teb.txRequests <- txHash\n\t\treturn err\n\t}\n\theight := eb.getTxHeight(txHash)\n\n\teb.txResponses <- &TxResponse{\n\t\tHash:   txHash,\n\t\tHeight: height,\n\t\tHex:    hex,\n\t}\n\n\treturn nil\n}\n\nfunc (eb *ElectrumBackend) getTxHeight(txHash string) int64 {\n\teb.transactionsMu.Lock()\n\tdefer eb.transactionsMu.Unlock()\n\n\theight, exists := eb.transactions[txHash]\n\tif !exists {\n\t\tlog.Panicf(\"transactions cache miss for %s\", txHash)\n\t}\n\treturn height\n}\n\n// note: we could be more efficient and batch things up.\nfunc (eb *ElectrumBackend) processBlockRequest(node *electrum.Node, height uint32) error {\n\tblock, err := node.BlockchainBlockHeaders(height, 1)\n\tif err != nil {\n\t\tlog.Printf(\"processBlockRequest failed with: %s, %+v\", node.Ident, err)\n\t\teb.removeNode(node.Ident)\n\n\t\t// requeue request\n\t\t// TODO: we should have a retry counter and fail gracefully if an address fails too\n\t\t// many times.\n\t\teb.blockRequests <- height\n\t\treturn err\n\t}\n\n\t// Decode hex to get Timestamp\n\tb, err := hex.DecodeString(block.Hex)\n\tif err != nil {\n\t\tfmt.Printf(\"failed to unhex block %d: %s\\n\", height, block.Hex)\n\t\tpanic(err)\n\t}\n\n\tvar blockHeader wire.BlockHeader\n\terr = blockHeader.Deserialize(bytes.NewReader(b))\n\tif err != nil {\n\t\tfmt.Printf(\"failed to parse block %d: %s\\n\", height, block.Hex)\n\t\tpanic(err)\n\t}\n\n\teb.blockResponses <- &BlockResponse{\n\t\tHeight:    height,\n\t\tTimestamp: blockHeader.Timestamp,\n\t}\n\n\treturn nil\n}\n\nfunc (eb *ElectrumBackend) processAddrRequest(node *electrum.Node, addr *deriver.Address) error {\n\ttxs, err := node.BlockchainAddressGetHistory(addr.String())\n\tif err != nil {\n\t\tlog.Printf(\"processAddrRequest failed with: %s, %+v\", node.Ident, err)\n\t\teb.removeNode(node.Ident)\n\n\t\t// requeue request\n\t\t// TODO: we should have a retry counter and fail gracefully if an address fails too\n\t\t// many times.\n\t\teb.addrRequests <- addr\n\t\treturn err\n\t}\n\n\ttxHashes := make([]string, 0, len(txs))\n\tfor _, tx := range txs {\n\t\ttxHashes = append(txHashes, tx.Hash)\n\t\t// fetch additional data if needed\n\t}\n\teb.cacheTxs(txs)\n\n\t// TODO: we assume there are no more transactions. We should check what the API returns for\n\t// addresses with very large number of transactions.\n\teb.addrResponses <- &AddrResponse{\n\t\tAddress:  addr,\n\t\tTxHashes: txHashes,\n\t}\n\treturn nil\n}\n\nfunc (eb *ElectrumBackend) cacheTxs(txs []*electrum.Transaction) {\n\teb.transactionsMu.Lock()\n\tdefer eb.transactionsMu.Unlock()\n\n\tfor _, tx := range txs {\n\t\theight, exists := eb.transactions[tx.Hash]\n\t\tif exists && (height != int64(tx.Height)) {\n\t\t\tlog.Panicf(\"inconsistent cache: %s %d != %d\", tx.Hash, height, tx.Height)\n\t\t}\n\t\teb.transactions[tx.Hash] = int64(tx.Height)\n\t}\n}\n\n// Checks that Electrum server's version is 1.2 or higher\nfunc checkVersion(ver string) error {\n\tif ver[0] == 'v' {\n\t\tver = ver[1:]\n\t}\n\tv, err := semver.NewVersion(ver)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tc, err := semver.NewConstraint(\">= 1.2\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif !c.Check(v) {\n\t\treturn ErrIncompatibleVersion\n\t}\n\treturn nil\n}\n\n// remove a node from the map of nodes.\nfunc (eb *ElectrumBackend) removeNode(ident string) {\n\teb.nodeMu.Lock()\n\tdefer eb.nodeMu.Unlock()\n\tnode, exists := eb.nodes[ident]\n\tif exists {\n\t\tnode.Disconnect()\n\t\tdelete(eb.nodes, ident)\n\t}\n}\n\nfunc (eb *ElectrumBackend) removeAllNodes() {\n\teb.nodeMu.Lock()\n\tdefer eb.nodeMu.Unlock()\n\n\tfor _, node := range eb.nodes {\n\t\tnode.Disconnect()\n\t}\n\n\teb.nodes = map[string]*electrum.Node{}\n}\n\nfunc (eb *ElectrumBackend) findPeers() {\n\teb.peersRequests <- struct{}{}\n\teb.nodeMu.Lock()\n\treporter.GetInstance().SetPeers(int32(len(eb.nodes)))\n\teb.nodeMu.Unlock()\n}\n\nfunc (eb *ElectrumBackend) addPeer(peer electrum.Peer) {\n\tif strings.HasSuffix(peer.Host, \".onion\") {\n\t\tlog.Printf(\"skipping %s because of .onion\\n\", peer.Host)\n\t\treturn\n\t}\n\terr := checkVersion(peer.Version)\n\tif err != nil {\n\t\tlog.Printf(\"skipping %s because of protocol version %s\\n\", peer.Host, peer.Version)\n\t\treturn\n\t}\n\tfor _, feature := range peer.Features {\n\t\tif strings.HasPrefix(feature, \"t\") {\n\t\t\tgo func(addr, feature string, network Network) {\n\t\t\t\tif err := eb.addNode(addr, feature, network); err != nil {\n\t\t\t\t\tlog.Printf(\"error on addNode: %+v\\n\", err)\n\t\t\t\t}\n\t\t\t}(peer.IP, feature, eb.network)\n\t\t\treturn\n\t\t}\n\t}\n\tfor _, feature := range peer.Features {\n\t\tif strings.HasPrefix(feature, \"s\") {\n\t\t\tgo func(addr, feature string, network Network) {\n\t\t\t\tif err := eb.addNode(addr, feature, network); err != nil {\n\t\t\t\t\tlog.Printf(\"error on addNode: %+v\\n\", err)\n\t\t\t\t}\n\t\t\t}(peer.IP, feature, eb.network)\n\t\t\treturn\n\t\t}\n\t}\n\tlog.Printf(\"skipping %s because of feature mismatch: %+v\\n\", peer, peer.Features)\n}\n"
  },
  {
    "path": "backend/electrum_backend_test.go",
    "content": "package backend\n\nimport (\n\t\"github.com/square/beancounter/backend/electrum\"\n\t\"github.com/square/beancounter/deriver\"\n\t. \"github.com/square/beancounter/utils\"\n\t\"github.com/stretchr/testify/assert\"\n\t\"testing\"\n)\n\nfunc TestTransactionCache(t *testing.T) {\n\t// TODO: refactor ElectrumBackend to make it easier to test\n\n\teb := &ElectrumBackend{\n\t\tnodes:            make(map[string]*electrum.Node),\n\t\tblacklistedNodes: make(map[string]struct{}),\n\t\tnetwork:          Testnet,\n\t\taddrRequests:     make(chan *deriver.Address, 2*maxPeers),\n\t\taddrResponses:    make(chan *AddrResponse, 2*maxPeers),\n\t\ttxRequests:       make(chan string, 2*maxPeers),\n\t\ttxResponses:      make(chan *TxResponse, 2*maxPeers),\n\n\t\tpeersRequests: make(chan struct{}),\n\t\ttransactions:  make(map[string]int64),\n\t\tdoneCh:        make(chan bool),\n\t}\n\n\ttx1 := electrum.Transaction{Hash: \"aaaaaa\", Height: 100}\n\ttx2 := electrum.Transaction{Hash: \"bbbbbb\", Height: 100}\n\ttx3 := electrum.Transaction{Hash: \"cccccc\", Height: 101}\n\tbadTx := electrum.Transaction{Hash: \"aaaaaa\", Height: 102}\n\n\teb.cacheTxs([]*electrum.Transaction{&tx1, &tx2})\n\n\tassert.Equal(t, int64(tx1.Height), eb.getTxHeight(tx1.Hash))\n\tassert.Equal(t, int64(tx2.Height), eb.getTxHeight(tx2.Hash))\n\tassert.Panics(t, func() { eb.getTxHeight(tx3.Hash) })\n\n\teb.cacheTxs([]*electrum.Transaction{&tx2, &tx3})\n\n\tassert.Equal(t, int64(tx1.Height), eb.getTxHeight(tx1.Hash))\n\tassert.Equal(t, int64(tx2.Height), eb.getTxHeight(tx2.Hash))\n\tassert.Equal(t, int64(tx3.Height), eb.getTxHeight(tx3.Hash))\n\n\tassert.Panics(t, func() { eb.cacheTxs([]*electrum.Transaction{&badTx}) })\n}\n"
  },
  {
    "path": "backend/fixture_backend.go",
    "content": "package backend\n\nimport (\n\t\"encoding/json\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"os\"\n\t\"sync\"\n\n\tpkgerr \"github.com/pkg/errors\"\n\t\"github.com/square/beancounter/deriver\"\n\t\"github.com/square/beancounter/reporter\"\n)\n\n// FixtureBackend loads data from a file that was previously recorded by\n// RecorderBackend\ntype FixtureBackend struct {\n\taddrIndexMu  sync.Mutex\n\taddrIndex    map[string]AddrResponse\n\ttxIndexMu    sync.Mutex\n\ttxIndex      map[string]TxResponse\n\tblockIndexMu sync.Mutex\n\tblockIndex   map[uint32]BlockResponse\n\n\t// channels used to communicate with the Accounter\n\taddrRequests  chan *deriver.Address\n\taddrResponses chan *AddrResponse\n\ttxRequests    chan string\n\ttxResponses   chan *TxResponse\n\n\t// channels used to communicate with the Blockfinder\n\tblockRequests  chan uint32\n\tblockResponses chan *BlockResponse\n\n\ttransactionsMu sync.Mutex // mutex to guard read/writes to transactions map\n\ttransactions   map[string]int64\n\n\t// internal channels\n\tdoneCh chan bool\n\n\treadOnly bool\n\n\theight uint32\n}\n\n// NewFixtureBackend returns a new FixtureBackend structs or errors.\nfunc NewFixtureBackend(filepath string) (*FixtureBackend, error) {\n\tcb := &FixtureBackend{\n\t\taddrRequests:   make(chan *deriver.Address, 10),\n\t\taddrResponses:  make(chan *AddrResponse, 10),\n\t\ttxRequests:     make(chan string, 1000),\n\t\ttxResponses:    make(chan *TxResponse, 1000),\n\t\tblockRequests:  make(chan uint32, 10),\n\t\tblockResponses: make(chan *BlockResponse, 10),\n\t\taddrIndex:      make(map[string]AddrResponse),\n\t\ttxIndex:        make(map[string]TxResponse),\n\t\tblockIndex:     make(map[uint32]BlockResponse),\n\t\ttransactions:   make(map[string]int64),\n\t\tdoneCh:         make(chan bool),\n\t}\n\n\tf, err := os.Open(filepath)\n\tif err != nil {\n\t\treturn nil, pkgerr.Wrap(err, \"cannot open a fixture file\")\n\t}\n\tdefer f.Close()\n\n\tif err := cb.loadFromFile(f); err != nil {\n\t\treturn nil, pkgerr.Wrap(err, \"cannot load data from a fixture file\")\n\t}\n\n\tgo cb.processRequests()\n\treturn cb, nil\n}\n\n// AddrRequest schedules a request to the backend to lookup information related\n// to the given address.\nfunc (fb *FixtureBackend) AddrRequest(addr *deriver.Address) {\n\treporter.GetInstance().IncAddressesScheduled()\n\treporter.GetInstance().Logf(\"[fixture] scheduling address: %s\", addr)\n\tfb.addrRequests <- addr\n}\n\n// TxRequest schedules a request to the backend to lookup information related\n// to the given transaction hash.\nfunc (fb *FixtureBackend) TxRequest(txHash string) {\n\treporter.GetInstance().IncTxScheduled()\n\treporter.GetInstance().Logf(\"[fixture] scheduling tx: %s\", txHash)\n\tfb.txRequests <- txHash\n}\n\nfunc (fb *FixtureBackend) BlockRequest(height uint32) {\n\tfb.blockRequests <- height\n}\n\n// AddrResponses exposes a channel that allows to consume backend's responses to\n// address requests created with AddrRequest()\nfunc (fb *FixtureBackend) AddrResponses() <-chan *AddrResponse {\n\treturn fb.addrResponses\n}\n\n// TxResponses exposes a channel that allows to consume backend's responses to\n// address requests created with addrrequest().\n// if an address has any transactions then they will be sent to this channel by the\n// backend.\nfunc (fb *FixtureBackend) TxResponses() <-chan *TxResponse {\n\treturn fb.txResponses\n}\n\nfunc (fb *FixtureBackend) BlockResponses() <-chan *BlockResponse {\n\treturn fb.blockResponses\n}\n\n// Finish informs the backend to stop doing its work.\nfunc (fb *FixtureBackend) Finish() {\n\tclose(fb.doneCh)\n}\n\nfunc (fb *FixtureBackend) ChainHeight() uint32 {\n\treturn fb.height\n}\n\nfunc (fb *FixtureBackend) processRequests() {\n\tfor {\n\t\tselect {\n\t\tcase addr := <-fb.addrRequests:\n\t\t\tfb.processAddrRequest(addr)\n\t\tcase tx := <-fb.txRequests:\n\t\t\tfb.processTxRequest(tx)\n\t\tcase addrResp, ok := <-fb.addrResponses:\n\t\t\tif !ok {\n\t\t\t\tfb.addrResponses = nil\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfb.addrResponses <- addrResp\n\t\tcase txResp, ok := <-fb.txResponses:\n\t\t\tif !ok {\n\t\t\t\tfb.txResponses = nil\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfb.txResponses <- txResp\n\t\tcase block := <-fb.blockRequests:\n\t\t\tfb.processBlockRequest(block)\n\t\tcase <-fb.doneCh:\n\t\t\treturn\n\t\t}\n\t}\n}\n\nfunc (fb *FixtureBackend) processAddrRequest(addr *deriver.Address) {\n\tfb.addrIndexMu.Lock()\n\tresp, exists := fb.addrIndex[addr.String()]\n\tfb.addrIndexMu.Unlock()\n\n\tif exists {\n\t\tfb.addrResponses <- &resp\n\t\treturn\n\t}\n\n\t// assuming that address has not been used\n\tfb.addrResponses <- &AddrResponse{\n\t\tAddress: addr,\n\t}\n}\n\nfunc (fb *FixtureBackend) processTxRequest(txHash string) {\n\tfb.txIndexMu.Lock()\n\tresp, exists := fb.txIndex[txHash]\n\tfb.txIndexMu.Unlock()\n\n\tif exists {\n\t\tfb.txResponses <- &resp\n\t\treturn\n\t}\n\n\t// assuming that transaction does not exist in the fixture file\n}\n\nfunc (fb *FixtureBackend) processBlockRequest(height uint32) {\n\tfb.blockIndexMu.Lock()\n\tresp, exists := fb.blockIndex[height]\n\tfb.blockIndexMu.Unlock()\n\n\tif exists {\n\t\tfb.blockResponses <- &resp\n\t\treturn\n\t}\n\tlog.Panicf(\"fixture doesn't contain block %d\", height)\n}\n\nfunc (fb *FixtureBackend) loadFromFile(f *os.File) error {\n\tvar cachedData index\n\n\tbyteValue, err := ioutil.ReadAll(f)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = json.Unmarshal(byteValue, &cachedData)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfb.height = cachedData.Metadata.Height\n\n\tfor _, addr := range cachedData.Addresses {\n\t\ta := AddrResponse{\n\t\t\tAddress:  deriver.NewAddress(addr.Path, addr.Address, addr.Network, addr.Change, addr.AddressIndex),\n\t\t\tTxHashes: addr.TxHashes,\n\t\t}\n\t\tfb.addrIndex[addr.Address] = a\n\t}\n\n\tfor _, tx := range cachedData.Transactions {\n\t\tfb.txIndex[tx.Hash] = TxResponse{\n\t\t\tHash:   tx.Hash,\n\t\t\tHeight: tx.Height,\n\t\t\tHex:    tx.Hex,\n\t\t}\n\n\t\tfb.transactions[tx.Hash] = tx.Height\n\t}\n\n\tfor _, b := range cachedData.Blocks {\n\t\tfb.blockIndex[b.Height] = BlockResponse{\n\t\t\tHeight:    b.Height,\n\t\t\tTimestamp: b.Timestamp,\n\t\t}\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "backend/fixture_backend_test.go",
    "content": "package backend\n\nimport (\n\t\"sync\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/square/beancounter/deriver\"\n\t. \"github.com/square/beancounter/utils\"\n\t\"github.com/stretchr/testify/assert\"\n)\n\nfunc TestNonExistantFixtureFile(t *testing.T) {\n\tb, err := NewFixtureBackend(\"testdata/badpath\")\n\tassert.Nil(t, b)\n\tassert.Error(t, err)\n}\n\nfunc TestBadFixtureFile(t *testing.T) {\n\tb, err := NewFixtureBackend(\"testdata/nonjsonfixture\")\n\tassert.Nil(t, b)\n\tassert.Error(t, err)\n}\n\nfunc TestFinish(t *testing.T) {\n\tb, err := NewFixtureBackend(\"../accounter/testdata/tpub_data.json\")\n\tassert.NoError(t, err)\n\n\tclosed := make(chan bool)\n\tgo func(ch chan bool) {\n\t\tb.processRequests()\n\t\tclosed <- true\n\t}(closed)\n\n\tb.Finish()\n\n\tselect {\n\tcase <-closed:\n\t\t// processRequests() shut down as expected\n\t\t// PASS\n\tcase <-time.Tick(100 * time.Millisecond):\n\t\tt.Errorf(\"expected a call to Finish() to cleanly shutdown the FixtureBackend\")\n\t}\n}\n\nfunc TestNoAddress(t *testing.T) {\n\tb, err := NewFixtureBackend(\"../accounter/testdata/tpub_data.json\")\n\tassert.NoError(t, err)\n\n\tb.AddrRequest(deriver.NewAddress(\"m/1'/1/0/1\", \"BAD_ADDRESS\", Testnet, 0, 1))\n\n\tvar addrs []*AddrResponse\n\tvar txs []*TxResponse\n\n\tfetchResults(b, &addrs, &txs, 100*time.Millisecond)\n\n\t// we don't know if address is legit or not, we just know if the address shows up\n\t// in the blockchain. The default behavior is just to return the address with no transactions\n\tassert.Len(t, addrs, 1)\n\tassert.False(t, addrs[0].HasTransactions())\n\tassert.Equal(t, \"BAD_ADDRESS\", addrs[0].Address.String())\n\tassert.Len(t, txs, 0)\n}\n\nfunc TestAddressNoTransactions(t *testing.T) {\n\tb, err := NewFixtureBackend(\"../accounter/testdata/tpub_data.json\")\n\tassert.NoError(t, err)\n\n\tb.AddrRequest(deriver.NewAddress(\"m/1'/1234/0/61\", \"mfsNoNz57ANkYrCzHaLZDLoMGujBW8u3zv\", Testnet, 0, 61))\n\n\tvar addrs []*AddrResponse\n\tvar txs []*TxResponse\n\n\tfetchResults(b, &addrs, &txs, 100*time.Millisecond)\n\n\tassert.Len(t, addrs, 1)\n\tassert.False(t, addrs[0].HasTransactions())\n\tassert.Equal(t, \"mfsNoNz57ANkYrCzHaLZDLoMGujBW8u3zv\", addrs[0].Address.String())\n\tassert.Len(t, txs, 0)\n}\n\nfunc TestAddressWithTransactions(t *testing.T) {\n\tb, err := NewFixtureBackend(\"../accounter/testdata/tpub_data.json\")\n\tassert.NoError(t, err)\n\n\tb.AddrRequest(deriver.NewAddress(\"m/1'/1234/0/7\", \"mi2udMvJHeeJJNp5wWKToa86L2cJUKzrby\", Testnet, 0, 7))\n\n\tvar addrs []*AddrResponse\n\tvar txs []*TxResponse\n\n\tfetchResults(b, &addrs, &txs, 100*time.Millisecond)\n\n\tassert.Len(t, addrs, 1)\n\tassert.True(t, addrs[0].HasTransactions())\n\tassert.Len(t, addrs[0].TxHashes, 2)\n\tassert.Contains(t, addrs[0].TxHashes, \"5554c15d13002786a70a7151aad4eddce76633c60bc7f90e3dc70eb4f9c4b2b0\")\n\tassert.Contains(t, addrs[0].TxHashes, \"bd09a74381ffad78c162976ec27fc9c1dceda3c2bfe367541a7140b8dd6e1f4c\")\n\tassert.Len(t, txs, 0)\n\n\tfor _, tx := range addrs[0].TxHashes {\n\t\tb.TxRequest(tx)\n\t}\n\n\tfetchResults(b, &addrs, &txs, 100*time.Millisecond)\n\t// ensure that txs contain the same transaction hashes as addrs[0].TxHashes\n\tvar txHashes []string\n\ttxHashes = append(txHashes, txs[0].Hash)\n\ttxHashes = append(txHashes, txs[1].Hash)\n\tassert.Contains(t, txHashes, \"5554c15d13002786a70a7151aad4eddce76633c60bc7f90e3dc70eb4f9c4b2b0\")\n\tassert.Contains(t, txHashes, \"bd09a74381ffad78c162976ec27fc9c1dceda3c2bfe367541a7140b8dd6e1f4c\")\n}\n\nfunc fetchResults(b Backend, addrs *[]*AddrResponse, txs *[]*TxResponse, timeout time.Duration) {\n\tvar wg sync.WaitGroup\n\n\twg.Add(1)\n\tgo func() {\n\t\taddrResponses := b.AddrResponses()\n\t\ttxResponses := b.TxResponses()\n\t\tfor {\n\t\t\tselect {\n\t\t\tcase addrResp, ok := <-addrResponses:\n\t\t\t\tif !ok {\n\t\t\t\t\taddrResponses = nil\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\t*addrs = append(*addrs, addrResp)\n\t\t\tcase txResp, ok := <-txResponses:\n\t\t\t\tif !ok {\n\t\t\t\t\ttxResponses = nil\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\t*txs = append(*txs, txResp)\n\t\t\tcase <-time.Tick(timeout):\n\n\t\t\t\twg.Done()\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}()\n\n\twg.Wait()\n}\n"
  },
  {
    "path": "backend/recorder_backend.go",
    "content": "package backend\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"os\"\n\t\"sort\"\n\t\"sync\"\n\n\t\"github.com/square/beancounter/deriver\"\n\t\"github.com/square/beancounter/reporter\"\n)\n\n// RecorderBackend wraps Btcd node and its API to provide a simple\n// balance and transaction history information for a given address.\n// RecorderBackend implements Backend interface.\ntype RecorderBackend struct {\n\tbackend      Backend\n\taddrIndexMu  sync.Mutex\n\taddrIndex    map[string]AddrResponse\n\ttxIndexMu    sync.Mutex\n\ttxIndex      map[string]TxResponse\n\tblockIndexMu sync.Mutex\n\tblockIndex   map[uint32]BlockResponse\n\n\t// channels used to communicate with the Accounter\n\taddrResponses chan *AddrResponse\n\ttxResponses   chan *TxResponse\n\n\t// channels used to communicate with the Blockfinder\n\tblockResponses chan *BlockResponse\n\n\t// internal channels\n\tdoneCh chan bool\n\n\toutputFilepath string\n}\n\n// NewRecorderBackend returns a new RecorderBackend structs or errors.\n// RecorderBackend passes requests to another backend and ten records\n// address and transaction responses to a file. The file can later be used by a\n// FixtureBackend to reply those responses.\nfunc NewRecorderBackend(b Backend, filepath string) (*RecorderBackend, error) {\n\trb := &RecorderBackend{\n\t\tbackend:        b,\n\t\taddrResponses:  make(chan *AddrResponse, addrRequestsChanSize),\n\t\ttxResponses:    make(chan *TxResponse, 2*maxTxsPerAddr),\n\t\tblockResponses: make(chan *BlockResponse, blockRequestChanSize),\n\t\taddrIndex:      make(map[string]AddrResponse),\n\t\ttxIndex:        make(map[string]TxResponse),\n\t\tblockIndex:     make(map[uint32]BlockResponse),\n\t\tdoneCh:         make(chan bool),\n\t\toutputFilepath: filepath,\n\t}\n\n\tgo rb.processRequests()\n\treturn rb, nil\n}\n\n// AddrRequest schedules a request to the backend to lookup information related\n// to the given address.\nfunc (rb *RecorderBackend) AddrRequest(addr *deriver.Address) {\n\trb.backend.AddrRequest(addr)\n}\n\n// AddrResponses exposes a channel that allows to consume backend's responses to\n// address requests created with AddrRequest()\nfunc (rb *RecorderBackend) AddrResponses() <-chan *AddrResponse {\n\treturn rb.addrResponses\n}\n\n// TxRequest schedules a request to the backend to lookup information related\n// to the given transaction hash.\nfunc (rb *RecorderBackend) TxRequest(txHash string) {\n\trb.backend.TxRequest(txHash)\n}\n\n// TxResponses exposes a channel that allows to consume backend's responses to\n// address requests created with addrrequest().\n// if an address has any transactions then they will be sent to this channel by the\n// backend.\nfunc (rb *RecorderBackend) TxResponses() <-chan *TxResponse {\n\treturn rb.txResponses\n}\n\nfunc (rb *RecorderBackend) BlockRequest(height uint32) {\n\trb.backend.BlockRequest(height)\n}\n\nfunc (rb *RecorderBackend) BlockResponses() <-chan *BlockResponse {\n\treturn rb.blockResponses\n}\n\n// Finish informs the backend to stop doing its work.\nfunc (rb *RecorderBackend) Finish() {\n\trb.backend.Finish()\n\tclose(rb.doneCh)\n\n\tif err := rb.writeToFile(); err != nil {\n\t\tfmt.Println(err)\n\t}\n}\n\nfunc (rb *RecorderBackend) ChainHeight() uint32 {\n\treturn rb.backend.ChainHeight()\n}\n\nfunc (rb *RecorderBackend) processRequests() {\n\tbackendAddrResponses := rb.backend.AddrResponses()\n\tbackendTxResponses := rb.backend.TxResponses()\n\tbackendBlockResponses := rb.backend.BlockResponses()\n\n\tfor {\n\t\tselect {\n\t\tcase addrResp, ok := <-backendAddrResponses:\n\t\t\tif !ok {\n\t\t\t\tbackendAddrResponses = nil\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\trb.addrIndexMu.Lock()\n\t\t\trb.addrIndex[addrResp.Address.String()] = *addrResp\n\t\t\trb.addrIndexMu.Unlock()\n\t\t\trb.addrResponses <- addrResp\n\t\tcase txResp, ok := <-backendTxResponses:\n\t\t\tif !ok {\n\t\t\t\tbackendTxResponses = nil\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\trb.txIndexMu.Lock()\n\t\t\trb.txIndex[txResp.Hash] = *txResp\n\t\t\trb.txIndexMu.Unlock()\n\t\t\trb.txResponses <- txResp\n\t\tcase block, ok := <-backendBlockResponses:\n\t\t\tif !ok {\n\t\t\t\tbackendBlockResponses = nil\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\trb.blockIndexMu.Lock()\n\t\t\trb.blockIndex[block.Height] = *block\n\t\t\trb.blockIndexMu.Unlock()\n\t\t\trb.blockResponses <- block\n\t\tcase <-rb.doneCh:\n\t\t\treturn\n\t\t}\n\t}\n}\n\nfunc (rb *RecorderBackend) writeToFile() error {\n\tcachedData := index{\n\t\tMetadata: metadata{}, Addresses: []address{}, Transactions: []transaction{},\n\t\tBlocks: []block{},\n\t}\n\n\treporter.GetInstance().Logf(\"writing data to %s\\n ...\", rb.outputFilepath)\n\tf, err := os.Create(rb.outputFilepath)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer f.Close()\n\n\tcachedData.Metadata.Height = rb.ChainHeight()\n\n\tfor addr, addrResp := range rb.addrIndex {\n\t\ta := address{\n\t\t\tAddress:      addr,\n\t\t\tPath:         addrResp.Address.Path(),\n\t\t\tNetwork:      addrResp.Address.Network(),\n\t\t\tChange:       addrResp.Address.Change(),\n\t\t\tAddressIndex: addrResp.Address.Index(),\n\t\t\tTxHashes:     addrResp.TxHashes,\n\t\t}\n\t\tcachedData.Addresses = append(cachedData.Addresses, a)\n\t}\n\n\tsort.Sort(byAddress(cachedData.Addresses))\n\n\tfor _, txResp := range rb.txIndex {\n\t\ttx := transaction{\n\t\t\tHash:   txResp.Hash,\n\t\t\tHeight: txResp.Height,\n\t\t\tHex:    txResp.Hex,\n\t\t}\n\t\tcachedData.Transactions = append(cachedData.Transactions, tx)\n\t}\n\tsort.Sort(byTransactionID(cachedData.Transactions))\n\n\tfor _, b := range rb.blockIndex {\n\t\tcachedData.Blocks = append(cachedData.Blocks, block{\n\t\t\tHeight:    b.Height,\n\t\t\tTimestamp: b.Timestamp,\n\t\t})\n\t}\n\n\tcachedDataJSON, err := json.MarshalIndent(cachedData, \"\", \"    \")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t_, err = f.Write(cachedDataJSON)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "backend/testdata/nonjsonfixture",
    "content": "SOME DATA THAT'S NOT VALID JSON\n"
  },
  {
    "path": "blockfinder/blockfinder.go",
    "content": "package blockfinder\n\nimport (\n\t\"fmt\"\n\t\"github.com/square/beancounter/backend\"\n\t\"sort\"\n\t\"time\"\n)\n\n// Blockfinder uses the backend to find the last block before a given timestamp.\n// For each block, the block's time is computed by taking the median of the previous  11 blocks.\ntype Blockfinder struct {\n\tblocks         map[uint32]time.Time\n\tbackend        backend.Backend\n\tblockResponses <-chan *backend.BlockResponse\n}\n\n// New instantiates a new Blockfinder\nfunc New(b backend.Backend) *Blockfinder {\n\tbf := &Blockfinder{\n\t\tbackend: b,\n\t}\n\tbf.blocks = make(map[uint32]time.Time)\n\tbf.blockResponses = b.BlockResponses()\n\treturn bf\n}\n\n// Returns block height, block median, block timestamp\nfunc (bf *Blockfinder) Search(timestamp time.Time) (uint32, time.Time, time.Time) {\n\ttarget := timestamp.Unix()\n\n\tmin := uint32(10) // any small number above 5 works\n\tminMedian := bf.searchSync(min)\n\n\t// Use chainheight - 6 (because of min confirmations) - 5 (because of the way we compute median)\n\tmax := bf.backend.ChainHeight() - 11\n\tmaxMedian := bf.searchSync(max)\n\n\tfor max-min > 1 {\n\t\tavg := (max + min) / 2\n\t\tavgTimestamp := bf.searchSync(avg)\n\t\tfmt.Printf(\"min: %d %d, avg: %d %d, max: %d %d, target: %d\\n\",\n\t\t\tmin, minMedian, avg, avgTimestamp, max, maxMedian, target)\n\n\t\tif avgTimestamp < minMedian || avgTimestamp > maxMedian {\n\t\t\tpanic(\"non-monotonic medians\")\n\t\t}\n\n\t\tif target == avgTimestamp {\n\t\t\tmin = avg\n\t\t\tminMedian = avgTimestamp\n\t\t\tbreak\n\t\t} else if target > avgTimestamp {\n\t\t\tmin = avg\n\t\t\tminMedian = avgTimestamp\n\t\t} else {\n\t\t\tmax = avg\n\t\t\tmaxMedian = avgTimestamp\n\t\t}\n\t}\n\n\tbf.backend.BlockRequest(min)\n\tblockHeader := <-bf.blockResponses\n\n\t// Give recorder backend a chance to write the data\n\tbf.backend.Finish()\n\n\treturn min, time.Unix(minMedian, 0), blockHeader.Timestamp\n}\n\n// TODO: cache requests\n// around 283655 is a good test case for this function...\n// We define the median time as the median of time timestamps from 5 blocks before and 5 blocks\n// after. We have to pick a total of 11 blocks, because that's how the validation rule is defined.\n// (https://en.bitcoin.it/wiki/Block_timestamp, https://github.com/bitcoin/bitcoin/blob/0.17/src/chain.h#L307)\n// but we don't have to do the previous 11. Any consecutive 11 blocks has monotonic medians. By looking\n// at the previous 5 and next 5, we reduce the delta between the block time displayed on a website\n// such as live.blockcypher.com and the median we compute. It makes things less confusing for people\n// who might not understand why we need to look at the median.\nfunc (bf *Blockfinder) searchSync(height uint32) int64 {\n\tfor i := height - 5; i <= (height + 5); i++ {\n\t\tbf.backend.BlockRequest(i)\n\t}\n\ttimestamps := []int64{}\n\tfor i := 0; i < 11; i++ {\n\t\tblockHeader := <-bf.blockResponses\n\t\ttimestamps = append(timestamps, blockHeader.Timestamp.Unix())\n\t}\n\tsort.Slice(timestamps, func(i, j int) bool { return timestamps[i] < timestamps[j] })\n\treturn timestamps[5]\n}\n"
  },
  {
    "path": "blockfinder/blockfinder_test.go",
    "content": "package blockfinder\n\nimport (\n\t\"github.com/square/beancounter/backend\"\n\t\"github.com/stretchr/testify/assert\"\n\t\"testing\"\n\t\"time\"\n)\n\nfunc TestFindBLock(t *testing.T) {\n\tb, err := backend.NewFixtureBackend(\"../fixtures/blocks.json\")\n\tassert.NoError(t, err)\n\n\tbf := New(b)\n\theight, median, timestamp := bf.Search(time.Unix(1533153600, 0))\n\n\tassert.Equal(t, height, uint32(534733))\n\tassert.Equal(t, median.Unix(), int64(1533152846))\n\tassert.Equal(t, timestamp.Unix(), int64(1533152846))\n}\n"
  },
  {
    "path": "deriver/address_deriver.go",
    "content": "package deriver\n\nimport (\n\t\"bytes\"\n\t\"crypto/sha256\"\n\t\"encoding/hex\"\n\t\"fmt\"\n\t\"log\"\n\t\"sort\"\n\n\t\"github.com/btcsuite/btcd/txscript\"\n\t\"github.com/btcsuite/btcutil\"\n\t\"github.com/btcsuite/btcutil/hdkeychain\"\n\n\t. \"github.com/square/beancounter/utils\"\n)\n\n// AddressDeriver is a struct that contains necessary information to derive\n// an address from a given extended public key (or list of public keys).\n// It follows the conventions as written in BIP32\n// // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#serialization-format\ntype AddressDeriver struct {\n\tnetwork       Network\n\txpubs         []string\n\tm             int\n\tsingleAddress string\n}\n\n// Address wraps a simple wallet address.\n// It contains information such as network type (e.g. mainnet or testnet), derivation\n// path (e.g. m/0/0/123/50), change value and address index.\ntype Address struct {\n\tpath      string\n\taddr      string\n\tnet       Network\n\tchange    uint32\n\taddrIndex uint32\n}\n\n// NewAddress creates a new instance of Address, given network, derivation path,\n// change value and address index.\nfunc NewAddress(path, addr string, net Network, change, addrIndex uint32) *Address {\n\treturn &Address{path: path, addr: addr, net: net, change: change, addrIndex: addrIndex}\n}\n\n// Path returns derivation path\nfunc (a *Address) Path() string {\n\treturn a.path\n}\n\n// String returns the address as string\nfunc (a *Address) String() string {\n\treturn a.addr\n}\n\n// Change returns the change value (so 0 or 1)\nfunc (a *Address) Change() uint32 {\n\treturn a.change\n}\n\n// Index returns the address index\nfunc (a *Address) Index() uint32 {\n\treturn a.addrIndex\n}\n\nfunc (a *Address) Network() Network {\n\treturn a.net\n}\n\nfunc (a *Address) Address() btcutil.Address {\n\taddress, err := btcutil.DecodeAddress(a.addr, a.net.ChainConfig())\n\tif err != nil {\n\t\tpanic(\"failed to decode address\")\n\t}\n\n\treturn address\n}\n\n// TODO: might be more efficient to store the script in the struct.\nfunc (a *Address) Script() string {\n\taddress := a.Address()\n\tscript, err := txscript.PayToAddrScript(address)\n\tif err != nil {\n\t\tpanic(\"failed to encode script\")\n\t}\n\treturn hex.EncodeToString(script)\n}\n\n// NewAddressDeriver returns a new instance of AddressDeriver\nfunc NewAddressDeriver(network Network, xpubs []string, m int, singleAddress string) *AddressDeriver {\n\treturn &AddressDeriver{\n\t\tnetwork:       network,\n\t\txpubs:         xpubs,\n\t\tm:             m,\n\t\tsingleAddress: singleAddress,\n\t}\n}\n\n// Derive dervives an address for given change and address index.\n// It supports derivation using single extended public key and multisig + segwit.\nfunc (d *AddressDeriver) Derive(change uint32, addressIndex uint32) *Address {\n\tif d.singleAddress != \"\" {\n\t\treturn &Address{\n\t\t\tpath:      \"n/a\",\n\t\t\taddr:      d.singleAddress,\n\t\t\tnet:       d.network,\n\t\t\tchange:    0,\n\t\t\taddrIndex: 0,\n\t\t}\n\t}\n\n\tpath := fmt.Sprintf(\"m/.../%d/%d\", change, addressIndex)\n\taddr := &Address{path: path, net: d.network, change: change, addrIndex: addressIndex}\n\tif len(d.xpubs) == 1 {\n\t\taddr.addr = d.singleDerive(change, addressIndex)\n\t\treturn addr\n\t}\n\taddr.addr = d.multiSigSegwitDerive(change, addressIndex)\n\treturn addr\n}\n\n// singleDerive performs a derivation using a single extended public key\nfunc (d *AddressDeriver) singleDerive(change uint32, addressIndex uint32) string {\n\tkey, err := hdkeychain.NewKeyFromString(d.xpubs[0])\n\tPanicOnError(err)\n\n\tkey, err = key.Child(change)\n\tPanicOnError(err)\n\n\tkey, err = key.Child(addressIndex)\n\tPanicOnError(err)\n\n\tpubKey, err := key.Address(d.network.ChainConfig())\n\tPanicOnError(err)\n\n\treturn pubKey.String()\n}\n\n// multiSigSegwitDerive performs a multisig + segwit derivation.\nfunc (d *AddressDeriver) multiSigSegwitDerive(change uint32, addressIndex uint32) string {\n\tpubKeysBytes := make([][]byte, 0, len(d.xpubs))\n\tpubKeys := make([]*btcutil.AddressPubKey, 0, len(d.xpubs))\n\n\tfor _, xpub := range d.xpubs {\n\t\tkey, err := hdkeychain.NewKeyFromString(xpub)\n\t\tPanicOnError(err)\n\n\t\tkey, err = key.Child(change)\n\t\tPanicOnError(err)\n\n\t\tkey, err = key.Child(addressIndex)\n\t\tPanicOnError(err)\n\n\t\tpubKey, err := key.ECPubKey()\n\t\tPanicOnError(err)\n\n\t\tpubKeyBytes := pubKey.SerializeCompressed()\n\t\tif len(pubKeyBytes) != 33 {\n\t\t\tlog.Panicf(\"expected pubkey length 33, got %d\", len(pubKeyBytes))\n\t\t}\n\n\t\tpubKeysBytes = append(pubKeysBytes, pubKeyBytes)\n\n\t\tsortByteArrays(pubKeysBytes)\n\t}\n\n\tfor _, pubKeyBytes := range pubKeysBytes {\n\t\tkey, err := btcutil.NewAddressPubKey(pubKeyBytes, d.network.ChainConfig())\n\t\tPanicOnError(err)\n\t\tpubKeys = append(pubKeys, key)\n\t}\n\n\tmultiSigScript, err := txscript.MultiSigScript(pubKeys, d.m)\n\tPanicOnError(err)\n\n\tsha := sha256.Sum256(multiSigScript)\n\n\tsegWitScriptBuilder := txscript.NewScriptBuilder()\n\tsegWitScriptBuilder.AddOp(txscript.OP_0)\n\tsegWitScriptBuilder.AddData(sha[:])\n\tsegWitScript, err := segWitScriptBuilder.Script()\n\tPanicOnError(err)\n\n\taddrScriptHash, err := btcutil.NewAddressScriptHash(segWitScript, d.network.ChainConfig())\n\tPanicOnError(err)\n\n\treturn addrScriptHash.EncodeAddress()\n}\n\n// implement `Interface` in sort package.\ntype sortedByteArrays [][]byte\n\nfunc (b sortedByteArrays) Len() int {\n\treturn len(b)\n}\n\nfunc (b sortedByteArrays) Less(i, j int) bool {\n\t// bytes package already implements Comparable for []byte.\n\tswitch bytes.Compare(b[i], b[j]) {\n\tcase -1:\n\t\treturn true\n\tcase 0, 1:\n\t\treturn false\n\tdefault:\n\t\tlog.Panic(\"not fail-able with `bytes.Comparable` bounded [-1, 1].\")\n\t\treturn false\n\t}\n}\n\nfunc (b sortedByteArrays) Swap(i, j int) {\n\tb[j], b[i] = b[i], b[j]\n}\n\nfunc sortByteArrays(src [][]byte) [][]byte {\n\tsorted := sortedByteArrays(src)\n\tsort.Sort(sorted)\n\treturn sorted\n}\n"
  },
  {
    "path": "deriver/address_deriver_test.go",
    "content": "package deriver\n\nimport (\n\t\"testing\"\n\n\t. \"github.com/square/beancounter/utils\"\n\t\"github.com/stretchr/testify/assert\"\n)\n\nfunc TestAddress(t *testing.T) {\n\tderiver := NewAddressDeriver(Mainnet, []string{\"xpub6CjzRxucHWJbmtuNTg6EjPax3V75AhsBRnFKn8MEkc8UFFEhrCoWcQN6oUBhfZWoFKqTyQ21iNVK8KMbC44ifW25uyXaMPWkRtpwcbAWXJx\"}, 1, \"\")\n\taddr := deriver.Derive(0, 5)\n\tassert.Equal(t, addr.Path(), \"m/.../0/5\")\n\tassert.Equal(t, addr.String(), \"1N4VBTZqwLkHEKX79kjJ1WaYvX4c3txioz\")\n\tassert.Equal(t, addr.Change(), uint32(0))\n\tassert.Equal(t, addr.Index(), uint32(5))\n\tassert.Equal(t, addr.Network(), Mainnet)\n\tassert.Equal(t, addr.Script(), \"76a914e70369bfda4ba9bdcbb96cfd269a768573d0624c88ac\")\n}\n\nfunc TestDeriveMultiSigSegwit(t *testing.T) {\n\txpubs := []string{\n\t\t\"tpubDAiPiLZeUdwo9oJiE9GZnteXj2E2MEMUb4knc4yCD87bL9siDgYcvrZSHZQZcYTyraL3fxVBRCcMiyfr3oQfH1wNo8J5i8aRAN56dDXaZxC\",\n\t\t\"tpubDBYBpkSfvt9iVSfdX2ArZq1Q8bVSro3sotbJhdZCG9rgfjdr4aZp7g7AF1P9w95X5fzuJzdZAqYWWU7nb37c594wR22hPY5VpYziXUN2yez\",\n\t\t\"tpubDAaTEMnf9SPKJweLaptFdy3Vmyhim5DKQxXRbsCxmAaUp8F84YD5GhdfmABwLddjHTftSVvUPuSru6vJ3b5N2hBveiGmZNE5N5yvB6WZ96c\",\n\t\t\"tpubDAXKYCetkje8HRRhAvUbAyuC5iF3SgfFWCVXfmrGCw3H9ExCYZVTEoeg7TjtDhgkS7TNHDRZUQNzGACWVzZCAYXy79vqku5z1geYmnsNLaa\",\n\t}\n\tderiver := NewAddressDeriver(Testnet, xpubs, 2, \"\")\n\tassert.Equal(t, \"2N4TmnHspa8wqFEUfxfjzHoSUAgwoUwNWhr\", deriver.Derive(0, 0).String())\n}\n\nfunc TestDeriveGateway(t *testing.T) {\n\txpubs := []string{\n\t\t\"tpubDBrCAXucLxvjC9n9nZGGcYS8pk4X1N97YJmUgdDSwG2p36gbSqeRuytHYCHe2dHxLsV2EchX9ePaFdRwp7cNLrSpnr3PsoPLUQqbvLBDWvh\",\n\t}\n\tderiver := NewAddressDeriver(Testnet, xpubs, 1, \"\")\n\tassert.Equal(t, \"mzoeuyGqMudyvKbkNx5dtNBNN59oKEAsPn\", deriver.Derive(0, 0).String())\n\tassert.Equal(t, \"moHN13u4RoMxujdaPxvuaTaawgWZ3LaGyo\", deriver.Derive(1, 0).String())\n}\n"
  },
  {
    "path": "fixtures/blocks.json",
    "content": "{\n    \"metadata\": {\n        \"height\": 546110\n    },\n    \"addresses\": [],\n    \"transactions\": [],\n    \"blocks\": [\n        {\n            \"height\": 533300,\n            \"timestamp\": \"2018-07-23T09:00:55-07:00\"\n        },\n        {\n            \"height\": 533296,\n            \"timestamp\": \"2018-07-23T08:42:44-07:00\"\n        },\n        {\n            \"height\": 534731,\n            \"timestamp\": \"2018-08-01T12:35:25-07:00\"\n        },\n        {\n            \"height\": 534728,\n            \"timestamp\": \"2018-08-01T11:59:43-07:00\"\n        },\n        {\n            \"height\": 546094,\n            \"timestamp\": \"2018-10-16T20:21:33-07:00\"\n        },\n        {\n            \"height\": 533295,\n            \"timestamp\": \"2018-07-23T08:42:08-07:00\"\n        },\n        {\n            \"height\": 535435,\n            \"timestamp\": \"2018-08-05T19:32:32-07:00\"\n        },\n        {\n            \"height\": 534700,\n            \"timestamp\": \"2018-08-01T07:03:39-07:00\"\n        },\n        {\n            \"height\": 534725,\n            \"timestamp\": \"2018-08-01T11:22:00-07:00\"\n        },\n        {\n            \"height\": 477837,\n            \"timestamp\": \"2017-07-27T11:31:50-07:00\"\n        },\n        {\n            \"height\": 537568,\n            \"timestamp\": \"2018-08-19T16:58:47-07:00\"\n        },\n        {\n            \"height\": 537570,\n            \"timestamp\": \"2018-08-19T17:06:00-07:00\"\n        },\n        {\n            \"height\": 533294,\n            \"timestamp\": \"2018-07-23T08:27:11-07:00\"\n        },\n        {\n            \"height\": 15,\n            \"timestamp\": \"2009-01-09T20:45:46-08:00\"\n        },\n        {\n            \"height\": 409575,\n            \"timestamp\": \"2016-04-30T06:44:47-07:00\"\n        },\n        {\n            \"height\": 477839,\n            \"timestamp\": \"2017-07-27T11:34:11-07:00\"\n        },\n        {\n            \"height\": 511966,\n            \"timestamp\": \"2018-03-04T05:44:23-08:00\"\n        },\n        {\n            \"height\": 529029,\n            \"timestamp\": \"2018-06-24T06:48:56-07:00\"\n        },\n        {\n            \"height\": 534367,\n            \"timestamp\": \"2018-07-30T01:02:11-07:00\"\n        },\n        {\n            \"height\": 534763,\n            \"timestamp\": \"2018-08-01T17:07:00-07:00\"\n        },\n        {\n            \"height\": 534635,\n            \"timestamp\": \"2018-07-31T20:13:52-07:00\"\n        },\n        {\n            \"height\": 477834,\n            \"timestamp\": \"2017-07-27T11:04:27-07:00\"\n        },\n        {\n            \"height\": 511973,\n            \"timestamp\": \"2018-03-04T06:26:10-08:00\"\n        },\n        {\n            \"height\": 511965,\n            \"timestamp\": \"2018-03-04T05:41:02-08:00\"\n        },\n        {\n            \"height\": 533301,\n            \"timestamp\": \"2018-07-23T09:07:43-07:00\"\n        },\n        {\n            \"height\": 533304,\n            \"timestamp\": \"2018-07-23T10:14:47-07:00\"\n        },\n        {\n            \"height\": 535436,\n            \"timestamp\": \"2018-08-05T20:18:18-07:00\"\n        },\n        {\n            \"height\": 534630,\n            \"timestamp\": \"2018-07-31T19:05:01-07:00\"\n        },\n        {\n            \"height\": 5,\n            \"timestamp\": \"2009-01-08T19:23:48-08:00\"\n        },\n        {\n            \"height\": 273054,\n            \"timestamp\": \"2013-12-04T09:16:15-08:00\"\n        },\n        {\n            \"height\": 529035,\n            \"timestamp\": \"2018-06-24T07:55:41-07:00\"\n        },\n        {\n            \"height\": 537563,\n            \"timestamp\": \"2018-08-19T16:00:28-07:00\"\n        },\n        {\n            \"height\": 534745,\n            \"timestamp\": \"2018-08-01T15:24:37-07:00\"\n        },\n        {\n            \"height\": 534736,\n            \"timestamp\": \"2018-08-01T13:20:08-07:00\"\n        },\n        {\n            \"height\": 477838,\n            \"timestamp\": \"2017-07-27T11:32:53-07:00\"\n        },\n        {\n            \"height\": 511971,\n            \"timestamp\": \"2018-03-04T06:19:56-08:00\"\n        },\n        {\n            \"height\": 535428,\n            \"timestamp\": \"2018-08-05T18:55:22-07:00\"\n        },\n        {\n            \"height\": 534896,\n            \"timestamp\": \"2018-08-02T13:07:07-07:00\"\n        },\n        {\n            \"height\": 534694,\n            \"timestamp\": \"2018-08-01T05:59:06-07:00\"\n        },\n        {\n            \"height\": 534730,\n            \"timestamp\": \"2018-08-01T12:25:35-07:00\"\n        },\n        {\n            \"height\": 534767,\n            \"timestamp\": \"2018-08-01T17:27:13-07:00\"\n        },\n        {\n            \"height\": 546096,\n            \"timestamp\": \"2018-10-16T20:51:12-07:00\"\n        },\n        {\n            \"height\": 546099,\n            \"timestamp\": \"2018-10-16T21:30:25-07:00\"\n        },\n        {\n            \"height\": 409581,\n            \"timestamp\": \"2016-04-30T07:30:26-07:00\"\n        },\n        {\n            \"height\": 529031,\n            \"timestamp\": \"2018-06-24T07:17:08-07:00\"\n        },\n        {\n            \"height\": 534370,\n            \"timestamp\": \"2018-07-30T01:14:58-07:00\"\n        },\n        {\n            \"height\": 534631,\n            \"timestamp\": \"2018-07-31T19:18:04-07:00\"\n        },\n        {\n            \"height\": 534632,\n            \"timestamp\": \"2018-07-31T19:36:14-07:00\"\n        },\n        {\n            \"height\": 534699,\n            \"timestamp\": \"2018-08-01T06:52:11-07:00\"\n        },\n        {\n            \"height\": 534749,\n            \"timestamp\": \"2018-08-01T15:44:22-07:00\"\n        },\n        {\n            \"height\": 6,\n            \"timestamp\": \"2009-01-08T19:29:49-08:00\"\n        },\n        {\n            \"height\": 409580,\n            \"timestamp\": \"2016-04-30T07:13:46-07:00\"\n        },\n        {\n            \"height\": 529033,\n            \"timestamp\": \"2018-06-24T07:35:37-07:00\"\n        },\n        {\n            \"height\": 534366,\n            \"timestamp\": \"2018-07-30T00:12:54-07:00\"\n        },\n        {\n            \"height\": 534744,\n            \"timestamp\": \"2018-08-01T15:20:00-07:00\"\n        },\n        {\n            \"height\": 546095,\n            \"timestamp\": \"2018-10-16T20:31:45-07:00\"\n        },\n        {\n            \"height\": 409574,\n            \"timestamp\": \"2016-04-30T06:43:18-07:00\"\n        },\n        {\n            \"height\": 273050,\n            \"timestamp\": \"2013-12-04T08:27:28-08:00\"\n        },\n        {\n            \"height\": 511964,\n            \"timestamp\": \"2018-03-04T05:36:00-08:00\"\n        },\n        {\n            \"height\": 533298,\n            \"timestamp\": \"2018-07-23T08:49:32-07:00\"\n        },\n        {\n            \"height\": 534368,\n            \"timestamp\": \"2018-07-30T01:02:53-07:00\"\n        },\n        {\n            \"height\": 534369,\n            \"timestamp\": \"2018-07-30T01:07:40-07:00\"\n        },\n        {\n            \"height\": 534693,\n            \"timestamp\": \"2018-08-01T05:47:26-07:00\"\n        },\n        {\n            \"height\": 534743,\n            \"timestamp\": \"2018-08-01T15:04:47-07:00\"\n        },\n        {\n            \"height\": 534894,\n            \"timestamp\": \"2018-08-02T12:51:43-07:00\"\n        },\n        {\n            \"height\": 10,\n            \"timestamp\": \"2009-01-08T20:05:52-08:00\"\n        },\n        {\n            \"height\": 546104,\n            \"timestamp\": \"2018-10-16T22:30:25-07:00\"\n        },\n        {\n            \"height\": 273058,\n            \"timestamp\": \"2013-12-04T09:55:46-08:00\"\n        },\n        {\n            \"height\": 511970,\n            \"timestamp\": \"2018-03-04T06:08:35-08:00\"\n        },\n        {\n            \"height\": 529030,\n            \"timestamp\": \"2018-06-24T07:16:42-07:00\"\n        },\n        {\n            \"height\": 535429,\n            \"timestamp\": \"2018-08-05T19:00:45-07:00\"\n        },\n        {\n            \"height\": 534365,\n            \"timestamp\": \"2018-07-30T00:09:57-07:00\"\n        },\n        {\n            \"height\": 534636,\n            \"timestamp\": \"2018-07-31T20:19:27-07:00\"\n        },\n        {\n            \"height\": 537569,\n            \"timestamp\": \"2018-08-19T17:04:08-07:00\"\n        },\n        {\n            \"height\": 535431,\n            \"timestamp\": \"2018-08-05T19:06:24-07:00\"\n        },\n        {\n            \"height\": 9,\n            \"timestamp\": \"2009-01-08T19:54:39-08:00\"\n        },\n        {\n            \"height\": 546098,\n            \"timestamp\": \"2018-10-16T21:10:28-07:00\"\n        },\n        {\n            \"height\": 546100,\n            \"timestamp\": \"2018-10-16T21:31:23-07:00\"\n        },\n        {\n            \"height\": 273051,\n            \"timestamp\": \"2013-12-04T08:24:52-08:00\"\n        },\n        {\n            \"height\": 535432,\n            \"timestamp\": \"2018-08-05T19:12:26-07:00\"\n        },\n        {\n            \"height\": 14,\n            \"timestamp\": \"2009-01-08T20:33:09-08:00\"\n        },\n        {\n            \"height\": 546103,\n            \"timestamp\": \"2018-10-16T22:04:23-07:00\"\n        },\n        {\n            \"height\": 534363,\n            \"timestamp\": \"2018-07-29T23:52:13-07:00\"\n        },\n        {\n            \"height\": 534903,\n            \"timestamp\": \"2018-08-02T14:48:04-07:00\"\n        },\n        {\n            \"height\": 534762,\n            \"timestamp\": \"2018-08-01T16:50:36-07:00\"\n        },\n        {\n            \"height\": 534761,\n            \"timestamp\": \"2018-08-01T16:47:23-07:00\"\n        },\n        {\n            \"height\": 529037,\n            \"timestamp\": \"2018-06-24T08:02:00-07:00\"\n        },\n        {\n            \"height\": 534627,\n            \"timestamp\": \"2018-07-31T18:39:49-07:00\"\n        },\n        {\n            \"height\": 534741,\n            \"timestamp\": \"2018-08-01T14:32:19-07:00\"\n        },\n        {\n            \"height\": 534752,\n            \"timestamp\": \"2018-08-01T16:09:06-07:00\"\n        },\n        {\n            \"height\": 12,\n            \"timestamp\": \"2009-01-08T20:21:28-08:00\"\n        },\n        {\n            \"height\": 409577,\n            \"timestamp\": \"2016-04-30T06:52:32-07:00\"\n        },\n        {\n            \"height\": 529034,\n            \"timestamp\": \"2018-06-24T07:37:17-07:00\"\n        },\n        {\n            \"height\": 535430,\n            \"timestamp\": \"2018-08-05T19:05:15-07:00\"\n        },\n        {\n            \"height\": 534897,\n            \"timestamp\": \"2018-08-02T13:10:34-07:00\"\n        },\n        {\n            \"height\": 534902,\n            \"timestamp\": \"2018-08-02T14:31:21-07:00\"\n        },\n        {\n            \"height\": 534629,\n            \"timestamp\": \"2018-07-31T19:04:21-07:00\"\n        },\n        {\n            \"height\": 534361,\n            \"timestamp\": \"2018-07-29T23:30:51-07:00\"\n        },\n        {\n            \"height\": 409571,\n            \"timestamp\": \"2016-04-30T06:35:06-07:00\"\n        },\n        {\n            \"height\": 409576,\n            \"timestamp\": \"2016-04-30T06:48:53-07:00\"\n        },\n        {\n            \"height\": 477835,\n            \"timestamp\": \"2017-07-27T11:10:14-07:00\"\n        },\n        {\n            \"height\": 529032,\n            \"timestamp\": \"2018-06-24T07:35:10-07:00\"\n        },\n        {\n            \"height\": 529036,\n            \"timestamp\": \"2018-06-24T08:00:07-07:00\"\n        },\n        {\n            \"height\": 535427,\n            \"timestamp\": \"2018-08-05T18:44:40-07:00\"\n        },\n        {\n            \"height\": 534362,\n            \"timestamp\": \"2018-07-29T23:47:30-07:00\"\n        },\n        {\n            \"height\": 534628,\n            \"timestamp\": \"2018-07-31T18:52:59-07:00\"\n        },\n        {\n            \"height\": 534733,\n            \"timestamp\": \"2018-08-01T12:47:26-07:00\"\n        },\n        {\n            \"height\": 273053,\n            \"timestamp\": \"2013-12-04T09:01:05-08:00\"\n        },\n        {\n            \"height\": 273055,\n            \"timestamp\": \"2013-12-04T09:20:58-08:00\"\n        },\n        {\n            \"height\": 409572,\n            \"timestamp\": \"2016-04-30T06:35:43-07:00\"\n        },\n        {\n            \"height\": 477832,\n            \"timestamp\": \"2017-07-27T10:23:10-07:00\"\n        },\n        {\n            \"height\": 534898,\n            \"timestamp\": \"2018-08-02T13:15:23-07:00\"\n        },\n        {\n            \"height\": 534747,\n            \"timestamp\": \"2018-08-01T15:37:52-07:00\"\n        },\n        {\n            \"height\": 273049,\n            \"timestamp\": \"2013-12-04T08:15:47-08:00\"\n        },\n        {\n            \"height\": 477833,\n            \"timestamp\": \"2017-07-27T10:27:18-07:00\"\n        },\n        {\n            \"height\": 477841,\n            \"timestamp\": \"2017-07-27T12:03:49-07:00\"\n        },\n        {\n            \"height\": 511972,\n            \"timestamp\": \"2018-03-04T06:25:39-08:00\"\n        },\n        {\n            \"height\": 533299,\n            \"timestamp\": \"2018-07-23T08:55:38-07:00\"\n        },\n        {\n            \"height\": 534901,\n            \"timestamp\": \"2018-08-02T14:29:22-07:00\"\n        },\n        {\n            \"height\": 534702,\n            \"timestamp\": \"2018-08-01T07:15:54-07:00\"\n        },\n        {\n            \"height\": 534739,\n            \"timestamp\": \"2018-08-01T14:10:26-07:00\"\n        },\n        {\n            \"height\": 546097,\n            \"timestamp\": \"2018-10-16T20:52:28-07:00\"\n        },\n        {\n            \"height\": 409578,\n            \"timestamp\": \"2016-04-30T06:55:24-07:00\"\n        },\n        {\n            \"height\": 534364,\n            \"timestamp\": \"2018-07-30T00:06:22-07:00\"\n        },\n        {\n            \"height\": 534698,\n            \"timestamp\": \"2018-08-01T06:37:12-07:00\"\n        },\n        {\n            \"height\": 534740,\n            \"timestamp\": \"2018-08-01T14:16:36-07:00\"\n        },\n        {\n            \"height\": 409579,\n            \"timestamp\": \"2016-04-30T07:08:07-07:00\"\n        },\n        {\n            \"height\": 511967,\n            \"timestamp\": \"2018-03-04T05:53:30-08:00\"\n        },\n        {\n            \"height\": 537564,\n            \"timestamp\": \"2018-08-19T16:27:17-07:00\"\n        },\n        {\n            \"height\": 534633,\n            \"timestamp\": \"2018-07-31T19:47:39-07:00\"\n        },\n        {\n            \"height\": 534759,\n            \"timestamp\": \"2018-08-01T16:42:56-07:00\"\n        },\n        {\n            \"height\": 534732,\n            \"timestamp\": \"2018-08-01T12:40:59-07:00\"\n        },\n        {\n            \"height\": 534742,\n            \"timestamp\": \"2018-08-01T14:42:33-07:00\"\n        },\n        {\n            \"height\": 534692,\n            \"timestamp\": \"2018-08-01T05:43:04-07:00\"\n        },\n        {\n            \"height\": 529038,\n            \"timestamp\": \"2018-06-24T08:02:19-07:00\"\n        },\n        {\n            \"height\": 537571,\n            \"timestamp\": \"2018-08-19T17:06:50-07:00\"\n        },\n        {\n            \"height\": 533303,\n            \"timestamp\": \"2018-07-23T09:51:22-07:00\"\n        },\n        {\n            \"height\": 533297,\n            \"timestamp\": \"2018-07-23T08:43:54-07:00\"\n        },\n        {\n            \"height\": 534626,\n            \"timestamp\": \"2018-07-31T18:35:58-07:00\"\n        },\n        {\n            \"height\": 534764,\n            \"timestamp\": \"2018-08-01T17:14:46-07:00\"\n        },\n        {\n            \"height\": 534760,\n            \"timestamp\": \"2018-08-01T16:45:41-07:00\"\n        },\n        {\n            \"height\": 534735,\n            \"timestamp\": \"2018-08-01T13:12:26-07:00\"\n        },\n        {\n            \"height\": 11,\n            \"timestamp\": \"2009-01-08T20:12:40-08:00\"\n        },\n        {\n            \"height\": 534748,\n            \"timestamp\": \"2018-08-01T15:39:54-07:00\"\n        },\n        {\n            \"height\": 537565,\n            \"timestamp\": \"2018-08-19T16:37:35-07:00\"\n        },\n        {\n            \"height\": 533302,\n            \"timestamp\": \"2018-07-23T09:50:01-07:00\"\n        },\n        {\n            \"height\": 534893,\n            \"timestamp\": \"2018-08-02T12:50:04-07:00\"\n        },\n        {\n            \"height\": 534738,\n            \"timestamp\": \"2018-08-01T13:45:07-07:00\"\n        },\n        {\n            \"height\": 535437,\n            \"timestamp\": \"2018-08-05T20:39:44-07:00\"\n        },\n        {\n            \"height\": 534634,\n            \"timestamp\": \"2018-07-31T20:13:39-07:00\"\n        },\n        {\n            \"height\": 534766,\n            \"timestamp\": \"2018-08-01T17:25:16-07:00\"\n        },\n        {\n            \"height\": 534696,\n            \"timestamp\": \"2018-08-01T06:21:54-07:00\"\n        },\n        {\n            \"height\": 534701,\n            \"timestamp\": \"2018-08-01T07:12:46-07:00\"\n        },\n        {\n            \"height\": 534695,\n            \"timestamp\": \"2018-08-01T06:10:36-07:00\"\n        },\n        {\n            \"height\": 534751,\n            \"timestamp\": \"2018-08-01T15:57:39-07:00\"\n        },\n        {\n            \"height\": 534697,\n            \"timestamp\": \"2018-08-01T06:31:33-07:00\"\n        },\n        {\n            \"height\": 546101,\n            \"timestamp\": \"2018-10-16T21:39:58-07:00\"\n        },\n        {\n            \"height\": 273059,\n            \"timestamp\": \"2013-12-04T10:11:46-08:00\"\n        },\n        {\n            \"height\": 477836,\n            \"timestamp\": \"2017-07-27T11:16:54-07:00\"\n        },\n        {\n            \"height\": 511969,\n            \"timestamp\": \"2018-03-04T05:57:00-08:00\"\n        },\n        {\n            \"height\": 537567,\n            \"timestamp\": \"2018-08-19T16:56:45-07:00\"\n        },\n        {\n            \"height\": 534895,\n            \"timestamp\": \"2018-08-02T13:04:53-07:00\"\n        },\n        {\n            \"height\": 534765,\n            \"timestamp\": \"2018-08-01T17:20:59-07:00\"\n        },\n        {\n            \"height\": 8,\n            \"timestamp\": \"2009-01-08T19:45:43-08:00\"\n        },\n        {\n            \"height\": 477840,\n            \"timestamp\": \"2017-07-27T11:51:16-07:00\"\n        },\n        {\n            \"height\": 534900,\n            \"timestamp\": \"2018-08-02T14:20:52-07:00\"\n        },\n        {\n            \"height\": 534729,\n            \"timestamp\": \"2018-08-01T12:00:36-07:00\"\n        },\n        {\n            \"height\": 534737,\n            \"timestamp\": \"2018-08-01T13:41:56-07:00\"\n        },\n        {\n            \"height\": 409573,\n            \"timestamp\": \"2016-04-30T06:37:41-07:00\"\n        },\n        {\n            \"height\": 535433,\n            \"timestamp\": \"2018-08-05T19:12:38-07:00\"\n        },\n        {\n            \"height\": 535434,\n            \"timestamp\": \"2018-08-05T19:24:21-07:00\"\n        },\n        {\n            \"height\": 534360,\n            \"timestamp\": \"2018-07-29T23:22:24-07:00\"\n        },\n        {\n            \"height\": 534734,\n            \"timestamp\": \"2018-08-01T13:10:35-07:00\"\n        },\n        {\n            \"height\": 534726,\n            \"timestamp\": \"2018-08-01T11:45:10-07:00\"\n        },\n        {\n            \"height\": 534750,\n            \"timestamp\": \"2018-08-01T15:55:44-07:00\"\n        },\n        {\n            \"height\": 534727,\n            \"timestamp\": \"2018-08-01T11:47:16-07:00\"\n        },\n        {\n            \"height\": 7,\n            \"timestamp\": \"2009-01-08T19:39:29-08:00\"\n        },\n        {\n            \"height\": 273057,\n            \"timestamp\": \"2013-12-04T09:53:04-08:00\"\n        },\n        {\n            \"height\": 477842,\n            \"timestamp\": \"2017-07-27T12:11:49-07:00\"\n        },\n        {\n            \"height\": 529028,\n            \"timestamp\": \"2018-06-24T06:47:19-07:00\"\n        },\n        {\n            \"height\": 537566,\n            \"timestamp\": \"2018-08-19T16:38:25-07:00\"\n        },\n        {\n            \"height\": 537562,\n            \"timestamp\": \"2018-08-19T15:58:05-07:00\"\n        },\n        {\n            \"height\": 534768,\n            \"timestamp\": \"2018-08-01T17:29:09-07:00\"\n        },\n        {\n            \"height\": 273052,\n            \"timestamp\": \"2013-12-04T08:54:08-08:00\"\n        },\n        {\n            \"height\": 273056,\n            \"timestamp\": \"2013-12-04T09:44:34-08:00\"\n        },\n        {\n            \"height\": 511963,\n            \"timestamp\": \"2018-03-04T05:32:35-08:00\"\n        },\n        {\n            \"height\": 511968,\n            \"timestamp\": \"2018-03-04T05:56:25-08:00\"\n        },\n        {\n            \"height\": 13,\n            \"timestamp\": \"2009-01-08T20:23:40-08:00\"\n        },\n        {\n            \"height\": 546102,\n            \"timestamp\": \"2018-10-16T21:50:43-07:00\"\n        },\n        {\n            \"height\": 537561,\n            \"timestamp\": \"2018-08-19T14:55:35-07:00\"\n        },\n        {\n            \"height\": 534899,\n            \"timestamp\": \"2018-08-02T13:42:25-07:00\"\n        },\n        {\n            \"height\": 534769,\n            \"timestamp\": \"2018-08-01T17:41:17-07:00\"\n        },\n        {\n            \"height\": 534746,\n            \"timestamp\": \"2018-08-01T15:37:21-07:00\"\n        }\n    ]\n}\n"
  },
  {
    "path": "go.mod",
    "content": "module github.com/square/beancounter\n\ngo 1.12\n\nrequire (\n\tgithub.com/Masterminds/semver v1.5.0\n\tgithub.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc // indirect\n\tgithub.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf // indirect\n\tgithub.com/bcext/cashutil v0.0.0-20180827115045-9ba6cf292283\n\tgithub.com/bcext/gcash v0.0.0-20180921133405-3f4b56493047 // indirect\n\tgithub.com/btcsuite/btcd v0.0.0-20180924021209-2a560b2036be\n\tgithub.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f // indirect\n\tgithub.com/btcsuite/btcutil v0.0.0-20180706230648-ab6388e0c60a\n\tgithub.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd // indirect\n\tgithub.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792 // indirect\n\tgithub.com/davecgh/go-spew v1.1.1 // indirect\n\tgithub.com/pkg/errors v0.9.1\n\tgithub.com/stretchr/testify v1.7.0\n\tgolang.org/x/crypto v0.0.0-20181001203147-e3636079e1a4 // indirect\n\tgopkg.in/alecthomas/kingpin.v2 v2.2.6\n)\n"
  },
  {
    "path": "go.sum",
    "content": "github.com/Masterminds/semver v1.4.2 h1:WBLTQ37jOCzSLtXNdoo8bNM8876KhNqOKvrlGITgsTc=\ngithub.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=\ngithub.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww=\ngithub.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=\ngithub.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc h1:cAKDfWh5VpdgMhJosfJnn5/FoN2SRZ4p7fJNX58YPaU=\ngithub.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=\ngithub.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf h1:qet1QNfXsQxTZqLG4oE62mJzwPIB8+Tee4RNCL9ulrY=\ngithub.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=\ngithub.com/bcext/cashutil v0.0.0-20180827115045-9ba6cf292283 h1:0hMQc60qr863KJpTHigR0JZSprqczuDuRYXuKYycp/c=\ngithub.com/bcext/cashutil v0.0.0-20180827115045-9ba6cf292283/go.mod h1:KGf50UaG9pHJtvKr8tTX2MFvmmfE0pu38FHxrZ+9oPg=\ngithub.com/bcext/gcash v0.0.0-20180921133405-3f4b56493047 h1:Z8baO4fBVNi3PbdJqDzliynkZP13W/v+DKeKZYBsAEI=\ngithub.com/bcext/gcash v0.0.0-20180921133405-3f4b56493047/go.mod h1:aRULQt1QrqQlRrUpJrUxF7Gl9/GY++kM8OAmjWH61+k=\ngithub.com/btcsuite/btcd v0.0.0-20180924021209-2a560b2036be h1:okpkDD2klX1OdvDlxlUW9bnfODro1x7y7IeGMxs8VvE=\ngithub.com/btcsuite/btcd v0.0.0-20180924021209-2a560b2036be/go.mod h1:Dmm/EzmjnCiweXmzRIAiUWCInVmPgjkzgv5k4tVyXiQ=\ngithub.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f h1:bAs4lUbRJpnnkd9VhRV3jjAVU7DJVjMaK+IsvSeZvFo=\ngithub.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA=\ngithub.com/btcsuite/btcutil v0.0.0-20180706230648-ab6388e0c60a h1:RQMUrEILyYJEoAT34XS/kLu40vC0+po/UfxrBBA4qZE=\ngithub.com/btcsuite/btcutil v0.0.0-20180706230648-ab6388e0c60a/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg=\ngithub.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd h1:R/opQEbFEy9JGkIguV40SvRY1uliPX8ifOvi6ICsFCw=\ngithub.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg=\ngithub.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792 h1:R8vQdOQdZ9Y3SkEwmHoWBmX1DNXhXZqlTpq6s4tyJGc=\ngithub.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY=\ngithub.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\ngithub.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=\ngithub.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\ngithub.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw=\ngithub.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=\ngithub.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=\ngithub.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=\ngithub.com/pkg/errors v0.9.0 h1:J8lpUdobwIeCI7OiSxHqEwJUKvJwicL5+3v1oe2Yb4k=\ngithub.com/pkg/errors v0.9.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=\ngithub.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=\ngithub.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=\ngithub.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=\ngithub.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=\ngithub.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4=\ngithub.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=\ngithub.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=\ngithub.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=\ngithub.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=\ngithub.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=\ngithub.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=\ngithub.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=\ngithub.com/stretchr/testify v1.5.0 h1:DMOzIV76tmoDNE9pX6RSN0aDtCYeCg5VueieJaAo1uw=\ngithub.com/stretchr/testify v1.5.0/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=\ngithub.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=\ngithub.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=\ngithub.com/stretchr/testify v1.6.0 h1:jlIyCplCJFULU/01vCkhKuTyc3OorI3bJFuw6obfgho=\ngithub.com/stretchr/testify v1.6.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=\ngithub.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=\ngithub.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=\ngithub.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=\ngolang.org/x/crypto v0.0.0-20181001203147-e3636079e1a4 h1:Vk3wNqEZwyGyei9yq5ekj7frek2u7HUfffJ1/opblzc=\ngolang.org/x/crypto v0.0.0-20181001203147-e3636079e1a4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=\ngopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc=\ngopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=\ngopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\ngopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=\ngopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=\ngopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=\ngopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=\n"
  },
  {
    "path": "main.go",
    "content": "package main\n\nimport (\n\t\"bufio\"\n\t\"fmt\"\n\t\"github.com/btcsuite/btcutil/hdkeychain\"\n\t\"github.com/square/beancounter/blockfinder\"\n\t\"log\"\n\t\"math\"\n\t\"os\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/square/beancounter/accounter\"\n\t\"github.com/square/beancounter/backend\"\n\t\"github.com/square/beancounter/backend/electrum\"\n\t\"github.com/square/beancounter/deriver\"\n\t. \"github.com/square/beancounter/utils\"\n\t\"gopkg.in/alecthomas/kingpin.v2\"\n)\n\nvar (\n\tapp   = kingpin.New(\"beancounter\", \"A command-line Bitcoin wallet balance audit tool.\")\n\tdebug = app.Flag(\"debug\", \"Enable debug output.\").Default(\"false\").Bool()\n\n\tkeytree    = app.Command(\"keytree\", \"Performs one or more child key derivations.\")\n\tkeytreeArg = keytree.Arg(\"i\", \"(repeated) Values for path.\").Required().Uint32List()\n\tkeytreeN   = keytree.Flag(\"n\", \"number of public keys\").Short('n').Default(\"1\").Int()\n\n\tfindAddr    = app.Command(\"find-address\", \"Finds the change/index values for a given address.\")\n\tfindAddrArg = findAddr.Arg(\"address\", \"Address to look for.\").Required().String()\n\tfindAddrM   = findAddr.Flag(\"m\", \"number of signatures (quorum)\").Short('m').Default(\"1\").Int()\n\tfindAddrN   = findAddr.Flag(\"n\", \"number of public keys\").Short('n').Default(\"1\").Int()\n\n\tfindBlock            = app.Command(\"find-block\", \"Finds the block height for a given date/time.\")\n\tfindBlockTimestamp   = findBlock.Arg(\"timestamp\", \"Date/time to resolve. E.g. \\\"2006-01-02 15:04:05 MST\\\"\").Required().String()\n\tfindBlockBackend     = findBlock.Flag(\"backend\", \"electrum | btcd | electrum-recorder | btcd-recorder | fixture\").Default(\"electrum\").Enum(\"electrum\", \"btcd\", \"electrum-recorder\", \"btcd-recorder\", \"fixture\")\n\tfindBlockAddr        = findBlock.Flag(\"addr\", \"Backend to connect to initially. Defaults to a hardcoded node for Electrum and localhost for Btcd.\").PlaceHolder(\"HOST:PORT\").String()\n\tfindBlockRpcUser     = findBlock.Flag(\"rpcuser\", \"RPC username\").PlaceHolder(\"USER\").String()\n\tfindBlockRpcPass     = findBlock.Flag(\"rpcpass\", \"RPC password\").PlaceHolder(\"PASSWORD\").String()\n\tfindBlockFixtureFile = findBlock.Flag(\"fixture-file\", \"Fixture file to use for recording or replaying data.\").PlaceHolder(\"FILEPATH\").String()\n\n\tcomputeBalance            = app.Command(\"compute-balance\", \"Computes balance for a given watch wallet.\")\n\tcomputeBalanceBlockHeight = computeBalance.Flag(\"block-height\", \"Compute balance at given block height. Defaults to current chain height - 6.\").Default(\"0\").Uint32()\n\tcomputeBalanceType        = computeBalance.Flag(\"type\", \"multisig | single-address\").Required().Enum(\"multisig\", \"single-address\")\n\tcomputeBalanceM           = computeBalance.Flag(\"m\", \"number of signatures (quorum)\").Short('m').Default(\"1\").Int()\n\tcomputeBalanceN           = computeBalance.Flag(\"n\", \"number of public keys\").Short('n').Default(\"1\").Int()\n\tcomputeBalanceBackend     = computeBalance.Flag(\"backend\", \"electrum | btcd | electrum-recorder | btcd-recorder | fixture\").Default(\"electrum\").Enum(\"electrum\", \"btcd\", \"electrum-recorder\", \"btcd-recorder\", \"fixture\")\n\tcomputeBalanceAddr        = computeBalance.Flag(\"addr\", \"Backend to connect to initially. Defaults to a hardcoded node for Electrum and localhost for Btcd.\").PlaceHolder(\"HOST:PORT\").String()\n\tcomputeBalanceRpcUser     = computeBalance.Flag(\"rpcuser\", \"RPC username\").PlaceHolder(\"USER\").String()\n\tcomputeBalanceRpcPass     = computeBalance.Flag(\"rpcpass\", \"RPC password\").PlaceHolder(\"PASSWORD\").String()\n\tcomputeBalanceFixtureFile = computeBalance.Flag(\"fixture-file\", \"Fixture file to use for recording or replaying data.\").PlaceHolder(\"FILEPATH\").String()\n\tcomputeBalanceLookahead   = computeBalance.Flag(\"lookahead\", \"lookahead size\").Default(\"100\").Uint32()\n)\n\nconst (\n\t// number of confirmations required so we don't have to worry about orphaned blocks.\n\tminConfirmations = 6\n)\n\nfunc main() {\n\tapp.Version(\"0.0.3\")\n\tswitch kingpin.MustParse(app.Parse(os.Args[1:])) {\n\tcase keytree.FullCommand():\n\t\tdoKeytree()\n\tcase findAddr.FullCommand():\n\t\tdoFindAddr()\n\tcase findBlock.FullCommand():\n\t\tdoFindBlock()\n\tcase computeBalance.FullCommand():\n\t\tdoComputeBalance()\n\tdefault:\n\t\tpanic(\"unreachable\")\n\t}\n}\n\nfunc doKeytree() {\n\tif !*debug {\n\t\t// Disallow piping to prevent leaking addresses in bash history, etc.\n\t\tstat, err := os.Stdin.Stat()\n\t\tPanicOnError(err)\n\t\tif (stat.Mode() & os.ModeCharDevice) == 0 {\n\t\t\tfmt.Println(\"Piping stdin forbidden.\")\n\t\t\treturn\n\t\t}\n\t}\n\n\txpubs := make([]string, 0, *keytreeN)\n\treader := bufio.NewReader(os.Stdin)\n\tfor i := 0; i < *keytreeN; i++ {\n\t\tfmt.Printf(\"Enter pubkey #%d out of #%d:\\n\", i+1, *keytreeN)\n\t\txpub, _ := reader.ReadString('\\n')\n\t\txpubs = append(xpubs, strings.TrimSpace(xpub))\n\t}\n\n\t// Check that all the addresses have the same prefix\n\tfor i := 1; i < *keytreeN; i++ {\n\t\tif xpubs[0][0:4] != xpubs[i][0:4] {\n\t\t\tfmt.Printf(\"Prefixes must match: %s %s\\n\", xpubs[0], xpubs[i])\n\t\t\treturn\n\t\t}\n\t}\n\n\tfor _, path := range *keytreeArg {\n\t\tfor i, xpub := range xpubs {\n\t\t\tkey, err := hdkeychain.NewKeyFromString(xpub)\n\t\t\tPanicOnError(err)\n\t\t\tkey, err = key.Child(path)\n\t\t\tPanicOnError(err)\n\t\t\txpubs[i] = key.String()\n\t\t}\n\t}\n\n\tfor i, xpub := range xpubs {\n\t\tfmt.Printf(\"Child pubkey #%d: %s\\n\", i+1, xpub)\n\t}\n}\n\nfunc doFindAddr() {\n\terr := VerifyMandN(*findAddrM, *findAddrN)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tif !*debug {\n\t\t// Disallow piping to prevent leaking addresses in bash history, etc.\n\t\tstat, err := os.Stdin.Stat()\n\t\tPanicOnError(err)\n\t\tif (stat.Mode() & os.ModeCharDevice) == 0 {\n\t\t\tfmt.Println(\"Piping stdin forbidden.\")\n\t\t\treturn\n\t\t}\n\t}\n\n\txpubs := make([]string, 0, *findAddrN)\n\treader := bufio.NewReader(os.Stdin)\n\tfor i := 0; i < *findAddrN; i++ {\n\t\tfmt.Printf(\"Enter pubkey #%d out of #%d:\\n\", i+1, *findAddrN)\n\t\txpub, _ := reader.ReadString('\\n')\n\t\txpubs = append(xpubs, strings.TrimSpace(xpub))\n\t}\n\n\t// Check that all the addresses have the same prefix\n\tfor i := 1; i < *findAddrN; i++ {\n\t\tif xpubs[0][0:4] != xpubs[i][0:4] {\n\t\t\tfmt.Printf(\"Prefixes must match: %s %s\\n\", xpubs[0], xpubs[i])\n\t\t\treturn\n\t\t}\n\t}\n\tnetwork := XpubToNetwork(xpubs[0])\n\tderiver := deriver.NewAddressDeriver(network, xpubs, *findAddrM, \"\")\n\n\tfmt.Printf(\"Searching for %s\\n\", *findAddrArg)\n\tfor i := uint32(0); i < math.MaxUint32; i++ {\n\t\tfor _, change := range []uint32{0, 1} {\n\t\t\taddr := deriver.Derive(change, i)\n\t\t\tif addr.String() == *findAddrArg {\n\t\t\t\tfmt.Printf(\"found: %s %s\\n\", addr.Path(), addr)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif i%1000 == 0 {\n\t\t\t\tfmt.Printf(\"reached: %s %s\\n\", addr.Path(), addr)\n\t\t\t}\n\t\t}\n\t}\n\tfmt.Printf(\"not found\\n\")\n}\n\nfunc doFindBlock() {\n\tt, err := time.Parse(\"2006-01-02 15:04:05 MST\", *findBlockTimestamp)\n\tPanicOnError(err)\n\n\tbackend, err := findBlockBuildBackend(Mainnet)\n\tPanicOnError(err)\n\tbf := blockfinder.New(backend)\n\tblock, median, timestamp := bf.Search(t)\n\tfmt.Printf(\"Closest block to '%s' is block #%d with a median time of '%s'\\n\",\n\t\tt.String(), block, median.String())\n\tif *debug {\n\t\tfmt.Printf(\"timestamp: '%s'\\n\", timestamp.String())\n\t}\n}\n\nfunc doComputeBalance() {\n\terr := VerifyMandN(*computeBalanceM, *computeBalanceN)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tif *debug {\n\t\telectrum.DebugMode = true\n\t} else {\n\t\t// Disallow piping to prevent leaking addresses in bash history, etc.\n\t\tstat, err := os.Stdin.Stat()\n\t\tPanicOnError(err)\n\t\tif (stat.Mode() & os.ModeCharDevice) == 0 {\n\t\t\tfmt.Println(\"Piping stdin forbidden.\")\n\t\t\treturn\n\t\t}\n\t}\n\n\txpubs := make([]string, 0, *computeBalanceN)\n\tvar network Network\n\treader := bufio.NewReader(os.Stdin)\n\tsingleAddress := \"\"\n\tif *computeBalanceType == \"single-address\" {\n\t\tfmt.Printf(\"Enter single address:\\n\")\n\t\tsingleAddress, _ = reader.ReadString('\\n')\n\t\tnetwork = AddressToNetwork(singleAddress)\n\t} else {\n\t\tfor i := 0; i < *computeBalanceN; i++ {\n\t\t\tfmt.Printf(\"Enter pubkey #%d out of #%d:\\n\", i+1, *computeBalanceN)\n\t\t\txpub, _ := reader.ReadString('\\n')\n\t\t\txpubs = append(xpubs, strings.TrimSpace(xpub))\n\t\t}\n\n\t\t// Check that all the addresses have the same prefix\n\t\tfor i := 1; i < *computeBalanceN; i++ {\n\t\t\tif xpubs[0][0:4] != xpubs[i][0:4] {\n\t\t\t\tfmt.Printf(\"Prefixes must match: %s %s\\n\", xpubs[0], xpubs[i])\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t\tnetwork = XpubToNetwork(xpubs[0])\n\t}\n\tderiver := deriver.NewAddressDeriver(network, xpubs, *computeBalanceM, singleAddress)\n\n\tbackend, err := computeBalanceBuildBackend(network)\n\tPanicOnError(err)\n\n\t// If blockHeight is 0, we default to current height - 6.\n\tif *computeBalanceBlockHeight == 0 {\n\t\t*computeBalanceBlockHeight = backend.ChainHeight() - minConfirmations\n\t}\n\tif *computeBalanceBlockHeight > backend.ChainHeight()-minConfirmations {\n\t\tlog.Panicf(\"blockHeight %d is too high (> %d - %d)\", *computeBalanceBlockHeight, backend.ChainHeight(), minConfirmations)\n\t}\n\tfmt.Printf(\"Going to compute balance at %d\\n\", *computeBalanceBlockHeight)\n\n\ttb := accounter.New(backend, deriver, *computeBalanceLookahead, *computeBalanceBlockHeight)\n\n\tbalance := tb.ComputeBalance()\n\n\tfmt.Printf(\"Balance: %d\\n\", balance)\n}\n\n// TODO: copy-pasta\nfunc findBlockBuildBackend(network Network) (backend.Backend, error) {\n\tvar b backend.Backend\n\tvar err error\n\tswitch *findBlockBackend {\n\tcase \"electrum\":\n\t\taddr, port := GetDefaultServer(network, Electrum, *findBlockAddr)\n\t\tb, err = backend.NewElectrumBackend(addr, port, network)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\tcase \"btcd\":\n\t\taddr, port := GetDefaultServer(network, Btcd, *findBlockAddr)\n\t\tb, err = backend.NewBtcdBackend(addr, port, *findBlockRpcUser, *findBlockRpcPass, network)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\tcase \"electrum-recorder\":\n\t\tif *findBlockFixtureFile == \"\" {\n\t\t\tpanic(\"electrum-recorder backend requires output --fixture-file.\")\n\t\t}\n\t\taddr, port := GetDefaultServer(network, Electrum, *findBlockAddr)\n\t\tb, err = backend.NewElectrumBackend(addr, port, network)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tb, err = backend.NewRecorderBackend(b, *findBlockFixtureFile)\n\tcase \"btcd-recorder\":\n\t\tif *findBlockFixtureFile == \"\" {\n\t\t\tpanic(\"btcd-recorder backend requires output --fixture-file.\")\n\t\t}\n\t\taddr, port := GetDefaultServer(network, Btcd, *findBlockAddr)\n\t\tb, err = backend.NewBtcdBackend(addr, port, *findBlockRpcUser, *findBlockRpcPass, network)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tb, err = backend.NewRecorderBackend(b, *findBlockFixtureFile)\n\tcase \"fixture\":\n\t\tif *findBlockFixtureFile == \"\" {\n\t\t\tpanic(\"fixture backend requires input --fixture-file.\")\n\t\t}\n\t\tb, err = backend.NewFixtureBackend(*findBlockFixtureFile)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"unreachable\")\n\t}\n\treturn b, err\n}\n\n// TODO: return *backend.Backend, error instead?\nfunc computeBalanceBuildBackend(network Network) (backend.Backend, error) {\n\tvar b backend.Backend\n\tvar err error\n\tswitch *computeBalanceBackend {\n\tcase \"electrum\":\n\t\taddr, port := GetDefaultServer(network, Electrum, *computeBalanceAddr)\n\t\tb, err = backend.NewElectrumBackend(addr, port, network)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\tcase \"btcd\":\n\t\taddr, port := GetDefaultServer(network, Btcd, *computeBalanceAddr)\n\t\tb, err = backend.NewBtcdBackend(addr, port, *computeBalanceRpcUser, *computeBalanceRpcPass, network)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\tcase \"electrum-recorder\":\n\t\tif *computeBalanceFixtureFile == \"\" {\n\t\t\tpanic(\"electrum-recorder backend requires output --fixture-file.\")\n\t\t}\n\t\taddr, port := GetDefaultServer(network, Electrum, *computeBalanceAddr)\n\t\tb, err = backend.NewElectrumBackend(addr, port, network)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tb, err = backend.NewRecorderBackend(b, *computeBalanceFixtureFile)\n\tcase \"btcd-recorder\":\n\t\tif *computeBalanceFixtureFile == \"\" {\n\t\t\tpanic(\"btcd-recorder backend requires output --fixture-file.\")\n\t\t}\n\t\taddr, port := GetDefaultServer(network, Btcd, *computeBalanceAddr)\n\t\tb, err = backend.NewBtcdBackend(addr, port, *computeBalanceRpcUser, *computeBalanceRpcPass, network)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tb, err = backend.NewRecorderBackend(b, *computeBalanceFixtureFile)\n\tcase \"fixture\":\n\t\tif *computeBalanceFixtureFile == \"\" {\n\t\t\tpanic(\"fixture backend requires input --fixture-file.\")\n\t\t}\n\t\tb, err = backend.NewFixtureBackend(*computeBalanceFixtureFile)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"unreachable\")\n\t}\n\treturn b, err\n}\n"
  },
  {
    "path": "reporter/reporter.go",
    "content": "package reporter\n\nimport (\n\t\"fmt\"\n\t\"sync\"\n\t\"sync/atomic\"\n)\n\n// Reporter tracks our progress while we are fetching data. It then spits out the balance and\n// various pieces of information.\n\ntype Reporter struct {\n\taddressesScheduled uint32\n\taddressesFetched   uint32\n\ttxScheduled        uint32\n\ttxFetched          uint32\n\ttxAfterFilter      int32\n\tpeers              int32\n}\n\nvar instance *Reporter\nvar once sync.Once\n\nfunc GetInstance() *Reporter {\n\tonce.Do(func() {\n\t\tinstance = &Reporter{}\n\t})\n\treturn instance\n}\n\nfunc (r *Reporter) Log(msg string) {\n\tfmt.Printf(\"%d/%d %d/%d/%d %d: %s\\n\", r.GetAddressesScheduled(), r.GetAddressesFetched(),\n\t\tr.GetTxScheduled(), r.GetTxFetched(), r.GetTxAfterFilter(), r.GetPeers(), msg)\n}\n\nfunc (r *Reporter) Logf(format string, args ...interface{}) {\n\tr.Log(fmt.Sprintf(format, args...))\n}\n\nfunc (r *Reporter) IncAddressesFetched() {\n\tatomic.AddUint32(&r.addressesFetched, 1)\n}\n\nfunc (r *Reporter) GetAddressesFetched() uint32 {\n\treturn atomic.LoadUint32(&r.addressesFetched)\n}\n\nfunc (r *Reporter) SetAddressesFetched(n uint32) {\n\tatomic.StoreUint32(&r.addressesFetched, n)\n}\n\nfunc (r *Reporter) IncAddressesScheduled() {\n\tatomic.AddUint32(&r.addressesScheduled, 1)\n}\n\nfunc (r *Reporter) GetAddressesScheduled() uint32 {\n\treturn atomic.LoadUint32(&r.addressesScheduled)\n}\n\nfunc (r *Reporter) SetddressesScheduled(n uint32) {\n\tatomic.StoreUint32(&r.addressesScheduled, n)\n}\n\nfunc (r *Reporter) IncTxFetched() {\n\tatomic.AddUint32(&r.txFetched, 1)\n}\n\nfunc (r *Reporter) GetTxFetched() uint32 {\n\treturn atomic.LoadUint32(&r.txFetched)\n}\n\nfunc (r *Reporter) SetTxFetched(n uint32) {\n\tatomic.StoreUint32(&r.txFetched, n)\n}\n\nfunc (r *Reporter) IncTxScheduled() {\n\tatomic.AddUint32(&r.txScheduled, 1)\n}\n\nfunc (r *Reporter) GetTxScheduled() uint32 {\n\treturn atomic.LoadUint32(&r.txScheduled)\n}\n\nfunc (r *Reporter) SetTxScheduled(n uint32) {\n\tatomic.StoreUint32(&r.txScheduled, n)\n}\n\nfunc (r *Reporter) IncTxAfterFilter() {\n\tatomic.AddInt32(&r.txAfterFilter, 1)\n}\n\nfunc (r *Reporter) GetTxAfterFilter() int32 {\n\treturn atomic.LoadInt32(&r.txAfterFilter)\n}\n\nfunc (r *Reporter) SetTxAfterFilter(n int32) {\n\tatomic.StoreInt32(&r.txAfterFilter, n)\n}\n\nfunc (r *Reporter) IncPeers() {\n\tatomic.AddInt32(&r.peers, 1)\n}\n\nfunc (r *Reporter) GetPeers() int32 {\n\treturn atomic.LoadInt32(&r.peers)\n}\n\nfunc (r *Reporter) SetPeers(n int32) {\n\tatomic.StoreInt32(&r.peers, n)\n}\n"
  },
  {
    "path": "utils/utils.go",
    "content": "package utils\n\nimport (\n\t\"fmt\"\n\t\"net\"\n\n\t\"github.com/btcsuite/btcd/chaincfg\"\n)\n\n// PanicOnError panics if err is not nil\nfunc PanicOnError(err error) {\n\tif err != nil {\n\t\tpanic(err)\n\t}\n}\n\nfunc Max(num uint32, nums ...uint32) uint32 {\n\tr := num\n\tfor _, v := range nums {\n\t\tif v > r {\n\t\t\tr = v\n\t\t}\n\t}\n\treturn r\n}\n\ntype Network string\ntype BackendName string\n\nconst (\n\tMainnet  Network     = \"mainnet\"\n\tTestnet  Network     = \"testnet\"\n\tElectrum BackendName = \"electrum\"\n\tBtcd     BackendName = \"btcd\"\n)\n\n// ChainConfig returns a given chaincfg.Params for a given Network\nfunc (n Network) ChainConfig() *chaincfg.Params {\n\tswitch n {\n\tcase Mainnet:\n\t\treturn &chaincfg.MainNetParams\n\tcase Testnet:\n\t\treturn &chaincfg.TestNet3Params\n\tdefault:\n\t\tpanic(\"unreachable\")\n\t}\n}\n\n// prefixes come from BIP32\n// https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#serialization-format\nfunc XpubToNetwork(xpub string) Network {\n\tprefix := xpub[0:4]\n\tswitch prefix {\n\tcase \"xpub\":\n\t\treturn Mainnet\n\tcase \"tpub\":\n\t\treturn Testnet\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"unknown prefix: %s\", xpub))\n\t}\n}\n\nfunc AddressToNetwork(addr string) Network {\n\tswitch addr[0] {\n\tcase 'm':\n\t\treturn Testnet // pubkey hash\n\tcase 'n':\n\t\treturn Testnet // pubkey hash\n\tcase '2':\n\t\treturn Testnet //script hash\n\tcase '1':\n\t\treturn Mainnet // pubkey hash\n\tcase '3':\n\t\treturn Mainnet // script hash\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"unknown prefix: %s\", addr))\n\t}\n}\n\nfunc GenesisBlock(network Network) string {\n\tswitch network {\n\tcase Mainnet:\n\t\treturn \"000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f\"\n\tcase Testnet:\n\t\treturn \"000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943\"\n\tdefault:\n\t\tpanic(\"unreachable\")\n\t}\n}\n\nfunc VerifyMandN(m int, n int) error {\n\tif m <= 0 {\n\t\treturn fmt.Errorf(\"m has to be positive (got %d)\", m)\n\t}\n\n\tif m > n {\n\t\treturn fmt.Errorf(\"m cannot be larger than n (%d > %d)\", m, n)\n\t}\n\n\tif n > 20 {\n\t\treturn fmt.Errorf(\"n cannot be greater than 20 (got %d)\", n)\n\t}\n\treturn nil\n}\n\n// Picks a default server for electrum or localhost for btcd\n// Returns a pair of hostname:port (or pseudo-port for electrum)\nfunc GetDefaultServer(network Network, backend BackendName, addr string) (string, string) {\n\tif addr != \"\" {\n\t\thost, port, err := net.SplitHostPort(addr)\n\t\tPanicOnError(err)\n\t\treturn host, port\n\t}\n\tswitch backend {\n\tcase Electrum:\n\t\tswitch network {\n\t\tcase \"mainnet\":\n\t\t\treturn \"electrum.petrkr.net\", \"s50002\"\n\t\tcase \"testnet\":\n\t\t\treturn \"testnet.hsmiths.com\", \"s53012\"\n\t\tdefault:\n\t\t\tpanic(\"unreachable\")\n\t\t}\n\tcase Btcd:\n\t\tswitch network {\n\t\tcase \"mainnet\":\n\t\t\treturn \"localhost\", \"8334\"\n\t\tcase \"testnet\":\n\t\t\treturn \"localhost\", \"18334\"\n\t\tdefault:\n\t\t\tpanic(\"unreachable\")\n\t\t}\n\tdefault:\n\t\tpanic(\"unreachable\")\n\t}\n}\n"
  },
  {
    "path": "utils/utils_test.go",
    "content": "package utils\n\nimport (\n\t\"fmt\"\n\t\"testing\"\n\n\t\"github.com/btcsuite/btcd/chaincfg\"\n\t\"github.com/stretchr/testify/assert\"\n)\n\nfunc TestPanicOnError(t *testing.T) {\n\tassert.Panics(t, func() { PanicOnError(fmt.Errorf(\"some error\")) })\n\tassert.NotPanics(t, func() { PanicOnError(nil) })\n}\n\nfunc TestMax(t *testing.T) {\n\tv1 := uint32(0)\n\tv2 := uint32(3418911847)\n\tv3 := uint32(356309450)\n\n\tassert.Equal(t, Max(v1), v1)\n\tassert.Equal(t, Max(v2), v2)\n\tassert.Equal(t, Max(v3), v3)\n\n\tassert.Equal(t, Max(v1, v1), v1)\n\tassert.Equal(t, Max(v1, v2), v2)\n\tassert.Equal(t, Max(v1, v3), v3)\n\tassert.Equal(t, Max(v2, v1), v2)\n\tassert.Equal(t, Max(v2, v2), v2)\n\tassert.Equal(t, Max(v2, v3), v2)\n\tassert.Equal(t, Max(v3, v1), v3)\n\tassert.Equal(t, Max(v3, v2), v2)\n\tassert.Equal(t, Max(v3, v3), v3)\n\n\tassert.Equal(t, Max(v1, v2, v3), v2)\n\tassert.Equal(t, Max(v1, v2, v3, v1), v2)\n}\n\nfunc TestXpubToNetwork(t *testing.T) {\n\tassert.Equal(t, XpubToNetwork(\"xpub6C774QqLVXvX3WBMACHRVdWTyPphFh45cXFvawg9eFuNAK2DNPsWDf1zJcSyZWY59FNspYUCAUJJXhmVzCPcWzLWDm6yEQSN9982pBAsj1k\"), Mainnet)\n\n\tassert.Equal(t, XpubToNetwork(\"tpubDC5s7LsM3QFZz8CKNz8ePa2wpvQiq5LsGXrkoaaGsLhNx44wTr13XqoKEMCFPWMK4yen2DsLN7ArrZuqRqQE24Y9kNN51bpcjNdbWpJngdG\"), Testnet)\n\n\tassert.Panics(t, func() { XpubToNetwork(\"foobar\") })\n}\n\nfunc TestAddressToNetwork(t *testing.T) {\n\tassert.Equal(t, AddressToNetwork(\"19YomTTzGd55JM18pmj6Vv2F7ZqkaQDnRF\"), Mainnet)\n\tassert.Equal(t, AddressToNetwork(\"3DmcpZprPpPLFsBsuMeGTik11DyQVsadQK\"), Mainnet)\n\n\tassert.Equal(t, AddressToNetwork(\"mm8xEm6YS8B7ErLYYqcdF6URWkS1BWnqtY\"), Testnet)\n\tassert.Equal(t, AddressToNetwork(\"2MvmkK3F4vT2h3gLjxz66SwQ5zW5XbsdZLu\"), Testnet)\n\tassert.Equal(t, AddressToNetwork(\"n3s7pVRvCEuXfF5fyh74JXmYg45q4Wev86\"), Testnet)\n\n\tassert.Panics(t, func() { AddressToNetwork(\"foobar\") })\n}\n\nfunc TestChainConfig(t *testing.T) {\n\tassert.Equal(t, &chaincfg.MainNetParams, Mainnet.ChainConfig())\n\tassert.Equal(t, &chaincfg.TestNet3Params, Testnet.ChainConfig())\n}\n\nfunc TestGenesisBlock(t *testing.T) {\n\tassert.Equal(t, \"000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f\", GenesisBlock(Mainnet))\n\tassert.Equal(t, \"000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943\", GenesisBlock(Testnet))\n}\n\nfunc TestVerifyMandN(t *testing.T) {\n\tassert.Error(t, VerifyMandN(0, 10))\n\tassert.Error(t, VerifyMandN(12, 10))\n\tassert.Error(t, VerifyMandN(5, 30))\n\n\tassert.Nil(t, VerifyMandN(1, 1))\n\tassert.Nil(t, VerifyMandN(1, 2))\n\tassert.Nil(t, VerifyMandN(2, 4))\n\tassert.Nil(t, VerifyMandN(5, 20))\n\tassert.Nil(t, VerifyMandN(20, 20))\n}\n\nfunc TestGetDefaultServer(t *testing.T) {\n\thost, port := GetDefaultServer(Testnet, Electrum, \"foobar:s1234\")\n\tassert.Equal(t, \"foobar\", host)\n\tassert.Equal(t, \"s1234\", port)\n\n\thost, port = GetDefaultServer(Testnet, Electrum, \"192.0.2.5:s1234\")\n\tassert.Equal(t, \"192.0.2.5\", host)\n\tassert.Equal(t, \"s1234\", port)\n\n\thost, port = GetDefaultServer(Testnet, Electrum, \"[2001:db8::1]:s1234\")\n\tassert.Equal(t, \"2001:db8::1\", host)\n\tassert.Equal(t, \"s1234\", port)\n\n\thost, port = GetDefaultServer(Testnet, Btcd, \"foobar:1234\")\n\tassert.Equal(t, \"foobar\", host)\n\tassert.Equal(t, \"1234\", port)\n\n\thost, port = GetDefaultServer(Testnet, Electrum, \"\")\n\tassert.NotEqual(t, \"localhost\", host)\n\tassert.Equal(t, \"s53012\", port)\n\n\thost, port = GetDefaultServer(Testnet, Btcd, \"\")\n\tassert.Equal(t, \"localhost\", host)\n\tassert.Equal(t, \"18334\", port)\n}\n"
  },
  {
    "path": "vendor/github.com/Masterminds/semver/.travis.yml",
    "content": "language: go\n\ngo:\n  - 1.6.x\n  - 1.7.x\n  - 1.8.x\n  - 1.9.x\n  - 1.10.x\n  - tip\n\n# Setting sudo access to false will let Travis CI use containers rather than\n# VMs to run the tests. For more details see:\n# - http://docs.travis-ci.com/user/workers/container-based-infrastructure/\n# - http://docs.travis-ci.com/user/workers/standard-infrastructure/\nsudo: false\n\nscript:\n  - make setup\n  - make test\n\nnotifications:\n  webhooks:\n    urls:\n      - https://webhooks.gitter.im/e/06e3328629952dabe3e0\n    on_success: change  # options: [always|never|change] default: always\n    on_failure: always  # options: [always|never|change] default: always\n    on_start: never     # options: [always|never|change] default: always\n"
  },
  {
    "path": "vendor/github.com/Masterminds/semver/CHANGELOG.md",
    "content": "# 1.4.2 (2018-04-10)\n\n## Changed\n- #72: Updated the docs to point to vert for a console appliaction\n- #71: Update the docs on pre-release comparator handling\n\n## Fixed\n- #70: Fix the handling of pre-releases and the 0.0.0 release edge case\n\n# 1.4.1 (2018-04-02)\n\n## Fixed\n- Fixed #64: Fix pre-release precedence issue (thanks @uudashr)\n\n# 1.4.0 (2017-10-04)\n\n## Changed\n- #61: Update NewVersion to parse ints with a 64bit int size (thanks @zknill)\n\n# 1.3.1 (2017-07-10)\n\n## Fixed\n- Fixed #57: number comparisons in prerelease sometimes inaccurate\n\n# 1.3.0 (2017-05-02)\n\n## Added\n- #45: Added json (un)marshaling support (thanks @mh-cbon)\n- Stability marker. See https://masterminds.github.io/stability/\n\n## Fixed\n- #51: Fix handling of single digit tilde constraint (thanks @dgodd)\n\n## Changed\n- #55: The godoc icon moved from png to svg\n\n# 1.2.3 (2017-04-03)\n\n## Fixed\n- #46: Fixed 0.x.x and 0.0.x in constraints being treated as *\n\n# Release 1.2.2 (2016-12-13)\n\n## Fixed\n- #34: Fixed issue where hyphen range was not working with pre-release parsing.\n\n# Release 1.2.1 (2016-11-28)\n\n## Fixed\n- #24: Fixed edge case issue where constraint \"> 0\" does not handle \"0.0.1-alpha\"\n  properly.\n\n# Release 1.2.0 (2016-11-04)\n\n## Added\n- #20: Added MustParse function for versions (thanks @adamreese)\n- #15: Added increment methods on versions (thanks @mh-cbon)\n\n## Fixed\n- Issue #21: Per the SemVer spec (section 9) a pre-release is unstable and\n  might not satisfy the intended compatibility. The change here ignores pre-releases\n  on constraint checks (e.g., ~ or ^) when a pre-release is not part of the\n  constraint. For example, `^1.2.3` will ignore pre-releases while\n  `^1.2.3-alpha` will include them.\n\n# Release 1.1.1 (2016-06-30)\n\n## Changed\n- Issue #9: Speed up version comparison performance (thanks @sdboyer)\n- Issue #8: Added benchmarks (thanks @sdboyer)\n- Updated Go Report Card URL to new location\n- Updated Readme to add code snippet formatting (thanks @mh-cbon)\n- Updating tagging to v[SemVer] structure for compatibility with other tools.\n\n# Release 1.1.0 (2016-03-11)\n\n- Issue #2: Implemented validation to provide reasons a versions failed a\n  constraint.\n\n# Release 1.0.1 (2015-12-31)\n\n- Fixed #1: * constraint failing on valid versions.\n\n# Release 1.0.0 (2015-10-20)\n\n- Initial release\n"
  },
  {
    "path": "vendor/github.com/Masterminds/semver/LICENSE.txt",
    "content": "The Masterminds\nCopyright (C) 2014-2015, Matt Butcher and Matt Farina\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/Masterminds/semver/Makefile",
    "content": ".PHONY: setup\nsetup:\n\tgo get -u gopkg.in/alecthomas/gometalinter.v1\n\tgometalinter.v1 --install\n\n.PHONY: test\ntest: validate lint\n\t@echo \"==> Running tests\"\n\tgo test -v\n\n.PHONY: validate\nvalidate:\n\t@echo \"==> Running static validations\"\n\t@gometalinter.v1 \\\n\t  --disable-all \\\n\t  --enable deadcode \\\n\t  --severity deadcode:error \\\n\t  --enable gofmt \\\n\t  --enable gosimple \\\n\t  --enable ineffassign \\\n\t  --enable misspell \\\n\t  --enable vet \\\n\t  --tests \\\n\t  --vendor \\\n\t  --deadline 60s \\\n\t  ./... || exit_code=1\n\n.PHONY: lint\nlint:\n\t@echo \"==> Running linters\"\n\t@gometalinter.v1 \\\n\t  --disable-all \\\n\t  --enable golint \\\n\t  --vendor \\\n\t  --deadline 60s \\\n\t  ./... || :\n"
  },
  {
    "path": "vendor/github.com/Masterminds/semver/README.md",
    "content": "# SemVer\n\nThe `semver` package provides the ability to work with [Semantic Versions](http://semver.org) in Go. Specifically it provides the ability to:\n\n* Parse semantic versions\n* Sort semantic versions\n* Check if a semantic version fits within a set of constraints\n* Optionally work with a `v` prefix\n\n[![Stability:\nActive](https://masterminds.github.io/stability/active.svg)](https://masterminds.github.io/stability/active.html)\n[![Build Status](https://travis-ci.org/Masterminds/semver.svg)](https://travis-ci.org/Masterminds/semver) [![Build status](https://ci.appveyor.com/api/projects/status/jfk66lib7hb985k8/branch/master?svg=true&passingText=windows%20build%20passing&failingText=windows%20build%20failing)](https://ci.appveyor.com/project/mattfarina/semver/branch/master) [![GoDoc](https://godoc.org/github.com/Masterminds/semver?status.svg)](https://godoc.org/github.com/Masterminds/semver) [![Go Report Card](https://goreportcard.com/badge/github.com/Masterminds/semver)](https://goreportcard.com/report/github.com/Masterminds/semver)\n\n## Parsing Semantic Versions\n\nTo parse a semantic version use the `NewVersion` function. For example,\n\n```go\n    v, err := semver.NewVersion(\"1.2.3-beta.1+build345\")\n```\n\nIf there is an error the version wasn't parseable. The version object has methods\nto get the parts of the version, compare it to other versions, convert the\nversion back into a string, and get the original string. For more details\nplease see the [documentation](https://godoc.org/github.com/Masterminds/semver).\n\n## Sorting Semantic Versions\n\nA set of versions can be sorted using the [`sort`](https://golang.org/pkg/sort/)\npackage from the standard library. For example,\n\n```go\n    raw := []string{\"1.2.3\", \"1.0\", \"1.3\", \"2\", \"0.4.2\",}\n    vs := make([]*semver.Version, len(raw))\n\tfor i, r := range raw {\n\t\tv, err := semver.NewVersion(r)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"Error parsing version: %s\", err)\n\t\t}\n\n\t\tvs[i] = v\n\t}\n\n\tsort.Sort(semver.Collection(vs))\n```\n\n## Checking Version Constraints\n\nChecking a version against version constraints is one of the most featureful\nparts of the package.\n\n```go\n    c, err := semver.NewConstraint(\">= 1.2.3\")\n    if err != nil {\n        // Handle constraint not being parseable.\n    }\n\n    v, _ := semver.NewVersion(\"1.3\")\n    if err != nil {\n        // Handle version not being parseable.\n    }\n    // Check if the version meets the constraints. The a variable will be true.\n    a := c.Check(v)\n```\n\n## Basic Comparisons\n\nThere are two elements to the comparisons. First, a comparison string is a list\nof comma separated and comparisons. These are then separated by || separated or\ncomparisons. For example, `\">= 1.2, < 3.0.0 || >= 4.2.3\"` is looking for a\ncomparison that's greater than or equal to 1.2 and less than 3.0.0 or is\ngreater than or equal to 4.2.3.\n\nThe basic comparisons are:\n\n* `=`: equal (aliased to no operator)\n* `!=`: not equal\n* `>`: greater than\n* `<`: less than\n* `>=`: greater than or equal to\n* `<=`: less than or equal to\n\n_Note, according to the Semantic Version specification pre-releases may not be\nAPI compliant with their release counterpart. It says,_\n\n> _A pre-release version indicates that the version is unstable and might not satisfy the intended compatibility requirements as denoted by its associated normal version._\n\n_SemVer comparisons without a pre-release value will skip pre-release versions.\nFor example, `>1.2.3` will skip pre-releases when looking at a list of values\nwhile `>1.2.3-alpha.1` will evaluate pre-releases._\n\n## Hyphen Range Comparisons\n\nThere are multiple methods to handle ranges and the first is hyphens ranges.\nThese look like:\n\n* `1.2 - 1.4.5` which is equivalent to `>= 1.2, <= 1.4.5`\n* `2.3.4 - 4.5` which is equivalent to `>= 2.3.4, <= 4.5`\n\n## Wildcards In Comparisons\n\nThe `x`, `X`, and `*` characters can be used as a wildcard character. This works\nfor all comparison operators. When used on the `=` operator it falls\nback to the pack level comparison (see tilde below). For example,\n\n* `1.2.x` is equivalent to `>= 1.2.0, < 1.3.0`\n* `>= 1.2.x` is equivalent to `>= 1.2.0`\n* `<= 2.x` is equivalent to `<= 3`\n* `*` is equivalent to `>= 0.0.0`\n\n## Tilde Range Comparisons (Patch)\n\nThe tilde (`~`) comparison operator is for patch level ranges when a minor\nversion is specified and major level changes when the minor number is missing.\nFor example,\n\n* `~1.2.3` is equivalent to `>= 1.2.3, < 1.3.0`\n* `~1` is equivalent to `>= 1, < 2`\n* `~2.3` is equivalent to `>= 2.3, < 2.4`\n* `~1.2.x` is equivalent to `>= 1.2.0, < 1.3.0`\n* `~1.x` is equivalent to `>= 1, < 2`\n\n## Caret Range Comparisons (Major)\n\nThe caret (`^`) comparison operator is for major level changes. This is useful\nwhen comparisons of API versions as a major change is API breaking. For example,\n\n* `^1.2.3` is equivalent to `>= 1.2.3, < 2.0.0`\n* `^1.2.x` is equivalent to `>= 1.2.0, < 2.0.0`\n* `^2.3` is equivalent to `>= 2.3, < 3`\n* `^2.x` is equivalent to `>= 2.0.0, < 3`\n\n# Validation\n\nIn addition to testing a version against a constraint, a version can be validated\nagainst a constraint. When validation fails a slice of errors containing why a\nversion didn't meet the constraint is returned. For example,\n\n```go\n    c, err := semver.NewConstraint(\"<= 1.2.3, >= 1.4\")\n    if err != nil {\n        // Handle constraint not being parseable.\n    }\n\n    v, _ := semver.NewVersion(\"1.3\")\n    if err != nil {\n        // Handle version not being parseable.\n    }\n\n    // Validate a version against a constraint.\n    a, msgs := c.Validate(v)\n    // a is false\n    for _, m := range msgs {\n        fmt.Println(m)\n\n        // Loops over the errors which would read\n        // \"1.3 is greater than 1.2.3\"\n        // \"1.3 is less than 1.4\"\n    }\n```\n\n# Contribute\n\nIf you find an issue or want to contribute please file an [issue](https://github.com/Masterminds/semver/issues)\nor [create a pull request](https://github.com/Masterminds/semver/pulls).\n"
  },
  {
    "path": "vendor/github.com/Masterminds/semver/appveyor.yml",
    "content": "version: build-{build}.{branch}\n\nclone_folder: C:\\gopath\\src\\github.com\\Masterminds\\semver\nshallow_clone: true\n\nenvironment:\n  GOPATH: C:\\gopath\n\nplatform:\n  - x64\n\ninstall:\n  - go version\n  - go env\n  - go get -u gopkg.in/alecthomas/gometalinter.v1\n  - set PATH=%PATH%;%GOPATH%\\bin\n  - gometalinter.v1.exe --install\n\nbuild_script:\n  - go install -v ./...\n\ntest_script:\n  - \"gometalinter.v1 \\\n    --disable-all \\\n    --enable deadcode \\\n    --severity deadcode:error \\\n    --enable gofmt \\\n    --enable gosimple \\\n    --enable ineffassign \\\n    --enable misspell \\\n    --enable vet \\\n    --tests \\\n    --vendor \\\n    --deadline 60s \\\n    ./... || exit_code=1\"\n  - \"gometalinter.v1 \\\n    --disable-all \\\n    --enable golint \\\n    --vendor \\\n    --deadline 60s \\\n    ./... || :\"\n  - go test -v\n\ndeploy: off\n"
  },
  {
    "path": "vendor/github.com/Masterminds/semver/collection.go",
    "content": "package semver\n\n// Collection is a collection of Version instances and implements the sort\n// interface. See the sort package for more details.\n// https://golang.org/pkg/sort/\ntype Collection []*Version\n\n// Len returns the length of a collection. The number of Version instances\n// on the slice.\nfunc (c Collection) Len() int {\n\treturn len(c)\n}\n\n// Less is needed for the sort interface to compare two Version objects on the\n// slice. If checks if one is less than the other.\nfunc (c Collection) Less(i, j int) bool {\n\treturn c[i].LessThan(c[j])\n}\n\n// Swap is needed for the sort interface to replace the Version objects\n// at two different positions in the slice.\nfunc (c Collection) Swap(i, j int) {\n\tc[i], c[j] = c[j], c[i]\n}\n"
  },
  {
    "path": "vendor/github.com/Masterminds/semver/constraints.go",
    "content": "package semver\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"regexp\"\n\t\"strings\"\n)\n\n// Constraints is one or more constraint that a semantic version can be\n// checked against.\ntype Constraints struct {\n\tconstraints [][]*constraint\n}\n\n// NewConstraint returns a Constraints instance that a Version instance can\n// be checked against. If there is a parse error it will be returned.\nfunc NewConstraint(c string) (*Constraints, error) {\n\n\t// Rewrite - ranges into a comparison operation.\n\tc = rewriteRange(c)\n\n\tors := strings.Split(c, \"||\")\n\tor := make([][]*constraint, len(ors))\n\tfor k, v := range ors {\n\t\tcs := strings.Split(v, \",\")\n\t\tresult := make([]*constraint, len(cs))\n\t\tfor i, s := range cs {\n\t\t\tpc, err := parseConstraint(s)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\tresult[i] = pc\n\t\t}\n\t\tor[k] = result\n\t}\n\n\to := &Constraints{constraints: or}\n\treturn o, nil\n}\n\n// Check tests if a version satisfies the constraints.\nfunc (cs Constraints) Check(v *Version) bool {\n\t// loop over the ORs and check the inner ANDs\n\tfor _, o := range cs.constraints {\n\t\tjoy := true\n\t\tfor _, c := range o {\n\t\t\tif !c.check(v) {\n\t\t\t\tjoy = false\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tif joy {\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}\n\n// Validate checks if a version satisfies a constraint. If not a slice of\n// reasons for the failure are returned in addition to a bool.\nfunc (cs Constraints) Validate(v *Version) (bool, []error) {\n\t// loop over the ORs and check the inner ANDs\n\tvar e []error\n\tfor _, o := range cs.constraints {\n\t\tjoy := true\n\t\tfor _, c := range o {\n\t\t\tif !c.check(v) {\n\t\t\t\tem := fmt.Errorf(c.msg, v, c.orig)\n\t\t\t\te = append(e, em)\n\t\t\t\tjoy = false\n\t\t\t}\n\t\t}\n\n\t\tif joy {\n\t\t\treturn true, []error{}\n\t\t}\n\t}\n\n\treturn false, e\n}\n\nvar constraintOps map[string]cfunc\nvar constraintMsg map[string]string\nvar constraintRegex *regexp.Regexp\n\nfunc init() {\n\tconstraintOps = map[string]cfunc{\n\t\t\"\":   constraintTildeOrEqual,\n\t\t\"=\":  constraintTildeOrEqual,\n\t\t\"!=\": constraintNotEqual,\n\t\t\">\":  constraintGreaterThan,\n\t\t\"<\":  constraintLessThan,\n\t\t\">=\": constraintGreaterThanEqual,\n\t\t\"=>\": constraintGreaterThanEqual,\n\t\t\"<=\": constraintLessThanEqual,\n\t\t\"=<\": constraintLessThanEqual,\n\t\t\"~\":  constraintTilde,\n\t\t\"~>\": constraintTilde,\n\t\t\"^\":  constraintCaret,\n\t}\n\n\tconstraintMsg = map[string]string{\n\t\t\"\":   \"%s is not equal to %s\",\n\t\t\"=\":  \"%s is not equal to %s\",\n\t\t\"!=\": \"%s is equal to %s\",\n\t\t\">\":  \"%s is less than or equal to %s\",\n\t\t\"<\":  \"%s is greater than or equal to %s\",\n\t\t\">=\": \"%s is less than %s\",\n\t\t\"=>\": \"%s is less than %s\",\n\t\t\"<=\": \"%s is greater than %s\",\n\t\t\"=<\": \"%s is greater than %s\",\n\t\t\"~\":  \"%s does not have same major and minor version as %s\",\n\t\t\"~>\": \"%s does not have same major and minor version as %s\",\n\t\t\"^\":  \"%s does not have same major version as %s\",\n\t}\n\n\tops := make([]string, 0, len(constraintOps))\n\tfor k := range constraintOps {\n\t\tops = append(ops, regexp.QuoteMeta(k))\n\t}\n\n\tconstraintRegex = regexp.MustCompile(fmt.Sprintf(\n\t\t`^\\s*(%s)\\s*(%s)\\s*$`,\n\t\tstrings.Join(ops, \"|\"),\n\t\tcvRegex))\n\n\tconstraintRangeRegex = regexp.MustCompile(fmt.Sprintf(\n\t\t`\\s*(%s)\\s+-\\s+(%s)\\s*`,\n\t\tcvRegex, cvRegex))\n}\n\n// An individual constraint\ntype constraint struct {\n\t// The callback function for the restraint. It performs the logic for\n\t// the constraint.\n\tfunction cfunc\n\n\tmsg string\n\n\t// The version used in the constraint check. For example, if a constraint\n\t// is '<= 2.0.0' the con a version instance representing 2.0.0.\n\tcon *Version\n\n\t// The original parsed version (e.g., 4.x from != 4.x)\n\torig string\n\n\t// When an x is used as part of the version (e.g., 1.x)\n\tminorDirty bool\n\tdirty      bool\n\tpatchDirty bool\n}\n\n// Check if a version meets the constraint\nfunc (c *constraint) check(v *Version) bool {\n\treturn c.function(v, c)\n}\n\ntype cfunc func(v *Version, c *constraint) bool\n\nfunc parseConstraint(c string) (*constraint, error) {\n\tm := constraintRegex.FindStringSubmatch(c)\n\tif m == nil {\n\t\treturn nil, fmt.Errorf(\"improper constraint: %s\", c)\n\t}\n\n\tver := m[2]\n\torig := ver\n\tminorDirty := false\n\tpatchDirty := false\n\tdirty := false\n\tif isX(m[3]) {\n\t\tver = \"0.0.0\"\n\t\tdirty = true\n\t} else if isX(strings.TrimPrefix(m[4], \".\")) || m[4] == \"\" {\n\t\tminorDirty = true\n\t\tdirty = true\n\t\tver = fmt.Sprintf(\"%s.0.0%s\", m[3], m[6])\n\t} else if isX(strings.TrimPrefix(m[5], \".\")) {\n\t\tdirty = true\n\t\tpatchDirty = true\n\t\tver = fmt.Sprintf(\"%s%s.0%s\", m[3], m[4], m[6])\n\t}\n\n\tcon, err := NewVersion(ver)\n\tif err != nil {\n\n\t\t// The constraintRegex should catch any regex parsing errors. So,\n\t\t// we should never get here.\n\t\treturn nil, errors.New(\"constraint Parser Error\")\n\t}\n\n\tcs := &constraint{\n\t\tfunction:   constraintOps[m[1]],\n\t\tmsg:        constraintMsg[m[1]],\n\t\tcon:        con,\n\t\torig:       orig,\n\t\tminorDirty: minorDirty,\n\t\tpatchDirty: patchDirty,\n\t\tdirty:      dirty,\n\t}\n\treturn cs, nil\n}\n\n// Constraint functions\nfunc constraintNotEqual(v *Version, c *constraint) bool {\n\tif c.dirty {\n\n\t\t// If there is a pre-release on the version but the constraint isn't looking\n\t\t// for them assume that pre-releases are not compatible. See issue 21 for\n\t\t// more details.\n\t\tif v.Prerelease() != \"\" && c.con.Prerelease() == \"\" {\n\t\t\treturn false\n\t\t}\n\n\t\tif c.con.Major() != v.Major() {\n\t\t\treturn true\n\t\t}\n\t\tif c.con.Minor() != v.Minor() && !c.minorDirty {\n\t\t\treturn true\n\t\t} else if c.minorDirty {\n\t\t\treturn false\n\t\t}\n\n\t\treturn false\n\t}\n\n\treturn !v.Equal(c.con)\n}\n\nfunc constraintGreaterThan(v *Version, c *constraint) bool {\n\n\t// An edge case the constraint is 0.0.0 and the version is 0.0.0-someprerelease\n\t// exists. This that case.\n\tif !isNonZero(c.con) && isNonZero(v) {\n\t\treturn true\n\t}\n\n\t// If there is a pre-release on the version but the constraint isn't looking\n\t// for them assume that pre-releases are not compatible. See issue 21 for\n\t// more details.\n\tif v.Prerelease() != \"\" && c.con.Prerelease() == \"\" {\n\t\treturn false\n\t}\n\n\treturn v.Compare(c.con) == 1\n}\n\nfunc constraintLessThan(v *Version, c *constraint) bool {\n\t// If there is a pre-release on the version but the constraint isn't looking\n\t// for them assume that pre-releases are not compatible. See issue 21 for\n\t// more details.\n\tif v.Prerelease() != \"\" && c.con.Prerelease() == \"\" {\n\t\treturn false\n\t}\n\n\tif !c.dirty {\n\t\treturn v.Compare(c.con) < 0\n\t}\n\n\tif v.Major() > c.con.Major() {\n\t\treturn false\n\t} else if v.Minor() > c.con.Minor() && !c.minorDirty {\n\t\treturn false\n\t}\n\n\treturn true\n}\n\nfunc constraintGreaterThanEqual(v *Version, c *constraint) bool {\n\t// An edge case the constraint is 0.0.0 and the version is 0.0.0-someprerelease\n\t// exists. This that case.\n\tif !isNonZero(c.con) && isNonZero(v) {\n\t\treturn true\n\t}\n\n\t// If there is a pre-release on the version but the constraint isn't looking\n\t// for them assume that pre-releases are not compatible. See issue 21 for\n\t// more details.\n\tif v.Prerelease() != \"\" && c.con.Prerelease() == \"\" {\n\t\treturn false\n\t}\n\n\treturn v.Compare(c.con) >= 0\n}\n\nfunc constraintLessThanEqual(v *Version, c *constraint) bool {\n\t// If there is a pre-release on the version but the constraint isn't looking\n\t// for them assume that pre-releases are not compatible. See issue 21 for\n\t// more details.\n\tif v.Prerelease() != \"\" && c.con.Prerelease() == \"\" {\n\t\treturn false\n\t}\n\n\tif !c.dirty {\n\t\treturn v.Compare(c.con) <= 0\n\t}\n\n\tif v.Major() > c.con.Major() {\n\t\treturn false\n\t} else if v.Minor() > c.con.Minor() && !c.minorDirty {\n\t\treturn false\n\t}\n\n\treturn true\n}\n\n// ~*, ~>* --> >= 0.0.0 (any)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0, <3.0.0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0, <2.1.0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0, <1.3.0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3, <1.3.0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0, <1.3.0\nfunc constraintTilde(v *Version, c *constraint) bool {\n\t// If there is a pre-release on the version but the constraint isn't looking\n\t// for them assume that pre-releases are not compatible. See issue 21 for\n\t// more details.\n\tif v.Prerelease() != \"\" && c.con.Prerelease() == \"\" {\n\t\treturn false\n\t}\n\n\tif v.LessThan(c.con) {\n\t\treturn false\n\t}\n\n\t// ~0.0.0 is a special case where all constraints are accepted. It's\n\t// equivalent to >= 0.0.0.\n\tif c.con.Major() == 0 && c.con.Minor() == 0 && c.con.Patch() == 0 &&\n\t\t!c.minorDirty && !c.patchDirty {\n\t\treturn true\n\t}\n\n\tif v.Major() != c.con.Major() {\n\t\treturn false\n\t}\n\n\tif v.Minor() != c.con.Minor() && !c.minorDirty {\n\t\treturn false\n\t}\n\n\treturn true\n}\n\n// When there is a .x (dirty) status it automatically opts in to ~. Otherwise\n// it's a straight =\nfunc constraintTildeOrEqual(v *Version, c *constraint) bool {\n\t// If there is a pre-release on the version but the constraint isn't looking\n\t// for them assume that pre-releases are not compatible. See issue 21 for\n\t// more details.\n\tif v.Prerelease() != \"\" && c.con.Prerelease() == \"\" {\n\t\treturn false\n\t}\n\n\tif c.dirty {\n\t\tc.msg = constraintMsg[\"~\"]\n\t\treturn constraintTilde(v, c)\n\t}\n\n\treturn v.Equal(c.con)\n}\n\n// ^* --> (any)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0, <3.0.0\n// ^2.0, ^2.0.x --> >=2.0.0, <3.0.0\n// ^1.2, ^1.2.x --> >=1.2.0, <2.0.0\n// ^1.2.3 --> >=1.2.3, <2.0.0\n// ^1.2.0 --> >=1.2.0, <2.0.0\nfunc constraintCaret(v *Version, c *constraint) bool {\n\t// If there is a pre-release on the version but the constraint isn't looking\n\t// for them assume that pre-releases are not compatible. See issue 21 for\n\t// more details.\n\tif v.Prerelease() != \"\" && c.con.Prerelease() == \"\" {\n\t\treturn false\n\t}\n\n\tif v.LessThan(c.con) {\n\t\treturn false\n\t}\n\n\tif v.Major() != c.con.Major() {\n\t\treturn false\n\t}\n\n\treturn true\n}\n\nvar constraintRangeRegex *regexp.Regexp\n\nconst cvRegex string = `v?([0-9|x|X|\\*]+)(\\.[0-9|x|X|\\*]+)?(\\.[0-9|x|X|\\*]+)?` +\n\t`(-([0-9A-Za-z\\-]+(\\.[0-9A-Za-z\\-]+)*))?` +\n\t`(\\+([0-9A-Za-z\\-]+(\\.[0-9A-Za-z\\-]+)*))?`\n\nfunc isX(x string) bool {\n\tswitch x {\n\tcase \"x\", \"*\", \"X\":\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\nfunc rewriteRange(i string) string {\n\tm := constraintRangeRegex.FindAllStringSubmatch(i, -1)\n\tif m == nil {\n\t\treturn i\n\t}\n\to := i\n\tfor _, v := range m {\n\t\tt := fmt.Sprintf(\">= %s, <= %s\", v[1], v[11])\n\t\to = strings.Replace(o, v[0], t, 1)\n\t}\n\n\treturn o\n}\n\n// Detect if a version is not zero (0.0.0)\nfunc isNonZero(v *Version) bool {\n\tif v.Major() != 0 || v.Minor() != 0 || v.Patch() != 0 || v.Prerelease() != \"\" {\n\t\treturn true\n\t}\n\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/Masterminds/semver/doc.go",
    "content": "/*\nPackage semver provides the ability to work with Semantic Versions (http://semver.org) in Go.\n\nSpecifically it provides the ability to:\n\n    * Parse semantic versions\n    * Sort semantic versions\n    * Check if a semantic version fits within a set of constraints\n    * Optionally work with a `v` prefix\n\nParsing Semantic Versions\n\nTo parse a semantic version use the `NewVersion` function. For example,\n\n    v, err := semver.NewVersion(\"1.2.3-beta.1+build345\")\n\nIf there is an error the version wasn't parseable. The version object has methods\nto get the parts of the version, compare it to other versions, convert the\nversion back into a string, and get the original string. For more details\nplease see the documentation at https://godoc.org/github.com/Masterminds/semver.\n\nSorting Semantic Versions\n\nA set of versions can be sorted using the `sort` package from the standard library.\nFor example,\n\n    raw := []string{\"1.2.3\", \"1.0\", \"1.3\", \"2\", \"0.4.2\",}\n    vs := make([]*semver.Version, len(raw))\n\tfor i, r := range raw {\n\t\tv, err := semver.NewVersion(r)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"Error parsing version: %s\", err)\n\t\t}\n\n\t\tvs[i] = v\n\t}\n\n\tsort.Sort(semver.Collection(vs))\n\nChecking Version Constraints\n\nChecking a version against version constraints is one of the most featureful\nparts of the package.\n\n    c, err := semver.NewConstraint(\">= 1.2.3\")\n    if err != nil {\n        // Handle constraint not being parseable.\n    }\n\n    v, _ := semver.NewVersion(\"1.3\")\n    if err != nil {\n        // Handle version not being parseable.\n    }\n    // Check if the version meets the constraints. The a variable will be true.\n    a := c.Check(v)\n\nBasic Comparisons\n\nThere are two elements to the comparisons. First, a comparison string is a list\nof comma separated and comparisons. These are then separated by || separated or\ncomparisons. For example, `\">= 1.2, < 3.0.0 || >= 4.2.3\"` is looking for a\ncomparison that's greater than or equal to 1.2 and less than 3.0.0 or is\ngreater than or equal to 4.2.3.\n\nThe basic comparisons are:\n\n    * `=`: equal (aliased to no operator)\n    * `!=`: not equal\n    * `>`: greater than\n    * `<`: less than\n    * `>=`: greater than or equal to\n    * `<=`: less than or equal to\n\nHyphen Range Comparisons\n\nThere are multiple methods to handle ranges and the first is hyphens ranges.\nThese look like:\n\n    * `1.2 - 1.4.5` which is equivalent to `>= 1.2, <= 1.4.5`\n    * `2.3.4 - 4.5` which is equivalent to `>= 2.3.4, <= 4.5`\n\nWildcards In Comparisons\n\nThe `x`, `X`, and `*` characters can be used as a wildcard character. This works\nfor all comparison operators. When used on the `=` operator it falls\nback to the pack level comparison (see tilde below). For example,\n\n    * `1.2.x` is equivalent to `>= 1.2.0, < 1.3.0`\n    * `>= 1.2.x` is equivalent to `>= 1.2.0`\n    * `<= 2.x` is equivalent to `<= 3`\n    * `*` is equivalent to `>= 0.0.0`\n\nTilde Range Comparisons (Patch)\n\nThe tilde (`~`) comparison operator is for patch level ranges when a minor\nversion is specified and major level changes when the minor number is missing.\nFor example,\n\n    * `~1.2.3` is equivalent to `>= 1.2.3, < 1.3.0`\n    * `~1` is equivalent to `>= 1, < 2`\n    * `~2.3` is equivalent to `>= 2.3, < 2.4`\n    * `~1.2.x` is equivalent to `>= 1.2.0, < 1.3.0`\n    * `~1.x` is equivalent to `>= 1, < 2`\n\nCaret Range Comparisons (Major)\n\nThe caret (`^`) comparison operator is for major level changes. This is useful\nwhen comparisons of API versions as a major change is API breaking. For example,\n\n    * `^1.2.3` is equivalent to `>= 1.2.3, < 2.0.0`\n    * `^1.2.x` is equivalent to `>= 1.2.0, < 2.0.0`\n    * `^2.3` is equivalent to `>= 2.3, < 3`\n    * `^2.x` is equivalent to `>= 2.0.0, < 3`\n*/\npackage semver\n"
  },
  {
    "path": "vendor/github.com/Masterminds/semver/version.go",
    "content": "package semver\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// The compiled version of the regex created at init() is cached here so it\n// only needs to be created once.\nvar versionRegex *regexp.Regexp\nvar validPrereleaseRegex *regexp.Regexp\n\nvar (\n\t// ErrInvalidSemVer is returned a version is found to be invalid when\n\t// being parsed.\n\tErrInvalidSemVer = errors.New(\"Invalid Semantic Version\")\n\n\t// ErrInvalidMetadata is returned when the metadata is an invalid format\n\tErrInvalidMetadata = errors.New(\"Invalid Metadata string\")\n\n\t// ErrInvalidPrerelease is returned when the pre-release is an invalid format\n\tErrInvalidPrerelease = errors.New(\"Invalid Prerelease string\")\n)\n\n// SemVerRegex is the regular expression used to parse a semantic version.\nconst SemVerRegex string = `v?([0-9]+)(\\.[0-9]+)?(\\.[0-9]+)?` +\n\t`(-([0-9A-Za-z\\-]+(\\.[0-9A-Za-z\\-]+)*))?` +\n\t`(\\+([0-9A-Za-z\\-]+(\\.[0-9A-Za-z\\-]+)*))?`\n\n// ValidPrerelease is the regular expression which validates\n// both prerelease and metadata values.\nconst ValidPrerelease string = `^([0-9A-Za-z\\-]+(\\.[0-9A-Za-z\\-]+)*)`\n\n// Version represents a single semantic version.\ntype Version struct {\n\tmajor, minor, patch int64\n\tpre                 string\n\tmetadata            string\n\toriginal            string\n}\n\nfunc init() {\n\tversionRegex = regexp.MustCompile(\"^\" + SemVerRegex + \"$\")\n\tvalidPrereleaseRegex = regexp.MustCompile(ValidPrerelease)\n}\n\n// NewVersion parses a given version and returns an instance of Version or\n// an error if unable to parse the version.\nfunc NewVersion(v string) (*Version, error) {\n\tm := versionRegex.FindStringSubmatch(v)\n\tif m == nil {\n\t\treturn nil, ErrInvalidSemVer\n\t}\n\n\tsv := &Version{\n\t\tmetadata: m[8],\n\t\tpre:      m[5],\n\t\toriginal: v,\n\t}\n\n\tvar temp int64\n\ttemp, err := strconv.ParseInt(m[1], 10, 64)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Error parsing version segment: %s\", err)\n\t}\n\tsv.major = temp\n\n\tif m[2] != \"\" {\n\t\ttemp, err = strconv.ParseInt(strings.TrimPrefix(m[2], \".\"), 10, 64)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"Error parsing version segment: %s\", err)\n\t\t}\n\t\tsv.minor = temp\n\t} else {\n\t\tsv.minor = 0\n\t}\n\n\tif m[3] != \"\" {\n\t\ttemp, err = strconv.ParseInt(strings.TrimPrefix(m[3], \".\"), 10, 64)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"Error parsing version segment: %s\", err)\n\t\t}\n\t\tsv.patch = temp\n\t} else {\n\t\tsv.patch = 0\n\t}\n\n\treturn sv, nil\n}\n\n// MustParse parses a given version and panics on error.\nfunc MustParse(v string) *Version {\n\tsv, err := NewVersion(v)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn sv\n}\n\n// String converts a Version object to a string.\n// Note, if the original version contained a leading v this version will not.\n// See the Original() method to retrieve the original value. Semantic Versions\n// don't contain a leading v per the spec. Instead it's optional on\n// impelementation.\nfunc (v *Version) String() string {\n\tvar buf bytes.Buffer\n\n\tfmt.Fprintf(&buf, \"%d.%d.%d\", v.major, v.minor, v.patch)\n\tif v.pre != \"\" {\n\t\tfmt.Fprintf(&buf, \"-%s\", v.pre)\n\t}\n\tif v.metadata != \"\" {\n\t\tfmt.Fprintf(&buf, \"+%s\", v.metadata)\n\t}\n\n\treturn buf.String()\n}\n\n// Original returns the original value passed in to be parsed.\nfunc (v *Version) Original() string {\n\treturn v.original\n}\n\n// Major returns the major version.\nfunc (v *Version) Major() int64 {\n\treturn v.major\n}\n\n// Minor returns the minor version.\nfunc (v *Version) Minor() int64 {\n\treturn v.minor\n}\n\n// Patch returns the patch version.\nfunc (v *Version) Patch() int64 {\n\treturn v.patch\n}\n\n// Prerelease returns the pre-release version.\nfunc (v *Version) Prerelease() string {\n\treturn v.pre\n}\n\n// Metadata returns the metadata on the version.\nfunc (v *Version) Metadata() string {\n\treturn v.metadata\n}\n\n// originalVPrefix returns the original 'v' prefix if any.\nfunc (v *Version) originalVPrefix() string {\n\n\t// Note, only lowercase v is supported as a prefix by the parser.\n\tif v.original != \"\" && v.original[:1] == \"v\" {\n\t\treturn v.original[:1]\n\t}\n\treturn \"\"\n}\n\n// IncPatch produces the next patch version.\n// If the current version does not have prerelease/metadata information,\n// it unsets metadata and prerelease values, increments patch number.\n// If the current version has any of prerelease or metadata information,\n// it unsets both values and keeps curent patch value\nfunc (v Version) IncPatch() Version {\n\tvNext := v\n\t// according to http://semver.org/#spec-item-9\n\t// Pre-release versions have a lower precedence than the associated normal version.\n\t// according to http://semver.org/#spec-item-10\n\t// Build metadata SHOULD be ignored when determining version precedence.\n\tif v.pre != \"\" {\n\t\tvNext.metadata = \"\"\n\t\tvNext.pre = \"\"\n\t} else {\n\t\tvNext.metadata = \"\"\n\t\tvNext.pre = \"\"\n\t\tvNext.patch = v.patch + 1\n\t}\n\tvNext.original = v.originalVPrefix() + \"\" + vNext.String()\n\treturn vNext\n}\n\n// IncMinor produces the next minor version.\n// Sets patch to 0.\n// Increments minor number.\n// Unsets metadata.\n// Unsets prerelease status.\nfunc (v Version) IncMinor() Version {\n\tvNext := v\n\tvNext.metadata = \"\"\n\tvNext.pre = \"\"\n\tvNext.patch = 0\n\tvNext.minor = v.minor + 1\n\tvNext.original = v.originalVPrefix() + \"\" + vNext.String()\n\treturn vNext\n}\n\n// IncMajor produces the next major version.\n// Sets patch to 0.\n// Sets minor to 0.\n// Increments major number.\n// Unsets metadata.\n// Unsets prerelease status.\nfunc (v Version) IncMajor() Version {\n\tvNext := v\n\tvNext.metadata = \"\"\n\tvNext.pre = \"\"\n\tvNext.patch = 0\n\tvNext.minor = 0\n\tvNext.major = v.major + 1\n\tvNext.original = v.originalVPrefix() + \"\" + vNext.String()\n\treturn vNext\n}\n\n// SetPrerelease defines the prerelease value.\n// Value must not include the required 'hypen' prefix.\nfunc (v Version) SetPrerelease(prerelease string) (Version, error) {\n\tvNext := v\n\tif len(prerelease) > 0 && !validPrereleaseRegex.MatchString(prerelease) {\n\t\treturn vNext, ErrInvalidPrerelease\n\t}\n\tvNext.pre = prerelease\n\tvNext.original = v.originalVPrefix() + \"\" + vNext.String()\n\treturn vNext, nil\n}\n\n// SetMetadata defines metadata value.\n// Value must not include the required 'plus' prefix.\nfunc (v Version) SetMetadata(metadata string) (Version, error) {\n\tvNext := v\n\tif len(metadata) > 0 && !validPrereleaseRegex.MatchString(metadata) {\n\t\treturn vNext, ErrInvalidMetadata\n\t}\n\tvNext.metadata = metadata\n\tvNext.original = v.originalVPrefix() + \"\" + vNext.String()\n\treturn vNext, nil\n}\n\n// LessThan tests if one version is less than another one.\nfunc (v *Version) LessThan(o *Version) bool {\n\treturn v.Compare(o) < 0\n}\n\n// GreaterThan tests if one version is greater than another one.\nfunc (v *Version) GreaterThan(o *Version) bool {\n\treturn v.Compare(o) > 0\n}\n\n// Equal tests if two versions are equal to each other.\n// Note, versions can be equal with different metadata since metadata\n// is not considered part of the comparable version.\nfunc (v *Version) Equal(o *Version) bool {\n\treturn v.Compare(o) == 0\n}\n\n// Compare compares this version to another one. It returns -1, 0, or 1 if\n// the version smaller, equal, or larger than the other version.\n//\n// Versions are compared by X.Y.Z. Build metadata is ignored. Prerelease is\n// lower than the version without a prerelease.\nfunc (v *Version) Compare(o *Version) int {\n\t// Compare the major, minor, and patch version for differences. If a\n\t// difference is found return the comparison.\n\tif d := compareSegment(v.Major(), o.Major()); d != 0 {\n\t\treturn d\n\t}\n\tif d := compareSegment(v.Minor(), o.Minor()); d != 0 {\n\t\treturn d\n\t}\n\tif d := compareSegment(v.Patch(), o.Patch()); d != 0 {\n\t\treturn d\n\t}\n\n\t// At this point the major, minor, and patch versions are the same.\n\tps := v.pre\n\tpo := o.Prerelease()\n\n\tif ps == \"\" && po == \"\" {\n\t\treturn 0\n\t}\n\tif ps == \"\" {\n\t\treturn 1\n\t}\n\tif po == \"\" {\n\t\treturn -1\n\t}\n\n\treturn comparePrerelease(ps, po)\n}\n\n// UnmarshalJSON implements JSON.Unmarshaler interface.\nfunc (v *Version) UnmarshalJSON(b []byte) error {\n\tvar s string\n\tif err := json.Unmarshal(b, &s); err != nil {\n\t\treturn err\n\t}\n\ttemp, err := NewVersion(s)\n\tif err != nil {\n\t\treturn err\n\t}\n\tv.major = temp.major\n\tv.minor = temp.minor\n\tv.patch = temp.patch\n\tv.pre = temp.pre\n\tv.metadata = temp.metadata\n\tv.original = temp.original\n\ttemp = nil\n\treturn nil\n}\n\n// MarshalJSON implements JSON.Marshaler interface.\nfunc (v *Version) MarshalJSON() ([]byte, error) {\n\treturn json.Marshal(v.String())\n}\n\nfunc compareSegment(v, o int64) int {\n\tif v < o {\n\t\treturn -1\n\t}\n\tif v > o {\n\t\treturn 1\n\t}\n\n\treturn 0\n}\n\nfunc comparePrerelease(v, o string) int {\n\n\t// split the prelease versions by their part. The separator, per the spec,\n\t// is a .\n\tsparts := strings.Split(v, \".\")\n\toparts := strings.Split(o, \".\")\n\n\t// Find the longer length of the parts to know how many loop iterations to\n\t// go through.\n\tslen := len(sparts)\n\tolen := len(oparts)\n\n\tl := slen\n\tif olen > slen {\n\t\tl = olen\n\t}\n\n\t// Iterate over each part of the prereleases to compare the differences.\n\tfor i := 0; i < l; i++ {\n\t\t// Since the lentgh of the parts can be different we need to create\n\t\t// a placeholder. This is to avoid out of bounds issues.\n\t\tstemp := \"\"\n\t\tif i < slen {\n\t\t\tstemp = sparts[i]\n\t\t}\n\n\t\totemp := \"\"\n\t\tif i < olen {\n\t\t\totemp = oparts[i]\n\t\t}\n\n\t\td := comparePrePart(stemp, otemp)\n\t\tif d != 0 {\n\t\t\treturn d\n\t\t}\n\t}\n\n\t// Reaching here means two versions are of equal value but have different\n\t// metadata (the part following a +). They are not identical in string form\n\t// but the version comparison finds them to be equal.\n\treturn 0\n}\n\nfunc comparePrePart(s, o string) int {\n\t// Fastpath if they are equal\n\tif s == o {\n\t\treturn 0\n\t}\n\n\t// When s or o are empty we can use the other in an attempt to determine\n\t// the response.\n\tif s == \"\" {\n\t\tif o != \"\" {\n\t\t\treturn -1\n\t\t}\n\t\treturn 1\n\t}\n\n\tif o == \"\" {\n\t\tif s != \"\" {\n\t\t\treturn 1\n\t\t}\n\t\treturn -1\n\t}\n\n\t// When comparing strings \"99\" is greater than \"103\". To handle\n\t// cases like this we need to detect numbers and compare them.\n\n\toi, n1 := strconv.ParseInt(o, 10, 64)\n\tsi, n2 := strconv.ParseInt(s, 10, 64)\n\n\t// The case where both are strings compare the strings\n\tif n1 != nil && n2 != nil {\n\t\tif s > o {\n\t\t\treturn 1\n\t\t}\n\t\treturn -1\n\t} else if n1 != nil {\n\t\t// o is a string and s is a number\n\t\treturn -1\n\t} else if n2 != nil {\n\t\t// s is a string and o is a number\n\t\treturn 1\n\t}\n\t// Both are numbers\n\tif si > oi {\n\t\treturn 1\n\t}\n\treturn -1\n\n}\n"
  },
  {
    "path": "vendor/github.com/alecthomas/template/LICENSE",
    "content": "Copyright (c) 2012 The Go Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "vendor/github.com/alecthomas/template/README.md",
    "content": "# Go's `text/template` package with newline elision\n\nThis is a fork of Go 1.4's [text/template](http://golang.org/pkg/text/template/) package with one addition: a backslash immediately after a closing delimiter will delete all subsequent newlines until a non-newline.\n\neg.\n\n```\n{{if true}}\\\nhello\n{{end}}\\\n```\n\nWill result in:\n\n```\nhello\\n\n```\n\nRather than:\n\n```\n\\n\nhello\\n\n\\n\n```\n"
  },
  {
    "path": "vendor/github.com/alecthomas/template/doc.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n/*\nPackage template implements data-driven templates for generating textual output.\n\nTo generate HTML output, see package html/template, which has the same interface\nas this package but automatically secures HTML output against certain attacks.\n\nTemplates are executed by applying them to a data structure. Annotations in the\ntemplate refer to elements of the data structure (typically a field of a struct\nor a key in a map) to control execution and derive values to be displayed.\nExecution of the template walks the structure and sets the cursor, represented\nby a period '.' and called \"dot\", to the value at the current location in the\nstructure as execution proceeds.\n\nThe input text for a template is UTF-8-encoded text in any format.\n\"Actions\"--data evaluations or control structures--are delimited by\n\"{{\" and \"}}\"; all text outside actions is copied to the output unchanged.\nActions may not span newlines, although comments can.\n\nOnce parsed, a template may be executed safely in parallel.\n\nHere is a trivial example that prints \"17 items are made of wool\".\n\n\ttype Inventory struct {\n\t\tMaterial string\n\t\tCount    uint\n\t}\n\tsweaters := Inventory{\"wool\", 17}\n\ttmpl, err := template.New(\"test\").Parse(\"{{.Count}} items are made of {{.Material}}\")\n\tif err != nil { panic(err) }\n\terr = tmpl.Execute(os.Stdout, sweaters)\n\tif err != nil { panic(err) }\n\nMore intricate examples appear below.\n\nActions\n\nHere is the list of actions. \"Arguments\" and \"pipelines\" are evaluations of\ndata, defined in detail below.\n\n*/\n//\t{{/* a comment */}}\n//\t\tA comment; discarded. May contain newlines.\n//\t\tComments do not nest and must start and end at the\n//\t\tdelimiters, as shown here.\n/*\n\n\t{{pipeline}}\n\t\tThe default textual representation of the value of the pipeline\n\t\tis copied to the output.\n\n\t{{if pipeline}} T1 {{end}}\n\t\tIf the value of the pipeline is empty, no output is generated;\n\t\totherwise, T1 is executed.  The empty values are false, 0, any\n\t\tnil pointer or interface value, and any array, slice, map, or\n\t\tstring of length zero.\n\t\tDot is unaffected.\n\n\t{{if pipeline}} T1 {{else}} T0 {{end}}\n\t\tIf the value of the pipeline is empty, T0 is executed;\n\t\totherwise, T1 is executed.  Dot is unaffected.\n\n\t{{if pipeline}} T1 {{else if pipeline}} T0 {{end}}\n\t\tTo simplify the appearance of if-else chains, the else action\n\t\tof an if may include another if directly; the effect is exactly\n\t\tthe same as writing\n\t\t\t{{if pipeline}} T1 {{else}}{{if pipeline}} T0 {{end}}{{end}}\n\n\t{{range pipeline}} T1 {{end}}\n\t\tThe value of the pipeline must be an array, slice, map, or channel.\n\t\tIf the value of the pipeline has length zero, nothing is output;\n\t\totherwise, dot is set to the successive elements of the array,\n\t\tslice, or map and T1 is executed. If the value is a map and the\n\t\tkeys are of basic type with a defined order (\"comparable\"), the\n\t\telements will be visited in sorted key order.\n\n\t{{range pipeline}} T1 {{else}} T0 {{end}}\n\t\tThe value of the pipeline must be an array, slice, map, or channel.\n\t\tIf the value of the pipeline has length zero, dot is unaffected and\n\t\tT0 is executed; otherwise, dot is set to the successive elements\n\t\tof the array, slice, or map and T1 is executed.\n\n\t{{template \"name\"}}\n\t\tThe template with the specified name is executed with nil data.\n\n\t{{template \"name\" pipeline}}\n\t\tThe template with the specified name is executed with dot set\n\t\tto the value of the pipeline.\n\n\t{{with pipeline}} T1 {{end}}\n\t\tIf the value of the pipeline is empty, no output is generated;\n\t\totherwise, dot is set to the value of the pipeline and T1 is\n\t\texecuted.\n\n\t{{with pipeline}} T1 {{else}} T0 {{end}}\n\t\tIf the value of the pipeline is empty, dot is unaffected and T0\n\t\tis executed; otherwise, dot is set to the value of the pipeline\n\t\tand T1 is executed.\n\nArguments\n\nAn argument is a simple value, denoted by one of the following.\n\n\t- A boolean, string, character, integer, floating-point, imaginary\n\t  or complex constant in Go syntax. These behave like Go's untyped\n\t  constants, although raw strings may not span newlines.\n\t- The keyword nil, representing an untyped Go nil.\n\t- The character '.' (period):\n\t\t.\n\t  The result is the value of dot.\n\t- A variable name, which is a (possibly empty) alphanumeric string\n\t  preceded by a dollar sign, such as\n\t\t$piOver2\n\t  or\n\t\t$\n\t  The result is the value of the variable.\n\t  Variables are described below.\n\t- The name of a field of the data, which must be a struct, preceded\n\t  by a period, such as\n\t\t.Field\n\t  The result is the value of the field. Field invocations may be\n\t  chained:\n\t    .Field1.Field2\n\t  Fields can also be evaluated on variables, including chaining:\n\t    $x.Field1.Field2\n\t- The name of a key of the data, which must be a map, preceded\n\t  by a period, such as\n\t\t.Key\n\t  The result is the map element value indexed by the key.\n\t  Key invocations may be chained and combined with fields to any\n\t  depth:\n\t    .Field1.Key1.Field2.Key2\n\t  Although the key must be an alphanumeric identifier, unlike with\n\t  field names they do not need to start with an upper case letter.\n\t  Keys can also be evaluated on variables, including chaining:\n\t    $x.key1.key2\n\t- The name of a niladic method of the data, preceded by a period,\n\t  such as\n\t\t.Method\n\t  The result is the value of invoking the method with dot as the\n\t  receiver, dot.Method(). Such a method must have one return value (of\n\t  any type) or two return values, the second of which is an error.\n\t  If it has two and the returned error is non-nil, execution terminates\n\t  and an error is returned to the caller as the value of Execute.\n\t  Method invocations may be chained and combined with fields and keys\n\t  to any depth:\n\t    .Field1.Key1.Method1.Field2.Key2.Method2\n\t  Methods can also be evaluated on variables, including chaining:\n\t    $x.Method1.Field\n\t- The name of a niladic function, such as\n\t\tfun\n\t  The result is the value of invoking the function, fun(). The return\n\t  types and values behave as in methods. Functions and function\n\t  names are described below.\n\t- A parenthesized instance of one the above, for grouping. The result\n\t  may be accessed by a field or map key invocation.\n\t\tprint (.F1 arg1) (.F2 arg2)\n\t\t(.StructValuedMethod \"arg\").Field\n\nArguments may evaluate to any type; if they are pointers the implementation\nautomatically indirects to the base type when required.\nIf an evaluation yields a function value, such as a function-valued\nfield of a struct, the function is not invoked automatically, but it\ncan be used as a truth value for an if action and the like. To invoke\nit, use the call function, defined below.\n\nA pipeline is a possibly chained sequence of \"commands\". A command is a simple\nvalue (argument) or a function or method call, possibly with multiple arguments:\n\n\tArgument\n\t\tThe result is the value of evaluating the argument.\n\t.Method [Argument...]\n\t\tThe method can be alone or the last element of a chain but,\n\t\tunlike methods in the middle of a chain, it can take arguments.\n\t\tThe result is the value of calling the method with the\n\t\targuments:\n\t\t\tdot.Method(Argument1, etc.)\n\tfunctionName [Argument...]\n\t\tThe result is the value of calling the function associated\n\t\twith the name:\n\t\t\tfunction(Argument1, etc.)\n\t\tFunctions and function names are described below.\n\nPipelines\n\nA pipeline may be \"chained\" by separating a sequence of commands with pipeline\ncharacters '|'. In a chained pipeline, the result of the each command is\npassed as the last argument of the following command. The output of the final\ncommand in the pipeline is the value of the pipeline.\n\nThe output of a command will be either one value or two values, the second of\nwhich has type error. If that second value is present and evaluates to\nnon-nil, execution terminates and the error is returned to the caller of\nExecute.\n\nVariables\n\nA pipeline inside an action may initialize a variable to capture the result.\nThe initialization has syntax\n\n\t$variable := pipeline\n\nwhere $variable is the name of the variable. An action that declares a\nvariable produces no output.\n\nIf a \"range\" action initializes a variable, the variable is set to the\nsuccessive elements of the iteration.  Also, a \"range\" may declare two\nvariables, separated by a comma:\n\n\trange $index, $element := pipeline\n\nin which case $index and $element are set to the successive values of the\narray/slice index or map key and element, respectively.  Note that if there is\nonly one variable, it is assigned the element; this is opposite to the\nconvention in Go range clauses.\n\nA variable's scope extends to the \"end\" action of the control structure (\"if\",\n\"with\", or \"range\") in which it is declared, or to the end of the template if\nthere is no such control structure.  A template invocation does not inherit\nvariables from the point of its invocation.\n\nWhen execution begins, $ is set to the data argument passed to Execute, that is,\nto the starting value of dot.\n\nExamples\n\nHere are some example one-line templates demonstrating pipelines and variables.\nAll produce the quoted word \"output\":\n\n\t{{\"\\\"output\\\"\"}}\n\t\tA string constant.\n\t{{`\"output\"`}}\n\t\tA raw string constant.\n\t{{printf \"%q\" \"output\"}}\n\t\tA function call.\n\t{{\"output\" | printf \"%q\"}}\n\t\tA function call whose final argument comes from the previous\n\t\tcommand.\n\t{{printf \"%q\" (print \"out\" \"put\")}}\n\t\tA parenthesized argument.\n\t{{\"put\" | printf \"%s%s\" \"out\" | printf \"%q\"}}\n\t\tA more elaborate call.\n\t{{\"output\" | printf \"%s\" | printf \"%q\"}}\n\t\tA longer chain.\n\t{{with \"output\"}}{{printf \"%q\" .}}{{end}}\n\t\tA with action using dot.\n\t{{with $x := \"output\" | printf \"%q\"}}{{$x}}{{end}}\n\t\tA with action that creates and uses a variable.\n\t{{with $x := \"output\"}}{{printf \"%q\" $x}}{{end}}\n\t\tA with action that uses the variable in another action.\n\t{{with $x := \"output\"}}{{$x | printf \"%q\"}}{{end}}\n\t\tThe same, but pipelined.\n\nFunctions\n\nDuring execution functions are found in two function maps: first in the\ntemplate, then in the global function map. By default, no functions are defined\nin the template but the Funcs method can be used to add them.\n\nPredefined global functions are named as follows.\n\n\tand\n\t\tReturns the boolean AND of its arguments by returning the\n\t\tfirst empty argument or the last argument, that is,\n\t\t\"and x y\" behaves as \"if x then y else x\". All the\n\t\targuments are evaluated.\n\tcall\n\t\tReturns the result of calling the first argument, which\n\t\tmust be a function, with the remaining arguments as parameters.\n\t\tThus \"call .X.Y 1 2\" is, in Go notation, dot.X.Y(1, 2) where\n\t\tY is a func-valued field, map entry, or the like.\n\t\tThe first argument must be the result of an evaluation\n\t\tthat yields a value of function type (as distinct from\n\t\ta predefined function such as print). The function must\n\t\treturn either one or two result values, the second of which\n\t\tis of type error. If the arguments don't match the function\n\t\tor the returned error value is non-nil, execution stops.\n\thtml\n\t\tReturns the escaped HTML equivalent of the textual\n\t\trepresentation of its arguments.\n\tindex\n\t\tReturns the result of indexing its first argument by the\n\t\tfollowing arguments. Thus \"index x 1 2 3\" is, in Go syntax,\n\t\tx[1][2][3]. Each indexed item must be a map, slice, or array.\n\tjs\n\t\tReturns the escaped JavaScript equivalent of the textual\n\t\trepresentation of its arguments.\n\tlen\n\t\tReturns the integer length of its argument.\n\tnot\n\t\tReturns the boolean negation of its single argument.\n\tor\n\t\tReturns the boolean OR of its arguments by returning the\n\t\tfirst non-empty argument or the last argument, that is,\n\t\t\"or x y\" behaves as \"if x then x else y\". All the\n\t\targuments are evaluated.\n\tprint\n\t\tAn alias for fmt.Sprint\n\tprintf\n\t\tAn alias for fmt.Sprintf\n\tprintln\n\t\tAn alias for fmt.Sprintln\n\turlquery\n\t\tReturns the escaped value of the textual representation of\n\t\tits arguments in a form suitable for embedding in a URL query.\n\nThe boolean functions take any zero value to be false and a non-zero\nvalue to be true.\n\nThere is also a set of binary comparison operators defined as\nfunctions:\n\n\teq\n\t\tReturns the boolean truth of arg1 == arg2\n\tne\n\t\tReturns the boolean truth of arg1 != arg2\n\tlt\n\t\tReturns the boolean truth of arg1 < arg2\n\tle\n\t\tReturns the boolean truth of arg1 <= arg2\n\tgt\n\t\tReturns the boolean truth of arg1 > arg2\n\tge\n\t\tReturns the boolean truth of arg1 >= arg2\n\nFor simpler multi-way equality tests, eq (only) accepts two or more\narguments and compares the second and subsequent to the first,\nreturning in effect\n\n\targ1==arg2 || arg1==arg3 || arg1==arg4 ...\n\n(Unlike with || in Go, however, eq is a function call and all the\narguments will be evaluated.)\n\nThe comparison functions work on basic types only (or named basic\ntypes, such as \"type Celsius float32\"). They implement the Go rules\nfor comparison of values, except that size and exact type are\nignored, so any integer value, signed or unsigned, may be compared\nwith any other integer value. (The arithmetic value is compared,\nnot the bit pattern, so all negative integers are less than all\nunsigned integers.) However, as usual, one may not compare an int\nwith a float32 and so on.\n\nAssociated templates\n\nEach template is named by a string specified when it is created. Also, each\ntemplate is associated with zero or more other templates that it may invoke by\nname; such associations are transitive and form a name space of templates.\n\nA template may use a template invocation to instantiate another associated\ntemplate; see the explanation of the \"template\" action above. The name must be\nthat of a template associated with the template that contains the invocation.\n\nNested template definitions\n\nWhen parsing a template, another template may be defined and associated with the\ntemplate being parsed. Template definitions must appear at the top level of the\ntemplate, much like global variables in a Go program.\n\nThe syntax of such definitions is to surround each template declaration with a\n\"define\" and \"end\" action.\n\nThe define action names the template being created by providing a string\nconstant. Here is a simple example:\n\n\t`{{define \"T1\"}}ONE{{end}}\n\t{{define \"T2\"}}TWO{{end}}\n\t{{define \"T3\"}}{{template \"T1\"}} {{template \"T2\"}}{{end}}\n\t{{template \"T3\"}}`\n\nThis defines two templates, T1 and T2, and a third T3 that invokes the other two\nwhen it is executed. Finally it invokes T3. If executed this template will\nproduce the text\n\n\tONE TWO\n\nBy construction, a template may reside in only one association. If it's\nnecessary to have a template addressable from multiple associations, the\ntemplate definition must be parsed multiple times to create distinct *Template\nvalues, or must be copied with the Clone or AddParseTree method.\n\nParse may be called multiple times to assemble the various associated templates;\nsee the ParseFiles and ParseGlob functions and methods for simple ways to parse\nrelated templates stored in files.\n\nA template may be executed directly or through ExecuteTemplate, which executes\nan associated template identified by name. To invoke our example above, we\nmight write,\n\n\terr := tmpl.Execute(os.Stdout, \"no data needed\")\n\tif err != nil {\n\t\tlog.Fatalf(\"execution failed: %s\", err)\n\t}\n\nor to invoke a particular template explicitly by name,\n\n\terr := tmpl.ExecuteTemplate(os.Stdout, \"T2\", \"no data needed\")\n\tif err != nil {\n\t\tlog.Fatalf(\"execution failed: %s\", err)\n\t}\n\n*/\npackage template\n"
  },
  {
    "path": "vendor/github.com/alecthomas/template/exec.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage template\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"reflect\"\n\t\"runtime\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"github.com/alecthomas/template/parse\"\n)\n\n// state represents the state of an execution. It's not part of the\n// template so that multiple executions of the same template\n// can execute in parallel.\ntype state struct {\n\ttmpl *Template\n\twr   io.Writer\n\tnode parse.Node // current node, for errors\n\tvars []variable // push-down stack of variable values.\n}\n\n// variable holds the dynamic value of a variable such as $, $x etc.\ntype variable struct {\n\tname  string\n\tvalue reflect.Value\n}\n\n// push pushes a new variable on the stack.\nfunc (s *state) push(name string, value reflect.Value) {\n\ts.vars = append(s.vars, variable{name, value})\n}\n\n// mark returns the length of the variable stack.\nfunc (s *state) mark() int {\n\treturn len(s.vars)\n}\n\n// pop pops the variable stack up to the mark.\nfunc (s *state) pop(mark int) {\n\ts.vars = s.vars[0:mark]\n}\n\n// setVar overwrites the top-nth variable on the stack. Used by range iterations.\nfunc (s *state) setVar(n int, value reflect.Value) {\n\ts.vars[len(s.vars)-n].value = value\n}\n\n// varValue returns the value of the named variable.\nfunc (s *state) varValue(name string) reflect.Value {\n\tfor i := s.mark() - 1; i >= 0; i-- {\n\t\tif s.vars[i].name == name {\n\t\t\treturn s.vars[i].value\n\t\t}\n\t}\n\ts.errorf(\"undefined variable: %s\", name)\n\treturn zero\n}\n\nvar zero reflect.Value\n\n// at marks the state to be on node n, for error reporting.\nfunc (s *state) at(node parse.Node) {\n\ts.node = node\n}\n\n// doublePercent returns the string with %'s replaced by %%, if necessary,\n// so it can be used safely inside a Printf format string.\nfunc doublePercent(str string) string {\n\tif strings.Contains(str, \"%\") {\n\t\tstr = strings.Replace(str, \"%\", \"%%\", -1)\n\t}\n\treturn str\n}\n\n// errorf formats the error and terminates processing.\nfunc (s *state) errorf(format string, args ...interface{}) {\n\tname := doublePercent(s.tmpl.Name())\n\tif s.node == nil {\n\t\tformat = fmt.Sprintf(\"template: %s: %s\", name, format)\n\t} else {\n\t\tlocation, context := s.tmpl.ErrorContext(s.node)\n\t\tformat = fmt.Sprintf(\"template: %s: executing %q at <%s>: %s\", location, name, doublePercent(context), format)\n\t}\n\tpanic(fmt.Errorf(format, args...))\n}\n\n// errRecover is the handler that turns panics into returns from the top\n// level of Parse.\nfunc errRecover(errp *error) {\n\te := recover()\n\tif e != nil {\n\t\tswitch err := e.(type) {\n\t\tcase runtime.Error:\n\t\t\tpanic(e)\n\t\tcase error:\n\t\t\t*errp = err\n\t\tdefault:\n\t\t\tpanic(e)\n\t\t}\n\t}\n}\n\n// ExecuteTemplate applies the template associated with t that has the given name\n// to the specified data object and writes the output to wr.\n// If an error occurs executing the template or writing its output,\n// execution stops, but partial results may already have been written to\n// the output writer.\n// A template may be executed safely in parallel.\nfunc (t *Template) ExecuteTemplate(wr io.Writer, name string, data interface{}) error {\n\ttmpl := t.tmpl[name]\n\tif tmpl == nil {\n\t\treturn fmt.Errorf(\"template: no template %q associated with template %q\", name, t.name)\n\t}\n\treturn tmpl.Execute(wr, data)\n}\n\n// Execute applies a parsed template to the specified data object,\n// and writes the output to wr.\n// If an error occurs executing the template or writing its output,\n// execution stops, but partial results may already have been written to\n// the output writer.\n// A template may be executed safely in parallel.\nfunc (t *Template) Execute(wr io.Writer, data interface{}) (err error) {\n\tdefer errRecover(&err)\n\tvalue := reflect.ValueOf(data)\n\tstate := &state{\n\t\ttmpl: t,\n\t\twr:   wr,\n\t\tvars: []variable{{\"$\", value}},\n\t}\n\tt.init()\n\tif t.Tree == nil || t.Root == nil {\n\t\tvar b bytes.Buffer\n\t\tfor name, tmpl := range t.tmpl {\n\t\t\tif tmpl.Tree == nil || tmpl.Root == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif b.Len() > 0 {\n\t\t\t\tb.WriteString(\", \")\n\t\t\t}\n\t\t\tfmt.Fprintf(&b, \"%q\", name)\n\t\t}\n\t\tvar s string\n\t\tif b.Len() > 0 {\n\t\t\ts = \"; defined templates are: \" + b.String()\n\t\t}\n\t\tstate.errorf(\"%q is an incomplete or empty template%s\", t.Name(), s)\n\t}\n\tstate.walk(value, t.Root)\n\treturn\n}\n\n// Walk functions step through the major pieces of the template structure,\n// generating output as they go.\nfunc (s *state) walk(dot reflect.Value, node parse.Node) {\n\ts.at(node)\n\tswitch node := node.(type) {\n\tcase *parse.ActionNode:\n\t\t// Do not pop variables so they persist until next end.\n\t\t// Also, if the action declares variables, don't print the result.\n\t\tval := s.evalPipeline(dot, node.Pipe)\n\t\tif len(node.Pipe.Decl) == 0 {\n\t\t\ts.printValue(node, val)\n\t\t}\n\tcase *parse.IfNode:\n\t\ts.walkIfOrWith(parse.NodeIf, dot, node.Pipe, node.List, node.ElseList)\n\tcase *parse.ListNode:\n\t\tfor _, node := range node.Nodes {\n\t\t\ts.walk(dot, node)\n\t\t}\n\tcase *parse.RangeNode:\n\t\ts.walkRange(dot, node)\n\tcase *parse.TemplateNode:\n\t\ts.walkTemplate(dot, node)\n\tcase *parse.TextNode:\n\t\tif _, err := s.wr.Write(node.Text); err != nil {\n\t\t\ts.errorf(\"%s\", err)\n\t\t}\n\tcase *parse.WithNode:\n\t\ts.walkIfOrWith(parse.NodeWith, dot, node.Pipe, node.List, node.ElseList)\n\tdefault:\n\t\ts.errorf(\"unknown node: %s\", node)\n\t}\n}\n\n// walkIfOrWith walks an 'if' or 'with' node. The two control structures\n// are identical in behavior except that 'with' sets dot.\nfunc (s *state) walkIfOrWith(typ parse.NodeType, dot reflect.Value, pipe *parse.PipeNode, list, elseList *parse.ListNode) {\n\tdefer s.pop(s.mark())\n\tval := s.evalPipeline(dot, pipe)\n\ttruth, ok := isTrue(val)\n\tif !ok {\n\t\ts.errorf(\"if/with can't use %v\", val)\n\t}\n\tif truth {\n\t\tif typ == parse.NodeWith {\n\t\t\ts.walk(val, list)\n\t\t} else {\n\t\t\ts.walk(dot, list)\n\t\t}\n\t} else if elseList != nil {\n\t\ts.walk(dot, elseList)\n\t}\n}\n\n// isTrue reports whether the value is 'true', in the sense of not the zero of its type,\n// and whether the value has a meaningful truth value.\nfunc isTrue(val reflect.Value) (truth, ok bool) {\n\tif !val.IsValid() {\n\t\t// Something like var x interface{}, never set. It's a form of nil.\n\t\treturn false, true\n\t}\n\tswitch val.Kind() {\n\tcase reflect.Array, reflect.Map, reflect.Slice, reflect.String:\n\t\ttruth = val.Len() > 0\n\tcase reflect.Bool:\n\t\ttruth = val.Bool()\n\tcase reflect.Complex64, reflect.Complex128:\n\t\ttruth = val.Complex() != 0\n\tcase reflect.Chan, reflect.Func, reflect.Ptr, reflect.Interface:\n\t\ttruth = !val.IsNil()\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\ttruth = val.Int() != 0\n\tcase reflect.Float32, reflect.Float64:\n\t\ttruth = val.Float() != 0\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\ttruth = val.Uint() != 0\n\tcase reflect.Struct:\n\t\ttruth = true // Struct values are always true.\n\tdefault:\n\t\treturn\n\t}\n\treturn truth, true\n}\n\nfunc (s *state) walkRange(dot reflect.Value, r *parse.RangeNode) {\n\ts.at(r)\n\tdefer s.pop(s.mark())\n\tval, _ := indirect(s.evalPipeline(dot, r.Pipe))\n\t// mark top of stack before any variables in the body are pushed.\n\tmark := s.mark()\n\toneIteration := func(index, elem reflect.Value) {\n\t\t// Set top var (lexically the second if there are two) to the element.\n\t\tif len(r.Pipe.Decl) > 0 {\n\t\t\ts.setVar(1, elem)\n\t\t}\n\t\t// Set next var (lexically the first if there are two) to the index.\n\t\tif len(r.Pipe.Decl) > 1 {\n\t\t\ts.setVar(2, index)\n\t\t}\n\t\ts.walk(elem, r.List)\n\t\ts.pop(mark)\n\t}\n\tswitch val.Kind() {\n\tcase reflect.Array, reflect.Slice:\n\t\tif val.Len() == 0 {\n\t\t\tbreak\n\t\t}\n\t\tfor i := 0; i < val.Len(); i++ {\n\t\t\toneIteration(reflect.ValueOf(i), val.Index(i))\n\t\t}\n\t\treturn\n\tcase reflect.Map:\n\t\tif val.Len() == 0 {\n\t\t\tbreak\n\t\t}\n\t\tfor _, key := range sortKeys(val.MapKeys()) {\n\t\t\toneIteration(key, val.MapIndex(key))\n\t\t}\n\t\treturn\n\tcase reflect.Chan:\n\t\tif val.IsNil() {\n\t\t\tbreak\n\t\t}\n\t\ti := 0\n\t\tfor ; ; i++ {\n\t\t\telem, ok := val.Recv()\n\t\t\tif !ok {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\toneIteration(reflect.ValueOf(i), elem)\n\t\t}\n\t\tif i == 0 {\n\t\t\tbreak\n\t\t}\n\t\treturn\n\tcase reflect.Invalid:\n\t\tbreak // An invalid value is likely a nil map, etc. and acts like an empty map.\n\tdefault:\n\t\ts.errorf(\"range can't iterate over %v\", val)\n\t}\n\tif r.ElseList != nil {\n\t\ts.walk(dot, r.ElseList)\n\t}\n}\n\nfunc (s *state) walkTemplate(dot reflect.Value, t *parse.TemplateNode) {\n\ts.at(t)\n\ttmpl := s.tmpl.tmpl[t.Name]\n\tif tmpl == nil {\n\t\ts.errorf(\"template %q not defined\", t.Name)\n\t}\n\t// Variables declared by the pipeline persist.\n\tdot = s.evalPipeline(dot, t.Pipe)\n\tnewState := *s\n\tnewState.tmpl = tmpl\n\t// No dynamic scoping: template invocations inherit no variables.\n\tnewState.vars = []variable{{\"$\", dot}}\n\tnewState.walk(dot, tmpl.Root)\n}\n\n// Eval functions evaluate pipelines, commands, and their elements and extract\n// values from the data structure by examining fields, calling methods, and so on.\n// The printing of those values happens only through walk functions.\n\n// evalPipeline returns the value acquired by evaluating a pipeline. If the\n// pipeline has a variable declaration, the variable will be pushed on the\n// stack. Callers should therefore pop the stack after they are finished\n// executing commands depending on the pipeline value.\nfunc (s *state) evalPipeline(dot reflect.Value, pipe *parse.PipeNode) (value reflect.Value) {\n\tif pipe == nil {\n\t\treturn\n\t}\n\ts.at(pipe)\n\tfor _, cmd := range pipe.Cmds {\n\t\tvalue = s.evalCommand(dot, cmd, value) // previous value is this one's final arg.\n\t\t// If the object has type interface{}, dig down one level to the thing inside.\n\t\tif value.Kind() == reflect.Interface && value.Type().NumMethod() == 0 {\n\t\t\tvalue = reflect.ValueOf(value.Interface()) // lovely!\n\t\t}\n\t}\n\tfor _, variable := range pipe.Decl {\n\t\ts.push(variable.Ident[0], value)\n\t}\n\treturn value\n}\n\nfunc (s *state) notAFunction(args []parse.Node, final reflect.Value) {\n\tif len(args) > 1 || final.IsValid() {\n\t\ts.errorf(\"can't give argument to non-function %s\", args[0])\n\t}\n}\n\nfunc (s *state) evalCommand(dot reflect.Value, cmd *parse.CommandNode, final reflect.Value) reflect.Value {\n\tfirstWord := cmd.Args[0]\n\tswitch n := firstWord.(type) {\n\tcase *parse.FieldNode:\n\t\treturn s.evalFieldNode(dot, n, cmd.Args, final)\n\tcase *parse.ChainNode:\n\t\treturn s.evalChainNode(dot, n, cmd.Args, final)\n\tcase *parse.IdentifierNode:\n\t\t// Must be a function.\n\t\treturn s.evalFunction(dot, n, cmd, cmd.Args, final)\n\tcase *parse.PipeNode:\n\t\t// Parenthesized pipeline. The arguments are all inside the pipeline; final is ignored.\n\t\treturn s.evalPipeline(dot, n)\n\tcase *parse.VariableNode:\n\t\treturn s.evalVariableNode(dot, n, cmd.Args, final)\n\t}\n\ts.at(firstWord)\n\ts.notAFunction(cmd.Args, final)\n\tswitch word := firstWord.(type) {\n\tcase *parse.BoolNode:\n\t\treturn reflect.ValueOf(word.True)\n\tcase *parse.DotNode:\n\t\treturn dot\n\tcase *parse.NilNode:\n\t\ts.errorf(\"nil is not a command\")\n\tcase *parse.NumberNode:\n\t\treturn s.idealConstant(word)\n\tcase *parse.StringNode:\n\t\treturn reflect.ValueOf(word.Text)\n\t}\n\ts.errorf(\"can't evaluate command %q\", firstWord)\n\tpanic(\"not reached\")\n}\n\n// idealConstant is called to return the value of a number in a context where\n// we don't know the type. In that case, the syntax of the number tells us\n// its type, and we use Go rules to resolve.  Note there is no such thing as\n// a uint ideal constant in this situation - the value must be of int type.\nfunc (s *state) idealConstant(constant *parse.NumberNode) reflect.Value {\n\t// These are ideal constants but we don't know the type\n\t// and we have no context.  (If it was a method argument,\n\t// we'd know what we need.) The syntax guides us to some extent.\n\ts.at(constant)\n\tswitch {\n\tcase constant.IsComplex:\n\t\treturn reflect.ValueOf(constant.Complex128) // incontrovertible.\n\tcase constant.IsFloat && !isHexConstant(constant.Text) && strings.IndexAny(constant.Text, \".eE\") >= 0:\n\t\treturn reflect.ValueOf(constant.Float64)\n\tcase constant.IsInt:\n\t\tn := int(constant.Int64)\n\t\tif int64(n) != constant.Int64 {\n\t\t\ts.errorf(\"%s overflows int\", constant.Text)\n\t\t}\n\t\treturn reflect.ValueOf(n)\n\tcase constant.IsUint:\n\t\ts.errorf(\"%s overflows int\", constant.Text)\n\t}\n\treturn zero\n}\n\nfunc isHexConstant(s string) bool {\n\treturn len(s) > 2 && s[0] == '0' && (s[1] == 'x' || s[1] == 'X')\n}\n\nfunc (s *state) evalFieldNode(dot reflect.Value, field *parse.FieldNode, args []parse.Node, final reflect.Value) reflect.Value {\n\ts.at(field)\n\treturn s.evalFieldChain(dot, dot, field, field.Ident, args, final)\n}\n\nfunc (s *state) evalChainNode(dot reflect.Value, chain *parse.ChainNode, args []parse.Node, final reflect.Value) reflect.Value {\n\ts.at(chain)\n\t// (pipe).Field1.Field2 has pipe as .Node, fields as .Field. Eval the pipeline, then the fields.\n\tpipe := s.evalArg(dot, nil, chain.Node)\n\tif len(chain.Field) == 0 {\n\t\ts.errorf(\"internal error: no fields in evalChainNode\")\n\t}\n\treturn s.evalFieldChain(dot, pipe, chain, chain.Field, args, final)\n}\n\nfunc (s *state) evalVariableNode(dot reflect.Value, variable *parse.VariableNode, args []parse.Node, final reflect.Value) reflect.Value {\n\t// $x.Field has $x as the first ident, Field as the second. Eval the var, then the fields.\n\ts.at(variable)\n\tvalue := s.varValue(variable.Ident[0])\n\tif len(variable.Ident) == 1 {\n\t\ts.notAFunction(args, final)\n\t\treturn value\n\t}\n\treturn s.evalFieldChain(dot, value, variable, variable.Ident[1:], args, final)\n}\n\n// evalFieldChain evaluates .X.Y.Z possibly followed by arguments.\n// dot is the environment in which to evaluate arguments, while\n// receiver is the value being walked along the chain.\nfunc (s *state) evalFieldChain(dot, receiver reflect.Value, node parse.Node, ident []string, args []parse.Node, final reflect.Value) reflect.Value {\n\tn := len(ident)\n\tfor i := 0; i < n-1; i++ {\n\t\treceiver = s.evalField(dot, ident[i], node, nil, zero, receiver)\n\t}\n\t// Now if it's a method, it gets the arguments.\n\treturn s.evalField(dot, ident[n-1], node, args, final, receiver)\n}\n\nfunc (s *state) evalFunction(dot reflect.Value, node *parse.IdentifierNode, cmd parse.Node, args []parse.Node, final reflect.Value) reflect.Value {\n\ts.at(node)\n\tname := node.Ident\n\tfunction, ok := findFunction(name, s.tmpl)\n\tif !ok {\n\t\ts.errorf(\"%q is not a defined function\", name)\n\t}\n\treturn s.evalCall(dot, function, cmd, name, args, final)\n}\n\n// evalField evaluates an expression like (.Field) or (.Field arg1 arg2).\n// The 'final' argument represents the return value from the preceding\n// value of the pipeline, if any.\nfunc (s *state) evalField(dot reflect.Value, fieldName string, node parse.Node, args []parse.Node, final, receiver reflect.Value) reflect.Value {\n\tif !receiver.IsValid() {\n\t\treturn zero\n\t}\n\ttyp := receiver.Type()\n\treceiver, _ = indirect(receiver)\n\t// Unless it's an interface, need to get to a value of type *T to guarantee\n\t// we see all methods of T and *T.\n\tptr := receiver\n\tif ptr.Kind() != reflect.Interface && ptr.CanAddr() {\n\t\tptr = ptr.Addr()\n\t}\n\tif method := ptr.MethodByName(fieldName); method.IsValid() {\n\t\treturn s.evalCall(dot, method, node, fieldName, args, final)\n\t}\n\thasArgs := len(args) > 1 || final.IsValid()\n\t// It's not a method; must be a field of a struct or an element of a map. The receiver must not be nil.\n\treceiver, isNil := indirect(receiver)\n\tif isNil {\n\t\ts.errorf(\"nil pointer evaluating %s.%s\", typ, fieldName)\n\t}\n\tswitch receiver.Kind() {\n\tcase reflect.Struct:\n\t\ttField, ok := receiver.Type().FieldByName(fieldName)\n\t\tif ok {\n\t\t\tfield := receiver.FieldByIndex(tField.Index)\n\t\t\tif tField.PkgPath != \"\" { // field is unexported\n\t\t\t\ts.errorf(\"%s is an unexported field of struct type %s\", fieldName, typ)\n\t\t\t}\n\t\t\t// If it's a function, we must call it.\n\t\t\tif hasArgs {\n\t\t\t\ts.errorf(\"%s has arguments but cannot be invoked as function\", fieldName)\n\t\t\t}\n\t\t\treturn field\n\t\t}\n\t\ts.errorf(\"%s is not a field of struct type %s\", fieldName, typ)\n\tcase reflect.Map:\n\t\t// If it's a map, attempt to use the field name as a key.\n\t\tnameVal := reflect.ValueOf(fieldName)\n\t\tif nameVal.Type().AssignableTo(receiver.Type().Key()) {\n\t\t\tif hasArgs {\n\t\t\t\ts.errorf(\"%s is not a method but has arguments\", fieldName)\n\t\t\t}\n\t\t\treturn receiver.MapIndex(nameVal)\n\t\t}\n\t}\n\ts.errorf(\"can't evaluate field %s in type %s\", fieldName, typ)\n\tpanic(\"not reached\")\n}\n\nvar (\n\terrorType       = reflect.TypeOf((*error)(nil)).Elem()\n\tfmtStringerType = reflect.TypeOf((*fmt.Stringer)(nil)).Elem()\n)\n\n// evalCall executes a function or method call. If it's a method, fun already has the receiver bound, so\n// it looks just like a function call.  The arg list, if non-nil, includes (in the manner of the shell), arg[0]\n// as the function itself.\nfunc (s *state) evalCall(dot, fun reflect.Value, node parse.Node, name string, args []parse.Node, final reflect.Value) reflect.Value {\n\tif args != nil {\n\t\targs = args[1:] // Zeroth arg is function name/node; not passed to function.\n\t}\n\ttyp := fun.Type()\n\tnumIn := len(args)\n\tif final.IsValid() {\n\t\tnumIn++\n\t}\n\tnumFixed := len(args)\n\tif typ.IsVariadic() {\n\t\tnumFixed = typ.NumIn() - 1 // last arg is the variadic one.\n\t\tif numIn < numFixed {\n\t\t\ts.errorf(\"wrong number of args for %s: want at least %d got %d\", name, typ.NumIn()-1, len(args))\n\t\t}\n\t} else if numIn < typ.NumIn()-1 || !typ.IsVariadic() && numIn != typ.NumIn() {\n\t\ts.errorf(\"wrong number of args for %s: want %d got %d\", name, typ.NumIn(), len(args))\n\t}\n\tif !goodFunc(typ) {\n\t\t// TODO: This could still be a confusing error; maybe goodFunc should provide info.\n\t\ts.errorf(\"can't call method/function %q with %d results\", name, typ.NumOut())\n\t}\n\t// Build the arg list.\n\targv := make([]reflect.Value, numIn)\n\t// Args must be evaluated. Fixed args first.\n\ti := 0\n\tfor ; i < numFixed && i < len(args); i++ {\n\t\targv[i] = s.evalArg(dot, typ.In(i), args[i])\n\t}\n\t// Now the ... args.\n\tif typ.IsVariadic() {\n\t\targType := typ.In(typ.NumIn() - 1).Elem() // Argument is a slice.\n\t\tfor ; i < len(args); i++ {\n\t\t\targv[i] = s.evalArg(dot, argType, args[i])\n\t\t}\n\t}\n\t// Add final value if necessary.\n\tif final.IsValid() {\n\t\tt := typ.In(typ.NumIn() - 1)\n\t\tif typ.IsVariadic() {\n\t\t\tt = t.Elem()\n\t\t}\n\t\targv[i] = s.validateType(final, t)\n\t}\n\tresult := fun.Call(argv)\n\t// If we have an error that is not nil, stop execution and return that error to the caller.\n\tif len(result) == 2 && !result[1].IsNil() {\n\t\ts.at(node)\n\t\ts.errorf(\"error calling %s: %s\", name, result[1].Interface().(error))\n\t}\n\treturn result[0]\n}\n\n// canBeNil reports whether an untyped nil can be assigned to the type. See reflect.Zero.\nfunc canBeNil(typ reflect.Type) bool {\n\tswitch typ.Kind() {\n\tcase reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice:\n\t\treturn true\n\t}\n\treturn false\n}\n\n// validateType guarantees that the value is valid and assignable to the type.\nfunc (s *state) validateType(value reflect.Value, typ reflect.Type) reflect.Value {\n\tif !value.IsValid() {\n\t\tif typ == nil || canBeNil(typ) {\n\t\t\t// An untyped nil interface{}. Accept as a proper nil value.\n\t\t\treturn reflect.Zero(typ)\n\t\t}\n\t\ts.errorf(\"invalid value; expected %s\", typ)\n\t}\n\tif typ != nil && !value.Type().AssignableTo(typ) {\n\t\tif value.Kind() == reflect.Interface && !value.IsNil() {\n\t\t\tvalue = value.Elem()\n\t\t\tif value.Type().AssignableTo(typ) {\n\t\t\t\treturn value\n\t\t\t}\n\t\t\t// fallthrough\n\t\t}\n\t\t// Does one dereference or indirection work? We could do more, as we\n\t\t// do with method receivers, but that gets messy and method receivers\n\t\t// are much more constrained, so it makes more sense there than here.\n\t\t// Besides, one is almost always all you need.\n\t\tswitch {\n\t\tcase value.Kind() == reflect.Ptr && value.Type().Elem().AssignableTo(typ):\n\t\t\tvalue = value.Elem()\n\t\t\tif !value.IsValid() {\n\t\t\t\ts.errorf(\"dereference of nil pointer of type %s\", typ)\n\t\t\t}\n\t\tcase reflect.PtrTo(value.Type()).AssignableTo(typ) && value.CanAddr():\n\t\t\tvalue = value.Addr()\n\t\tdefault:\n\t\t\ts.errorf(\"wrong type for value; expected %s; got %s\", typ, value.Type())\n\t\t}\n\t}\n\treturn value\n}\n\nfunc (s *state) evalArg(dot reflect.Value, typ reflect.Type, n parse.Node) reflect.Value {\n\ts.at(n)\n\tswitch arg := n.(type) {\n\tcase *parse.DotNode:\n\t\treturn s.validateType(dot, typ)\n\tcase *parse.NilNode:\n\t\tif canBeNil(typ) {\n\t\t\treturn reflect.Zero(typ)\n\t\t}\n\t\ts.errorf(\"cannot assign nil to %s\", typ)\n\tcase *parse.FieldNode:\n\t\treturn s.validateType(s.evalFieldNode(dot, arg, []parse.Node{n}, zero), typ)\n\tcase *parse.VariableNode:\n\t\treturn s.validateType(s.evalVariableNode(dot, arg, nil, zero), typ)\n\tcase *parse.PipeNode:\n\t\treturn s.validateType(s.evalPipeline(dot, arg), typ)\n\tcase *parse.IdentifierNode:\n\t\treturn s.evalFunction(dot, arg, arg, nil, zero)\n\tcase *parse.ChainNode:\n\t\treturn s.validateType(s.evalChainNode(dot, arg, nil, zero), typ)\n\t}\n\tswitch typ.Kind() {\n\tcase reflect.Bool:\n\t\treturn s.evalBool(typ, n)\n\tcase reflect.Complex64, reflect.Complex128:\n\t\treturn s.evalComplex(typ, n)\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn s.evalFloat(typ, n)\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\treturn s.evalInteger(typ, n)\n\tcase reflect.Interface:\n\t\tif typ.NumMethod() == 0 {\n\t\t\treturn s.evalEmptyInterface(dot, n)\n\t\t}\n\tcase reflect.String:\n\t\treturn s.evalString(typ, n)\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\treturn s.evalUnsignedInteger(typ, n)\n\t}\n\ts.errorf(\"can't handle %s for arg of type %s\", n, typ)\n\tpanic(\"not reached\")\n}\n\nfunc (s *state) evalBool(typ reflect.Type, n parse.Node) reflect.Value {\n\ts.at(n)\n\tif n, ok := n.(*parse.BoolNode); ok {\n\t\tvalue := reflect.New(typ).Elem()\n\t\tvalue.SetBool(n.True)\n\t\treturn value\n\t}\n\ts.errorf(\"expected bool; found %s\", n)\n\tpanic(\"not reached\")\n}\n\nfunc (s *state) evalString(typ reflect.Type, n parse.Node) reflect.Value {\n\ts.at(n)\n\tif n, ok := n.(*parse.StringNode); ok {\n\t\tvalue := reflect.New(typ).Elem()\n\t\tvalue.SetString(n.Text)\n\t\treturn value\n\t}\n\ts.errorf(\"expected string; found %s\", n)\n\tpanic(\"not reached\")\n}\n\nfunc (s *state) evalInteger(typ reflect.Type, n parse.Node) reflect.Value {\n\ts.at(n)\n\tif n, ok := n.(*parse.NumberNode); ok && n.IsInt {\n\t\tvalue := reflect.New(typ).Elem()\n\t\tvalue.SetInt(n.Int64)\n\t\treturn value\n\t}\n\ts.errorf(\"expected integer; found %s\", n)\n\tpanic(\"not reached\")\n}\n\nfunc (s *state) evalUnsignedInteger(typ reflect.Type, n parse.Node) reflect.Value {\n\ts.at(n)\n\tif n, ok := n.(*parse.NumberNode); ok && n.IsUint {\n\t\tvalue := reflect.New(typ).Elem()\n\t\tvalue.SetUint(n.Uint64)\n\t\treturn value\n\t}\n\ts.errorf(\"expected unsigned integer; found %s\", n)\n\tpanic(\"not reached\")\n}\n\nfunc (s *state) evalFloat(typ reflect.Type, n parse.Node) reflect.Value {\n\ts.at(n)\n\tif n, ok := n.(*parse.NumberNode); ok && n.IsFloat {\n\t\tvalue := reflect.New(typ).Elem()\n\t\tvalue.SetFloat(n.Float64)\n\t\treturn value\n\t}\n\ts.errorf(\"expected float; found %s\", n)\n\tpanic(\"not reached\")\n}\n\nfunc (s *state) evalComplex(typ reflect.Type, n parse.Node) reflect.Value {\n\tif n, ok := n.(*parse.NumberNode); ok && n.IsComplex {\n\t\tvalue := reflect.New(typ).Elem()\n\t\tvalue.SetComplex(n.Complex128)\n\t\treturn value\n\t}\n\ts.errorf(\"expected complex; found %s\", n)\n\tpanic(\"not reached\")\n}\n\nfunc (s *state) evalEmptyInterface(dot reflect.Value, n parse.Node) reflect.Value {\n\ts.at(n)\n\tswitch n := n.(type) {\n\tcase *parse.BoolNode:\n\t\treturn reflect.ValueOf(n.True)\n\tcase *parse.DotNode:\n\t\treturn dot\n\tcase *parse.FieldNode:\n\t\treturn s.evalFieldNode(dot, n, nil, zero)\n\tcase *parse.IdentifierNode:\n\t\treturn s.evalFunction(dot, n, n, nil, zero)\n\tcase *parse.NilNode:\n\t\t// NilNode is handled in evalArg, the only place that calls here.\n\t\ts.errorf(\"evalEmptyInterface: nil (can't happen)\")\n\tcase *parse.NumberNode:\n\t\treturn s.idealConstant(n)\n\tcase *parse.StringNode:\n\t\treturn reflect.ValueOf(n.Text)\n\tcase *parse.VariableNode:\n\t\treturn s.evalVariableNode(dot, n, nil, zero)\n\tcase *parse.PipeNode:\n\t\treturn s.evalPipeline(dot, n)\n\t}\n\ts.errorf(\"can't handle assignment of %s to empty interface argument\", n)\n\tpanic(\"not reached\")\n}\n\n// indirect returns the item at the end of indirection, and a bool to indicate if it's nil.\n// We indirect through pointers and empty interfaces (only) because\n// non-empty interfaces have methods we might need.\nfunc indirect(v reflect.Value) (rv reflect.Value, isNil bool) {\n\tfor ; v.Kind() == reflect.Ptr || v.Kind() == reflect.Interface; v = v.Elem() {\n\t\tif v.IsNil() {\n\t\t\treturn v, true\n\t\t}\n\t\tif v.Kind() == reflect.Interface && v.NumMethod() > 0 {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn v, false\n}\n\n// printValue writes the textual representation of the value to the output of\n// the template.\nfunc (s *state) printValue(n parse.Node, v reflect.Value) {\n\ts.at(n)\n\tiface, ok := printableValue(v)\n\tif !ok {\n\t\ts.errorf(\"can't print %s of type %s\", n, v.Type())\n\t}\n\tfmt.Fprint(s.wr, iface)\n}\n\n// printableValue returns the, possibly indirected, interface value inside v that\n// is best for a call to formatted printer.\nfunc printableValue(v reflect.Value) (interface{}, bool) {\n\tif v.Kind() == reflect.Ptr {\n\t\tv, _ = indirect(v) // fmt.Fprint handles nil.\n\t}\n\tif !v.IsValid() {\n\t\treturn \"<no value>\", true\n\t}\n\n\tif !v.Type().Implements(errorType) && !v.Type().Implements(fmtStringerType) {\n\t\tif v.CanAddr() && (reflect.PtrTo(v.Type()).Implements(errorType) || reflect.PtrTo(v.Type()).Implements(fmtStringerType)) {\n\t\t\tv = v.Addr()\n\t\t} else {\n\t\t\tswitch v.Kind() {\n\t\t\tcase reflect.Chan, reflect.Func:\n\t\t\t\treturn nil, false\n\t\t\t}\n\t\t}\n\t}\n\treturn v.Interface(), true\n}\n\n// Types to help sort the keys in a map for reproducible output.\n\ntype rvs []reflect.Value\n\nfunc (x rvs) Len() int      { return len(x) }\nfunc (x rvs) Swap(i, j int) { x[i], x[j] = x[j], x[i] }\n\ntype rvInts struct{ rvs }\n\nfunc (x rvInts) Less(i, j int) bool { return x.rvs[i].Int() < x.rvs[j].Int() }\n\ntype rvUints struct{ rvs }\n\nfunc (x rvUints) Less(i, j int) bool { return x.rvs[i].Uint() < x.rvs[j].Uint() }\n\ntype rvFloats struct{ rvs }\n\nfunc (x rvFloats) Less(i, j int) bool { return x.rvs[i].Float() < x.rvs[j].Float() }\n\ntype rvStrings struct{ rvs }\n\nfunc (x rvStrings) Less(i, j int) bool { return x.rvs[i].String() < x.rvs[j].String() }\n\n// sortKeys sorts (if it can) the slice of reflect.Values, which is a slice of map keys.\nfunc sortKeys(v []reflect.Value) []reflect.Value {\n\tif len(v) <= 1 {\n\t\treturn v\n\t}\n\tswitch v[0].Kind() {\n\tcase reflect.Float32, reflect.Float64:\n\t\tsort.Sort(rvFloats{v})\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\tsort.Sort(rvInts{v})\n\tcase reflect.String:\n\t\tsort.Sort(rvStrings{v})\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\tsort.Sort(rvUints{v})\n\t}\n\treturn v\n}\n"
  },
  {
    "path": "vendor/github.com/alecthomas/template/funcs.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage template\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/url\"\n\t\"reflect\"\n\t\"strings\"\n\t\"unicode\"\n\t\"unicode/utf8\"\n)\n\n// FuncMap is the type of the map defining the mapping from names to functions.\n// Each function must have either a single return value, or two return values of\n// which the second has type error. In that case, if the second (error)\n// return value evaluates to non-nil during execution, execution terminates and\n// Execute returns that error.\ntype FuncMap map[string]interface{}\n\nvar builtins = FuncMap{\n\t\"and\":      and,\n\t\"call\":     call,\n\t\"html\":     HTMLEscaper,\n\t\"index\":    index,\n\t\"js\":       JSEscaper,\n\t\"len\":      length,\n\t\"not\":      not,\n\t\"or\":       or,\n\t\"print\":    fmt.Sprint,\n\t\"printf\":   fmt.Sprintf,\n\t\"println\":  fmt.Sprintln,\n\t\"urlquery\": URLQueryEscaper,\n\n\t// Comparisons\n\t\"eq\": eq, // ==\n\t\"ge\": ge, // >=\n\t\"gt\": gt, // >\n\t\"le\": le, // <=\n\t\"lt\": lt, // <\n\t\"ne\": ne, // !=\n}\n\nvar builtinFuncs = createValueFuncs(builtins)\n\n// createValueFuncs turns a FuncMap into a map[string]reflect.Value\nfunc createValueFuncs(funcMap FuncMap) map[string]reflect.Value {\n\tm := make(map[string]reflect.Value)\n\taddValueFuncs(m, funcMap)\n\treturn m\n}\n\n// addValueFuncs adds to values the functions in funcs, converting them to reflect.Values.\nfunc addValueFuncs(out map[string]reflect.Value, in FuncMap) {\n\tfor name, fn := range in {\n\t\tv := reflect.ValueOf(fn)\n\t\tif v.Kind() != reflect.Func {\n\t\t\tpanic(\"value for \" + name + \" not a function\")\n\t\t}\n\t\tif !goodFunc(v.Type()) {\n\t\t\tpanic(fmt.Errorf(\"can't install method/function %q with %d results\", name, v.Type().NumOut()))\n\t\t}\n\t\tout[name] = v\n\t}\n}\n\n// addFuncs adds to values the functions in funcs. It does no checking of the input -\n// call addValueFuncs first.\nfunc addFuncs(out, in FuncMap) {\n\tfor name, fn := range in {\n\t\tout[name] = fn\n\t}\n}\n\n// goodFunc checks that the function or method has the right result signature.\nfunc goodFunc(typ reflect.Type) bool {\n\t// We allow functions with 1 result or 2 results where the second is an error.\n\tswitch {\n\tcase typ.NumOut() == 1:\n\t\treturn true\n\tcase typ.NumOut() == 2 && typ.Out(1) == errorType:\n\t\treturn true\n\t}\n\treturn false\n}\n\n// findFunction looks for a function in the template, and global map.\nfunc findFunction(name string, tmpl *Template) (reflect.Value, bool) {\n\tif tmpl != nil && tmpl.common != nil {\n\t\tif fn := tmpl.execFuncs[name]; fn.IsValid() {\n\t\t\treturn fn, true\n\t\t}\n\t}\n\tif fn := builtinFuncs[name]; fn.IsValid() {\n\t\treturn fn, true\n\t}\n\treturn reflect.Value{}, false\n}\n\n// Indexing.\n\n// index returns the result of indexing its first argument by the following\n// arguments.  Thus \"index x 1 2 3\" is, in Go syntax, x[1][2][3]. Each\n// indexed item must be a map, slice, or array.\nfunc index(item interface{}, indices ...interface{}) (interface{}, error) {\n\tv := reflect.ValueOf(item)\n\tfor _, i := range indices {\n\t\tindex := reflect.ValueOf(i)\n\t\tvar isNil bool\n\t\tif v, isNil = indirect(v); isNil {\n\t\t\treturn nil, fmt.Errorf(\"index of nil pointer\")\n\t\t}\n\t\tswitch v.Kind() {\n\t\tcase reflect.Array, reflect.Slice, reflect.String:\n\t\t\tvar x int64\n\t\t\tswitch index.Kind() {\n\t\t\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\t\t\tx = index.Int()\n\t\t\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\t\t\tx = int64(index.Uint())\n\t\t\tdefault:\n\t\t\t\treturn nil, fmt.Errorf(\"cannot index slice/array with type %s\", index.Type())\n\t\t\t}\n\t\t\tif x < 0 || x >= int64(v.Len()) {\n\t\t\t\treturn nil, fmt.Errorf(\"index out of range: %d\", x)\n\t\t\t}\n\t\t\tv = v.Index(int(x))\n\t\tcase reflect.Map:\n\t\t\tif !index.IsValid() {\n\t\t\t\tindex = reflect.Zero(v.Type().Key())\n\t\t\t}\n\t\t\tif !index.Type().AssignableTo(v.Type().Key()) {\n\t\t\t\treturn nil, fmt.Errorf(\"%s is not index type for %s\", index.Type(), v.Type())\n\t\t\t}\n\t\t\tif x := v.MapIndex(index); x.IsValid() {\n\t\t\t\tv = x\n\t\t\t} else {\n\t\t\t\tv = reflect.Zero(v.Type().Elem())\n\t\t\t}\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"can't index item of type %s\", v.Type())\n\t\t}\n\t}\n\treturn v.Interface(), nil\n}\n\n// Length\n\n// length returns the length of the item, with an error if it has no defined length.\nfunc length(item interface{}) (int, error) {\n\tv, isNil := indirect(reflect.ValueOf(item))\n\tif isNil {\n\t\treturn 0, fmt.Errorf(\"len of nil pointer\")\n\t}\n\tswitch v.Kind() {\n\tcase reflect.Array, reflect.Chan, reflect.Map, reflect.Slice, reflect.String:\n\t\treturn v.Len(), nil\n\t}\n\treturn 0, fmt.Errorf(\"len of type %s\", v.Type())\n}\n\n// Function invocation\n\n// call returns the result of evaluating the first argument as a function.\n// The function must return 1 result, or 2 results, the second of which is an error.\nfunc call(fn interface{}, args ...interface{}) (interface{}, error) {\n\tv := reflect.ValueOf(fn)\n\ttyp := v.Type()\n\tif typ.Kind() != reflect.Func {\n\t\treturn nil, fmt.Errorf(\"non-function of type %s\", typ)\n\t}\n\tif !goodFunc(typ) {\n\t\treturn nil, fmt.Errorf(\"function called with %d args; should be 1 or 2\", typ.NumOut())\n\t}\n\tnumIn := typ.NumIn()\n\tvar dddType reflect.Type\n\tif typ.IsVariadic() {\n\t\tif len(args) < numIn-1 {\n\t\t\treturn nil, fmt.Errorf(\"wrong number of args: got %d want at least %d\", len(args), numIn-1)\n\t\t}\n\t\tdddType = typ.In(numIn - 1).Elem()\n\t} else {\n\t\tif len(args) != numIn {\n\t\t\treturn nil, fmt.Errorf(\"wrong number of args: got %d want %d\", len(args), numIn)\n\t\t}\n\t}\n\targv := make([]reflect.Value, len(args))\n\tfor i, arg := range args {\n\t\tvalue := reflect.ValueOf(arg)\n\t\t// Compute the expected type. Clumsy because of variadics.\n\t\tvar argType reflect.Type\n\t\tif !typ.IsVariadic() || i < numIn-1 {\n\t\t\targType = typ.In(i)\n\t\t} else {\n\t\t\targType = dddType\n\t\t}\n\t\tif !value.IsValid() && canBeNil(argType) {\n\t\t\tvalue = reflect.Zero(argType)\n\t\t}\n\t\tif !value.Type().AssignableTo(argType) {\n\t\t\treturn nil, fmt.Errorf(\"arg %d has type %s; should be %s\", i, value.Type(), argType)\n\t\t}\n\t\targv[i] = value\n\t}\n\tresult := v.Call(argv)\n\tif len(result) == 2 && !result[1].IsNil() {\n\t\treturn result[0].Interface(), result[1].Interface().(error)\n\t}\n\treturn result[0].Interface(), nil\n}\n\n// Boolean logic.\n\nfunc truth(a interface{}) bool {\n\tt, _ := isTrue(reflect.ValueOf(a))\n\treturn t\n}\n\n// and computes the Boolean AND of its arguments, returning\n// the first false argument it encounters, or the last argument.\nfunc and(arg0 interface{}, args ...interface{}) interface{} {\n\tif !truth(arg0) {\n\t\treturn arg0\n\t}\n\tfor i := range args {\n\t\targ0 = args[i]\n\t\tif !truth(arg0) {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn arg0\n}\n\n// or computes the Boolean OR of its arguments, returning\n// the first true argument it encounters, or the last argument.\nfunc or(arg0 interface{}, args ...interface{}) interface{} {\n\tif truth(arg0) {\n\t\treturn arg0\n\t}\n\tfor i := range args {\n\t\targ0 = args[i]\n\t\tif truth(arg0) {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn arg0\n}\n\n// not returns the Boolean negation of its argument.\nfunc not(arg interface{}) (truth bool) {\n\ttruth, _ = isTrue(reflect.ValueOf(arg))\n\treturn !truth\n}\n\n// Comparison.\n\n// TODO: Perhaps allow comparison between signed and unsigned integers.\n\nvar (\n\terrBadComparisonType = errors.New(\"invalid type for comparison\")\n\terrBadComparison     = errors.New(\"incompatible types for comparison\")\n\terrNoComparison      = errors.New(\"missing argument for comparison\")\n)\n\ntype kind int\n\nconst (\n\tinvalidKind kind = iota\n\tboolKind\n\tcomplexKind\n\tintKind\n\tfloatKind\n\tintegerKind\n\tstringKind\n\tuintKind\n)\n\nfunc basicKind(v reflect.Value) (kind, error) {\n\tswitch v.Kind() {\n\tcase reflect.Bool:\n\t\treturn boolKind, nil\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\treturn intKind, nil\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\treturn uintKind, nil\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn floatKind, nil\n\tcase reflect.Complex64, reflect.Complex128:\n\t\treturn complexKind, nil\n\tcase reflect.String:\n\t\treturn stringKind, nil\n\t}\n\treturn invalidKind, errBadComparisonType\n}\n\n// eq evaluates the comparison a == b || a == c || ...\nfunc eq(arg1 interface{}, arg2 ...interface{}) (bool, error) {\n\tv1 := reflect.ValueOf(arg1)\n\tk1, err := basicKind(v1)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\tif len(arg2) == 0 {\n\t\treturn false, errNoComparison\n\t}\n\tfor _, arg := range arg2 {\n\t\tv2 := reflect.ValueOf(arg)\n\t\tk2, err := basicKind(v2)\n\t\tif err != nil {\n\t\t\treturn false, err\n\t\t}\n\t\ttruth := false\n\t\tif k1 != k2 {\n\t\t\t// Special case: Can compare integer values regardless of type's sign.\n\t\t\tswitch {\n\t\t\tcase k1 == intKind && k2 == uintKind:\n\t\t\t\ttruth = v1.Int() >= 0 && uint64(v1.Int()) == v2.Uint()\n\t\t\tcase k1 == uintKind && k2 == intKind:\n\t\t\t\ttruth = v2.Int() >= 0 && v1.Uint() == uint64(v2.Int())\n\t\t\tdefault:\n\t\t\t\treturn false, errBadComparison\n\t\t\t}\n\t\t} else {\n\t\t\tswitch k1 {\n\t\t\tcase boolKind:\n\t\t\t\ttruth = v1.Bool() == v2.Bool()\n\t\t\tcase complexKind:\n\t\t\t\ttruth = v1.Complex() == v2.Complex()\n\t\t\tcase floatKind:\n\t\t\t\ttruth = v1.Float() == v2.Float()\n\t\t\tcase intKind:\n\t\t\t\ttruth = v1.Int() == v2.Int()\n\t\t\tcase stringKind:\n\t\t\t\ttruth = v1.String() == v2.String()\n\t\t\tcase uintKind:\n\t\t\t\ttruth = v1.Uint() == v2.Uint()\n\t\t\tdefault:\n\t\t\t\tpanic(\"invalid kind\")\n\t\t\t}\n\t\t}\n\t\tif truth {\n\t\t\treturn true, nil\n\t\t}\n\t}\n\treturn false, nil\n}\n\n// ne evaluates the comparison a != b.\nfunc ne(arg1, arg2 interface{}) (bool, error) {\n\t// != is the inverse of ==.\n\tequal, err := eq(arg1, arg2)\n\treturn !equal, err\n}\n\n// lt evaluates the comparison a < b.\nfunc lt(arg1, arg2 interface{}) (bool, error) {\n\tv1 := reflect.ValueOf(arg1)\n\tk1, err := basicKind(v1)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\tv2 := reflect.ValueOf(arg2)\n\tk2, err := basicKind(v2)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\ttruth := false\n\tif k1 != k2 {\n\t\t// Special case: Can compare integer values regardless of type's sign.\n\t\tswitch {\n\t\tcase k1 == intKind && k2 == uintKind:\n\t\t\ttruth = v1.Int() < 0 || uint64(v1.Int()) < v2.Uint()\n\t\tcase k1 == uintKind && k2 == intKind:\n\t\t\ttruth = v2.Int() >= 0 && v1.Uint() < uint64(v2.Int())\n\t\tdefault:\n\t\t\treturn false, errBadComparison\n\t\t}\n\t} else {\n\t\tswitch k1 {\n\t\tcase boolKind, complexKind:\n\t\t\treturn false, errBadComparisonType\n\t\tcase floatKind:\n\t\t\ttruth = v1.Float() < v2.Float()\n\t\tcase intKind:\n\t\t\ttruth = v1.Int() < v2.Int()\n\t\tcase stringKind:\n\t\t\ttruth = v1.String() < v2.String()\n\t\tcase uintKind:\n\t\t\ttruth = v1.Uint() < v2.Uint()\n\t\tdefault:\n\t\t\tpanic(\"invalid kind\")\n\t\t}\n\t}\n\treturn truth, nil\n}\n\n// le evaluates the comparison <= b.\nfunc le(arg1, arg2 interface{}) (bool, error) {\n\t// <= is < or ==.\n\tlessThan, err := lt(arg1, arg2)\n\tif lessThan || err != nil {\n\t\treturn lessThan, err\n\t}\n\treturn eq(arg1, arg2)\n}\n\n// gt evaluates the comparison a > b.\nfunc gt(arg1, arg2 interface{}) (bool, error) {\n\t// > is the inverse of <=.\n\tlessOrEqual, err := le(arg1, arg2)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\treturn !lessOrEqual, nil\n}\n\n// ge evaluates the comparison a >= b.\nfunc ge(arg1, arg2 interface{}) (bool, error) {\n\t// >= is the inverse of <.\n\tlessThan, err := lt(arg1, arg2)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\treturn !lessThan, nil\n}\n\n// HTML escaping.\n\nvar (\n\thtmlQuot = []byte(\"&#34;\") // shorter than \"&quot;\"\n\thtmlApos = []byte(\"&#39;\") // shorter than \"&apos;\" and apos was not in HTML until HTML5\n\thtmlAmp  = []byte(\"&amp;\")\n\thtmlLt   = []byte(\"&lt;\")\n\thtmlGt   = []byte(\"&gt;\")\n)\n\n// HTMLEscape writes to w the escaped HTML equivalent of the plain text data b.\nfunc HTMLEscape(w io.Writer, b []byte) {\n\tlast := 0\n\tfor i, c := range b {\n\t\tvar html []byte\n\t\tswitch c {\n\t\tcase '\"':\n\t\t\thtml = htmlQuot\n\t\tcase '\\'':\n\t\t\thtml = htmlApos\n\t\tcase '&':\n\t\t\thtml = htmlAmp\n\t\tcase '<':\n\t\t\thtml = htmlLt\n\t\tcase '>':\n\t\t\thtml = htmlGt\n\t\tdefault:\n\t\t\tcontinue\n\t\t}\n\t\tw.Write(b[last:i])\n\t\tw.Write(html)\n\t\tlast = i + 1\n\t}\n\tw.Write(b[last:])\n}\n\n// HTMLEscapeString returns the escaped HTML equivalent of the plain text data s.\nfunc HTMLEscapeString(s string) string {\n\t// Avoid allocation if we can.\n\tif strings.IndexAny(s, `'\"&<>`) < 0 {\n\t\treturn s\n\t}\n\tvar b bytes.Buffer\n\tHTMLEscape(&b, []byte(s))\n\treturn b.String()\n}\n\n// HTMLEscaper returns the escaped HTML equivalent of the textual\n// representation of its arguments.\nfunc HTMLEscaper(args ...interface{}) string {\n\treturn HTMLEscapeString(evalArgs(args))\n}\n\n// JavaScript escaping.\n\nvar (\n\tjsLowUni = []byte(`\\u00`)\n\thex      = []byte(\"0123456789ABCDEF\")\n\n\tjsBackslash = []byte(`\\\\`)\n\tjsApos      = []byte(`\\'`)\n\tjsQuot      = []byte(`\\\"`)\n\tjsLt        = []byte(`\\x3C`)\n\tjsGt        = []byte(`\\x3E`)\n)\n\n// JSEscape writes to w the escaped JavaScript equivalent of the plain text data b.\nfunc JSEscape(w io.Writer, b []byte) {\n\tlast := 0\n\tfor i := 0; i < len(b); i++ {\n\t\tc := b[i]\n\n\t\tif !jsIsSpecial(rune(c)) {\n\t\t\t// fast path: nothing to do\n\t\t\tcontinue\n\t\t}\n\t\tw.Write(b[last:i])\n\n\t\tif c < utf8.RuneSelf {\n\t\t\t// Quotes, slashes and angle brackets get quoted.\n\t\t\t// Control characters get written as \\u00XX.\n\t\t\tswitch c {\n\t\t\tcase '\\\\':\n\t\t\t\tw.Write(jsBackslash)\n\t\t\tcase '\\'':\n\t\t\t\tw.Write(jsApos)\n\t\t\tcase '\"':\n\t\t\t\tw.Write(jsQuot)\n\t\t\tcase '<':\n\t\t\t\tw.Write(jsLt)\n\t\t\tcase '>':\n\t\t\t\tw.Write(jsGt)\n\t\t\tdefault:\n\t\t\t\tw.Write(jsLowUni)\n\t\t\t\tt, b := c>>4, c&0x0f\n\t\t\t\tw.Write(hex[t : t+1])\n\t\t\t\tw.Write(hex[b : b+1])\n\t\t\t}\n\t\t} else {\n\t\t\t// Unicode rune.\n\t\t\tr, size := utf8.DecodeRune(b[i:])\n\t\t\tif unicode.IsPrint(r) {\n\t\t\t\tw.Write(b[i : i+size])\n\t\t\t} else {\n\t\t\t\tfmt.Fprintf(w, \"\\\\u%04X\", r)\n\t\t\t}\n\t\t\ti += size - 1\n\t\t}\n\t\tlast = i + 1\n\t}\n\tw.Write(b[last:])\n}\n\n// JSEscapeString returns the escaped JavaScript equivalent of the plain text data s.\nfunc JSEscapeString(s string) string {\n\t// Avoid allocation if we can.\n\tif strings.IndexFunc(s, jsIsSpecial) < 0 {\n\t\treturn s\n\t}\n\tvar b bytes.Buffer\n\tJSEscape(&b, []byte(s))\n\treturn b.String()\n}\n\nfunc jsIsSpecial(r rune) bool {\n\tswitch r {\n\tcase '\\\\', '\\'', '\"', '<', '>':\n\t\treturn true\n\t}\n\treturn r < ' ' || utf8.RuneSelf <= r\n}\n\n// JSEscaper returns the escaped JavaScript equivalent of the textual\n// representation of its arguments.\nfunc JSEscaper(args ...interface{}) string {\n\treturn JSEscapeString(evalArgs(args))\n}\n\n// URLQueryEscaper returns the escaped value of the textual representation of\n// its arguments in a form suitable for embedding in a URL query.\nfunc URLQueryEscaper(args ...interface{}) string {\n\treturn url.QueryEscape(evalArgs(args))\n}\n\n// evalArgs formats the list of arguments into a string. It is therefore equivalent to\n//\tfmt.Sprint(args...)\n// except that each argument is indirected (if a pointer), as required,\n// using the same rules as the default string evaluation during template\n// execution.\nfunc evalArgs(args []interface{}) string {\n\tok := false\n\tvar s string\n\t// Fast path for simple common case.\n\tif len(args) == 1 {\n\t\ts, ok = args[0].(string)\n\t}\n\tif !ok {\n\t\tfor i, arg := range args {\n\t\t\ta, ok := printableValue(reflect.ValueOf(arg))\n\t\t\tif ok {\n\t\t\t\targs[i] = a\n\t\t\t} // else left fmt do its thing\n\t\t}\n\t\ts = fmt.Sprint(args...)\n\t}\n\treturn s\n}\n"
  },
  {
    "path": "vendor/github.com/alecthomas/template/helper.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Helper functions to make constructing templates easier.\n\npackage template\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"path/filepath\"\n)\n\n// Functions and methods to parse templates.\n\n// Must is a helper that wraps a call to a function returning (*Template, error)\n// and panics if the error is non-nil. It is intended for use in variable\n// initializations such as\n//\tvar t = template.Must(template.New(\"name\").Parse(\"text\"))\nfunc Must(t *Template, err error) *Template {\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn t\n}\n\n// ParseFiles creates a new Template and parses the template definitions from\n// the named files. The returned template's name will have the (base) name and\n// (parsed) contents of the first file. There must be at least one file.\n// If an error occurs, parsing stops and the returned *Template is nil.\nfunc ParseFiles(filenames ...string) (*Template, error) {\n\treturn parseFiles(nil, filenames...)\n}\n\n// ParseFiles parses the named files and associates the resulting templates with\n// t. If an error occurs, parsing stops and the returned template is nil;\n// otherwise it is t. There must be at least one file.\nfunc (t *Template) ParseFiles(filenames ...string) (*Template, error) {\n\treturn parseFiles(t, filenames...)\n}\n\n// parseFiles is the helper for the method and function. If the argument\n// template is nil, it is created from the first file.\nfunc parseFiles(t *Template, filenames ...string) (*Template, error) {\n\tif len(filenames) == 0 {\n\t\t// Not really a problem, but be consistent.\n\t\treturn nil, fmt.Errorf(\"template: no files named in call to ParseFiles\")\n\t}\n\tfor _, filename := range filenames {\n\t\tb, err := ioutil.ReadFile(filename)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ts := string(b)\n\t\tname := filepath.Base(filename)\n\t\t// First template becomes return value if not already defined,\n\t\t// and we use that one for subsequent New calls to associate\n\t\t// all the templates together. Also, if this file has the same name\n\t\t// as t, this file becomes the contents of t, so\n\t\t//  t, err := New(name).Funcs(xxx).ParseFiles(name)\n\t\t// works. Otherwise we create a new template associated with t.\n\t\tvar tmpl *Template\n\t\tif t == nil {\n\t\t\tt = New(name)\n\t\t}\n\t\tif name == t.Name() {\n\t\t\ttmpl = t\n\t\t} else {\n\t\t\ttmpl = t.New(name)\n\t\t}\n\t\t_, err = tmpl.Parse(s)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\treturn t, nil\n}\n\n// ParseGlob creates a new Template and parses the template definitions from the\n// files identified by the pattern, which must match at least one file. The\n// returned template will have the (base) name and (parsed) contents of the\n// first file matched by the pattern. ParseGlob is equivalent to calling\n// ParseFiles with the list of files matched by the pattern.\nfunc ParseGlob(pattern string) (*Template, error) {\n\treturn parseGlob(nil, pattern)\n}\n\n// ParseGlob parses the template definitions in the files identified by the\n// pattern and associates the resulting templates with t. The pattern is\n// processed by filepath.Glob and must match at least one file. ParseGlob is\n// equivalent to calling t.ParseFiles with the list of files matched by the\n// pattern.\nfunc (t *Template) ParseGlob(pattern string) (*Template, error) {\n\treturn parseGlob(t, pattern)\n}\n\n// parseGlob is the implementation of the function and method ParseGlob.\nfunc parseGlob(t *Template, pattern string) (*Template, error) {\n\tfilenames, err := filepath.Glob(pattern)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(filenames) == 0 {\n\t\treturn nil, fmt.Errorf(\"template: pattern matches no files: %#q\", pattern)\n\t}\n\treturn parseFiles(t, filenames...)\n}\n"
  },
  {
    "path": "vendor/github.com/alecthomas/template/parse/lex.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage parse\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\t\"unicode\"\n\t\"unicode/utf8\"\n)\n\n// item represents a token or text string returned from the scanner.\ntype item struct {\n\ttyp itemType // The type of this item.\n\tpos Pos      // The starting position, in bytes, of this item in the input string.\n\tval string   // The value of this item.\n}\n\nfunc (i item) String() string {\n\tswitch {\n\tcase i.typ == itemEOF:\n\t\treturn \"EOF\"\n\tcase i.typ == itemError:\n\t\treturn i.val\n\tcase i.typ > itemKeyword:\n\t\treturn fmt.Sprintf(\"<%s>\", i.val)\n\tcase len(i.val) > 10:\n\t\treturn fmt.Sprintf(\"%.10q...\", i.val)\n\t}\n\treturn fmt.Sprintf(\"%q\", i.val)\n}\n\n// itemType identifies the type of lex items.\ntype itemType int\n\nconst (\n\titemError        itemType = iota // error occurred; value is text of error\n\titemBool                         // boolean constant\n\titemChar                         // printable ASCII character; grab bag for comma etc.\n\titemCharConstant                 // character constant\n\titemComplex                      // complex constant (1+2i); imaginary is just a number\n\titemColonEquals                  // colon-equals (':=') introducing a declaration\n\titemEOF\n\titemField        // alphanumeric identifier starting with '.'\n\titemIdentifier   // alphanumeric identifier not starting with '.'\n\titemLeftDelim    // left action delimiter\n\titemLeftParen    // '(' inside action\n\titemNumber       // simple number, including imaginary\n\titemPipe         // pipe symbol\n\titemRawString    // raw quoted string (includes quotes)\n\titemRightDelim   // right action delimiter\n\titemElideNewline // elide newline after right delim\n\titemRightParen   // ')' inside action\n\titemSpace        // run of spaces separating arguments\n\titemString       // quoted string (includes quotes)\n\titemText         // plain text\n\titemVariable     // variable starting with '$', such as '$' or  '$1' or '$hello'\n\t// Keywords appear after all the rest.\n\titemKeyword  // used only to delimit the keywords\n\titemDot      // the cursor, spelled '.'\n\titemDefine   // define keyword\n\titemElse     // else keyword\n\titemEnd      // end keyword\n\titemIf       // if keyword\n\titemNil      // the untyped nil constant, easiest to treat as a keyword\n\titemRange    // range keyword\n\titemTemplate // template keyword\n\titemWith     // with keyword\n)\n\nvar key = map[string]itemType{\n\t\".\":        itemDot,\n\t\"define\":   itemDefine,\n\t\"else\":     itemElse,\n\t\"end\":      itemEnd,\n\t\"if\":       itemIf,\n\t\"range\":    itemRange,\n\t\"nil\":      itemNil,\n\t\"template\": itemTemplate,\n\t\"with\":     itemWith,\n}\n\nconst eof = -1\n\n// stateFn represents the state of the scanner as a function that returns the next state.\ntype stateFn func(*lexer) stateFn\n\n// lexer holds the state of the scanner.\ntype lexer struct {\n\tname       string    // the name of the input; used only for error reports\n\tinput      string    // the string being scanned\n\tleftDelim  string    // start of action\n\trightDelim string    // end of action\n\tstate      stateFn   // the next lexing function to enter\n\tpos        Pos       // current position in the input\n\tstart      Pos       // start position of this item\n\twidth      Pos       // width of last rune read from input\n\tlastPos    Pos       // position of most recent item returned by nextItem\n\titems      chan item // channel of scanned items\n\tparenDepth int       // nesting depth of ( ) exprs\n}\n\n// next returns the next rune in the input.\nfunc (l *lexer) next() rune {\n\tif int(l.pos) >= len(l.input) {\n\t\tl.width = 0\n\t\treturn eof\n\t}\n\tr, w := utf8.DecodeRuneInString(l.input[l.pos:])\n\tl.width = Pos(w)\n\tl.pos += l.width\n\treturn r\n}\n\n// peek returns but does not consume the next rune in the input.\nfunc (l *lexer) peek() rune {\n\tr := l.next()\n\tl.backup()\n\treturn r\n}\n\n// backup steps back one rune. Can only be called once per call of next.\nfunc (l *lexer) backup() {\n\tl.pos -= l.width\n}\n\n// emit passes an item back to the client.\nfunc (l *lexer) emit(t itemType) {\n\tl.items <- item{t, l.start, l.input[l.start:l.pos]}\n\tl.start = l.pos\n}\n\n// ignore skips over the pending input before this point.\nfunc (l *lexer) ignore() {\n\tl.start = l.pos\n}\n\n// accept consumes the next rune if it's from the valid set.\nfunc (l *lexer) accept(valid string) bool {\n\tif strings.IndexRune(valid, l.next()) >= 0 {\n\t\treturn true\n\t}\n\tl.backup()\n\treturn false\n}\n\n// acceptRun consumes a run of runes from the valid set.\nfunc (l *lexer) acceptRun(valid string) {\n\tfor strings.IndexRune(valid, l.next()) >= 0 {\n\t}\n\tl.backup()\n}\n\n// lineNumber reports which line we're on, based on the position of\n// the previous item returned by nextItem. Doing it this way\n// means we don't have to worry about peek double counting.\nfunc (l *lexer) lineNumber() int {\n\treturn 1 + strings.Count(l.input[:l.lastPos], \"\\n\")\n}\n\n// errorf returns an error token and terminates the scan by passing\n// back a nil pointer that will be the next state, terminating l.nextItem.\nfunc (l *lexer) errorf(format string, args ...interface{}) stateFn {\n\tl.items <- item{itemError, l.start, fmt.Sprintf(format, args...)}\n\treturn nil\n}\n\n// nextItem returns the next item from the input.\nfunc (l *lexer) nextItem() item {\n\titem := <-l.items\n\tl.lastPos = item.pos\n\treturn item\n}\n\n// lex creates a new scanner for the input string.\nfunc lex(name, input, left, right string) *lexer {\n\tif left == \"\" {\n\t\tleft = leftDelim\n\t}\n\tif right == \"\" {\n\t\tright = rightDelim\n\t}\n\tl := &lexer{\n\t\tname:       name,\n\t\tinput:      input,\n\t\tleftDelim:  left,\n\t\trightDelim: right,\n\t\titems:      make(chan item),\n\t}\n\tgo l.run()\n\treturn l\n}\n\n// run runs the state machine for the lexer.\nfunc (l *lexer) run() {\n\tfor l.state = lexText; l.state != nil; {\n\t\tl.state = l.state(l)\n\t}\n}\n\n// state functions\n\nconst (\n\tleftDelim    = \"{{\"\n\trightDelim   = \"}}\"\n\tleftComment  = \"/*\"\n\trightComment = \"*/\"\n)\n\n// lexText scans until an opening action delimiter, \"{{\".\nfunc lexText(l *lexer) stateFn {\n\tfor {\n\t\tif strings.HasPrefix(l.input[l.pos:], l.leftDelim) {\n\t\t\tif l.pos > l.start {\n\t\t\t\tl.emit(itemText)\n\t\t\t}\n\t\t\treturn lexLeftDelim\n\t\t}\n\t\tif l.next() == eof {\n\t\t\tbreak\n\t\t}\n\t}\n\t// Correctly reached EOF.\n\tif l.pos > l.start {\n\t\tl.emit(itemText)\n\t}\n\tl.emit(itemEOF)\n\treturn nil\n}\n\n// lexLeftDelim scans the left delimiter, which is known to be present.\nfunc lexLeftDelim(l *lexer) stateFn {\n\tl.pos += Pos(len(l.leftDelim))\n\tif strings.HasPrefix(l.input[l.pos:], leftComment) {\n\t\treturn lexComment\n\t}\n\tl.emit(itemLeftDelim)\n\tl.parenDepth = 0\n\treturn lexInsideAction\n}\n\n// lexComment scans a comment. The left comment marker is known to be present.\nfunc lexComment(l *lexer) stateFn {\n\tl.pos += Pos(len(leftComment))\n\ti := strings.Index(l.input[l.pos:], rightComment)\n\tif i < 0 {\n\t\treturn l.errorf(\"unclosed comment\")\n\t}\n\tl.pos += Pos(i + len(rightComment))\n\tif !strings.HasPrefix(l.input[l.pos:], l.rightDelim) {\n\t\treturn l.errorf(\"comment ends before closing delimiter\")\n\n\t}\n\tl.pos += Pos(len(l.rightDelim))\n\tl.ignore()\n\treturn lexText\n}\n\n// lexRightDelim scans the right delimiter, which is known to be present.\nfunc lexRightDelim(l *lexer) stateFn {\n\tl.pos += Pos(len(l.rightDelim))\n\tl.emit(itemRightDelim)\n\tif l.peek() == '\\\\' {\n\t\tl.pos++\n\t\tl.emit(itemElideNewline)\n\t}\n\treturn lexText\n}\n\n// lexInsideAction scans the elements inside action delimiters.\nfunc lexInsideAction(l *lexer) stateFn {\n\t// Either number, quoted string, or identifier.\n\t// Spaces separate arguments; runs of spaces turn into itemSpace.\n\t// Pipe symbols separate and are emitted.\n\tif strings.HasPrefix(l.input[l.pos:], l.rightDelim+\"\\\\\") || strings.HasPrefix(l.input[l.pos:], l.rightDelim) {\n\t\tif l.parenDepth == 0 {\n\t\t\treturn lexRightDelim\n\t\t}\n\t\treturn l.errorf(\"unclosed left paren\")\n\t}\n\tswitch r := l.next(); {\n\tcase r == eof || isEndOfLine(r):\n\t\treturn l.errorf(\"unclosed action\")\n\tcase isSpace(r):\n\t\treturn lexSpace\n\tcase r == ':':\n\t\tif l.next() != '=' {\n\t\t\treturn l.errorf(\"expected :=\")\n\t\t}\n\t\tl.emit(itemColonEquals)\n\tcase r == '|':\n\t\tl.emit(itemPipe)\n\tcase r == '\"':\n\t\treturn lexQuote\n\tcase r == '`':\n\t\treturn lexRawQuote\n\tcase r == '$':\n\t\treturn lexVariable\n\tcase r == '\\'':\n\t\treturn lexChar\n\tcase r == '.':\n\t\t// special look-ahead for \".field\" so we don't break l.backup().\n\t\tif l.pos < Pos(len(l.input)) {\n\t\t\tr := l.input[l.pos]\n\t\t\tif r < '0' || '9' < r {\n\t\t\t\treturn lexField\n\t\t\t}\n\t\t}\n\t\tfallthrough // '.' can start a number.\n\tcase r == '+' || r == '-' || ('0' <= r && r <= '9'):\n\t\tl.backup()\n\t\treturn lexNumber\n\tcase isAlphaNumeric(r):\n\t\tl.backup()\n\t\treturn lexIdentifier\n\tcase r == '(':\n\t\tl.emit(itemLeftParen)\n\t\tl.parenDepth++\n\t\treturn lexInsideAction\n\tcase r == ')':\n\t\tl.emit(itemRightParen)\n\t\tl.parenDepth--\n\t\tif l.parenDepth < 0 {\n\t\t\treturn l.errorf(\"unexpected right paren %#U\", r)\n\t\t}\n\t\treturn lexInsideAction\n\tcase r <= unicode.MaxASCII && unicode.IsPrint(r):\n\t\tl.emit(itemChar)\n\t\treturn lexInsideAction\n\tdefault:\n\t\treturn l.errorf(\"unrecognized character in action: %#U\", r)\n\t}\n\treturn lexInsideAction\n}\n\n// lexSpace scans a run of space characters.\n// One space has already been seen.\nfunc lexSpace(l *lexer) stateFn {\n\tfor isSpace(l.peek()) {\n\t\tl.next()\n\t}\n\tl.emit(itemSpace)\n\treturn lexInsideAction\n}\n\n// lexIdentifier scans an alphanumeric.\nfunc lexIdentifier(l *lexer) stateFn {\nLoop:\n\tfor {\n\t\tswitch r := l.next(); {\n\t\tcase isAlphaNumeric(r):\n\t\t\t// absorb.\n\t\tdefault:\n\t\t\tl.backup()\n\t\t\tword := l.input[l.start:l.pos]\n\t\t\tif !l.atTerminator() {\n\t\t\t\treturn l.errorf(\"bad character %#U\", r)\n\t\t\t}\n\t\t\tswitch {\n\t\t\tcase key[word] > itemKeyword:\n\t\t\t\tl.emit(key[word])\n\t\t\tcase word[0] == '.':\n\t\t\t\tl.emit(itemField)\n\t\t\tcase word == \"true\", word == \"false\":\n\t\t\t\tl.emit(itemBool)\n\t\t\tdefault:\n\t\t\t\tl.emit(itemIdentifier)\n\t\t\t}\n\t\t\tbreak Loop\n\t\t}\n\t}\n\treturn lexInsideAction\n}\n\n// lexField scans a field: .Alphanumeric.\n// The . has been scanned.\nfunc lexField(l *lexer) stateFn {\n\treturn lexFieldOrVariable(l, itemField)\n}\n\n// lexVariable scans a Variable: $Alphanumeric.\n// The $ has been scanned.\nfunc lexVariable(l *lexer) stateFn {\n\tif l.atTerminator() { // Nothing interesting follows -> \"$\".\n\t\tl.emit(itemVariable)\n\t\treturn lexInsideAction\n\t}\n\treturn lexFieldOrVariable(l, itemVariable)\n}\n\n// lexVariable scans a field or variable: [.$]Alphanumeric.\n// The . or $ has been scanned.\nfunc lexFieldOrVariable(l *lexer, typ itemType) stateFn {\n\tif l.atTerminator() { // Nothing interesting follows -> \".\" or \"$\".\n\t\tif typ == itemVariable {\n\t\t\tl.emit(itemVariable)\n\t\t} else {\n\t\t\tl.emit(itemDot)\n\t\t}\n\t\treturn lexInsideAction\n\t}\n\tvar r rune\n\tfor {\n\t\tr = l.next()\n\t\tif !isAlphaNumeric(r) {\n\t\t\tl.backup()\n\t\t\tbreak\n\t\t}\n\t}\n\tif !l.atTerminator() {\n\t\treturn l.errorf(\"bad character %#U\", r)\n\t}\n\tl.emit(typ)\n\treturn lexInsideAction\n}\n\n// atTerminator reports whether the input is at valid termination character to\n// appear after an identifier. Breaks .X.Y into two pieces. Also catches cases\n// like \"$x+2\" not being acceptable without a space, in case we decide one\n// day to implement arithmetic.\nfunc (l *lexer) atTerminator() bool {\n\tr := l.peek()\n\tif isSpace(r) || isEndOfLine(r) {\n\t\treturn true\n\t}\n\tswitch r {\n\tcase eof, '.', ',', '|', ':', ')', '(':\n\t\treturn true\n\t}\n\t// Does r start the delimiter? This can be ambiguous (with delim==\"//\", $x/2 will\n\t// succeed but should fail) but only in extremely rare cases caused by willfully\n\t// bad choice of delimiter.\n\tif rd, _ := utf8.DecodeRuneInString(l.rightDelim); rd == r {\n\t\treturn true\n\t}\n\treturn false\n}\n\n// lexChar scans a character constant. The initial quote is already\n// scanned. Syntax checking is done by the parser.\nfunc lexChar(l *lexer) stateFn {\nLoop:\n\tfor {\n\t\tswitch l.next() {\n\t\tcase '\\\\':\n\t\t\tif r := l.next(); r != eof && r != '\\n' {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase eof, '\\n':\n\t\t\treturn l.errorf(\"unterminated character constant\")\n\t\tcase '\\'':\n\t\t\tbreak Loop\n\t\t}\n\t}\n\tl.emit(itemCharConstant)\n\treturn lexInsideAction\n}\n\n// lexNumber scans a number: decimal, octal, hex, float, or imaginary. This\n// isn't a perfect number scanner - for instance it accepts \".\" and \"0x0.2\"\n// and \"089\" - but when it's wrong the input is invalid and the parser (via\n// strconv) will notice.\nfunc lexNumber(l *lexer) stateFn {\n\tif !l.scanNumber() {\n\t\treturn l.errorf(\"bad number syntax: %q\", l.input[l.start:l.pos])\n\t}\n\tif sign := l.peek(); sign == '+' || sign == '-' {\n\t\t// Complex: 1+2i. No spaces, must end in 'i'.\n\t\tif !l.scanNumber() || l.input[l.pos-1] != 'i' {\n\t\t\treturn l.errorf(\"bad number syntax: %q\", l.input[l.start:l.pos])\n\t\t}\n\t\tl.emit(itemComplex)\n\t} else {\n\t\tl.emit(itemNumber)\n\t}\n\treturn lexInsideAction\n}\n\nfunc (l *lexer) scanNumber() bool {\n\t// Optional leading sign.\n\tl.accept(\"+-\")\n\t// Is it hex?\n\tdigits := \"0123456789\"\n\tif l.accept(\"0\") && l.accept(\"xX\") {\n\t\tdigits = \"0123456789abcdefABCDEF\"\n\t}\n\tl.acceptRun(digits)\n\tif l.accept(\".\") {\n\t\tl.acceptRun(digits)\n\t}\n\tif l.accept(\"eE\") {\n\t\tl.accept(\"+-\")\n\t\tl.acceptRun(\"0123456789\")\n\t}\n\t// Is it imaginary?\n\tl.accept(\"i\")\n\t// Next thing mustn't be alphanumeric.\n\tif isAlphaNumeric(l.peek()) {\n\t\tl.next()\n\t\treturn false\n\t}\n\treturn true\n}\n\n// lexQuote scans a quoted string.\nfunc lexQuote(l *lexer) stateFn {\nLoop:\n\tfor {\n\t\tswitch l.next() {\n\t\tcase '\\\\':\n\t\t\tif r := l.next(); r != eof && r != '\\n' {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase eof, '\\n':\n\t\t\treturn l.errorf(\"unterminated quoted string\")\n\t\tcase '\"':\n\t\t\tbreak Loop\n\t\t}\n\t}\n\tl.emit(itemString)\n\treturn lexInsideAction\n}\n\n// lexRawQuote scans a raw quoted string.\nfunc lexRawQuote(l *lexer) stateFn {\nLoop:\n\tfor {\n\t\tswitch l.next() {\n\t\tcase eof, '\\n':\n\t\t\treturn l.errorf(\"unterminated raw quoted string\")\n\t\tcase '`':\n\t\t\tbreak Loop\n\t\t}\n\t}\n\tl.emit(itemRawString)\n\treturn lexInsideAction\n}\n\n// isSpace reports whether r is a space character.\nfunc isSpace(r rune) bool {\n\treturn r == ' ' || r == '\\t'\n}\n\n// isEndOfLine reports whether r is an end-of-line character.\nfunc isEndOfLine(r rune) bool {\n\treturn r == '\\r' || r == '\\n'\n}\n\n// isAlphaNumeric reports whether r is an alphabetic, digit, or underscore.\nfunc isAlphaNumeric(r rune) bool {\n\treturn r == '_' || unicode.IsLetter(r) || unicode.IsDigit(r)\n}\n"
  },
  {
    "path": "vendor/github.com/alecthomas/template/parse/node.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Parse nodes.\n\npackage parse\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n)\n\nvar textFormat = \"%s\" // Changed to \"%q\" in tests for better error messages.\n\n// A Node is an element in the parse tree. The interface is trivial.\n// The interface contains an unexported method so that only\n// types local to this package can satisfy it.\ntype Node interface {\n\tType() NodeType\n\tString() string\n\t// Copy does a deep copy of the Node and all its components.\n\t// To avoid type assertions, some XxxNodes also have specialized\n\t// CopyXxx methods that return *XxxNode.\n\tCopy() Node\n\tPosition() Pos // byte position of start of node in full original input string\n\t// tree returns the containing *Tree.\n\t// It is unexported so all implementations of Node are in this package.\n\ttree() *Tree\n}\n\n// NodeType identifies the type of a parse tree node.\ntype NodeType int\n\n// Pos represents a byte position in the original input text from which\n// this template was parsed.\ntype Pos int\n\nfunc (p Pos) Position() Pos {\n\treturn p\n}\n\n// Type returns itself and provides an easy default implementation\n// for embedding in a Node. Embedded in all non-trivial Nodes.\nfunc (t NodeType) Type() NodeType {\n\treturn t\n}\n\nconst (\n\tNodeText       NodeType = iota // Plain text.\n\tNodeAction                     // A non-control action such as a field evaluation.\n\tNodeBool                       // A boolean constant.\n\tNodeChain                      // A sequence of field accesses.\n\tNodeCommand                    // An element of a pipeline.\n\tNodeDot                        // The cursor, dot.\n\tnodeElse                       // An else action. Not added to tree.\n\tnodeEnd                        // An end action. Not added to tree.\n\tNodeField                      // A field or method name.\n\tNodeIdentifier                 // An identifier; always a function name.\n\tNodeIf                         // An if action.\n\tNodeList                       // A list of Nodes.\n\tNodeNil                        // An untyped nil constant.\n\tNodeNumber                     // A numerical constant.\n\tNodePipe                       // A pipeline of commands.\n\tNodeRange                      // A range action.\n\tNodeString                     // A string constant.\n\tNodeTemplate                   // A template invocation action.\n\tNodeVariable                   // A $ variable.\n\tNodeWith                       // A with action.\n)\n\n// Nodes.\n\n// ListNode holds a sequence of nodes.\ntype ListNode struct {\n\tNodeType\n\tPos\n\ttr    *Tree\n\tNodes []Node // The element nodes in lexical order.\n}\n\nfunc (t *Tree) newList(pos Pos) *ListNode {\n\treturn &ListNode{tr: t, NodeType: NodeList, Pos: pos}\n}\n\nfunc (l *ListNode) append(n Node) {\n\tl.Nodes = append(l.Nodes, n)\n}\n\nfunc (l *ListNode) tree() *Tree {\n\treturn l.tr\n}\n\nfunc (l *ListNode) String() string {\n\tb := new(bytes.Buffer)\n\tfor _, n := range l.Nodes {\n\t\tfmt.Fprint(b, n)\n\t}\n\treturn b.String()\n}\n\nfunc (l *ListNode) CopyList() *ListNode {\n\tif l == nil {\n\t\treturn l\n\t}\n\tn := l.tr.newList(l.Pos)\n\tfor _, elem := range l.Nodes {\n\t\tn.append(elem.Copy())\n\t}\n\treturn n\n}\n\nfunc (l *ListNode) Copy() Node {\n\treturn l.CopyList()\n}\n\n// TextNode holds plain text.\ntype TextNode struct {\n\tNodeType\n\tPos\n\ttr   *Tree\n\tText []byte // The text; may span newlines.\n}\n\nfunc (t *Tree) newText(pos Pos, text string) *TextNode {\n\treturn &TextNode{tr: t, NodeType: NodeText, Pos: pos, Text: []byte(text)}\n}\n\nfunc (t *TextNode) String() string {\n\treturn fmt.Sprintf(textFormat, t.Text)\n}\n\nfunc (t *TextNode) tree() *Tree {\n\treturn t.tr\n}\n\nfunc (t *TextNode) Copy() Node {\n\treturn &TextNode{tr: t.tr, NodeType: NodeText, Pos: t.Pos, Text: append([]byte{}, t.Text...)}\n}\n\n// PipeNode holds a pipeline with optional declaration\ntype PipeNode struct {\n\tNodeType\n\tPos\n\ttr   *Tree\n\tLine int             // The line number in the input (deprecated; kept for compatibility)\n\tDecl []*VariableNode // Variable declarations in lexical order.\n\tCmds []*CommandNode  // The commands in lexical order.\n}\n\nfunc (t *Tree) newPipeline(pos Pos, line int, decl []*VariableNode) *PipeNode {\n\treturn &PipeNode{tr: t, NodeType: NodePipe, Pos: pos, Line: line, Decl: decl}\n}\n\nfunc (p *PipeNode) append(command *CommandNode) {\n\tp.Cmds = append(p.Cmds, command)\n}\n\nfunc (p *PipeNode) String() string {\n\ts := \"\"\n\tif len(p.Decl) > 0 {\n\t\tfor i, v := range p.Decl {\n\t\t\tif i > 0 {\n\t\t\t\ts += \", \"\n\t\t\t}\n\t\t\ts += v.String()\n\t\t}\n\t\ts += \" := \"\n\t}\n\tfor i, c := range p.Cmds {\n\t\tif i > 0 {\n\t\t\ts += \" | \"\n\t\t}\n\t\ts += c.String()\n\t}\n\treturn s\n}\n\nfunc (p *PipeNode) tree() *Tree {\n\treturn p.tr\n}\n\nfunc (p *PipeNode) CopyPipe() *PipeNode {\n\tif p == nil {\n\t\treturn p\n\t}\n\tvar decl []*VariableNode\n\tfor _, d := range p.Decl {\n\t\tdecl = append(decl, d.Copy().(*VariableNode))\n\t}\n\tn := p.tr.newPipeline(p.Pos, p.Line, decl)\n\tfor _, c := range p.Cmds {\n\t\tn.append(c.Copy().(*CommandNode))\n\t}\n\treturn n\n}\n\nfunc (p *PipeNode) Copy() Node {\n\treturn p.CopyPipe()\n}\n\n// ActionNode holds an action (something bounded by delimiters).\n// Control actions have their own nodes; ActionNode represents simple\n// ones such as field evaluations and parenthesized pipelines.\ntype ActionNode struct {\n\tNodeType\n\tPos\n\ttr   *Tree\n\tLine int       // The line number in the input (deprecated; kept for compatibility)\n\tPipe *PipeNode // The pipeline in the action.\n}\n\nfunc (t *Tree) newAction(pos Pos, line int, pipe *PipeNode) *ActionNode {\n\treturn &ActionNode{tr: t, NodeType: NodeAction, Pos: pos, Line: line, Pipe: pipe}\n}\n\nfunc (a *ActionNode) String() string {\n\treturn fmt.Sprintf(\"{{%s}}\", a.Pipe)\n\n}\n\nfunc (a *ActionNode) tree() *Tree {\n\treturn a.tr\n}\n\nfunc (a *ActionNode) Copy() Node {\n\treturn a.tr.newAction(a.Pos, a.Line, a.Pipe.CopyPipe())\n\n}\n\n// CommandNode holds a command (a pipeline inside an evaluating action).\ntype CommandNode struct {\n\tNodeType\n\tPos\n\ttr   *Tree\n\tArgs []Node // Arguments in lexical order: Identifier, field, or constant.\n}\n\nfunc (t *Tree) newCommand(pos Pos) *CommandNode {\n\treturn &CommandNode{tr: t, NodeType: NodeCommand, Pos: pos}\n}\n\nfunc (c *CommandNode) append(arg Node) {\n\tc.Args = append(c.Args, arg)\n}\n\nfunc (c *CommandNode) String() string {\n\ts := \"\"\n\tfor i, arg := range c.Args {\n\t\tif i > 0 {\n\t\t\ts += \" \"\n\t\t}\n\t\tif arg, ok := arg.(*PipeNode); ok {\n\t\t\ts += \"(\" + arg.String() + \")\"\n\t\t\tcontinue\n\t\t}\n\t\ts += arg.String()\n\t}\n\treturn s\n}\n\nfunc (c *CommandNode) tree() *Tree {\n\treturn c.tr\n}\n\nfunc (c *CommandNode) Copy() Node {\n\tif c == nil {\n\t\treturn c\n\t}\n\tn := c.tr.newCommand(c.Pos)\n\tfor _, c := range c.Args {\n\t\tn.append(c.Copy())\n\t}\n\treturn n\n}\n\n// IdentifierNode holds an identifier.\ntype IdentifierNode struct {\n\tNodeType\n\tPos\n\ttr    *Tree\n\tIdent string // The identifier's name.\n}\n\n// NewIdentifier returns a new IdentifierNode with the given identifier name.\nfunc NewIdentifier(ident string) *IdentifierNode {\n\treturn &IdentifierNode{NodeType: NodeIdentifier, Ident: ident}\n}\n\n// SetPos sets the position. NewIdentifier is a public method so we can't modify its signature.\n// Chained for convenience.\n// TODO: fix one day?\nfunc (i *IdentifierNode) SetPos(pos Pos) *IdentifierNode {\n\ti.Pos = pos\n\treturn i\n}\n\n// SetTree sets the parent tree for the node. NewIdentifier is a public method so we can't modify its signature.\n// Chained for convenience.\n// TODO: fix one day?\nfunc (i *IdentifierNode) SetTree(t *Tree) *IdentifierNode {\n\ti.tr = t\n\treturn i\n}\n\nfunc (i *IdentifierNode) String() string {\n\treturn i.Ident\n}\n\nfunc (i *IdentifierNode) tree() *Tree {\n\treturn i.tr\n}\n\nfunc (i *IdentifierNode) Copy() Node {\n\treturn NewIdentifier(i.Ident).SetTree(i.tr).SetPos(i.Pos)\n}\n\n// VariableNode holds a list of variable names, possibly with chained field\n// accesses. The dollar sign is part of the (first) name.\ntype VariableNode struct {\n\tNodeType\n\tPos\n\ttr    *Tree\n\tIdent []string // Variable name and fields in lexical order.\n}\n\nfunc (t *Tree) newVariable(pos Pos, ident string) *VariableNode {\n\treturn &VariableNode{tr: t, NodeType: NodeVariable, Pos: pos, Ident: strings.Split(ident, \".\")}\n}\n\nfunc (v *VariableNode) String() string {\n\ts := \"\"\n\tfor i, id := range v.Ident {\n\t\tif i > 0 {\n\t\t\ts += \".\"\n\t\t}\n\t\ts += id\n\t}\n\treturn s\n}\n\nfunc (v *VariableNode) tree() *Tree {\n\treturn v.tr\n}\n\nfunc (v *VariableNode) Copy() Node {\n\treturn &VariableNode{tr: v.tr, NodeType: NodeVariable, Pos: v.Pos, Ident: append([]string{}, v.Ident...)}\n}\n\n// DotNode holds the special identifier '.'.\ntype DotNode struct {\n\tNodeType\n\tPos\n\ttr *Tree\n}\n\nfunc (t *Tree) newDot(pos Pos) *DotNode {\n\treturn &DotNode{tr: t, NodeType: NodeDot, Pos: pos}\n}\n\nfunc (d *DotNode) Type() NodeType {\n\t// Override method on embedded NodeType for API compatibility.\n\t// TODO: Not really a problem; could change API without effect but\n\t// api tool complains.\n\treturn NodeDot\n}\n\nfunc (d *DotNode) String() string {\n\treturn \".\"\n}\n\nfunc (d *DotNode) tree() *Tree {\n\treturn d.tr\n}\n\nfunc (d *DotNode) Copy() Node {\n\treturn d.tr.newDot(d.Pos)\n}\n\n// NilNode holds the special identifier 'nil' representing an untyped nil constant.\ntype NilNode struct {\n\tNodeType\n\tPos\n\ttr *Tree\n}\n\nfunc (t *Tree) newNil(pos Pos) *NilNode {\n\treturn &NilNode{tr: t, NodeType: NodeNil, Pos: pos}\n}\n\nfunc (n *NilNode) Type() NodeType {\n\t// Override method on embedded NodeType for API compatibility.\n\t// TODO: Not really a problem; could change API without effect but\n\t// api tool complains.\n\treturn NodeNil\n}\n\nfunc (n *NilNode) String() string {\n\treturn \"nil\"\n}\n\nfunc (n *NilNode) tree() *Tree {\n\treturn n.tr\n}\n\nfunc (n *NilNode) Copy() Node {\n\treturn n.tr.newNil(n.Pos)\n}\n\n// FieldNode holds a field (identifier starting with '.').\n// The names may be chained ('.x.y').\n// The period is dropped from each ident.\ntype FieldNode struct {\n\tNodeType\n\tPos\n\ttr    *Tree\n\tIdent []string // The identifiers in lexical order.\n}\n\nfunc (t *Tree) newField(pos Pos, ident string) *FieldNode {\n\treturn &FieldNode{tr: t, NodeType: NodeField, Pos: pos, Ident: strings.Split(ident[1:], \".\")} // [1:] to drop leading period\n}\n\nfunc (f *FieldNode) String() string {\n\ts := \"\"\n\tfor _, id := range f.Ident {\n\t\ts += \".\" + id\n\t}\n\treturn s\n}\n\nfunc (f *FieldNode) tree() *Tree {\n\treturn f.tr\n}\n\nfunc (f *FieldNode) Copy() Node {\n\treturn &FieldNode{tr: f.tr, NodeType: NodeField, Pos: f.Pos, Ident: append([]string{}, f.Ident...)}\n}\n\n// ChainNode holds a term followed by a chain of field accesses (identifier starting with '.').\n// The names may be chained ('.x.y').\n// The periods are dropped from each ident.\ntype ChainNode struct {\n\tNodeType\n\tPos\n\ttr    *Tree\n\tNode  Node\n\tField []string // The identifiers in lexical order.\n}\n\nfunc (t *Tree) newChain(pos Pos, node Node) *ChainNode {\n\treturn &ChainNode{tr: t, NodeType: NodeChain, Pos: pos, Node: node}\n}\n\n// Add adds the named field (which should start with a period) to the end of the chain.\nfunc (c *ChainNode) Add(field string) {\n\tif len(field) == 0 || field[0] != '.' {\n\t\tpanic(\"no dot in field\")\n\t}\n\tfield = field[1:] // Remove leading dot.\n\tif field == \"\" {\n\t\tpanic(\"empty field\")\n\t}\n\tc.Field = append(c.Field, field)\n}\n\nfunc (c *ChainNode) String() string {\n\ts := c.Node.String()\n\tif _, ok := c.Node.(*PipeNode); ok {\n\t\ts = \"(\" + s + \")\"\n\t}\n\tfor _, field := range c.Field {\n\t\ts += \".\" + field\n\t}\n\treturn s\n}\n\nfunc (c *ChainNode) tree() *Tree {\n\treturn c.tr\n}\n\nfunc (c *ChainNode) Copy() Node {\n\treturn &ChainNode{tr: c.tr, NodeType: NodeChain, Pos: c.Pos, Node: c.Node, Field: append([]string{}, c.Field...)}\n}\n\n// BoolNode holds a boolean constant.\ntype BoolNode struct {\n\tNodeType\n\tPos\n\ttr   *Tree\n\tTrue bool // The value of the boolean constant.\n}\n\nfunc (t *Tree) newBool(pos Pos, true bool) *BoolNode {\n\treturn &BoolNode{tr: t, NodeType: NodeBool, Pos: pos, True: true}\n}\n\nfunc (b *BoolNode) String() string {\n\tif b.True {\n\t\treturn \"true\"\n\t}\n\treturn \"false\"\n}\n\nfunc (b *BoolNode) tree() *Tree {\n\treturn b.tr\n}\n\nfunc (b *BoolNode) Copy() Node {\n\treturn b.tr.newBool(b.Pos, b.True)\n}\n\n// NumberNode holds a number: signed or unsigned integer, float, or complex.\n// The value is parsed and stored under all the types that can represent the value.\n// This simulates in a small amount of code the behavior of Go's ideal constants.\ntype NumberNode struct {\n\tNodeType\n\tPos\n\ttr         *Tree\n\tIsInt      bool       // Number has an integral value.\n\tIsUint     bool       // Number has an unsigned integral value.\n\tIsFloat    bool       // Number has a floating-point value.\n\tIsComplex  bool       // Number is complex.\n\tInt64      int64      // The signed integer value.\n\tUint64     uint64     // The unsigned integer value.\n\tFloat64    float64    // The floating-point value.\n\tComplex128 complex128 // The complex value.\n\tText       string     // The original textual representation from the input.\n}\n\nfunc (t *Tree) newNumber(pos Pos, text string, typ itemType) (*NumberNode, error) {\n\tn := &NumberNode{tr: t, NodeType: NodeNumber, Pos: pos, Text: text}\n\tswitch typ {\n\tcase itemCharConstant:\n\t\trune, _, tail, err := strconv.UnquoteChar(text[1:], text[0])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif tail != \"'\" {\n\t\t\treturn nil, fmt.Errorf(\"malformed character constant: %s\", text)\n\t\t}\n\t\tn.Int64 = int64(rune)\n\t\tn.IsInt = true\n\t\tn.Uint64 = uint64(rune)\n\t\tn.IsUint = true\n\t\tn.Float64 = float64(rune) // odd but those are the rules.\n\t\tn.IsFloat = true\n\t\treturn n, nil\n\tcase itemComplex:\n\t\t// fmt.Sscan can parse the pair, so let it do the work.\n\t\tif _, err := fmt.Sscan(text, &n.Complex128); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tn.IsComplex = true\n\t\tn.simplifyComplex()\n\t\treturn n, nil\n\t}\n\t// Imaginary constants can only be complex unless they are zero.\n\tif len(text) > 0 && text[len(text)-1] == 'i' {\n\t\tf, err := strconv.ParseFloat(text[:len(text)-1], 64)\n\t\tif err == nil {\n\t\t\tn.IsComplex = true\n\t\t\tn.Complex128 = complex(0, f)\n\t\t\tn.simplifyComplex()\n\t\t\treturn n, nil\n\t\t}\n\t}\n\t// Do integer test first so we get 0x123 etc.\n\tu, err := strconv.ParseUint(text, 0, 64) // will fail for -0; fixed below.\n\tif err == nil {\n\t\tn.IsUint = true\n\t\tn.Uint64 = u\n\t}\n\ti, err := strconv.ParseInt(text, 0, 64)\n\tif err == nil {\n\t\tn.IsInt = true\n\t\tn.Int64 = i\n\t\tif i == 0 {\n\t\t\tn.IsUint = true // in case of -0.\n\t\t\tn.Uint64 = u\n\t\t}\n\t}\n\t// If an integer extraction succeeded, promote the float.\n\tif n.IsInt {\n\t\tn.IsFloat = true\n\t\tn.Float64 = float64(n.Int64)\n\t} else if n.IsUint {\n\t\tn.IsFloat = true\n\t\tn.Float64 = float64(n.Uint64)\n\t} else {\n\t\tf, err := strconv.ParseFloat(text, 64)\n\t\tif err == nil {\n\t\t\tn.IsFloat = true\n\t\t\tn.Float64 = f\n\t\t\t// If a floating-point extraction succeeded, extract the int if needed.\n\t\t\tif !n.IsInt && float64(int64(f)) == f {\n\t\t\t\tn.IsInt = true\n\t\t\t\tn.Int64 = int64(f)\n\t\t\t}\n\t\t\tif !n.IsUint && float64(uint64(f)) == f {\n\t\t\t\tn.IsUint = true\n\t\t\t\tn.Uint64 = uint64(f)\n\t\t\t}\n\t\t}\n\t}\n\tif !n.IsInt && !n.IsUint && !n.IsFloat {\n\t\treturn nil, fmt.Errorf(\"illegal number syntax: %q\", text)\n\t}\n\treturn n, nil\n}\n\n// simplifyComplex pulls out any other types that are represented by the complex number.\n// These all require that the imaginary part be zero.\nfunc (n *NumberNode) simplifyComplex() {\n\tn.IsFloat = imag(n.Complex128) == 0\n\tif n.IsFloat {\n\t\tn.Float64 = real(n.Complex128)\n\t\tn.IsInt = float64(int64(n.Float64)) == n.Float64\n\t\tif n.IsInt {\n\t\t\tn.Int64 = int64(n.Float64)\n\t\t}\n\t\tn.IsUint = float64(uint64(n.Float64)) == n.Float64\n\t\tif n.IsUint {\n\t\t\tn.Uint64 = uint64(n.Float64)\n\t\t}\n\t}\n}\n\nfunc (n *NumberNode) String() string {\n\treturn n.Text\n}\n\nfunc (n *NumberNode) tree() *Tree {\n\treturn n.tr\n}\n\nfunc (n *NumberNode) Copy() Node {\n\tnn := new(NumberNode)\n\t*nn = *n // Easy, fast, correct.\n\treturn nn\n}\n\n// StringNode holds a string constant. The value has been \"unquoted\".\ntype StringNode struct {\n\tNodeType\n\tPos\n\ttr     *Tree\n\tQuoted string // The original text of the string, with quotes.\n\tText   string // The string, after quote processing.\n}\n\nfunc (t *Tree) newString(pos Pos, orig, text string) *StringNode {\n\treturn &StringNode{tr: t, NodeType: NodeString, Pos: pos, Quoted: orig, Text: text}\n}\n\nfunc (s *StringNode) String() string {\n\treturn s.Quoted\n}\n\nfunc (s *StringNode) tree() *Tree {\n\treturn s.tr\n}\n\nfunc (s *StringNode) Copy() Node {\n\treturn s.tr.newString(s.Pos, s.Quoted, s.Text)\n}\n\n// endNode represents an {{end}} action.\n// It does not appear in the final parse tree.\ntype endNode struct {\n\tNodeType\n\tPos\n\ttr *Tree\n}\n\nfunc (t *Tree) newEnd(pos Pos) *endNode {\n\treturn &endNode{tr: t, NodeType: nodeEnd, Pos: pos}\n}\n\nfunc (e *endNode) String() string {\n\treturn \"{{end}}\"\n}\n\nfunc (e *endNode) tree() *Tree {\n\treturn e.tr\n}\n\nfunc (e *endNode) Copy() Node {\n\treturn e.tr.newEnd(e.Pos)\n}\n\n// elseNode represents an {{else}} action. Does not appear in the final tree.\ntype elseNode struct {\n\tNodeType\n\tPos\n\ttr   *Tree\n\tLine int // The line number in the input (deprecated; kept for compatibility)\n}\n\nfunc (t *Tree) newElse(pos Pos, line int) *elseNode {\n\treturn &elseNode{tr: t, NodeType: nodeElse, Pos: pos, Line: line}\n}\n\nfunc (e *elseNode) Type() NodeType {\n\treturn nodeElse\n}\n\nfunc (e *elseNode) String() string {\n\treturn \"{{else}}\"\n}\n\nfunc (e *elseNode) tree() *Tree {\n\treturn e.tr\n}\n\nfunc (e *elseNode) Copy() Node {\n\treturn e.tr.newElse(e.Pos, e.Line)\n}\n\n// BranchNode is the common representation of if, range, and with.\ntype BranchNode struct {\n\tNodeType\n\tPos\n\ttr       *Tree\n\tLine     int       // The line number in the input (deprecated; kept for compatibility)\n\tPipe     *PipeNode // The pipeline to be evaluated.\n\tList     *ListNode // What to execute if the value is non-empty.\n\tElseList *ListNode // What to execute if the value is empty (nil if absent).\n}\n\nfunc (b *BranchNode) String() string {\n\tname := \"\"\n\tswitch b.NodeType {\n\tcase NodeIf:\n\t\tname = \"if\"\n\tcase NodeRange:\n\t\tname = \"range\"\n\tcase NodeWith:\n\t\tname = \"with\"\n\tdefault:\n\t\tpanic(\"unknown branch type\")\n\t}\n\tif b.ElseList != nil {\n\t\treturn fmt.Sprintf(\"{{%s %s}}%s{{else}}%s{{end}}\", name, b.Pipe, b.List, b.ElseList)\n\t}\n\treturn fmt.Sprintf(\"{{%s %s}}%s{{end}}\", name, b.Pipe, b.List)\n}\n\nfunc (b *BranchNode) tree() *Tree {\n\treturn b.tr\n}\n\nfunc (b *BranchNode) Copy() Node {\n\tswitch b.NodeType {\n\tcase NodeIf:\n\t\treturn b.tr.newIf(b.Pos, b.Line, b.Pipe, b.List, b.ElseList)\n\tcase NodeRange:\n\t\treturn b.tr.newRange(b.Pos, b.Line, b.Pipe, b.List, b.ElseList)\n\tcase NodeWith:\n\t\treturn b.tr.newWith(b.Pos, b.Line, b.Pipe, b.List, b.ElseList)\n\tdefault:\n\t\tpanic(\"unknown branch type\")\n\t}\n}\n\n// IfNode represents an {{if}} action and its commands.\ntype IfNode struct {\n\tBranchNode\n}\n\nfunc (t *Tree) newIf(pos Pos, line int, pipe *PipeNode, list, elseList *ListNode) *IfNode {\n\treturn &IfNode{BranchNode{tr: t, NodeType: NodeIf, Pos: pos, Line: line, Pipe: pipe, List: list, ElseList: elseList}}\n}\n\nfunc (i *IfNode) Copy() Node {\n\treturn i.tr.newIf(i.Pos, i.Line, i.Pipe.CopyPipe(), i.List.CopyList(), i.ElseList.CopyList())\n}\n\n// RangeNode represents a {{range}} action and its commands.\ntype RangeNode struct {\n\tBranchNode\n}\n\nfunc (t *Tree) newRange(pos Pos, line int, pipe *PipeNode, list, elseList *ListNode) *RangeNode {\n\treturn &RangeNode{BranchNode{tr: t, NodeType: NodeRange, Pos: pos, Line: line, Pipe: pipe, List: list, ElseList: elseList}}\n}\n\nfunc (r *RangeNode) Copy() Node {\n\treturn r.tr.newRange(r.Pos, r.Line, r.Pipe.CopyPipe(), r.List.CopyList(), r.ElseList.CopyList())\n}\n\n// WithNode represents a {{with}} action and its commands.\ntype WithNode struct {\n\tBranchNode\n}\n\nfunc (t *Tree) newWith(pos Pos, line int, pipe *PipeNode, list, elseList *ListNode) *WithNode {\n\treturn &WithNode{BranchNode{tr: t, NodeType: NodeWith, Pos: pos, Line: line, Pipe: pipe, List: list, ElseList: elseList}}\n}\n\nfunc (w *WithNode) Copy() Node {\n\treturn w.tr.newWith(w.Pos, w.Line, w.Pipe.CopyPipe(), w.List.CopyList(), w.ElseList.CopyList())\n}\n\n// TemplateNode represents a {{template}} action.\ntype TemplateNode struct {\n\tNodeType\n\tPos\n\ttr   *Tree\n\tLine int       // The line number in the input (deprecated; kept for compatibility)\n\tName string    // The name of the template (unquoted).\n\tPipe *PipeNode // The command to evaluate as dot for the template.\n}\n\nfunc (t *Tree) newTemplate(pos Pos, line int, name string, pipe *PipeNode) *TemplateNode {\n\treturn &TemplateNode{tr: t, NodeType: NodeTemplate, Pos: pos, Line: line, Name: name, Pipe: pipe}\n}\n\nfunc (t *TemplateNode) String() string {\n\tif t.Pipe == nil {\n\t\treturn fmt.Sprintf(\"{{template %q}}\", t.Name)\n\t}\n\treturn fmt.Sprintf(\"{{template %q %s}}\", t.Name, t.Pipe)\n}\n\nfunc (t *TemplateNode) tree() *Tree {\n\treturn t.tr\n}\n\nfunc (t *TemplateNode) Copy() Node {\n\treturn t.tr.newTemplate(t.Pos, t.Line, t.Name, t.Pipe.CopyPipe())\n}\n"
  },
  {
    "path": "vendor/github.com/alecthomas/template/parse/parse.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package parse builds parse trees for templates as defined by text/template\n// and html/template. Clients should use those packages to construct templates\n// rather than this one, which provides shared internal data structures not\n// intended for general use.\npackage parse\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// Tree is the representation of a single parsed template.\ntype Tree struct {\n\tName      string    // name of the template represented by the tree.\n\tParseName string    // name of the top-level template during parsing, for error messages.\n\tRoot      *ListNode // top-level root of the tree.\n\ttext      string    // text parsed to create the template (or its parent)\n\t// Parsing only; cleared after parse.\n\tfuncs     []map[string]interface{}\n\tlex       *lexer\n\ttoken     [3]item // three-token lookahead for parser.\n\tpeekCount int\n\tvars      []string // variables defined at the moment.\n}\n\n// Copy returns a copy of the Tree. Any parsing state is discarded.\nfunc (t *Tree) Copy() *Tree {\n\tif t == nil {\n\t\treturn nil\n\t}\n\treturn &Tree{\n\t\tName:      t.Name,\n\t\tParseName: t.ParseName,\n\t\tRoot:      t.Root.CopyList(),\n\t\ttext:      t.text,\n\t}\n}\n\n// Parse returns a map from template name to parse.Tree, created by parsing the\n// templates described in the argument string. The top-level template will be\n// given the specified name. If an error is encountered, parsing stops and an\n// empty map is returned with the error.\nfunc Parse(name, text, leftDelim, rightDelim string, funcs ...map[string]interface{}) (treeSet map[string]*Tree, err error) {\n\ttreeSet = make(map[string]*Tree)\n\tt := New(name)\n\tt.text = text\n\t_, err = t.Parse(text, leftDelim, rightDelim, treeSet, funcs...)\n\treturn\n}\n\n// next returns the next token.\nfunc (t *Tree) next() item {\n\tif t.peekCount > 0 {\n\t\tt.peekCount--\n\t} else {\n\t\tt.token[0] = t.lex.nextItem()\n\t}\n\treturn t.token[t.peekCount]\n}\n\n// backup backs the input stream up one token.\nfunc (t *Tree) backup() {\n\tt.peekCount++\n}\n\n// backup2 backs the input stream up two tokens.\n// The zeroth token is already there.\nfunc (t *Tree) backup2(t1 item) {\n\tt.token[1] = t1\n\tt.peekCount = 2\n}\n\n// backup3 backs the input stream up three tokens\n// The zeroth token is already there.\nfunc (t *Tree) backup3(t2, t1 item) { // Reverse order: we're pushing back.\n\tt.token[1] = t1\n\tt.token[2] = t2\n\tt.peekCount = 3\n}\n\n// peek returns but does not consume the next token.\nfunc (t *Tree) peek() item {\n\tif t.peekCount > 0 {\n\t\treturn t.token[t.peekCount-1]\n\t}\n\tt.peekCount = 1\n\tt.token[0] = t.lex.nextItem()\n\treturn t.token[0]\n}\n\n// nextNonSpace returns the next non-space token.\nfunc (t *Tree) nextNonSpace() (token item) {\n\tfor {\n\t\ttoken = t.next()\n\t\tif token.typ != itemSpace {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn token\n}\n\n// peekNonSpace returns but does not consume the next non-space token.\nfunc (t *Tree) peekNonSpace() (token item) {\n\tfor {\n\t\ttoken = t.next()\n\t\tif token.typ != itemSpace {\n\t\t\tbreak\n\t\t}\n\t}\n\tt.backup()\n\treturn token\n}\n\n// Parsing.\n\n// New allocates a new parse tree with the given name.\nfunc New(name string, funcs ...map[string]interface{}) *Tree {\n\treturn &Tree{\n\t\tName:  name,\n\t\tfuncs: funcs,\n\t}\n}\n\n// ErrorContext returns a textual representation of the location of the node in the input text.\n// The receiver is only used when the node does not have a pointer to the tree inside,\n// which can occur in old code.\nfunc (t *Tree) ErrorContext(n Node) (location, context string) {\n\tpos := int(n.Position())\n\ttree := n.tree()\n\tif tree == nil {\n\t\ttree = t\n\t}\n\ttext := tree.text[:pos]\n\tbyteNum := strings.LastIndex(text, \"\\n\")\n\tif byteNum == -1 {\n\t\tbyteNum = pos // On first line.\n\t} else {\n\t\tbyteNum++ // After the newline.\n\t\tbyteNum = pos - byteNum\n\t}\n\tlineNum := 1 + strings.Count(text, \"\\n\")\n\tcontext = n.String()\n\tif len(context) > 20 {\n\t\tcontext = fmt.Sprintf(\"%.20s...\", context)\n\t}\n\treturn fmt.Sprintf(\"%s:%d:%d\", tree.ParseName, lineNum, byteNum), context\n}\n\n// errorf formats the error and terminates processing.\nfunc (t *Tree) errorf(format string, args ...interface{}) {\n\tt.Root = nil\n\tformat = fmt.Sprintf(\"template: %s:%d: %s\", t.ParseName, t.lex.lineNumber(), format)\n\tpanic(fmt.Errorf(format, args...))\n}\n\n// error terminates processing.\nfunc (t *Tree) error(err error) {\n\tt.errorf(\"%s\", err)\n}\n\n// expect consumes the next token and guarantees it has the required type.\nfunc (t *Tree) expect(expected itemType, context string) item {\n\ttoken := t.nextNonSpace()\n\tif token.typ != expected {\n\t\tt.unexpected(token, context)\n\t}\n\treturn token\n}\n\n// expectOneOf consumes the next token and guarantees it has one of the required types.\nfunc (t *Tree) expectOneOf(expected1, expected2 itemType, context string) item {\n\ttoken := t.nextNonSpace()\n\tif token.typ != expected1 && token.typ != expected2 {\n\t\tt.unexpected(token, context)\n\t}\n\treturn token\n}\n\n// unexpected complains about the token and terminates processing.\nfunc (t *Tree) unexpected(token item, context string) {\n\tt.errorf(\"unexpected %s in %s\", token, context)\n}\n\n// recover is the handler that turns panics into returns from the top level of Parse.\nfunc (t *Tree) recover(errp *error) {\n\te := recover()\n\tif e != nil {\n\t\tif _, ok := e.(runtime.Error); ok {\n\t\t\tpanic(e)\n\t\t}\n\t\tif t != nil {\n\t\t\tt.stopParse()\n\t\t}\n\t\t*errp = e.(error)\n\t}\n\treturn\n}\n\n// startParse initializes the parser, using the lexer.\nfunc (t *Tree) startParse(funcs []map[string]interface{}, lex *lexer) {\n\tt.Root = nil\n\tt.lex = lex\n\tt.vars = []string{\"$\"}\n\tt.funcs = funcs\n}\n\n// stopParse terminates parsing.\nfunc (t *Tree) stopParse() {\n\tt.lex = nil\n\tt.vars = nil\n\tt.funcs = nil\n}\n\n// Parse parses the template definition string to construct a representation of\n// the template for execution. If either action delimiter string is empty, the\n// default (\"{{\" or \"}}\") is used. Embedded template definitions are added to\n// the treeSet map.\nfunc (t *Tree) Parse(text, leftDelim, rightDelim string, treeSet map[string]*Tree, funcs ...map[string]interface{}) (tree *Tree, err error) {\n\tdefer t.recover(&err)\n\tt.ParseName = t.Name\n\tt.startParse(funcs, lex(t.Name, text, leftDelim, rightDelim))\n\tt.text = text\n\tt.parse(treeSet)\n\tt.add(treeSet)\n\tt.stopParse()\n\treturn t, nil\n}\n\n// add adds tree to the treeSet.\nfunc (t *Tree) add(treeSet map[string]*Tree) {\n\ttree := treeSet[t.Name]\n\tif tree == nil || IsEmptyTree(tree.Root) {\n\t\ttreeSet[t.Name] = t\n\t\treturn\n\t}\n\tif !IsEmptyTree(t.Root) {\n\t\tt.errorf(\"template: multiple definition of template %q\", t.Name)\n\t}\n}\n\n// IsEmptyTree reports whether this tree (node) is empty of everything but space.\nfunc IsEmptyTree(n Node) bool {\n\tswitch n := n.(type) {\n\tcase nil:\n\t\treturn true\n\tcase *ActionNode:\n\tcase *IfNode:\n\tcase *ListNode:\n\t\tfor _, node := range n.Nodes {\n\t\t\tif !IsEmptyTree(node) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\treturn true\n\tcase *RangeNode:\n\tcase *TemplateNode:\n\tcase *TextNode:\n\t\treturn len(bytes.TrimSpace(n.Text)) == 0\n\tcase *WithNode:\n\tdefault:\n\t\tpanic(\"unknown node: \" + n.String())\n\t}\n\treturn false\n}\n\n// parse is the top-level parser for a template, essentially the same\n// as itemList except it also parses {{define}} actions.\n// It runs to EOF.\nfunc (t *Tree) parse(treeSet map[string]*Tree) (next Node) {\n\tt.Root = t.newList(t.peek().pos)\n\tfor t.peek().typ != itemEOF {\n\t\tif t.peek().typ == itemLeftDelim {\n\t\t\tdelim := t.next()\n\t\t\tif t.nextNonSpace().typ == itemDefine {\n\t\t\t\tnewT := New(\"definition\") // name will be updated once we know it.\n\t\t\t\tnewT.text = t.text\n\t\t\t\tnewT.ParseName = t.ParseName\n\t\t\t\tnewT.startParse(t.funcs, t.lex)\n\t\t\t\tnewT.parseDefinition(treeSet)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tt.backup2(delim)\n\t\t}\n\t\tn := t.textOrAction()\n\t\tif n.Type() == nodeEnd {\n\t\t\tt.errorf(\"unexpected %s\", n)\n\t\t}\n\t\tt.Root.append(n)\n\t}\n\treturn nil\n}\n\n// parseDefinition parses a {{define}} ...  {{end}} template definition and\n// installs the definition in the treeSet map.  The \"define\" keyword has already\n// been scanned.\nfunc (t *Tree) parseDefinition(treeSet map[string]*Tree) {\n\tconst context = \"define clause\"\n\tname := t.expectOneOf(itemString, itemRawString, context)\n\tvar err error\n\tt.Name, err = strconv.Unquote(name.val)\n\tif err != nil {\n\t\tt.error(err)\n\t}\n\tt.expect(itemRightDelim, context)\n\tvar end Node\n\tt.Root, end = t.itemList()\n\tif end.Type() != nodeEnd {\n\t\tt.errorf(\"unexpected %s in %s\", end, context)\n\t}\n\tt.add(treeSet)\n\tt.stopParse()\n}\n\n// itemList:\n//\ttextOrAction*\n// Terminates at {{end}} or {{else}}, returned separately.\nfunc (t *Tree) itemList() (list *ListNode, next Node) {\n\tlist = t.newList(t.peekNonSpace().pos)\n\tfor t.peekNonSpace().typ != itemEOF {\n\t\tn := t.textOrAction()\n\t\tswitch n.Type() {\n\t\tcase nodeEnd, nodeElse:\n\t\t\treturn list, n\n\t\t}\n\t\tlist.append(n)\n\t}\n\tt.errorf(\"unexpected EOF\")\n\treturn\n}\n\n// textOrAction:\n//\ttext | action\nfunc (t *Tree) textOrAction() Node {\n\tswitch token := t.nextNonSpace(); token.typ {\n\tcase itemElideNewline:\n\t\treturn t.elideNewline()\n\tcase itemText:\n\t\treturn t.newText(token.pos, token.val)\n\tcase itemLeftDelim:\n\t\treturn t.action()\n\tdefault:\n\t\tt.unexpected(token, \"input\")\n\t}\n\treturn nil\n}\n\n// elideNewline:\n// Remove newlines trailing rightDelim if \\\\ is present.\nfunc (t *Tree) elideNewline() Node {\n\ttoken := t.peek()\n\tif token.typ != itemText {\n\t\tt.unexpected(token, \"input\")\n\t\treturn nil\n\t}\n\n\tt.next()\n\tstripped := strings.TrimLeft(token.val, \"\\n\\r\")\n\tdiff := len(token.val) - len(stripped)\n\tif diff > 0 {\n\t\t// This is a bit nasty. We mutate the token in-place to remove\n\t\t// preceding newlines.\n\t\ttoken.pos += Pos(diff)\n\t\ttoken.val = stripped\n\t}\n\treturn t.newText(token.pos, token.val)\n}\n\n// Action:\n//\tcontrol\n//\tcommand (\"|\" command)*\n// Left delim is past. Now get actions.\n// First word could be a keyword such as range.\nfunc (t *Tree) action() (n Node) {\n\tswitch token := t.nextNonSpace(); token.typ {\n\tcase itemElse:\n\t\treturn t.elseControl()\n\tcase itemEnd:\n\t\treturn t.endControl()\n\tcase itemIf:\n\t\treturn t.ifControl()\n\tcase itemRange:\n\t\treturn t.rangeControl()\n\tcase itemTemplate:\n\t\treturn t.templateControl()\n\tcase itemWith:\n\t\treturn t.withControl()\n\t}\n\tt.backup()\n\t// Do not pop variables; they persist until \"end\".\n\treturn t.newAction(t.peek().pos, t.lex.lineNumber(), t.pipeline(\"command\"))\n}\n\n// Pipeline:\n//\tdeclarations? command ('|' command)*\nfunc (t *Tree) pipeline(context string) (pipe *PipeNode) {\n\tvar decl []*VariableNode\n\tpos := t.peekNonSpace().pos\n\t// Are there declarations?\n\tfor {\n\t\tif v := t.peekNonSpace(); v.typ == itemVariable {\n\t\t\tt.next()\n\t\t\t// Since space is a token, we need 3-token look-ahead here in the worst case:\n\t\t\t// in \"$x foo\" we need to read \"foo\" (as opposed to \":=\") to know that $x is an\n\t\t\t// argument variable rather than a declaration. So remember the token\n\t\t\t// adjacent to the variable so we can push it back if necessary.\n\t\t\ttokenAfterVariable := t.peek()\n\t\t\tif next := t.peekNonSpace(); next.typ == itemColonEquals || (next.typ == itemChar && next.val == \",\") {\n\t\t\t\tt.nextNonSpace()\n\t\t\t\tvariable := t.newVariable(v.pos, v.val)\n\t\t\t\tdecl = append(decl, variable)\n\t\t\t\tt.vars = append(t.vars, v.val)\n\t\t\t\tif next.typ == itemChar && next.val == \",\" {\n\t\t\t\t\tif context == \"range\" && len(decl) < 2 {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tt.errorf(\"too many declarations in %s\", context)\n\t\t\t\t}\n\t\t\t} else if tokenAfterVariable.typ == itemSpace {\n\t\t\t\tt.backup3(v, tokenAfterVariable)\n\t\t\t} else {\n\t\t\t\tt.backup2(v)\n\t\t\t}\n\t\t}\n\t\tbreak\n\t}\n\tpipe = t.newPipeline(pos, t.lex.lineNumber(), decl)\n\tfor {\n\t\tswitch token := t.nextNonSpace(); token.typ {\n\t\tcase itemRightDelim, itemRightParen:\n\t\t\tif len(pipe.Cmds) == 0 {\n\t\t\t\tt.errorf(\"missing value for %s\", context)\n\t\t\t}\n\t\t\tif token.typ == itemRightParen {\n\t\t\t\tt.backup()\n\t\t\t}\n\t\t\treturn\n\t\tcase itemBool, itemCharConstant, itemComplex, itemDot, itemField, itemIdentifier,\n\t\t\titemNumber, itemNil, itemRawString, itemString, itemVariable, itemLeftParen:\n\t\t\tt.backup()\n\t\t\tpipe.append(t.command())\n\t\tdefault:\n\t\t\tt.unexpected(token, context)\n\t\t}\n\t}\n}\n\nfunc (t *Tree) parseControl(allowElseIf bool, context string) (pos Pos, line int, pipe *PipeNode, list, elseList *ListNode) {\n\tdefer t.popVars(len(t.vars))\n\tline = t.lex.lineNumber()\n\tpipe = t.pipeline(context)\n\tvar next Node\n\tlist, next = t.itemList()\n\tswitch next.Type() {\n\tcase nodeEnd: //done\n\tcase nodeElse:\n\t\tif allowElseIf {\n\t\t\t// Special case for \"else if\". If the \"else\" is followed immediately by an \"if\",\n\t\t\t// the elseControl will have left the \"if\" token pending. Treat\n\t\t\t//\t{{if a}}_{{else if b}}_{{end}}\n\t\t\t// as\n\t\t\t//\t{{if a}}_{{else}}{{if b}}_{{end}}{{end}}.\n\t\t\t// To do this, parse the if as usual and stop at it {{end}}; the subsequent{{end}}\n\t\t\t// is assumed. This technique works even for long if-else-if chains.\n\t\t\t// TODO: Should we allow else-if in with and range?\n\t\t\tif t.peek().typ == itemIf {\n\t\t\t\tt.next() // Consume the \"if\" token.\n\t\t\t\telseList = t.newList(next.Position())\n\t\t\t\telseList.append(t.ifControl())\n\t\t\t\t// Do not consume the next item - only one {{end}} required.\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\telseList, next = t.itemList()\n\t\tif next.Type() != nodeEnd {\n\t\t\tt.errorf(\"expected end; found %s\", next)\n\t\t}\n\t}\n\treturn pipe.Position(), line, pipe, list, elseList\n}\n\n// If:\n//\t{{if pipeline}} itemList {{end}}\n//\t{{if pipeline}} itemList {{else}} itemList {{end}}\n// If keyword is past.\nfunc (t *Tree) ifControl() Node {\n\treturn t.newIf(t.parseControl(true, \"if\"))\n}\n\n// Range:\n//\t{{range pipeline}} itemList {{end}}\n//\t{{range pipeline}} itemList {{else}} itemList {{end}}\n// Range keyword is past.\nfunc (t *Tree) rangeControl() Node {\n\treturn t.newRange(t.parseControl(false, \"range\"))\n}\n\n// With:\n//\t{{with pipeline}} itemList {{end}}\n//\t{{with pipeline}} itemList {{else}} itemList {{end}}\n// If keyword is past.\nfunc (t *Tree) withControl() Node {\n\treturn t.newWith(t.parseControl(false, \"with\"))\n}\n\n// End:\n//\t{{end}}\n// End keyword is past.\nfunc (t *Tree) endControl() Node {\n\treturn t.newEnd(t.expect(itemRightDelim, \"end\").pos)\n}\n\n// Else:\n//\t{{else}}\n// Else keyword is past.\nfunc (t *Tree) elseControl() Node {\n\t// Special case for \"else if\".\n\tpeek := t.peekNonSpace()\n\tif peek.typ == itemIf {\n\t\t// We see \"{{else if ... \" but in effect rewrite it to {{else}}{{if ... \".\n\t\treturn t.newElse(peek.pos, t.lex.lineNumber())\n\t}\n\treturn t.newElse(t.expect(itemRightDelim, \"else\").pos, t.lex.lineNumber())\n}\n\n// Template:\n//\t{{template stringValue pipeline}}\n// Template keyword is past.  The name must be something that can evaluate\n// to a string.\nfunc (t *Tree) templateControl() Node {\n\tvar name string\n\ttoken := t.nextNonSpace()\n\tswitch token.typ {\n\tcase itemString, itemRawString:\n\t\ts, err := strconv.Unquote(token.val)\n\t\tif err != nil {\n\t\t\tt.error(err)\n\t\t}\n\t\tname = s\n\tdefault:\n\t\tt.unexpected(token, \"template invocation\")\n\t}\n\tvar pipe *PipeNode\n\tif t.nextNonSpace().typ != itemRightDelim {\n\t\tt.backup()\n\t\t// Do not pop variables; they persist until \"end\".\n\t\tpipe = t.pipeline(\"template\")\n\t}\n\treturn t.newTemplate(token.pos, t.lex.lineNumber(), name, pipe)\n}\n\n// command:\n//\toperand (space operand)*\n// space-separated arguments up to a pipeline character or right delimiter.\n// we consume the pipe character but leave the right delim to terminate the action.\nfunc (t *Tree) command() *CommandNode {\n\tcmd := t.newCommand(t.peekNonSpace().pos)\n\tfor {\n\t\tt.peekNonSpace() // skip leading spaces.\n\t\toperand := t.operand()\n\t\tif operand != nil {\n\t\t\tcmd.append(operand)\n\t\t}\n\t\tswitch token := t.next(); token.typ {\n\t\tcase itemSpace:\n\t\t\tcontinue\n\t\tcase itemError:\n\t\t\tt.errorf(\"%s\", token.val)\n\t\tcase itemRightDelim, itemRightParen:\n\t\t\tt.backup()\n\t\tcase itemPipe:\n\t\tdefault:\n\t\t\tt.errorf(\"unexpected %s in operand; missing space?\", token)\n\t\t}\n\t\tbreak\n\t}\n\tif len(cmd.Args) == 0 {\n\t\tt.errorf(\"empty command\")\n\t}\n\treturn cmd\n}\n\n// operand:\n//\tterm .Field*\n// An operand is a space-separated component of a command,\n// a term possibly followed by field accesses.\n// A nil return means the next item is not an operand.\nfunc (t *Tree) operand() Node {\n\tnode := t.term()\n\tif node == nil {\n\t\treturn nil\n\t}\n\tif t.peek().typ == itemField {\n\t\tchain := t.newChain(t.peek().pos, node)\n\t\tfor t.peek().typ == itemField {\n\t\t\tchain.Add(t.next().val)\n\t\t}\n\t\t// Compatibility with original API: If the term is of type NodeField\n\t\t// or NodeVariable, just put more fields on the original.\n\t\t// Otherwise, keep the Chain node.\n\t\t// TODO: Switch to Chains always when we can.\n\t\tswitch node.Type() {\n\t\tcase NodeField:\n\t\t\tnode = t.newField(chain.Position(), chain.String())\n\t\tcase NodeVariable:\n\t\t\tnode = t.newVariable(chain.Position(), chain.String())\n\t\tdefault:\n\t\t\tnode = chain\n\t\t}\n\t}\n\treturn node\n}\n\n// term:\n//\tliteral (number, string, nil, boolean)\n//\tfunction (identifier)\n//\t.\n//\t.Field\n//\t$\n//\t'(' pipeline ')'\n// A term is a simple \"expression\".\n// A nil return means the next item is not a term.\nfunc (t *Tree) term() Node {\n\tswitch token := t.nextNonSpace(); token.typ {\n\tcase itemError:\n\t\tt.errorf(\"%s\", token.val)\n\tcase itemIdentifier:\n\t\tif !t.hasFunction(token.val) {\n\t\t\tt.errorf(\"function %q not defined\", token.val)\n\t\t}\n\t\treturn NewIdentifier(token.val).SetTree(t).SetPos(token.pos)\n\tcase itemDot:\n\t\treturn t.newDot(token.pos)\n\tcase itemNil:\n\t\treturn t.newNil(token.pos)\n\tcase itemVariable:\n\t\treturn t.useVar(token.pos, token.val)\n\tcase itemField:\n\t\treturn t.newField(token.pos, token.val)\n\tcase itemBool:\n\t\treturn t.newBool(token.pos, token.val == \"true\")\n\tcase itemCharConstant, itemComplex, itemNumber:\n\t\tnumber, err := t.newNumber(token.pos, token.val, token.typ)\n\t\tif err != nil {\n\t\t\tt.error(err)\n\t\t}\n\t\treturn number\n\tcase itemLeftParen:\n\t\tpipe := t.pipeline(\"parenthesized pipeline\")\n\t\tif token := t.next(); token.typ != itemRightParen {\n\t\t\tt.errorf(\"unclosed right paren: unexpected %s\", token)\n\t\t}\n\t\treturn pipe\n\tcase itemString, itemRawString:\n\t\ts, err := strconv.Unquote(token.val)\n\t\tif err != nil {\n\t\t\tt.error(err)\n\t\t}\n\t\treturn t.newString(token.pos, token.val, s)\n\t}\n\tt.backup()\n\treturn nil\n}\n\n// hasFunction reports if a function name exists in the Tree's maps.\nfunc (t *Tree) hasFunction(name string) bool {\n\tfor _, funcMap := range t.funcs {\n\t\tif funcMap == nil {\n\t\t\tcontinue\n\t\t}\n\t\tif funcMap[name] != nil {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// popVars trims the variable list to the specified length\nfunc (t *Tree) popVars(n int) {\n\tt.vars = t.vars[:n]\n}\n\n// useVar returns a node for a variable reference. It errors if the\n// variable is not defined.\nfunc (t *Tree) useVar(pos Pos, name string) Node {\n\tv := t.newVariable(pos, name)\n\tfor _, varName := range t.vars {\n\t\tif varName == v.Ident[0] {\n\t\t\treturn v\n\t\t}\n\t}\n\tt.errorf(\"undefined variable %q\", v.Ident[0])\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/alecthomas/template/template.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage template\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\n\t\"github.com/alecthomas/template/parse\"\n)\n\n// common holds the information shared by related templates.\ntype common struct {\n\ttmpl map[string]*Template\n\t// We use two maps, one for parsing and one for execution.\n\t// This separation makes the API cleaner since it doesn't\n\t// expose reflection to the client.\n\tparseFuncs FuncMap\n\texecFuncs  map[string]reflect.Value\n}\n\n// Template is the representation of a parsed template. The *parse.Tree\n// field is exported only for use by html/template and should be treated\n// as unexported by all other clients.\ntype Template struct {\n\tname string\n\t*parse.Tree\n\t*common\n\tleftDelim  string\n\trightDelim string\n}\n\n// New allocates a new template with the given name.\nfunc New(name string) *Template {\n\treturn &Template{\n\t\tname: name,\n\t}\n}\n\n// Name returns the name of the template.\nfunc (t *Template) Name() string {\n\treturn t.name\n}\n\n// New allocates a new template associated with the given one and with the same\n// delimiters. The association, which is transitive, allows one template to\n// invoke another with a {{template}} action.\nfunc (t *Template) New(name string) *Template {\n\tt.init()\n\treturn &Template{\n\t\tname:       name,\n\t\tcommon:     t.common,\n\t\tleftDelim:  t.leftDelim,\n\t\trightDelim: t.rightDelim,\n\t}\n}\n\nfunc (t *Template) init() {\n\tif t.common == nil {\n\t\tt.common = new(common)\n\t\tt.tmpl = make(map[string]*Template)\n\t\tt.parseFuncs = make(FuncMap)\n\t\tt.execFuncs = make(map[string]reflect.Value)\n\t}\n}\n\n// Clone returns a duplicate of the template, including all associated\n// templates. The actual representation is not copied, but the name space of\n// associated templates is, so further calls to Parse in the copy will add\n// templates to the copy but not to the original. Clone can be used to prepare\n// common templates and use them with variant definitions for other templates\n// by adding the variants after the clone is made.\nfunc (t *Template) Clone() (*Template, error) {\n\tnt := t.copy(nil)\n\tnt.init()\n\tnt.tmpl[t.name] = nt\n\tfor k, v := range t.tmpl {\n\t\tif k == t.name { // Already installed.\n\t\t\tcontinue\n\t\t}\n\t\t// The associated templates share nt's common structure.\n\t\ttmpl := v.copy(nt.common)\n\t\tnt.tmpl[k] = tmpl\n\t}\n\tfor k, v := range t.parseFuncs {\n\t\tnt.parseFuncs[k] = v\n\t}\n\tfor k, v := range t.execFuncs {\n\t\tnt.execFuncs[k] = v\n\t}\n\treturn nt, nil\n}\n\n// copy returns a shallow copy of t, with common set to the argument.\nfunc (t *Template) copy(c *common) *Template {\n\tnt := New(t.name)\n\tnt.Tree = t.Tree\n\tnt.common = c\n\tnt.leftDelim = t.leftDelim\n\tnt.rightDelim = t.rightDelim\n\treturn nt\n}\n\n// AddParseTree creates a new template with the name and parse tree\n// and associates it with t.\nfunc (t *Template) AddParseTree(name string, tree *parse.Tree) (*Template, error) {\n\tif t.common != nil && t.tmpl[name] != nil {\n\t\treturn nil, fmt.Errorf(\"template: redefinition of template %q\", name)\n\t}\n\tnt := t.New(name)\n\tnt.Tree = tree\n\tt.tmpl[name] = nt\n\treturn nt, nil\n}\n\n// Templates returns a slice of the templates associated with t, including t\n// itself.\nfunc (t *Template) Templates() []*Template {\n\tif t.common == nil {\n\t\treturn nil\n\t}\n\t// Return a slice so we don't expose the map.\n\tm := make([]*Template, 0, len(t.tmpl))\n\tfor _, v := range t.tmpl {\n\t\tm = append(m, v)\n\t}\n\treturn m\n}\n\n// Delims sets the action delimiters to the specified strings, to be used in\n// subsequent calls to Parse, ParseFiles, or ParseGlob. Nested template\n// definitions will inherit the settings. An empty delimiter stands for the\n// corresponding default: {{ or }}.\n// The return value is the template, so calls can be chained.\nfunc (t *Template) Delims(left, right string) *Template {\n\tt.leftDelim = left\n\tt.rightDelim = right\n\treturn t\n}\n\n// Funcs adds the elements of the argument map to the template's function map.\n// It panics if a value in the map is not a function with appropriate return\n// type. However, it is legal to overwrite elements of the map. The return\n// value is the template, so calls can be chained.\nfunc (t *Template) Funcs(funcMap FuncMap) *Template {\n\tt.init()\n\taddValueFuncs(t.execFuncs, funcMap)\n\taddFuncs(t.parseFuncs, funcMap)\n\treturn t\n}\n\n// Lookup returns the template with the given name that is associated with t,\n// or nil if there is no such template.\nfunc (t *Template) Lookup(name string) *Template {\n\tif t.common == nil {\n\t\treturn nil\n\t}\n\treturn t.tmpl[name]\n}\n\n// Parse parses a string into a template. Nested template definitions will be\n// associated with the top-level template t. Parse may be called multiple times\n// to parse definitions of templates to associate with t. It is an error if a\n// resulting template is non-empty (contains content other than template\n// definitions) and would replace a non-empty template with the same name.\n// (In multiple calls to Parse with the same receiver template, only one call\n// can contain text other than space, comments, and template definitions.)\nfunc (t *Template) Parse(text string) (*Template, error) {\n\tt.init()\n\ttrees, err := parse.Parse(t.name, text, t.leftDelim, t.rightDelim, t.parseFuncs, builtins)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\t// Add the newly parsed trees, including the one for t, into our common structure.\n\tfor name, tree := range trees {\n\t\t// If the name we parsed is the name of this template, overwrite this template.\n\t\t// The associate method checks it's not a redefinition.\n\t\ttmpl := t\n\t\tif name != t.name {\n\t\t\ttmpl = t.New(name)\n\t\t}\n\t\t// Even if t == tmpl, we need to install it in the common.tmpl map.\n\t\tif replace, err := t.associate(tmpl, tree); err != nil {\n\t\t\treturn nil, err\n\t\t} else if replace {\n\t\t\ttmpl.Tree = tree\n\t\t}\n\t\ttmpl.leftDelim = t.leftDelim\n\t\ttmpl.rightDelim = t.rightDelim\n\t}\n\treturn t, nil\n}\n\n// associate installs the new template into the group of templates associated\n// with t. It is an error to reuse a name except to overwrite an empty\n// template. The two are already known to share the common structure.\n// The boolean return value reports wither to store this tree as t.Tree.\nfunc (t *Template) associate(new *Template, tree *parse.Tree) (bool, error) {\n\tif new.common != t.common {\n\t\tpanic(\"internal error: associate not common\")\n\t}\n\tname := new.name\n\tif old := t.tmpl[name]; old != nil {\n\t\toldIsEmpty := parse.IsEmptyTree(old.Root)\n\t\tnewIsEmpty := parse.IsEmptyTree(tree.Root)\n\t\tif newIsEmpty {\n\t\t\t// Whether old is empty or not, new is empty; no reason to replace old.\n\t\t\treturn false, nil\n\t\t}\n\t\tif !oldIsEmpty {\n\t\t\treturn false, fmt.Errorf(\"template: redefinition of template %q\", name)\n\t\t}\n\t}\n\tt.tmpl[name] = new\n\treturn true, nil\n}\n"
  },
  {
    "path": "vendor/github.com/alecthomas/units/COPYING",
    "content": "Copyright (C) 2014 Alec Thomas\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/alecthomas/units/README.md",
    "content": "# Units - Helpful unit multipliers and functions for Go\n\nThe goal of this package is to have functionality similar to the [time](http://golang.org/pkg/time/) package.\n\nIt allows for code like this:\n\n```go\nn, err := ParseBase2Bytes(\"1KB\")\n// n == 1024\nn = units.Mebibyte * 512\n```\n"
  },
  {
    "path": "vendor/github.com/alecthomas/units/bytes.go",
    "content": "package units\n\n// Base2Bytes is the old non-SI power-of-2 byte scale (1024 bytes in a kilobyte,\n// etc.).\ntype Base2Bytes int64\n\n// Base-2 byte units.\nconst (\n\tKibibyte Base2Bytes = 1024\n\tKiB                 = Kibibyte\n\tMebibyte            = Kibibyte * 1024\n\tMiB                 = Mebibyte\n\tGibibyte            = Mebibyte * 1024\n\tGiB                 = Gibibyte\n\tTebibyte            = Gibibyte * 1024\n\tTiB                 = Tebibyte\n\tPebibyte            = Tebibyte * 1024\n\tPiB                 = Pebibyte\n\tExbibyte            = Pebibyte * 1024\n\tEiB                 = Exbibyte\n)\n\nvar (\n\tbytesUnitMap    = MakeUnitMap(\"iB\", \"B\", 1024)\n\toldBytesUnitMap = MakeUnitMap(\"B\", \"B\", 1024)\n)\n\n// ParseBase2Bytes supports both iB and B in base-2 multipliers. That is, KB\n// and KiB are both 1024.\nfunc ParseBase2Bytes(s string) (Base2Bytes, error) {\n\tn, err := ParseUnit(s, bytesUnitMap)\n\tif err != nil {\n\t\tn, err = ParseUnit(s, oldBytesUnitMap)\n\t}\n\treturn Base2Bytes(n), err\n}\n\nfunc (b Base2Bytes) String() string {\n\treturn ToString(int64(b), 1024, \"iB\", \"B\")\n}\n\nvar (\n\tmetricBytesUnitMap = MakeUnitMap(\"B\", \"B\", 1000)\n)\n\n// MetricBytes are SI byte units (1000 bytes in a kilobyte).\ntype MetricBytes SI\n\n// SI base-10 byte units.\nconst (\n\tKilobyte MetricBytes = 1000\n\tKB                   = Kilobyte\n\tMegabyte             = Kilobyte * 1000\n\tMB                   = Megabyte\n\tGigabyte             = Megabyte * 1000\n\tGB                   = Gigabyte\n\tTerabyte             = Gigabyte * 1000\n\tTB                   = Terabyte\n\tPetabyte             = Terabyte * 1000\n\tPB                   = Petabyte\n\tExabyte              = Petabyte * 1000\n\tEB                   = Exabyte\n)\n\n// ParseMetricBytes parses base-10 metric byte units. That is, KB is 1000 bytes.\nfunc ParseMetricBytes(s string) (MetricBytes, error) {\n\tn, err := ParseUnit(s, metricBytesUnitMap)\n\treturn MetricBytes(n), err\n}\n\nfunc (m MetricBytes) String() string {\n\treturn ToString(int64(m), 1000, \"B\", \"B\")\n}\n\n// ParseStrictBytes supports both iB and B suffixes for base 2 and metric,\n// respectively. That is, KiB represents 1024 and KB represents 1000.\nfunc ParseStrictBytes(s string) (int64, error) {\n\tn, err := ParseUnit(s, bytesUnitMap)\n\tif err != nil {\n\t\tn, err = ParseUnit(s, metricBytesUnitMap)\n\t}\n\treturn int64(n), err\n}\n"
  },
  {
    "path": "vendor/github.com/alecthomas/units/doc.go",
    "content": "// Package units provides helpful unit multipliers and functions for Go.\n//\n// The goal of this package is to have functionality similar to the time [1] package.\n//\n//\n// [1] http://golang.org/pkg/time/\n//\n// It allows for code like this:\n//\n//     n, err := ParseBase2Bytes(\"1KB\")\n//     // n == 1024\n//     n = units.Mebibyte * 512\npackage units\n"
  },
  {
    "path": "vendor/github.com/alecthomas/units/si.go",
    "content": "package units\n\n// SI units.\ntype SI int64\n\n// SI unit multiples.\nconst (\n\tKilo SI = 1000\n\tMega    = Kilo * 1000\n\tGiga    = Mega * 1000\n\tTera    = Giga * 1000\n\tPeta    = Tera * 1000\n\tExa     = Peta * 1000\n)\n\nfunc MakeUnitMap(suffix, shortSuffix string, scale int64) map[string]float64 {\n\treturn map[string]float64{\n\t\tshortSuffix:  1,\n\t\t\"K\" + suffix: float64(scale),\n\t\t\"M\" + suffix: float64(scale * scale),\n\t\t\"G\" + suffix: float64(scale * scale * scale),\n\t\t\"T\" + suffix: float64(scale * scale * scale * scale),\n\t\t\"P\" + suffix: float64(scale * scale * scale * scale * scale),\n\t\t\"E\" + suffix: float64(scale * scale * scale * scale * scale * scale),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/alecthomas/units/util.go",
    "content": "package units\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"strings\"\n)\n\nvar (\n\tsiUnits = []string{\"\", \"K\", \"M\", \"G\", \"T\", \"P\", \"E\"}\n)\n\nfunc ToString(n int64, scale int64, suffix, baseSuffix string) string {\n\tmn := len(siUnits)\n\tout := make([]string, mn)\n\tfor i, m := range siUnits {\n\t\tif n%scale != 0 || i == 0 && n == 0 {\n\t\t\ts := suffix\n\t\t\tif i == 0 {\n\t\t\t\ts = baseSuffix\n\t\t\t}\n\t\t\tout[mn-1-i] = fmt.Sprintf(\"%d%s%s\", n%scale, m, s)\n\t\t}\n\t\tn /= scale\n\t\tif n == 0 {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn strings.Join(out, \"\")\n}\n\n// Below code ripped straight from http://golang.org/src/pkg/time/format.go?s=33392:33438#L1123\nvar errLeadingInt = errors.New(\"units: bad [0-9]*\") // never printed\n\n// leadingInt consumes the leading [0-9]* from s.\nfunc leadingInt(s string) (x int64, rem string, err error) {\n\ti := 0\n\tfor ; i < len(s); i++ {\n\t\tc := s[i]\n\t\tif c < '0' || c > '9' {\n\t\t\tbreak\n\t\t}\n\t\tif x >= (1<<63-10)/10 {\n\t\t\t// overflow\n\t\t\treturn 0, \"\", errLeadingInt\n\t\t}\n\t\tx = x*10 + int64(c) - '0'\n\t}\n\treturn x, s[i:], nil\n}\n\nfunc ParseUnit(s string, unitMap map[string]float64) (int64, error) {\n\t// [-+]?([0-9]*(\\.[0-9]*)?[a-z]+)+\n\torig := s\n\tf := float64(0)\n\tneg := false\n\n\t// Consume [-+]?\n\tif s != \"\" {\n\t\tc := s[0]\n\t\tif c == '-' || c == '+' {\n\t\t\tneg = c == '-'\n\t\t\ts = s[1:]\n\t\t}\n\t}\n\t// Special case: if all that is left is \"0\", this is zero.\n\tif s == \"0\" {\n\t\treturn 0, nil\n\t}\n\tif s == \"\" {\n\t\treturn 0, errors.New(\"units: invalid \" + orig)\n\t}\n\tfor s != \"\" {\n\t\tg := float64(0) // this element of the sequence\n\n\t\tvar x int64\n\t\tvar err error\n\n\t\t// The next character must be [0-9.]\n\t\tif !(s[0] == '.' || ('0' <= s[0] && s[0] <= '9')) {\n\t\t\treturn 0, errors.New(\"units: invalid \" + orig)\n\t\t}\n\t\t// Consume [0-9]*\n\t\tpl := len(s)\n\t\tx, s, err = leadingInt(s)\n\t\tif err != nil {\n\t\t\treturn 0, errors.New(\"units: invalid \" + orig)\n\t\t}\n\t\tg = float64(x)\n\t\tpre := pl != len(s) // whether we consumed anything before a period\n\n\t\t// Consume (\\.[0-9]*)?\n\t\tpost := false\n\t\tif s != \"\" && s[0] == '.' {\n\t\t\ts = s[1:]\n\t\t\tpl := len(s)\n\t\t\tx, s, err = leadingInt(s)\n\t\t\tif err != nil {\n\t\t\t\treturn 0, errors.New(\"units: invalid \" + orig)\n\t\t\t}\n\t\t\tscale := 1.0\n\t\t\tfor n := pl - len(s); n > 0; n-- {\n\t\t\t\tscale *= 10\n\t\t\t}\n\t\t\tg += float64(x) / scale\n\t\t\tpost = pl != len(s)\n\t\t}\n\t\tif !pre && !post {\n\t\t\t// no digits (e.g. \".s\" or \"-.s\")\n\t\t\treturn 0, errors.New(\"units: invalid \" + orig)\n\t\t}\n\n\t\t// Consume unit.\n\t\ti := 0\n\t\tfor ; i < len(s); i++ {\n\t\t\tc := s[i]\n\t\t\tif c == '.' || ('0' <= c && c <= '9') {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tu := s[:i]\n\t\ts = s[i:]\n\t\tunit, ok := unitMap[u]\n\t\tif !ok {\n\t\t\treturn 0, errors.New(\"units: unknown unit \" + u + \" in \" + orig)\n\t\t}\n\n\t\tf += g * unit\n\t}\n\n\tif neg {\n\t\tf = -f\n\t}\n\tif f < float64(-1<<63) || f > float64(1<<63-1) {\n\t\treturn 0, errors.New(\"units: overflow parsing unit\")\n\t}\n\treturn int64(f), nil\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/cashutil/.gitignore",
    "content": "# Temp files\r\n*~\r\n\r\n# Log files\r\n*.log\r\n\r\n# Compiled Object files, Static and Dynamic libs (Shared Objects)\r\n*.o\r\n*.a\r\n*.so\r\n\r\n# Folders\r\n_obj\r\n_test\r\n\r\n# Architecture specific extensions/prefixes\r\n*.[568vq]\r\n[568vq].out\r\n\r\n*.cgo1.go\r\n*.cgo2.c\r\n_cgo_defun.c\r\n_cgo_gotypes.go\r\n_cgo_export.*\r\n\r\n_testmain.go\r\n\r\n*.exe \r\n"
  },
  {
    "path": "vendor/github.com/bcext/cashutil/.travis.yml",
    "content": "language: go\ngo:\n  - \"1.9.4\"\n  - \"1.10\"\nsudo: false\ninstall:\n  - go get -d -t -v ./...\n  - go get -v github.com/alecthomas/gometalinter\n  - gometalinter --install\nscript:\n  - export PATH=$PATH:$HOME/gopath/bin\n  - ./goclean.sh\nafter_success:\n  - go get -v github.com/mattn/goveralls\n  - goveralls -coverprofile=profile.cov -service=travis-ci\n"
  },
  {
    "path": "vendor/github.com/bcext/cashutil/LICENSE",
    "content": "ISC License\n\nCopyright (c) 2013-2017 The btcsuite developers\nCopyright (c) 2016-2017 The Lightning Network Developers\nCopyright (c) 2018 The bcext developers\n\nPermission to use, copy, modify, and distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\nOR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/bcext/cashutil/README.md",
    "content": "cashutil\n=======\n\n[![Build Status](http://img.shields.io/travis/bcext/cashutil.svg)](https://travis-ci.org/bcext/cashutil)\n[![Coverage Status](http://img.shields.io/coveralls/bcext/cashutil.svg)](https://coveralls.io/r/bcext/cashutil?branch=master)\n[![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org)\n[![GoDoc](http://img.shields.io/badge/godoc-reference-blue.svg)](http://godoc.org/github.com/bcext/cashutil)\n\nPackage cashutil provides bitcoin-specific convenience functions and types.\nA comprehensive suite of tests is provided to ensure proper functionality.  See\n`test_coverage.txt` for the gocov coverage report.  Alternatively, if you are\nrunning a POSIX OS, you can run the `cov_report.sh` script for a real-time\nreport.\n\nThis package was developed for gcash, an alternative full-node implementation of\nbitcoin which is under active development by Conformal.  Although it was\nprimarily written for gcash, this package has intentionally been designed so it\ncan be used as a standalone package for any projects needing the functionality\nprovided.\n\n## Installation and Updating\n\n```bash\n$ go get -u github.com/bcext/cashutil\n```\n\n## GPG Verification Key\n\nAll official release tags are signed by Conformal so users can ensure the code\nhas not been tampered with and is coming from the btcsuite and bcext developers.\nTo verify the signature perform the following:\n\n- Download the public key from the Conformal website at\n  https://opensource.conformal.com/GIT-GPG-KEY-conformal.txt\n\n- Import the public key into your GPG keyring:\n  ```bash\n  gpg --import GIT-GPG-KEY-conformal.txt\n  ```\n\n- Verify the release tag with the following command where `TAG_NAME` is a\n  placeholder for the specific tag:\n  ```bash\n  git tag -v TAG_NAME\n  ```\n\n## License\n\nPackage cashutil is licensed under the [copyfree](http://copyfree.org) ISC\nLicense.\n"
  },
  {
    "path": "vendor/github.com/bcext/cashutil/address.go",
    "content": "// Copyright (c) 2013-2017 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage cashutil\n\nimport (\n\t\"encoding/hex\"\n\t\"errors\"\n\n\t\"github.com/bcext/cashutil/base58\"\n\t\"github.com/bcext/gcash/btcec\"\n\t\"github.com/bcext/gcash/chaincfg\"\n\t\"golang.org/x/crypto/ripemd160\"\n)\n\nvar (\n\t// ErrChecksumMismatch describes an error where decoding failed due\n\t// to a bad checksum.\n\tErrChecksumMismatch = errors.New(\"checksum mismatch\")\n\n\t// ErrUnknownAddressType describes an error where an address can not\n\t// decoded as a specific address type due to the string encoding\n\t// begining with an identifier byte unknown to any standard or\n\t// registered (via chaincfg.Register) network.\n\tErrUnknownAddressType = errors.New(\"unknown address type\")\n\n\t// ErrAddressCollision describes an error where an address can not\n\t// be uniquely determined as either a pay-to-pubkey-hash or\n\t// pay-to-script-hash address since the leading identifier is used for\n\t// describing both address kinds, but for different networks.  Rather\n\t// than assuming or defaulting to one or the other, this error is\n\t// returned and the caller must decide how to decode the address.\n\tErrAddressCollision = errors.New(\"address collision\")\n)\n\n// encodeAddress returns a human-readable payment address given a ripemd160 hash\n// and netID which encodes the bitcoin network and address type.  It is used\n// in both pay-to-pubkey-hash (P2PKH) and pay-to-script-hash (P2SH) address\n// encoding.\nfunc encodeAddress(hash160 []byte, netID byte) string {\n\t// Format is 1 byte for a network and address class (i.e. P2PKH vs\n\t// P2SH), 20 bytes for a RIPEMD160 hash, and 4 bytes of checksum.\n\treturn base58.CheckEncode(hash160[:ripemd160.Size], netID)\n}\n\n// Address is an interface type for any type of destination a transaction\n// output may spend to.  This includes pay-to-pubkey (P2PK), pay-to-pubkey-hash\n// (P2PKH), and pay-to-script-hash (P2SH).  Address is designed to be generic\n// enough that other kinds of addresses may be added in the future without\n// changing the decoding and encoding API.\ntype Address interface {\n\t// String returns the string encoding of the transaction output\n\t// destination.\n\t//\n\t// Please note that String differs subtly from EncodeAddress: String\n\t// will return the value as a string without any conversion, while\n\t// EncodeAddress may convert destination types (for example,\n\t// converting pubkeys to P2PKH addresses) before encoding as a\n\t// payment address string.\n\tString() string\n\n\t// EncodeAddress returns the string encoding of the payment address\n\t// associated with the Address value.  See the comment on String\n\t// for how this method differs from String.\n\t// Support base58 and base32 encoding according to the parameter.\n\tEncodeAddress(cashaddr bool) string\n\n\t// ScriptAddress returns the raw bytes of the address to be used\n\t// when inserting the address into a txout's script.\n\tScriptAddress() []byte\n\n\t// IsForNet returns whether or not the address is associated with the\n\t// passed bitcoin network.\n\tIsForNet(*chaincfg.Params) bool\n}\n\n// DecodeAddress decodes the string encoding of an address and returns\n// the Address if addr is a valid encoding for a known address type.\n//\n// The bitcoin network the address is associated with is extracted if possible.\n// When the address does not encode the network, such as in the case of a raw\n// public key, the address will be associated with the passed defaultNet.\nfunc DecodeAddress(addr string, defaultNet *chaincfg.Params) (Address, error) {\n\t// bitcoin cash base32-encoded address:\n\t// 1. mainnet:  bitcoincash: + 42 bytes = 12 + 42\n\t// 2. testnet3: bchtest:     + 42 bytes = 8  + 42\n\t// 3. regtest:  bchreg:      + 42 bytes = 7  + 42\n\t// if the address does not have the prefix: length = 42\n\t// if the address have the prefix: max length = 42 + 12\n\tif len(addr) >= 42 && len(addr) <= 42+12 {\n\t\treturn decodeCashAddr(addr, defaultNet)\n\t}\n\n\t// Serialized public keys are either 65 bytes (130 hex chars) if\n\t// uncompressed/hybrid or 33 bytes (66 hex chars) if compressed.\n\tif len(addr) == 130 || len(addr) == 66 {\n\t\tserializedPubKey, err := hex.DecodeString(addr)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn NewAddressPubKey(serializedPubKey, defaultNet)\n\t}\n\n\t// Switch on decoded length to determine the type.\n\tdecoded, netID, err := base58.CheckDecode(addr)\n\tif err != nil {\n\t\tif err == base58.ErrChecksum {\n\t\t\treturn nil, ErrChecksumMismatch\n\t\t}\n\t\treturn nil, errors.New(\"decoded address is of unknown format\")\n\t}\n\tswitch len(decoded) {\n\tcase ripemd160.Size: // P2PKH or P2SH\n\t\tisP2PKH := chaincfg.IsPubKeyHashAddrID(netID)\n\t\tisP2SH := chaincfg.IsScriptHashAddrID(netID)\n\n\t\terrWrongNet := errors.New(\"wrong address from different chainparam\")\n\t\tswitch hash160 := decoded; {\n\t\tcase isP2PKH && isP2SH:\n\t\t\treturn nil, ErrAddressCollision\n\t\tcase isP2PKH:\n\t\t\tif netID != defaultNet.PubKeyHashAddrID {\n\t\t\t\treturn nil, errWrongNet\n\t\t\t}\n\t\t\treturn newAddressPubKeyHash(hash160, defaultNet)\n\t\tcase isP2SH:\n\t\t\tif netID != defaultNet.ScriptHashAddrID {\n\t\t\t\treturn nil, errWrongNet\n\t\t\t}\n\t\t\treturn newAddressScriptHashFromHash(hash160, defaultNet)\n\t\tdefault:\n\t\t\treturn nil, ErrUnknownAddressType\n\t\t}\n\n\tdefault:\n\t\treturn nil, errors.New(\"decoded address is of unknown size\")\n\t}\n}\n\n// AddressPubKeyHash is an Address for a pay-to-pubkey-hash (P2PKH)\n// transaction.\ntype AddressPubKeyHash struct {\n\thash [ripemd160.Size]byte\n\tnet  *chaincfg.Params\n}\n\n// NewAddressPubKeyHash returns a new AddressPubKeyHash.  pkHash must be 20\n// bytes.\nfunc NewAddressPubKeyHash(pkHash []byte, param *chaincfg.Params) (*AddressPubKeyHash, error) {\n\treturn newAddressPubKeyHash(pkHash, param)\n}\n\n// newAddressPubKeyHash is the internal API to create a pubkey hash address\n// with a known leading identifier byte for a network, rather than looking\n// it up through its parameters.  This is useful when creating a new address\n// structure from a string encoding where the identifier byte is already\n// known.\nfunc newAddressPubKeyHash(pkHash []byte, param *chaincfg.Params) (*AddressPubKeyHash, error) {\n\t// Check for a valid pubkey hash length.\n\tif len(pkHash) != ripemd160.Size {\n\t\treturn nil, errors.New(\"pkHash must be 20 bytes\")\n\t}\n\n\taddr := &AddressPubKeyHash{net: param}\n\tcopy(addr.hash[:], pkHash)\n\treturn addr, nil\n}\n\n// EncodeAddress returns the string encoding of a pay-to-pubkey-hash\n// address.  Part of the Address interface.\nfunc (a *AddressPubKeyHash) EncodeAddress(cashaddr bool) string {\n\tif cashaddr {\n\t\treturn encodeCashAddr(a)\n\t}\n\n\treturn encodeAddress(a.hash[:], a.net.PubKeyHashAddrID)\n}\n\n// ScriptAddress returns the bytes to be included in a txout script to pay\n// to a pubkey hash.  Part of the Address interface.\nfunc (a *AddressPubKeyHash) ScriptAddress() []byte {\n\treturn a.hash[:]\n}\n\n// IsForNet returns whether or not the pay-to-pubkey-hash address is associated\n// with the passed bitcoin network.\nfunc (a *AddressPubKeyHash) IsForNet(net *chaincfg.Params) bool {\n\treturn a.net.PubKeyHashAddrID == net.PubKeyHashAddrID\n}\n\n// String returns a human-readable string for the pay-to-pubkey-hash address.\n// This is equivalent to calling EncodeAddress, but is provided so the type can\n// be used as a fmt.Stringer.\n// Use cashaddr encoding default.\nfunc (a *AddressPubKeyHash) String() string {\n\treturn a.EncodeAddress(true)\n}\n\n// Hash160 returns the underlying array of the pubkey hash.  This can be useful\n// when an array is more appropiate than a slice (for example, when used as map\n// keys).\nfunc (a *AddressPubKeyHash) Hash160() *[ripemd160.Size]byte {\n\treturn &a.hash\n}\n\n// AddressScriptHash is an Address for a pay-to-script-hash (P2SH)\n// transaction.\ntype AddressScriptHash struct {\n\thash [ripemd160.Size]byte\n\tnet  *chaincfg.Params\n}\n\n// NewAddressScriptHash returns a new AddressScriptHash.\nfunc NewAddressScriptHash(serializedScript []byte, param *chaincfg.Params) (*AddressScriptHash, error) {\n\tscriptHash := Hash160(serializedScript)\n\treturn newAddressScriptHashFromHash(scriptHash, param)\n}\n\n// NewAddressScriptHashFromHash returns a new AddressScriptHash.  scriptHash\n// must be 20 bytes.\nfunc NewAddressScriptHashFromHash(scriptHash []byte, param *chaincfg.Params) (*AddressScriptHash, error) {\n\treturn newAddressScriptHashFromHash(scriptHash, param)\n}\n\n// newAddressScriptHashFromHash is the internal API to create a script hash\n// address with a known leading identifier byte for a network, rather than\n// looking it up through its parameters.  This is useful when creating a new\n// address structure from a string encoding where the identifer byte is already\n// known.\nfunc newAddressScriptHashFromHash(scriptHash []byte, param *chaincfg.Params) (*AddressScriptHash, error) {\n\t// Check for a valid script hash length.\n\tif len(scriptHash) != ripemd160.Size {\n\t\treturn nil, errors.New(\"scriptHash must be 20 bytes\")\n\t}\n\n\taddr := &AddressScriptHash{net: param}\n\tcopy(addr.hash[:], scriptHash)\n\treturn addr, nil\n}\n\n// EncodeAddress returns the string encoding of a pay-to-script-hash\n// address.  Part of the Address interface.\nfunc (a *AddressScriptHash) EncodeAddress(cashaddr bool) string {\n\tif cashaddr {\n\t\treturn encodeCashAddr(a)\n\t}\n\n\treturn encodeAddress(a.hash[:], a.net.ScriptHashAddrID)\n}\n\n// ScriptAddress returns the bytes to be included in a txout script to pay\n// to a script hash.  Part of the Address interface.\nfunc (a *AddressScriptHash) ScriptAddress() []byte {\n\treturn a.hash[:]\n}\n\n// IsForNet returns whether or not the pay-to-script-hash address is associated\n// with the passed bitcoin network.\nfunc (a *AddressScriptHash) IsForNet(net *chaincfg.Params) bool {\n\treturn a.net.ScriptHashAddrID == net.ScriptHashAddrID\n}\n\n// String returns a human-readable string for the pay-to-script-hash address.\n// This is equivalent to calling EncodeAddress, but is provided so the type can\n// be used as a fmt.Stringer.\n// User cashaddr encoding default.\nfunc (a *AddressScriptHash) String() string {\n\treturn a.EncodeAddress(true)\n}\n\n// Hash160 returns the underlying array of the script hash.  This can be useful\n// when an array is more appropiate than a slice (for example, when used as map\n// keys).\nfunc (a *AddressScriptHash) Hash160() *[ripemd160.Size]byte {\n\treturn &a.hash\n}\n\n// PubKeyFormat describes what format to use for a pay-to-pubkey address.\ntype PubKeyFormat int\n\nconst (\n\t// PKFUncompressed indicates the pay-to-pubkey address format is an\n\t// uncompressed public key.\n\tPKFUncompressed PubKeyFormat = iota\n\n\t// PKFCompressed indicates the pay-to-pubkey address format is a\n\t// compressed public key.\n\tPKFCompressed\n\n\t// PKFHybrid indicates the pay-to-pubkey address format is a hybrid\n\t// public key.\n\tPKFHybrid\n)\n\n// AddressPubKey is an Address for a pay-to-pubkey transaction.\ntype AddressPubKey struct {\n\tpubKeyFormat PubKeyFormat\n\tpubKey       *btcec.PublicKey\n\tnet          *chaincfg.Params\n}\n\n// NewAddressPubKey returns a new AddressPubKey which represents a pay-to-pubkey\n// address.  The serializedPubKey parameter must be a valid pubkey and can be\n// uncompressed, compressed, or hybrid.\nfunc NewAddressPubKey(serializedPubKey []byte, param *chaincfg.Params) (*AddressPubKey, error) {\n\tpubKey, err := btcec.ParsePubKey(serializedPubKey, btcec.S256())\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Set the format of the pubkey.  This probably should be returned\n\t// from btcec, but do it here to avoid API churn.  We already know the\n\t// pubkey is valid since it parsed above, so it's safe to simply examine\n\t// the leading byte to get the format.\n\tpkFormat := PKFUncompressed\n\tswitch serializedPubKey[0] {\n\tcase 0x02, 0x03:\n\t\tpkFormat = PKFCompressed\n\tcase 0x06, 0x07:\n\t\tpkFormat = PKFHybrid\n\t}\n\n\treturn &AddressPubKey{\n\t\tpubKeyFormat: pkFormat,\n\t\tpubKey:       pubKey,\n\t\tnet:          param,\n\t}, nil\n}\n\n// serialize returns the serialization of the public key according to the\n// format associated with the address.\nfunc (a *AddressPubKey) serialize() []byte {\n\tswitch a.pubKeyFormat {\n\tdefault:\n\t\tfallthrough\n\tcase PKFUncompressed:\n\t\treturn a.pubKey.SerializeUncompressed()\n\n\tcase PKFCompressed:\n\t\treturn a.pubKey.SerializeCompressed()\n\n\tcase PKFHybrid:\n\t\treturn a.pubKey.SerializeHybrid()\n\t}\n}\n\n// EncodeAddress returns the string encoding of the public key as a\n// pay-to-pubkey-hash.  Note that the public key format (uncompressed,\n// compressed, etc) will change the resulting address.  This is expected since\n// pay-to-pubkey-hash is a hash of the serialized public key which obviously\n// differs with the format.  At the time of this writing, most Bitcoin addresses\n// are pay-to-pubkey-hash constructed from the uncompressed public key.\n//\n// Part of the Address interface.\nfunc (a *AddressPubKey) EncodeAddress(cashaddr bool) string {\n\tif cashaddr {\n\t\tp2pkh, err := newAddressPubKeyHash(Hash160(a.serialize()), a.net)\n\t\tif err != nil {\n\t\t\treturn \"\"\n\t\t}\n\t\treturn encodeCashAddr(p2pkh)\n\t}\n\n\treturn encodeAddress(Hash160(a.serialize()), a.net.PubKeyHashAddrID)\n}\n\n// ScriptAddress returns the bytes to be included in a txout script to pay\n// to a public key.  Setting the public key format will affect the output of\n// this function accordingly.  Part of the Address interface.\nfunc (a *AddressPubKey) ScriptAddress() []byte {\n\treturn a.serialize()\n}\n\n// IsForNet returns whether or not the pay-to-pubkey address is associated\n// with the passed bitcoin network.\nfunc (a *AddressPubKey) IsForNet(net *chaincfg.Params) bool {\n\treturn a.net.PubKeyHashAddrID == net.PubKeyHashAddrID\n}\n\n// String returns the hex-encoded human-readable string for the pay-to-pubkey\n// address.  This is not the same as calling EncodeAddress.\nfunc (a *AddressPubKey) String() string {\n\treturn hex.EncodeToString(a.serialize())\n}\n\n// Format returns the format (uncompressed, compressed, etc) of the\n// pay-to-pubkey address.\nfunc (a *AddressPubKey) Format() PubKeyFormat {\n\treturn a.pubKeyFormat\n}\n\n// SetFormat sets the format (uncompressed, compressed, etc) of the\n// pay-to-pubkey address.\nfunc (a *AddressPubKey) SetFormat(pkFormat PubKeyFormat) {\n\ta.pubKeyFormat = pkFormat\n}\n\n// AddressPubKeyHash returns the pay-to-pubkey address converted to a\n// pay-to-pubkey-hash address.  Note that the public key format (uncompressed,\n// compressed, etc) will change the resulting address.  This is expected since\n// pay-to-pubkey-hash is a hash of the serialized public key which obviously\n// differs with the format.  At the time of this writing, most Bitcoin addresses\n// are pay-to-pubkey-hash constructed from the uncompressed public key.\nfunc (a *AddressPubKey) AddressPubKeyHash() *AddressPubKeyHash {\n\taddr := &AddressPubKeyHash{net: a.net}\n\tcopy(addr.hash[:], Hash160(a.serialize()))\n\treturn addr\n}\n\n// PubKey returns the underlying public key for the address.\nfunc (a *AddressPubKey) PubKey() *btcec.PublicKey {\n\treturn a.pubKey\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/cashutil/amount.go",
    "content": "// Copyright (c) 2013, 2014 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage cashutil\n\nimport (\n\t\"errors\"\n\t\"math\"\n\t\"strconv\"\n)\n\n// AmountUnit describes a method of converting an Amount to something\n// other than the base unit of a bitcoin.  The value of the AmountUnit\n// is the exponent component of the decadic multiple to convert from\n// an amount in bitcoin to an amount counted in units.\ntype AmountUnit int\n\n// These constants define various units used when describing a bitcoin\n// monetary amount.\nconst (\n\tAmountMegaBCH  AmountUnit = 6\n\tAmountKiloBCH  AmountUnit = 3\n\tAmountBCH      AmountUnit = 0\n\tAmountMilliBCH AmountUnit = -3\n\tAmountMicroBCH AmountUnit = -6\n\tAmountSatoshi  AmountUnit = -8\n)\n\n// String returns the unit as a string.  For recognized units, the SI\n// prefix is used, or \"Satoshi\" for the base unit.  For all unrecognized\n// units, \"1eN BCH\" is returned, where N is the AmountUnit.\nfunc (u AmountUnit) String() string {\n\tswitch u {\n\tcase AmountMegaBCH:\n\t\treturn \"MBCH\"\n\tcase AmountKiloBCH:\n\t\treturn \"kBCH\"\n\tcase AmountBCH:\n\t\treturn \"BCH\"\n\tcase AmountMilliBCH:\n\t\treturn \"mBCH\"\n\tcase AmountMicroBCH:\n\t\treturn \"μBCH\"\n\tcase AmountSatoshi:\n\t\treturn \"Satoshi\"\n\tdefault:\n\t\treturn \"1e\" + strconv.FormatInt(int64(u), 10) + \" BCH\"\n\t}\n}\n\n// Amount represents the base bitcoin monetary unit (colloquially referred\n// to as a `Satoshi').  A single Amount is equal to 1e-8 of a bitcoin.\ntype Amount int64\n\n// round converts a floating point number, which may or may not be representable\n// as an integer, to the Amount integer type by rounding to the nearest integer.\n// This is performed by adding or subtracting 0.5 depending on the sign, and\n// relying on integer truncation to round the value to the nearest Amount.\nfunc round(f float64) Amount {\n\tif f < 0 {\n\t\treturn Amount(f - 0.5)\n\t}\n\treturn Amount(f + 0.5)\n}\n\n// NewAmount creates an Amount from a floating point value representing\n// some value in bitcoin.  NewAmount errors if f is NaN or +-Infinity, but\n// does not check that the amount is within the total amount of bitcoin\n// producible as f may not refer to an amount at a single moment in time.\n//\n// NewAmount is for specifically for converting BCH to Satoshi.\n// For creating a new Amount with an int64 value which denotes a quantity of Satoshi,\n// do a simple type conversion from type int64 to Amount.\n// See GoDoc for example: http://godoc.org/github.com/bcext/cashutil#example-Amount\nfunc NewAmount(f float64) (Amount, error) {\n\t// The amount is only considered invalid if it cannot be represented\n\t// as an integer type.  This may happen if f is NaN or +-Infinity.\n\tswitch {\n\tcase math.IsNaN(f):\n\t\tfallthrough\n\tcase math.IsInf(f, 1):\n\t\tfallthrough\n\tcase math.IsInf(f, -1):\n\t\treturn 0, errors.New(\"invalid bitcoin amount\")\n\t}\n\n\treturn round(f * SatoshiPerBitcoin), nil\n}\n\n// ToUnit converts a monetary amount counted in bitcoin base units to a\n// floating point value representing an amount of bitcoin.\nfunc (a Amount) ToUnit(u AmountUnit) float64 {\n\treturn float64(a) / math.Pow10(int(u+8))\n}\n\n// ToBCH is the equivalent of calling ToUnit with AmountBCH.\nfunc (a Amount) ToBCH() float64 {\n\treturn a.ToUnit(AmountBCH)\n}\n\n// Format formats a monetary amount counted in bitcoin base units as a\n// string for a given unit.  The conversion will succeed for any unit,\n// however, known units will be formated with an appended label describing\n// the units with SI notation, or \"Satoshi\" for the base unit.\nfunc (a Amount) Format(u AmountUnit) string {\n\tunits := \" \" + u.String()\n\treturn strconv.FormatFloat(a.ToUnit(u), 'f', -int(u+8), 64) + units\n}\n\n// String is the equivalent of calling Format with AmountBCH.\nfunc (a Amount) String() string {\n\treturn a.Format(AmountBCH)\n}\n\n// MulF64 multiplies an Amount by a floating point value.  While this is not\n// an operation that must typically be done by a full node or wallet, it is\n// useful for services that build on top of bitcoin (for example, calculating\n// a fee by multiplying by a percentage).\nfunc (a Amount) MulF64(f float64) Amount {\n\treturn round(float64(a) * f)\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/cashutil/appdata.go",
    "content": "// Copyright (c) 2013-2017 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage cashutil\n\nimport (\n\t\"os\"\n\t\"os/user\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strings\"\n\t\"unicode\"\n)\n\n// appDataDir returns an operating system specific directory to be used for\n// storing application data for an application.  See AppDataDir for more\n// details.  This unexported version takes an operating system argument\n// primarily to enable the testing package to properly test the function by\n// forcing an operating system that is not the currently one.\nfunc appDataDir(goos, appName string, roaming bool) string {\n\tif appName == \"\" || appName == \".\" {\n\t\treturn \".\"\n\t}\n\n\t// The caller really shouldn't prepend the appName with a period, but\n\t// if they do, handle it gracefully by trimming it.\n\tappName = strings.TrimPrefix(appName, \".\")\n\tappNameUpper := string(unicode.ToUpper(rune(appName[0]))) + appName[1:]\n\tappNameLower := string(unicode.ToLower(rune(appName[0]))) + appName[1:]\n\n\t// Get the OS specific home directory via the Go standard lib.\n\tvar homeDir string\n\tusr, err := user.Current()\n\tif err == nil {\n\t\thomeDir = usr.HomeDir\n\t}\n\n\t// Fall back to standard HOME environment variable that works\n\t// for most POSIX OSes if the directory from the Go standard\n\t// lib failed.\n\tif err != nil || homeDir == \"\" {\n\t\thomeDir = os.Getenv(\"HOME\")\n\t}\n\n\tswitch goos {\n\t// Attempt to use the LOCALAPPDATA or APPDATA environment variable on\n\t// Windows.\n\tcase \"windows\":\n\t\t// Windows XP and before didn't have a LOCALAPPDATA, so fallback\n\t\t// to regular APPDATA when LOCALAPPDATA is not set.\n\t\tappData := os.Getenv(\"LOCALAPPDATA\")\n\t\tif roaming || appData == \"\" {\n\t\t\tappData = os.Getenv(\"APPDATA\")\n\t\t}\n\n\t\tif appData != \"\" {\n\t\t\treturn filepath.Join(appData, appNameUpper)\n\t\t}\n\n\tcase \"darwin\":\n\t\tif homeDir != \"\" {\n\t\t\treturn filepath.Join(homeDir, \"Library\",\n\t\t\t\t\"Application Support\", appNameUpper)\n\t\t}\n\n\tcase \"plan9\":\n\t\tif homeDir != \"\" {\n\t\t\treturn filepath.Join(homeDir, appNameLower)\n\t\t}\n\n\tdefault:\n\t\tif homeDir != \"\" {\n\t\t\treturn filepath.Join(homeDir, \".\"+appNameLower)\n\t\t}\n\t}\n\n\t// Fall back to the current directory if all else fails.\n\treturn \".\"\n}\n\n// AppDataDir returns an operating system specific directory to be used for\n// storing application data for an application.\n//\n// The appName parameter is the name of the application the data directory is\n// being requested for.  This function will prepend a period to the appName for\n// POSIX style operating systems since that is standard practice.  An empty\n// appName or one with a single dot is treated as requesting the current\n// directory so only \".\" will be returned.  Further, the first character\n// of appName will be made lowercase for POSIX style operating systems and\n// uppercase for Mac and Windows since that is standard practice.\n//\n// The roaming parameter only applies to Windows where it specifies the roaming\n// application data profile (%APPDATA%) should be used instead of the local one\n// (%LOCALAPPDATA%) that is used by default.\n//\n// Example results:\n//  dir := AppDataDir(\"myapp\", false)\n//   POSIX (Linux/BSD): ~/.myapp\n//   Mac OS: $HOME/Library/Application Support/Myapp\n//   Windows: %LOCALAPPDATA%\\Myapp\n//   Plan 9: $home/myapp\nfunc AppDataDir(appName string, roaming bool) string {\n\treturn appDataDir(runtime.GOOS, appName, roaming)\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/cashutil/base58/README.md",
    "content": "base58\n==========\n\n[![Build Status](http://img.shields.io/travis/bcext/cashutil.svg)](https://travis-ci.org/bcext/cashutil)\n[![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org)\n[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](http://godoc.org/github.com/bcext/cashutil/base58)\n\nPackage base58 provides an API for encoding and decoding to and from the\nmodified base58 encoding.  It also provides an API to do Base58Check encoding,\nas described [here](https://en.bitcoin.it/wiki/Base58Check_encoding).\n\nA comprehensive suite of tests is provided to ensure proper functionality.\n\n## Installation and Updating\n\n```bash\n$ go get -u github.com/bcext/cashutil/base58\n```\n\n## Examples\n\n* [Decode Example](http://godoc.org/github.com/bcext/cashutil/base58#example-Decode)  \n  Demonstrates how to decode modified base58 encoded data.\n* [Encode Example](http://godoc.org/github.com/bcext/cashutil/base58#example-Encode)  \n  Demonstrates how to encode data using the modified base58 encoding scheme.\n* [CheckDecode Example](http://godoc.org/github.com/bcext/cashutil/base58#example-CheckDecode)  \n  Demonstrates how to decode Base58Check encoded data.\n* [CheckEncode Example](http://godoc.org/github.com/bcext/cashutil/base58#example-CheckEncode)  \n  Demonstrates how to encode data using the Base58Check encoding scheme.\n\n## License\n\nPackage base58 is licensed under the [copyfree](http://copyfree.org) ISC\nLicense.\n"
  },
  {
    "path": "vendor/github.com/bcext/cashutil/base58/alphabet.go",
    "content": "// Copyright (c) 2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\n// AUTOGENERATED by genalphabet.go; do not edit.\n\npackage base58\n\nconst (\n\t// alphabet is the modified base58 alphabet used by Bitcoin.\n\talphabet = \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\"\n\n\talphabetIdx0 = '1'\n)\n\nvar b58 = [256]byte{\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 0, 1, 2, 3, 4, 5, 6,\n\t7, 8, 255, 255, 255, 255, 255, 255,\n\t255, 9, 10, 11, 12, 13, 14, 15,\n\t16, 255, 17, 18, 19, 20, 21, 255,\n\t22, 23, 24, 25, 26, 27, 28, 29,\n\t30, 31, 32, 255, 255, 255, 255, 255,\n\t255, 33, 34, 35, 36, 37, 38, 39,\n\t40, 41, 42, 43, 255, 44, 45, 46,\n\t47, 48, 49, 50, 51, 52, 53, 54,\n\t55, 56, 57, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/cashutil/base58/base58.go",
    "content": "// Copyright (c) 2013-2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage base58\n\nimport (\n\t\"math/big\"\n)\n\n//go:generate go run genalphabet.go\n\nvar bigRadix = big.NewInt(58)\nvar bigZero = big.NewInt(0)\n\n// Decode decodes a modified base58 string to a byte slice.\nfunc Decode(b string) []byte {\n\tanswer := big.NewInt(0)\n\tj := big.NewInt(1)\n\n\tscratch := new(big.Int)\n\tfor i := len(b) - 1; i >= 0; i-- {\n\t\ttmp := b58[b[i]]\n\t\tif tmp == 255 {\n\t\t\treturn []byte(\"\")\n\t\t}\n\t\tscratch.SetInt64(int64(tmp))\n\t\tscratch.Mul(j, scratch)\n\t\tanswer.Add(answer, scratch)\n\t\tj.Mul(j, bigRadix)\n\t}\n\n\ttmpval := answer.Bytes()\n\n\tvar numZeros int\n\tfor numZeros = 0; numZeros < len(b); numZeros++ {\n\t\tif b[numZeros] != alphabetIdx0 {\n\t\t\tbreak\n\t\t}\n\t}\n\tflen := numZeros + len(tmpval)\n\tval := make([]byte, flen)\n\tcopy(val[numZeros:], tmpval)\n\n\treturn val\n}\n\n// Encode encodes a byte slice to a modified base58 string.\nfunc Encode(b []byte) string {\n\tx := new(big.Int)\n\tx.SetBytes(b)\n\n\tanswer := make([]byte, 0, len(b)*136/100)\n\tfor x.Cmp(bigZero) > 0 {\n\t\tmod := new(big.Int)\n\t\tx.DivMod(x, bigRadix, mod)\n\t\tanswer = append(answer, alphabet[mod.Int64()])\n\t}\n\n\t// leading zero bytes\n\tfor _, i := range b {\n\t\tif i != 0 {\n\t\t\tbreak\n\t\t}\n\t\tanswer = append(answer, alphabetIdx0)\n\t}\n\n\t// reverse\n\talen := len(answer)\n\tfor i := 0; i < alen/2; i++ {\n\t\tanswer[i], answer[alen-1-i] = answer[alen-1-i], answer[i]\n\t}\n\n\treturn string(answer)\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/cashutil/base58/base58check.go",
    "content": "// Copyright (c) 2013-2014 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage base58\n\nimport (\n\t\"crypto/sha256\"\n\t\"errors\"\n)\n\n// ErrChecksum indicates that the checksum of a check-encoded string does not verify against\n// the checksum.\nvar ErrChecksum = errors.New(\"checksum error\")\n\n// ErrInvalidFormat indicates that the check-encoded string has an invalid format.\nvar ErrInvalidFormat = errors.New(\"invalid format: version and/or checksum bytes missing\")\n\n// checksum: first four bytes of sha256^2\nfunc checksum(input []byte) (cksum [4]byte) {\n\th := sha256.Sum256(input)\n\th2 := sha256.Sum256(h[:])\n\tcopy(cksum[:], h2[:4])\n\treturn\n}\n\n// CheckEncode prepends a version byte and appends a four byte checksum.\nfunc CheckEncode(input []byte, version byte) string {\n\tb := make([]byte, 0, 1+len(input)+4)\n\tb = append(b, version)\n\tb = append(b, input[:]...)\n\tcksum := checksum(b)\n\tb = append(b, cksum[:]...)\n\treturn Encode(b)\n}\n\n// CheckDecode decodes a string that was encoded with CheckEncode and verifies the checksum.\nfunc CheckDecode(input string) (result []byte, version byte, err error) {\n\tdecoded := Decode(input)\n\tif len(decoded) < 5 {\n\t\treturn nil, 0, ErrInvalidFormat\n\t}\n\tversion = decoded[0]\n\tvar cksum [4]byte\n\tcopy(cksum[:], decoded[len(decoded)-4:])\n\tif checksum(decoded[:len(decoded)-4]) != cksum {\n\t\treturn nil, 0, ErrChecksum\n\t}\n\tpayload := decoded[1 : len(decoded)-4]\n\tresult = append(result, payload...)\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/cashutil/base58/cov_report.sh",
    "content": "#!/bin/sh\n\n# This script uses gocov to generate a test coverage report.\n# The gocov tool my be obtained with the following command:\n#   go get github.com/axw/gocov/gocov\n#\n# It will be installed to $GOPATH/bin, so ensure that location is in your $PATH.\n\n# Check for gocov.\ntype gocov >/dev/null 2>&1\nif [ $? -ne 0 ]; then\n\techo >&2 \"This script requires the gocov tool.\"\n\techo >&2 \"You may obtain it with the following command:\"\n\techo >&2 \"go get github.com/axw/gocov/gocov\"\n\texit 1\nfi\ngocov test | gocov report\n"
  },
  {
    "path": "vendor/github.com/bcext/cashutil/base58/doc.go",
    "content": "// Copyright (c) 2014 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\n/*\nPackage base58 provides an API for working with modified base58 and Base58Check\nencodings.\n\nModified Base58 Encoding\n\nStandard base58 encoding is similar to standard base64 encoding except, as the\nname implies, it uses a 58 character alphabet which results in an alphanumeric\nstring and allows some characters which are problematic for humans to be\nexcluded.  Due to this, there can be various base58 alphabets.\n\nThe modified base58 alphabet used by Bitcoin, and hence this package, omits the\n0, O, I, and l characters that look the same in many fonts and are therefore\nhard to humans to distinguish.\n\nBase58Check Encoding Scheme\n\nThe Base58Check encoding scheme is primarily used for Bitcoin addresses at the\ntime of this writing, however it can be used to generically encode arbitrary\nbyte arrays into human-readable strings along with a version byte that can be\nused to differentiate the same payload.  For Bitcoin addresses, the extra\nversion is used to differentiate the network of otherwise identical public keys\nwhich helps prevent using an address intended for one network on another.\n*/\npackage base58\n"
  },
  {
    "path": "vendor/github.com/bcext/cashutil/base58/genalphabet.go",
    "content": "// Copyright (c) 2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\n//+build ignore\n\npackage main\n\nimport (\n\t\"bytes\"\n\t\"io\"\n\t\"log\"\n\t\"os\"\n\t\"strconv\"\n)\n\nvar (\n\tstart = []byte(`// Copyright (c) 2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\n// AUTOGENERATED by genalphabet.go; do not edit.\n\npackage base58\n\nconst (\n\t// alphabet is the modified base58 alphabet used by Bitcoin.\n\talphabet = \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\"\n\n\talphabetIdx0 = '1'\n)\n\nvar b58 = [256]byte{`)\n\n\tend = []byte(`}`)\n\n\talphabet = []byte(\"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\")\n\ttab      = []byte(\"\\t\")\n\tinvalid  = []byte(\"255\")\n\tcomma    = []byte(\",\")\n\tspace    = []byte(\" \")\n\tnl       = []byte(\"\\n\")\n)\n\nfunc write(w io.Writer, b []byte) {\n\t_, err := w.Write(b)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n}\n\nfunc main() {\n\tfi, err := os.Create(\"alphabet.go\")\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tdefer fi.Close()\n\n\twrite(fi, start)\n\twrite(fi, nl)\n\tfor i := byte(0); i < 32; i++ {\n\t\twrite(fi, tab)\n\t\tfor j := byte(0); j < 8; j++ {\n\t\t\tidx := bytes.IndexByte(alphabet, i*8+j)\n\t\t\tif idx == -1 {\n\t\t\t\twrite(fi, invalid)\n\t\t\t} else {\n\t\t\t\twrite(fi, strconv.AppendInt(nil, int64(idx), 10))\n\t\t\t}\n\t\t\twrite(fi, comma)\n\t\t\tif j != 7 {\n\t\t\t\twrite(fi, space)\n\t\t\t}\n\t\t}\n\t\twrite(fi, nl)\n\t}\n\twrite(fi, end)\n\twrite(fi, nl)\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/cashutil/block.go",
    "content": "// Copyright (c) 2013-2016 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage cashutil\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/bcext/gcash/chaincfg/chainhash\"\n\t\"github.com/bcext/gcash/wire\"\n)\n\n// OutOfRangeError describes an error due to accessing an element that is out\n// of range.\ntype OutOfRangeError string\n\n// BlockHeightUnknown is the value returned for a block height that is unknown.\n// This is typically because the block has not been inserted into the main chain\n// yet.\nconst BlockHeightUnknown = int32(-1)\n\n// Error satisfies the error interface and prints human-readable errors.\nfunc (e OutOfRangeError) Error() string {\n\treturn string(e)\n}\n\n// Block defines a bitcoin block that provides easier and more efficient\n// manipulation of raw blocks.  It also memoizes hashes for the block and its\n// transactions on their first access so subsequent accesses don't have to\n// repeat the relatively expensive hashing operations.\ntype Block struct {\n\tmsgBlock        *wire.MsgBlock  // Underlying MsgBlock\n\tserializedBlock []byte          // Serialized bytes for the block\n\tblockHash       *chainhash.Hash // Cached block hash\n\tblockHeight     int32           // Height in the main block chain\n\ttransactions    []*Tx           // Transactions\n\ttxnsGenerated   bool            // ALL wrapped transactions generated\n}\n\n// MsgBlock returns the underlying wire.MsgBlock for the Block.\nfunc (b *Block) MsgBlock() *wire.MsgBlock {\n\t// Return the cached block.\n\treturn b.msgBlock\n}\n\n// Bytes returns the serialized bytes for the Block.  This is equivalent to\n// calling Serialize on the underlying wire.MsgBlock, however it caches the\n// result so subsequent calls are more efficient.\nfunc (b *Block) Bytes() ([]byte, error) {\n\t// Return the cached serialized bytes if it has already been generated.\n\tif len(b.serializedBlock) != 0 {\n\t\treturn b.serializedBlock, nil\n\t}\n\n\t// Serialize the MsgBlock.\n\tvar w bytes.Buffer\n\terr := b.msgBlock.Serialize(&w)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tserializedBlock := w.Bytes()\n\n\t// Cache the serialized bytes and return them.\n\tb.serializedBlock = serializedBlock\n\treturn serializedBlock, nil\n}\n\n// Hash returns the block identifier hash for the Block.  This is equivalent to\n// calling BlockHash on the underlying wire.MsgBlock, however it caches the\n// result so subsequent calls are more efficient.\nfunc (b *Block) Hash() *chainhash.Hash {\n\t// Return the cached block hash if it has already been generated.\n\tif b.blockHash != nil {\n\t\treturn b.blockHash\n\t}\n\n\t// Cache the block hash and return it.\n\thash := b.msgBlock.BlockHash()\n\tb.blockHash = &hash\n\treturn &hash\n}\n\n// Tx returns a wrapped transaction (cashutil.Tx) for the transaction at the\n// specified index in the Block.  The supplied index is 0 based.  That is to\n// say, the first transaction in the block is txNum 0.  This is nearly\n// equivalent to accessing the raw transaction (wire.MsgTx) from the\n// underlying wire.MsgBlock, however the wrapped transaction has some helpful\n// properties such as caching the hash so subsequent calls are more efficient.\nfunc (b *Block) Tx(txNum int) (*Tx, error) {\n\t// Ensure the requested transaction is in range.\n\tnumTx := uint64(len(b.msgBlock.Transactions))\n\tif txNum < 0 || uint64(txNum) > numTx {\n\t\tstr := fmt.Sprintf(\"transaction index %d is out of range - max %d\",\n\t\t\ttxNum, numTx-1)\n\t\treturn nil, OutOfRangeError(str)\n\t}\n\n\t// Generate slice to hold all of the wrapped transactions if needed.\n\tif len(b.transactions) == 0 {\n\t\tb.transactions = make([]*Tx, numTx)\n\t}\n\n\t// Return the wrapped transaction if it has already been generated.\n\tif b.transactions[txNum] != nil {\n\t\treturn b.transactions[txNum], nil\n\t}\n\n\t// Generate and cache the wrapped transaction and return it.\n\tnewTx := NewTx(b.msgBlock.Transactions[txNum])\n\tnewTx.SetIndex(txNum)\n\tb.transactions[txNum] = newTx\n\treturn newTx, nil\n}\n\n// Transactions returns a slice of wrapped transactions (cashutil.Tx) for all\n// transactions in the Block.  This is nearly equivalent to accessing the raw\n// transactions (wire.MsgTx) in the underlying wire.MsgBlock, however it\n// instead provides easy access to wrapped versions (cashutil.Tx) of them.\nfunc (b *Block) Transactions() []*Tx {\n\t// Return transactions if they have ALL already been generated.  This\n\t// flag is necessary because the wrapped transactions are lazily\n\t// generated in a sparse fashion.\n\tif b.txnsGenerated {\n\t\treturn b.transactions\n\t}\n\n\t// Generate slice to hold all of the wrapped transactions if needed.\n\tif len(b.transactions) == 0 {\n\t\tb.transactions = make([]*Tx, len(b.msgBlock.Transactions))\n\t}\n\n\t// Generate and cache the wrapped transactions for all that haven't\n\t// already been done.\n\tfor i, tx := range b.transactions {\n\t\tif tx == nil {\n\t\t\tnewTx := NewTx(b.msgBlock.Transactions[i])\n\t\t\tnewTx.SetIndex(i)\n\t\t\tb.transactions[i] = newTx\n\t\t}\n\t}\n\n\tb.txnsGenerated = true\n\treturn b.transactions\n}\n\n// TxHash returns the hash for the requested transaction number in the Block.\n// The supplied index is 0 based.  That is to say, the first transaction in the\n// block is txNum 0.  This is equivalent to calling TxHash on the underlying\n// wire.MsgTx, however it caches the result so subsequent calls are more\n// efficient.\nfunc (b *Block) TxHash(txNum int) (*chainhash.Hash, error) {\n\t// Attempt to get a wrapped transaction for the specified index.  It\n\t// will be created lazily if needed or simply return the cached version\n\t// if it has already been generated.\n\ttx, err := b.Tx(txNum)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Defer to the wrapped transaction which will return the cached hash if\n\t// it has already been generated.\n\treturn tx.Hash(), nil\n}\n\n// TxLoc returns the offsets and lengths of each transaction in a raw block.\n// It is used to allow fast indexing into transactions within the raw byte\n// stream.\nfunc (b *Block) TxLoc() ([]wire.TxLoc, error) {\n\trawMsg, err := b.Bytes()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\trbuf := bytes.NewBuffer(rawMsg)\n\n\tvar mblock wire.MsgBlock\n\ttxLocs, err := mblock.DeserializeTxLoc(rbuf)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn txLocs, err\n}\n\n// Height returns the saved height of the block in the block chain.  This value\n// will be BlockHeightUnknown if it hasn't already explicitly been set.\nfunc (b *Block) Height() int32 {\n\treturn b.blockHeight\n}\n\n// SetHeight sets the height of the block in the block chain.\nfunc (b *Block) SetHeight(height int32) {\n\tb.blockHeight = height\n}\n\n// NewBlock returns a new instance of a bitcoin block given an underlying\n// wire.MsgBlock.  See Block.\nfunc NewBlock(msgBlock *wire.MsgBlock) *Block {\n\treturn &Block{\n\t\tmsgBlock:    msgBlock,\n\t\tblockHeight: BlockHeightUnknown,\n\t}\n}\n\n// NewBlockFromBytes returns a new instance of a bitcoin block given the\n// serialized bytes.  See Block.\nfunc NewBlockFromBytes(serializedBlock []byte) (*Block, error) {\n\tbr := bytes.NewReader(serializedBlock)\n\tb, err := NewBlockFromReader(br)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tb.serializedBlock = serializedBlock\n\treturn b, nil\n}\n\n// NewBlockFromReader returns a new instance of a bitcoin block given a\n// Reader to deserialize the block.  See Block.\nfunc NewBlockFromReader(r io.Reader) (*Block, error) {\n\t// Deserialize the bytes into a MsgBlock.\n\tvar msgBlock wire.MsgBlock\n\terr := msgBlock.Deserialize(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tb := Block{\n\t\tmsgBlock:    &msgBlock,\n\t\tblockHeight: BlockHeightUnknown,\n\t}\n\treturn &b, nil\n}\n\n// NewBlockFromBlockAndBytes returns a new instance of a bitcoin block given\n// an underlying wire.MsgBlock and the serialized bytes for it.  See Block.\nfunc NewBlockFromBlockAndBytes(msgBlock *wire.MsgBlock, serializedBlock []byte) *Block {\n\treturn &Block{\n\t\tmsgBlock:        msgBlock,\n\t\tserializedBlock: serializedBlock,\n\t\tblockHeight:     BlockHeightUnknown,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/cashutil/cashaddr.go",
    "content": "// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage cashutil\n\nimport (\n\t\"bytes\"\n\t\"strings\"\n)\n\n// The cashaddr character set for encoding.\nconst charset = \"qpzry9x8gf2tvdw0s3jn54khce6mua7l\"\n\n// The cashaddr character set for decoding.\nvar charsetDecoder = [128]int{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n\t-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n\t-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n\t-1, 15, -1, 10, 17, 21, 20, 26, 30, 7, 5, -1, -1, -1, -1, -1, -1, -1, 29,\n\t-1, 24, 13, 25, 9, 8, 23, -1, 18, 22, 31, 27, 19, -1, 1, 0, 3, 16, 11, 28,\n\t12, 14, 6, 4, 2, -1, -1, -1, -1, -1, -1, 29, -1, 24, 13, 25, 9, 8, 23, -1,\n\t18, 22, 31, 27, 19, -1, 1, 0, 3, 16, 11, 28, 12, 14, 6, 4, 2, -1, -1, -1,\n\t-1, -1}\n\n// encode a cashaddr string.\nfunc encode(prefix string, payload []byte) string {\n\tcheckSum := createChecksum(prefix, payload)\n\tcombined := cat(payload, checkSum)\n\n\tbuf := bytes.NewBuffer(make([]byte, 0, len(prefix)+len(combined)+1))\n\tbuf.WriteString(prefix + \":\")\n\tfor _, char := range combined {\n\t\tbuf.WriteString(string(charset[char]))\n\t}\n\treturn buf.String()\n}\n\n// decode a cashaddr string.\nfunc decode(str, defaultPrefix string) (string, []byte) {\n\t// Go over the string and do some sanity checks.\n\tvar lower, upper, hasNumber bool\n\tprefixSize := 0\n\tfor pos, char := range str {\n\t\tif char >= 'a' && char <= 'z' {\n\t\t\tlower = true\n\t\t\tcontinue\n\t\t}\n\n\t\tif char >= 'A' && char <= 'Z' {\n\t\t\tupper = true\n\t\t\tcontinue\n\t\t}\n\n\t\tif char >= '0' && char <= '9' {\n\t\t\t// We cannot have numbers in the prefix.\n\t\t\thasNumber = true\n\t\t\tcontinue\n\t\t}\n\n\t\tif char == ':' {\n\t\t\t// The separator cannot be the first character, cannot have number\n\t\t\t// and there must not be 2 separators.\n\t\t\tif hasNumber || pos == 0 || prefixSize != 0 {\n\t\t\t\treturn \"\", nil\n\t\t\t}\n\n\t\t\tprefixSize = pos\n\t\t\tcontinue\n\t\t}\n\n\t\t// We have an unexpected character.\n\t\treturn \"\", nil\n\t}\n\n\t// We can't have both upper case and lowercase.\n\tif upper && lower {\n\t\treturn \"\", nil\n\t}\n\n\t// Get the prefix\n\tvar prefix string\n\tif prefixSize == 0 {\n\t\tprefix = defaultPrefix\n\t} else {\n\t\tbuf := bytes.NewBuffer(make([]byte, 0, prefixSize))\n\t\tfor i := 0; i < prefixSize; i++ {\n\t\t\tbuf.WriteString(strings.ToLower(string(str[i])))\n\t\t}\n\t\tprefix = buf.String()\n\n\t\t// Now add the \":\" in the size\n\t\tprefixSize++\n\t}\n\n\t//Decode values\n\tvalueSize := len(str) - prefixSize\n\tvalues := make([]byte, valueSize)\n\tfor i := 0; i < valueSize; i++ {\n\t\tc := str[i+prefixSize]\n\t\t// We have an invalid char in there.\n\t\tif c > 127 || charsetDecoder[c] == -1 {\n\t\t\treturn \"\", nil\n\t\t}\n\n\t\tvalues[i] = byte(charsetDecoder[c])\n\t}\n\n\t// Verify the checksum.\n\tif !verifyChecksum(prefix, values) {\n\t\treturn \"\", nil\n\t}\n\n\treturn prefix, values[:len(values)-8]\n}\n\n// CreateChecksum Create a checksum.\nfunc createChecksum(prefix string, payload []byte) []byte {\n\tenc := cat(expandPrefix(prefix), payload)\n\t// Append 8 zeroes\n\tenc = append(enc, []byte{0, 0, 0, 0, 0, 0, 0, 0}...)\n\t// Determine what to XOR into those 8 zeroes.\n\tmod := polyMod(enc)\n\n\tret := make([]byte, 8)\n\tfor i := 0; i < 8; i++ {\n\t\t// Convert the 5-bit groups in mod to checksum values.\n\t\tret[i] = byte((mod >> (5 * (7 - uint(i)))) & 0x1f)\n\t}\n\n\treturn ret\n}\n\n// Concatenate two byte arrays.\nfunc cat(x, y []byte) []byte {\n\tbuf := bytes.NewBuffer(make([]byte, 0, len(x)+len(y)))\n\tbuf.Write(x)\n\tbuf.Write(y)\n\treturn buf.Bytes()\n}\n\nfunc expandPrefix(prefix string) []byte {\n\tret := make([]byte, len(prefix)+1)\n\tfor pos, char := range prefix {\n\t\tret[pos] = byte(char) & 0x1f\n\t}\n\n\tret[len(ret)-1] = 0\n\treturn ret\n}\n\n//This function will compute what 8 5-bit values to XOR into the last 8 input\n//values, in order to make the checksum 0. These 8 values are packed together\n//in a single 40-bit integer. The higher bits correspond to earlier values.\nfunc polyMod(v []byte) uint64 {\n\t// The input is interpreted as a list of coefficients of a polynomial over F\n\t// = GF(32), with an implicit 1 in front. If the input is [v0,v1,v2,v3,v4],\n\t// that polynomial is v(x) = 1*x^5 + v0*x^4 + v1*x^3 + v2*x^2 + v3*x + v4.\n\t// \tThe implicit 1 guarantees that [v0,v1,v2,...] has a distinct checksum\n\t// from [0,v0,v1,v2,...].\n\t// The output is a 40-bit integer whose 5-bit groups are the coefficients of\n\t// the remainder of v(x) mod g(x), where g(x) is the cashaddr generator, x^8\n\t// + {19}*x^7 + {3}*x^6 + {25}*x^5 + {11}*x^4 + {25}*x^3 + {3}*x^2 + {19}*x\n\t// + {1}. g(x) is chosen in such a way that the resulting code is a BCH\n\t// code, guaranteeing detection of up to 4 errors within a window of 1025\n\t// characters. Among the various possible BCH codes, one was selected to in\n\t// fact guarantee detection of up to 5 errors within a window of 160\n\t// characters and 6 erros within a window of 126 characters. In addition,\n\t// \tthe code guarantee the detection of a burst of up to 8 errors.\n\t// \tNote that the coefficients are elements of GF(32), here represented as\n\t// decimal numbers between {}. In this finite field, addition is just XOR of\n\t// the corresponding numbers. For example, {27} + {13} = {27 ^ 13} = {22}.\n\t// Multiplication is more complicated, and requires treating the bits of\n\t// values themselves as coefficients of a polynomial over a smaller field,\n\t// \tGF(2), and multiplying those polynomials mod a^5 + a^3 + 1. For example,\n\t// {5} * {26} = (a^2 + 1) * (a^4 + a^3 + a) = (a^4 + a^3 + a) * a^2 + (a^4 +\n\t// \ta^3 + a) = a^6 + a^5 + a^4 + a = a^3 + 1 (mod a^5 + a^3 + 1) = {9}.\n\t// During the course of the loop below, `c` contains the bitpacked\n\t// coefficients of the polynomial constructed from just the values of v that\n\t// were processed so far, mod g(x). In the above example, `c` initially\n\t// corresponds to 1 mod (x), and after processing 2 inputs of v, it\n\t// corresponds to x^2 + v0*x + v1 mod g(x). As 1 mod g(x) = 1, that is the\n\t// starting value for `c`.\n\tc := uint64(1)\n\tfor _, char := range v {\n\t\t// We want to update `c` to correspond to a polynomial with one extra\n\t\t// term. If the initial value of `c` consists of the coefficients of\n\t\t// c(x) = f(x) mod g(x), we modify it to correspond to\n\t\t// c'(x) = (f(x) * x + d) mod g(x), where d is the next input to\n\t\t// process.\n\t\t// \tSimplifying:\n\t\t// c'(x) = (f(x) * x + d) mod g(x)\n\t\t// ((f(x) mod g(x)) * x + d) mod g(x)\n\t\t// (c(x) * x + d) mod g(x)\n\t\t// If c(x) = c0*x^5 + c1*x^4 + c2*x^3 + c3*x^2 + c4*x + c5, we want to\n\t\t// compute\n\t\t// c'(x) = (c0*x^5 + c1*x^4 + c2*x^3 + c3*x^2 + c4*x + c5) * x + d\n\t\t// mod g(x)\n\t\t// = c0*x^6 + c1*x^5 + c2*x^4 + c3*x^3 + c4*x^2 + c5*x + d\n\t\t// mod g(x)\n\t\t// = c0*(x^6 mod g(x)) + c1*x^5 + c2*x^4 + c3*x^3 + c4*x^2 +\n\t\t// \tc5*x + d\n\t\t// If we call (x^6 mod g(x)) = k(x), this can be written as\n\t\t// c'(x) = (c1*x^5 + c2*x^4 + c3*x^3 + c4*x^2 + c5*x + d) + c0*k(x)\n\n\t\t// First, determine the value of c0:\n\t\tc0 := byte(c >> 35)\n\n\t\t// Then compute c1*x^5 + c2*x^4 + c3*x^3 + c4*x^2 + c5*x + d:\n\t\tc = ((c & 0x07ffffffff) << 5) ^ uint64(char)\n\n\t\t// Finally, for each set bit n in c0, conditionally add {2^n}k(x):\n\t\tif c0&0x01 != 0 {\n\t\t\t// k(x) = {19}*x^7 + {3}*x^6 + {25}*x^5 + {11}*x^4 + {25}*x^3 +\n\t\t\t//        {3}*x^2 + {19}*x + {1}\n\t\t\tc ^= 0x98f2bc8e61\n\t\t}\n\n\t\tif c0&0x2 != 0 {\n\t\t\t// {2}k(x) = {15}*x^7 + {6}*x^6 + {27}*x^5 + {22}*x^4 + {27}*x^3 +\n\t\t\t//           {6}*x^2 + {15}*x + {2}\n\t\t\tc ^= 0x79b76d99e2\n\t\t}\n\n\t\tif c0&0x04 != 0 {\n\t\t\t// {4}k(x) = {30}*x^7 + {12}*x^6 + {31}*x^5 + {5}*x^4 + {31}*x^3 +\n\t\t\t//           {12}*x^2 + {30}*x + {4}\n\t\t\tc ^= 0xf33e5fb3c4\n\t\t}\n\n\t\tif c0&0x08 != 0 {\n\t\t\t// {8}k(x) = {21}*x^7 + {24}*x^6 + {23}*x^5 + {10}*x^4 + {23}*x^3 +\n\t\t\t//           {24}*x^2 + {21}*x + {8}\n\t\t\tc ^= 0xae2eabe2a8\n\t\t}\n\n\t\tif c0&0x10 != 0 {\n\t\t\t// {16}k(x) = {3}*x^7 + {25}*x^6 + {7}*x^5 + {20}*x^4 + {7}*x^3 +\n\t\t\t//            {25}*x^2 + {3}*x + {16}\n\t\t\tc ^= 0x1e4f43e470\n\t\t}\n\t}\n\n\t// PolyMod computes what value to xor into the final values to make the\n\t// checksum 0. However, if we required that the checksum was 0, it would be\n\t// the case that appending a 0 to a valid list of values would result in a\n\t// new valid list. For that reason, cashaddr requires the resulting checksum\n\t// to be 1 instead.\n\treturn c ^ 1\n}\n\nfunc verifyChecksum(prefix string, payload []byte) bool {\n\treturn polyMod(cat(expandPrefix(prefix), payload)) == 0\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/cashutil/cashaddrconv.go",
    "content": "// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage cashutil\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"strings\"\n\n\t\"github.com/bcext/gcash/chaincfg\"\n)\n\ntype addrType uint8\n\nconst (\n\tpubKeyType addrType = iota\n\tscriptType\n)\n\nvar (\n\terrEmptyAddressContent = errors.New(\"empty address content\")\n\terrInvalidHash160Size  = errors.New(\"invalid hash160 size\")\n\terrInvalidAddressType  = errors.New(\"invalid address type\")\n)\n\ntype addrContent struct {\n\tt    addrType\n\thash []byte\n}\n\nfunc encodeCashAddr(dst Address) string {\n\tswitch addr := dst.(type) {\n\tcase *AddressPubKeyHash:\n\t\tdata := packAddrData(addr.Hash160()[:], uint8(pubKeyType))\n\t\treturn encode(addr.net.CashAddrPrefix, data)\n\tcase *AddressScriptHash:\n\t\tdata := packAddrData(addr.Hash160()[:], uint8(scriptType))\n\t\treturn encode(addr.net.CashAddrPrefix, data)\n\tdefault:\n\t\treturn \"\"\n\t}\n}\n\nfunc decodeCashAddr(addr string, param *chaincfg.Params) (Address, error) {\n\t// handle bitcoin address prefixed with net tag\n\tif strings.Contains(addr, \":\") {\n\t\tpos := strings.LastIndex(addr, \":\")\n\t\taddr = addr[pos+1:]\n\t}\n\n\tcontent := decodeCashaddrContent(addr, param)\n\tif content == nil || len(content.hash) == 0 {\n\t\treturn nil, errEmptyAddressContent\n\t}\n\n\treturn decodeCashAddrDestination(content, param)\n}\n\n// Convert the data part to a 5 bit representation.\nfunc packAddrData(id []byte, t uint8) []byte {\n\tversion := t << 3\n\tsize := len(id)\n\tvar encodedSize uint8\n\tswitch size * 8 {\n\tcase 160:\n\t\tencodedSize = 0\n\tcase 192:\n\t\tencodedSize = 1\n\tcase 224:\n\t\tencodedSize = 2\n\tcase 256:\n\t\tencodedSize = 3\n\tcase 320:\n\t\tencodedSize = 4\n\tcase 384:\n\t\tencodedSize = 5\n\tcase 448:\n\t\tencodedSize = 6\n\tcase 512:\n\t\tencodedSize = 7\n\tdefault:\n\t\tpanic(\"Error packing cashaddr: invalid address length\")\n\t}\n\n\tversion |= encodedSize\n\tdata := bytes.NewBuffer(make([]byte, 0, len(id)+1))\n\tdata.WriteByte(version)\n\tdata.Write(id)\n\n\t// Reserve the number of bytes required for a 5-bit packed version of a\n\t// hash, with version byte.  Add half a byte(4) so integer math provides\n\t// the next multiple-of-5 that would fit all the data.\n\tret, _ := convertBits(8, 5, true, data.Bytes())\n\n\treturn ret\n}\n\nfunc convertBits(frombits uint, tobits uint, pad bool, data []byte) ([]byte, bool) {\n\tvar acc, bits int\n\tmaxv := (1 << tobits) - 1\n\tmaxAcc := (1 << (frombits + tobits - 1)) - 1\n\n\tret := bytes.NewBuffer(nil)\n\tfor _, bit := range data {\n\t\tacc = ((acc << frombits) | int(bit)) & maxAcc\n\t\tbits += int(frombits)\n\n\t\tfor bits >= int(tobits) {\n\t\t\tbits -= int(tobits)\n\t\t\tret.WriteByte(byte((acc >> uint(bits)) & maxv))\n\t\t}\n\t}\n\n\t// We have remaining bits to encode but do not pad.\n\tif !pad && bits != 0 {\n\t\treturn ret.Bytes(), false\n\t}\n\n\t// We have remaining bits to encode so we do pad.\n\tif pad && bits != 0 {\n\t\tret.WriteByte(byte(acc << (tobits - uint(bits)) & maxv))\n\t}\n\n\treturn ret.Bytes(), true\n}\n\nfunc decodeCashaddrContent(addr string, param *chaincfg.Params) *addrContent {\n\tprefix, payload := decode(addr, param.CashAddrPrefix)\n\tif prefix != param.CashAddrPrefix {\n\t\treturn nil\n\t}\n\n\tif len(payload) == 0 {\n\t\treturn nil\n\t}\n\n\t// Check that the padding is zero.\n\textraBits := len(payload) * 5 % 8\n\tif extraBits >= 5 {\n\t\t// We have more padding than allowed.\n\t\treturn nil\n\t}\n\n\tlast := payload[len(payload)-1]\n\tmask := 1<<uint(extraBits) - 1\n\tif int(last)&mask != 0 {\n\t\t// We have non zero bits as padding.\n\t\treturn nil\n\t}\n\n\tdata, _ := convertBits(5, 8, false, payload)\n\n\t// Decode type and size from the version.\n\tversion := data[0]\n\tif version&0x80 != 0 {\n\t\t// First bit is reserved.\n\t\treturn nil\n\t}\n\n\tt := addrType((version >> 3) & 0x1f)\n\thashSize := 20 + 4*(version&0x03)\n\tif version&0x04 != 0 {\n\t\thashSize *= 2\n\t}\n\n\t// Check that we decoded the exact number of bytes we expected.\n\tif len(data) != int(hashSize)+1 {\n\t\treturn nil\n\t}\n\n\t// Pop the version.\n\tdata = data[1:]\n\n\treturn &addrContent{t, data}\n}\n\nfunc decodeCashAddrDestination(content *addrContent, params *chaincfg.Params) (Address, error) {\n\tif len(content.hash) != 20 {\n\t\treturn nil, errInvalidHash160Size\n\t}\n\n\tswitch content.t {\n\tcase pubKeyType:\n\t\taddr, err := NewAddressPubKeyHash(content.hash, params)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn addr, nil\n\tcase scriptType:\n\t\taddr, err := NewAddressScriptHashFromHash(content.hash, params)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn addr, nil\n\tdefault:\n\t\treturn nil, errInvalidAddressType\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/cashutil/certgen.go",
    "content": "// Copyright (c) 2013-2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage cashutil\n\nimport (\n\t\"bytes\"\n\t\"crypto/ecdsa\"\n\t\"crypto/elliptic\"\n\t\"crypto/rand\"\n\t_ \"crypto/sha512\" // Needed for RegisterHash in init\n\t\"crypto/x509\"\n\t\"crypto/x509/pkix\"\n\t\"encoding/pem\"\n\t\"errors\"\n\t\"fmt\"\n\t\"math/big\"\n\t\"net\"\n\t\"os\"\n\t\"time\"\n)\n\n// NewTLSCertPair returns a new PEM-encoded x.509 certificate pair\n// based on a 521-bit ECDSA private key.  The machine's local interface\n// addresses and all variants of IPv4 and IPv6 localhost are included as\n// valid IP addresses.\nfunc NewTLSCertPair(organization string, validUntil time.Time, extraHosts []string) (cert, key []byte, err error) {\n\tnow := time.Now()\n\tif validUntil.Before(now) {\n\t\treturn nil, nil, errors.New(\"validUntil would create an already-expired certificate\")\n\t}\n\n\tpriv, err := ecdsa.GenerateKey(elliptic.P521(), rand.Reader)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\t// end of ASN.1 time\n\tendOfTime := time.Date(2049, 12, 31, 23, 59, 59, 0, time.UTC)\n\tif validUntil.After(endOfTime) {\n\t\tvalidUntil = endOfTime\n\t}\n\n\tserialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128)\n\tserialNumber, err := rand.Int(rand.Reader, serialNumberLimit)\n\tif err != nil {\n\t\treturn nil, nil, fmt.Errorf(\"failed to generate serial number: %s\", err)\n\t}\n\n\thost, err := os.Hostname()\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tipAddresses := []net.IP{net.ParseIP(\"127.0.0.1\"), net.ParseIP(\"::1\")}\n\tdnsNames := []string{host}\n\tif host != \"localhost\" {\n\t\tdnsNames = append(dnsNames, \"localhost\")\n\t}\n\n\taddIP := func(ipAddr net.IP) {\n\t\tfor _, ip := range ipAddresses {\n\t\t\tif bytes.Equal(ip, ipAddr) {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t\tipAddresses = append(ipAddresses, ipAddr)\n\t}\n\taddHost := func(host string) {\n\t\tfor _, dnsName := range dnsNames {\n\t\t\tif host == dnsName {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t\tdnsNames = append(dnsNames, host)\n\t}\n\n\taddrs, err := interfaceAddrs()\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tfor _, a := range addrs {\n\t\tipAddr, _, err := net.ParseCIDR(a.String())\n\t\tif err == nil {\n\t\t\taddIP(ipAddr)\n\t\t}\n\t}\n\n\tfor _, hostStr := range extraHosts {\n\t\thost, _, err := net.SplitHostPort(hostStr)\n\t\tif err != nil {\n\t\t\thost = hostStr\n\t\t}\n\t\tif ip := net.ParseIP(host); ip != nil {\n\t\t\taddIP(ip)\n\t\t} else {\n\t\t\taddHost(host)\n\t\t}\n\t}\n\n\ttemplate := x509.Certificate{\n\t\tSerialNumber: serialNumber,\n\t\tSubject: pkix.Name{\n\t\t\tOrganization: []string{organization},\n\t\t\tCommonName:   host,\n\t\t},\n\t\tNotBefore: now.Add(-time.Hour * 24),\n\t\tNotAfter:  validUntil,\n\n\t\tKeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature |\n\t\t\tx509.KeyUsageCertSign,\n\t\tIsCA: true, // so can sign self.\n\t\tBasicConstraintsValid: true,\n\n\t\tDNSNames:    dnsNames,\n\t\tIPAddresses: ipAddresses,\n\t}\n\n\tderBytes, err := x509.CreateCertificate(rand.Reader, &template,\n\t\t&template, &priv.PublicKey, priv)\n\tif err != nil {\n\t\treturn nil, nil, fmt.Errorf(\"failed to create certificate: %v\", err)\n\t}\n\n\tcertBuf := &bytes.Buffer{}\n\terr = pem.Encode(certBuf, &pem.Block{Type: \"CERTIFICATE\", Bytes: derBytes})\n\tif err != nil {\n\t\treturn nil, nil, fmt.Errorf(\"failed to encode certificate: %v\", err)\n\t}\n\n\tkeybytes, err := x509.MarshalECPrivateKey(priv)\n\tif err != nil {\n\t\treturn nil, nil, fmt.Errorf(\"failed to marshal private key: %v\", err)\n\t}\n\n\tkeyBuf := &bytes.Buffer{}\n\terr = pem.Encode(keyBuf, &pem.Block{Type: \"EC PRIVATE KEY\", Bytes: keybytes})\n\tif err != nil {\n\t\treturn nil, nil, fmt.Errorf(\"failed to encode private key: %v\", err)\n\t}\n\n\treturn certBuf.Bytes(), keyBuf.Bytes(), nil\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/cashutil/const.go",
    "content": "// Copyright (c) 2013-2014 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage cashutil\n\nconst (\n\t// SatoshiPerBitcent is the number of satoshi in one bitcoin cent.\n\tSatoshiPerBitcent = 1e6\n\n\t// SatoshiPerBitcoin is the number of satoshi in one bitcoin (1 BCH).\n\tSatoshiPerBitcoin = 1e8\n\n\t// MaxSatoshi is the maximum transaction amount allowed in satoshi.\n\tMaxSatoshi = 21e6 * SatoshiPerBitcoin\n)\n"
  },
  {
    "path": "vendor/github.com/bcext/cashutil/cov_report.sh",
    "content": "#!/bin/sh\n\n# This script uses gocov to generate a test coverage report.\n# The gocov tool my be obtained with the following command:\n#   go get github.com/axw/gocov/gocov\n#\n# It will be installed to $GOPATH/bin, so ensure that location is in your $PATH.\n\n# Check for gocov.\ntype gocov >/dev/null 2>&1\nif [ $? -ne 0 ]; then\n\techo >&2 \"This script requires the gocov tool.\"\n\techo >&2 \"You may obtain it with the following command:\"\n\techo >&2 \"go get github.com/axw/gocov/gocov\"\n\texit 1\nfi\ngocov test | gocov report\n"
  },
  {
    "path": "vendor/github.com/bcext/cashutil/doc.go",
    "content": "// Copyright (c) 2013-2014 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\n/*\nPackage cashutil provides bitcoin-specific convenience functions and types.\n\nBlock Overview\n\nA Block defines a bitcoin block that provides easier and more efficient\nmanipulation of raw wire protocol blocks.  It also memoizes hashes for the\nblock and its transactions on their first access so subsequent accesses don't\nhave to repeat the relatively expensive hashing operations.\n\nTx Overview\n\nA Tx defines a bitcoin transaction that provides more efficient manipulation of\nraw wire protocol transactions.  It memoizes the hash for the transaction on its\nfirst access so subsequent accesses don't have to repeat the relatively\nexpensive hashing operations.\n\nAddress Overview\n\nThe Address interface provides an abstraction for a Bitcoin address.  While the\nmost common type is a pay-to-pubkey-hash, Bitcoin already supports others and\nmay well support more in the future.  This package currently provides\nimplementations for the pay-to-pubkey, pay-to-pubkey-hash, and\npay-to-script-hash address types.\n\nTo decode/encode an address:\n\n\t// NOTE: The default network is only used for address types which do not\n\t// already contain that information.  At this time, that is only\n\t// pay-to-pubkey addresses.\n\taddrString := \"04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962\" +\n\t\t\"e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d57\" +\n\t\t\"8a4c702b6bf11d5f\"\n\tdefaultNet := &chaincfg.MainNetParams\n\taddr, err := cashutil.DecodeAddress(addrString, defaultNet)\n\tif err != nil {\n\t\tfmt.Println(err)\n\t\treturn\n\t}\n\tfmt.Println(addr.EncodeAddress())\n*/\npackage cashutil\n"
  },
  {
    "path": "vendor/github.com/bcext/cashutil/glide.yaml",
    "content": "package: github.com/bcext/cashutil\nimport:\n- package: github.com/aead/siphash\n- package: github.com/bcext/gcash\n  version: 067de8b6c8108fb5df47ccbea453b0c6e727d5ba\n  subpackages:\n  - blockchain\n  - btcec\n  - chaincfg\n  - chaincfg/chainhash\n  - txscript\n  - wire\n- package: github.com/kkdai/bstream\n- package: golang.org/x/crypto\n  subpackages:\n  - ripemd160\ntestImport:\n- package: github.com/davecgh/go-spew\n  subpackages:\n  - spew\n"
  },
  {
    "path": "vendor/github.com/bcext/cashutil/goclean.sh",
    "content": "#!/bin/bash\n# The script does automatic checking on a Go package and its sub-packages, including:\n# 1. gofmt         (http://golang.org/cmd/gofmt/)\n# 2. goimports     (https://github.com/bradfitz/goimports)\n# 3. golint        (https://github.com/golang/lint)\n# 4. go vet        (http://golang.org/cmd/vet)\n# 5. gosimple      (https://github.com/dominikh/go-simple)\n# 6. unconvert     (https://github.com/mdempsky/unconvert)\n# 7. race detector (http://blog.golang.org/race-detector)\n# 8. test coverage (http://blog.golang.org/cover)\n#\n# gometalint (github.com/alecthomas/gometalinter) is used to run each each\n# static checker.\n\nset -ex\n\n# Automatic checks\ntest -z \"$(gometalinter --disable-all \\\n--enable=gofmt \\\n--enable=goimports \\\n--enable=golint \\\n--enable=vet \\\n--enable=gosimple \\\n--enable=unconvert \\\n--deadline=120s ./... | grep -v 'ExampleNew' 2>&1 | tee /dev/stderr)\"\nenv GORACE=\"halt_on_error=1\" go test -race ./...\n\n# Run test coverage on each subdirectories and merge the coverage profile.\n\necho \"mode: count\" > profile.cov\n\n# Standard go tooling behavior is to ignore dirs with leading underscores.\nfor dir in $(find . -maxdepth 10 -not -path './.git*' -not -path '*/_*' -type d);\ndo\nif ls $dir/*.go &> /dev/null; then\n  go test -covermode=count -coverprofile=$dir/profile.tmp $dir\n  if [ -f $dir/profile.tmp ]; then\n    cat $dir/profile.tmp | tail -n +2 >> profile.cov\n    rm $dir/profile.tmp\n  fi\nfi\ndone\n\ngo tool cover -func profile.cov\n\n# To submit the test coverage result to coveralls.io,\n# use goveralls (https://github.com/mattn/goveralls)\n# goveralls -coverprofile=profile.cov -service=travis-ci\n"
  },
  {
    "path": "vendor/github.com/bcext/cashutil/hash160.go",
    "content": "// Copyright (c) 2013-2017 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage cashutil\n\nimport (\n\t\"crypto/sha256\"\n\t\"hash\"\n\n\t\"golang.org/x/crypto/ripemd160\"\n)\n\n// Calculate the hash of hasher over buf.\nfunc calcHash(buf []byte, hasher hash.Hash) []byte {\n\thasher.Write(buf)\n\treturn hasher.Sum(nil)\n}\n\n// Hash160 calculates the hash ripemd160(sha256(b)).\nfunc Hash160(buf []byte) []byte {\n\treturn calcHash(calcHash(buf, sha256.New()), ripemd160.New())\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/cashutil/net.go",
    "content": "// Copyright (c) 2013-2014 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\n// +build !appengine\n\npackage cashutil\n\nimport (\n\t\"net\"\n)\n\n// interfaceAddrs returns a list of the system's network interface addresses.\n// It is wrapped here so that we can substitute it for other functions when\n// building for systems that do not allow access to net.InterfaceAddrs().\nfunc interfaceAddrs() ([]net.Addr, error) {\n\treturn net.InterfaceAddrs()\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/cashutil/net_noop.go",
    "content": "// Copyright (c) 2013-2014 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\n// +build appengine\n\npackage cashutil\n\nimport (\n\t\"net\"\n)\n\n// interfaceAddrs returns a list of the system's network interface addresses.\n// It is wrapped here so that we can substitute it for a no-op function that\n// returns an empty slice of net.Addr when building for systems that do not\n// allow access to net.InterfaceAddrs().\nfunc interfaceAddrs() ([]net.Addr, error) {\n\treturn []net.Addr{}, nil\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/cashutil/profile.cov",
    "content": "mode: count\ngithub.com/bcext/cashutil/net.go:16.43,18.2 1 1\ngithub.com/bcext/cashutil/tx.go:32.34,35.2 1 2\ngithub.com/bcext/cashutil/tx.go:40.37,42.21 1 18\ngithub.com/bcext/cashutil/tx.go:47.2,49.14 3 9\ngithub.com/bcext/cashutil/tx.go:42.21,44.3 1 9\ngithub.com/bcext/cashutil/tx.go:54.26,56.2 1 1\ngithub.com/bcext/cashutil/tx.go:59.34,61.2 1 9\ngithub.com/bcext/cashutil/tx.go:65.35,70.2 1 9\ngithub.com/bcext/cashutil/tx.go:74.55,77.2 2 2\ngithub.com/bcext/cashutil/tx.go:81.48,85.16 3 2\ngithub.com/bcext/cashutil/tx.go:89.2,93.16 2 1\ngithub.com/bcext/cashutil/tx.go:85.16,87.3 1 1\ngithub.com/bcext/cashutil/wif.go:52.91,53.16 1 2\ngithub.com/bcext/cashutil/wif.go:56.2,56.55 1 2\ngithub.com/bcext/cashutil/wif.go:53.16,55.3 1 0\ngithub.com/bcext/cashutil/wif.go:61.51,63.2 1 0\ngithub.com/bcext/cashutil/wif.go:85.42,92.20 4 2\ngithub.com/bcext/cashutil/wif.go:107.2,108.14 2 2\ngithub.com/bcext/cashutil/wif.go:113.2,114.49 2 2\ngithub.com/bcext/cashutil/wif.go:118.2,121.44 4 2\ngithub.com/bcext/cashutil/wif.go:93.41,94.35 1 1\ngithub.com/bcext/cashutil/wif.go:97.3,97.18 1 1\ngithub.com/bcext/cashutil/wif.go:98.37,99.19 1 1\ngithub.com/bcext/cashutil/wif.go:100.10,101.37 1 0\ngithub.com/bcext/cashutil/wif.go:94.35,96.4 1 0\ngithub.com/bcext/cashutil/wif.go:108.14,110.3 1 1\ngithub.com/bcext/cashutil/wif.go:110.3,112.3 1 1\ngithub.com/bcext/cashutil/wif.go:114.49,116.3 1 0\ngithub.com/bcext/cashutil/wif.go:127.31,133.22 2 4\ngithub.com/bcext/cashutil/wif.go:137.2,142.22 4 4\ngithub.com/bcext/cashutil/wif.go:145.2,147.25 3 4\ngithub.com/bcext/cashutil/wif.go:133.22,135.3 1 2\ngithub.com/bcext/cashutil/wif.go:142.22,144.3 1 2\ngithub.com/bcext/cashutil/wif.go:153.40,155.22 2 0\ngithub.com/bcext/cashutil/wif.go:158.2,158.35 1 0\ngithub.com/bcext/cashutil/wif.go:155.22,157.3 1 0\ngithub.com/bcext/cashutil/wif.go:164.54,165.42 1 4\ngithub.com/bcext/cashutil/wif.go:168.2,168.28 1 4\ngithub.com/bcext/cashutil/wif.go:165.42,167.3 1 0\ngithub.com/bcext/cashutil/amount.go:33.37,34.11 1 32\ngithub.com/bcext/cashutil/amount.go:35.21,36.16 1 1\ngithub.com/bcext/cashutil/amount.go:37.21,38.16 1 2\ngithub.com/bcext/cashutil/amount.go:39.17,40.15 1 22\ngithub.com/bcext/cashutil/amount.go:41.22,42.16 1 2\ngithub.com/bcext/cashutil/amount.go:43.22,44.17 1 2\ngithub.com/bcext/cashutil/amount.go:45.21,46.19 1 2\ngithub.com/bcext/cashutil/amount.go:47.10,48.57 1 1\ngithub.com/bcext/cashutil/amount.go:60.30,61.11 1 27\ngithub.com/bcext/cashutil/amount.go:64.2,64.24 1 21\ngithub.com/bcext/cashutil/amount.go:61.11,63.3 1 6\ngithub.com/bcext/cashutil/amount.go:76.43,79.9 1 16\ngithub.com/bcext/cashutil/amount.go:88.2,88.42 1 12\ngithub.com/bcext/cashutil/amount.go:80.21,81.14 1 2\ngithub.com/bcext/cashutil/amount.go:82.24,83.14 1 3\ngithub.com/bcext/cashutil/amount.go:84.25,85.49 1 4\ngithub.com/bcext/cashutil/amount.go:93.46,95.2 1 53\ngithub.com/bcext/cashutil/amount.go:98.33,100.2 1 7\ngithub.com/bcext/cashutil/amount.go:106.45,109.2 2 32\ngithub.com/bcext/cashutil/amount.go:112.33,114.2 1 14\ngithub.com/bcext/cashutil/amount.go:120.42,122.2 1 15\ngithub.com/bcext/cashutil/block.go:27.41,29.2 1 1\ngithub.com/bcext/cashutil/block.go:45.43,48.2 1 3\ngithub.com/bcext/cashutil/block.go:53.41,55.33 1 6\ngithub.com/bcext/cashutil/block.go:60.2,62.16 3 1\ngithub.com/bcext/cashutil/block.go:65.2,69.29 3 1\ngithub.com/bcext/cashutil/block.go:55.33,57.3 1 5\ngithub.com/bcext/cashutil/block.go:62.16,64.3 1 0\ngithub.com/bcext/cashutil/block.go:75.40,77.24 1 2\ngithub.com/bcext/cashutil/block.go:82.2,84.14 3 1\ngithub.com/bcext/cashutil/block.go:77.24,79.3 1 1\ngithub.com/bcext/cashutil/block.go:93.44,96.40 2 12\ngithub.com/bcext/cashutil/block.go:103.2,103.30 1 8\ngithub.com/bcext/cashutil/block.go:108.2,108.34 1 8\ngithub.com/bcext/cashutil/block.go:113.2,116.19 4 4\ngithub.com/bcext/cashutil/block.go:96.40,100.3 2 4\ngithub.com/bcext/cashutil/block.go:103.30,105.3 1 1\ngithub.com/bcext/cashutil/block.go:108.34,110.3 1 4\ngithub.com/bcext/cashutil/block.go:123.38,127.21 1 2\ngithub.com/bcext/cashutil/block.go:132.2,132.30 1 1\ngithub.com/bcext/cashutil/block.go:138.2,138.36 1 1\ngithub.com/bcext/cashutil/block.go:146.2,147.23 2 1\ngithub.com/bcext/cashutil/block.go:127.21,129.3 1 1\ngithub.com/bcext/cashutil/block.go:132.30,134.3 1 1\ngithub.com/bcext/cashutil/block.go:138.36,139.16 1 4\ngithub.com/bcext/cashutil/block.go:139.16,143.4 3 4\ngithub.com/bcext/cashutil/block.go:155.60,160.16 2 2\ngithub.com/bcext/cashutil/block.go:166.2,166.23 1 0\ngithub.com/bcext/cashutil/block.go:160.16,162.3 1 2\ngithub.com/bcext/cashutil/block.go:172.47,174.16 2 2\ngithub.com/bcext/cashutil/block.go:177.2,181.16 4 2\ngithub.com/bcext/cashutil/block.go:184.2,184.20 1 1\ngithub.com/bcext/cashutil/block.go:174.16,176.3 1 0\ngithub.com/bcext/cashutil/block.go:181.16,183.3 1 1\ngithub.com/bcext/cashutil/block.go:189.32,191.2 1 1\ngithub.com/bcext/cashutil/block.go:194.41,196.2 1 1\ngithub.com/bcext/cashutil/block.go:200.47,205.2 1 3\ngithub.com/bcext/cashutil/block.go:209.64,212.16 3 3\ngithub.com/bcext/cashutil/block.go:215.2,216.15 2 2\ngithub.com/bcext/cashutil/block.go:212.16,214.3 1 1\ngithub.com/bcext/cashutil/block.go:221.54,225.16 3 3\ngithub.com/bcext/cashutil/block.go:229.2,233.16 2 2\ngithub.com/bcext/cashutil/block.go:225.16,227.3 1 1\ngithub.com/bcext/cashutil/block.go:238.88,244.2 1 1\ngithub.com/bcext/cashutil/certgen.go:28.115,30.28 2 1\ngithub.com/bcext/cashutil/certgen.go:34.2,35.16 2 1\ngithub.com/bcext/cashutil/certgen.go:40.2,41.33 2 1\ngithub.com/bcext/cashutil/certgen.go:45.2,47.16 3 1\ngithub.com/bcext/cashutil/certgen.go:51.2,52.16 2 1\ngithub.com/bcext/cashutil/certgen.go:56.2,58.25 3 1\ngithub.com/bcext/cashutil/certgen.go:62.2,62.31 1 1\ngithub.com/bcext/cashutil/certgen.go:70.2,70.31 1 1\ngithub.com/bcext/cashutil/certgen.go:79.2,80.16 2 1\ngithub.com/bcext/cashutil/certgen.go:83.2,83.26 1 1\ngithub.com/bcext/cashutil/certgen.go:90.2,90.37 1 1\ngithub.com/bcext/cashutil/certgen.go:102.2,122.16 3 1\ngithub.com/bcext/cashutil/certgen.go:126.2,128.16 3 1\ngithub.com/bcext/cashutil/certgen.go:132.2,133.16 2 1\ngithub.com/bcext/cashutil/certgen.go:137.2,139.16 3 1\ngithub.com/bcext/cashutil/certgen.go:143.2,143.45 1 1\ngithub.com/bcext/cashutil/certgen.go:30.28,32.3 1 0\ngithub.com/bcext/cashutil/certgen.go:35.16,37.3 1 0\ngithub.com/bcext/cashutil/certgen.go:41.33,43.3 1 0\ngithub.com/bcext/cashutil/certgen.go:47.16,49.3 1 0\ngithub.com/bcext/cashutil/certgen.go:52.16,54.3 1 0\ngithub.com/bcext/cashutil/certgen.go:58.25,60.3 1 0\ngithub.com/bcext/cashutil/certgen.go:62.31,63.34 1 9\ngithub.com/bcext/cashutil/certgen.go:68.3,68.44 1 6\ngithub.com/bcext/cashutil/certgen.go:63.34,64.31 1 31\ngithub.com/bcext/cashutil/certgen.go:64.31,66.5 1 3\ngithub.com/bcext/cashutil/certgen.go:70.31,71.36 1 2\ngithub.com/bcext/cashutil/certgen.go:76.3,76.36 1 1\ngithub.com/bcext/cashutil/certgen.go:71.36,72.23 1 2\ngithub.com/bcext/cashutil/certgen.go:72.23,74.5 1 1\ngithub.com/bcext/cashutil/certgen.go:80.16,82.3 1 0\ngithub.com/bcext/cashutil/certgen.go:83.26,85.17 2 8\ngithub.com/bcext/cashutil/certgen.go:85.17,87.4 1 8\ngithub.com/bcext/cashutil/certgen.go:90.37,92.17 2 3\ngithub.com/bcext/cashutil/certgen.go:95.3,95.41 1 3\ngithub.com/bcext/cashutil/certgen.go:92.17,94.4 1 3\ngithub.com/bcext/cashutil/certgen.go:95.41,97.4 1 1\ngithub.com/bcext/cashutil/certgen.go:97.4,99.4 1 2\ngithub.com/bcext/cashutil/certgen.go:122.16,124.3 1 0\ngithub.com/bcext/cashutil/certgen.go:128.16,130.3 1 0\ngithub.com/bcext/cashutil/certgen.go:133.16,135.3 1 0\ngithub.com/bcext/cashutil/certgen.go:139.16,141.3 1 0\ngithub.com/bcext/cashutil/address.go:42.55,46.2 1 0\ngithub.com/bcext/cashutil/address.go:85.79,92.43 1 25\ngithub.com/bcext/cashutil/address.go:98.2,98.41 1 13\ngithub.com/bcext/cashutil/address.go:107.2,108.16 2 3\ngithub.com/bcext/cashutil/address.go:114.2,114.22 1 0\ngithub.com/bcext/cashutil/address.go:92.43,94.3 1 12\ngithub.com/bcext/cashutil/address.go:98.41,100.17 2 10\ngithub.com/bcext/cashutil/address.go:103.3,103.56 1 10\ngithub.com/bcext/cashutil/address.go:100.17,102.4 1 0\ngithub.com/bcext/cashutil/address.go:108.16,109.32 1 3\ngithub.com/bcext/cashutil/address.go:112.3,112.65 1 2\ngithub.com/bcext/cashutil/address.go:109.32,111.4 1 1\ngithub.com/bcext/cashutil/address.go:115.22,118.30 3 0\ngithub.com/bcext/cashutil/address.go:129.10,130.63 1 0\ngithub.com/bcext/cashutil/address.go:119.26,120.35 1 0\ngithub.com/bcext/cashutil/address.go:121.16,122.52 1 0\ngithub.com/bcext/cashutil/address.go:123.15,124.60 1 0\ngithub.com/bcext/cashutil/address.go:125.11,126.37 1 0\ngithub.com/bcext/cashutil/address.go:143.94,145.2 1 10027\ngithub.com/bcext/cashutil/address.go:152.94,154.35 1 10037\ngithub.com/bcext/cashutil/address.go:158.2,160.18 3 10036\ngithub.com/bcext/cashutil/address.go:154.35,156.3 1 1\ngithub.com/bcext/cashutil/address.go:165.65,166.14 1 15015\ngithub.com/bcext/cashutil/address.go:170.2,170.57 1 0\ngithub.com/bcext/cashutil/address.go:166.14,168.3 1 15015\ngithub.com/bcext/cashutil/address.go:175.52,177.2 1 6\ngithub.com/bcext/cashutil/address.go:181.65,183.2 1 3\ngithub.com/bcext/cashutil/address.go:189.45,191.2 1 10003\ngithub.com/bcext/cashutil/address.go:196.61,198.2 1 15028\ngithub.com/bcext/cashutil/address.go:208.104,211.2 2 1\ngithub.com/bcext/cashutil/address.go:215.106,217.2 1 10024\ngithub.com/bcext/cashutil/address.go:224.106,226.39 1 10025\ngithub.com/bcext/cashutil/address.go:230.2,232.18 3 10024\ngithub.com/bcext/cashutil/address.go:226.39,228.3 1 1\ngithub.com/bcext/cashutil/address.go:237.65,238.14 1 15027\ngithub.com/bcext/cashutil/address.go:242.2,242.57 1 0\ngithub.com/bcext/cashutil/address.go:238.14,240.3 1 15027\ngithub.com/bcext/cashutil/address.go:247.52,249.2 1 6\ngithub.com/bcext/cashutil/address.go:253.65,255.2 1 3\ngithub.com/bcext/cashutil/address.go:261.45,263.2 1 10015\ngithub.com/bcext/cashutil/address.go:268.61,270.2 1 15030\ngithub.com/bcext/cashutil/address.go:299.96,301.16 2 20\ngithub.com/bcext/cashutil/address.go:309.2,310.29 2 20\ngithub.com/bcext/cashutil/address.go:317.2,321.8 1 20\ngithub.com/bcext/cashutil/address.go:301.16,303.3 1 0\ngithub.com/bcext/cashutil/address.go:311.18,312.27 1 8\ngithub.com/bcext/cashutil/address.go:313.18,314.23 1 8\ngithub.com/bcext/cashutil/address.go:326.44,327.24 1 40\ngithub.com/bcext/cashutil/address.go:328.10,329.14 1 0\ngithub.com/bcext/cashutil/address.go:330.23,331.42 1 8\ngithub.com/bcext/cashutil/address.go:333.21,334.40 1 16\ngithub.com/bcext/cashutil/address.go:336.17,337.36 1 16\ngithub.com/bcext/cashutil/address.go:349.61,350.14 1 10\ngithub.com/bcext/cashutil/address.go:358.2,358.70 1 0\ngithub.com/bcext/cashutil/address.go:350.14,352.17 2 10\ngithub.com/bcext/cashutil/address.go:355.3,355.31 1 10\ngithub.com/bcext/cashutil/address.go:352.17,354.4 1 0\ngithub.com/bcext/cashutil/address.go:364.48,366.2 1 10\ngithub.com/bcext/cashutil/address.go:370.61,372.2 1 10\ngithub.com/bcext/cashutil/address.go:376.41,378.2 1 20\ngithub.com/bcext/cashutil/address.go:382.47,384.2 1 0\ngithub.com/bcext/cashutil/address.go:388.58,390.2 1 0\ngithub.com/bcext/cashutil/address.go:398.64,402.2 3 0\ngithub.com/bcext/cashutil/address.go:405.51,407.2 1 0\ngithub.com/bcext/cashutil/appdata.go:21.60,22.37 1 54\ngithub.com/bcext/cashutil/appdata.go:28.2,35.16 6 36\ngithub.com/bcext/cashutil/appdata.go:42.2,42.33 1 36\ngithub.com/bcext/cashutil/appdata.go:46.2,46.14 1 36\ngithub.com/bcext/cashutil/appdata.go:79.2,79.12 1 8\ngithub.com/bcext/cashutil/appdata.go:22.37,24.3 1 18\ngithub.com/bcext/cashutil/appdata.go:35.16,37.3 1 36\ngithub.com/bcext/cashutil/appdata.go:42.33,44.3 1 0\ngithub.com/bcext/cashutil/appdata.go:49.17,53.31 2 8\ngithub.com/bcext/cashutil/appdata.go:57.3,57.20 1 8\ngithub.com/bcext/cashutil/appdata.go:61.16,62.20 1 4\ngithub.com/bcext/cashutil/appdata.go:67.15,68.20 1 4\ngithub.com/bcext/cashutil/appdata.go:72.10,73.20 1 20\ngithub.com/bcext/cashutil/appdata.go:53.31,55.4 1 8\ngithub.com/bcext/cashutil/appdata.go:57.20,59.4 1 0\ngithub.com/bcext/cashutil/appdata.go:62.20,65.4 1 4\ngithub.com/bcext/cashutil/appdata.go:68.20,70.4 1 4\ngithub.com/bcext/cashutil/appdata.go:73.20,75.4 1 20\ngithub.com/bcext/cashutil/appdata.go:103.54,105.2 1 0\ngithub.com/bcext/cashutil/cashaddr.go:26.51,32.32 5 30162\ngithub.com/bcext/cashutil/cashaddr.go:35.2,35.21 1 30162\ngithub.com/bcext/cashutil/cashaddr.go:32.32,34.3 1 1267516\ngithub.com/bcext/cashutil/cashaddr.go:39.57,43.29 3 10144\ngithub.com/bcext/cashutil/cashaddr.go:76.2,76.20 1 10141\ngithub.com/bcext/cashutil/cashaddr.go:81.2,82.21 2 10139\ngithub.com/bcext/cashutil/cashaddr.go:96.2,98.33 3 10139\ngithub.com/bcext/cashutil/cashaddr.go:109.2,109.37 1 10137\ngithub.com/bcext/cashutil/cashaddr.go:113.2,113.39 1 10128\ngithub.com/bcext/cashutil/cashaddr.go:43.29,44.33 1 427364\ngithub.com/bcext/cashutil/cashaddr.go:49.3,49.33 1 112134\ngithub.com/bcext/cashutil/cashaddr.go:54.3,54.33 1 112116\ngithub.com/bcext/cashutil/cashaddr.go:60.3,60.18 1 81\ngithub.com/bcext/cashutil/cashaddr.go:72.3,72.17 1 0\ngithub.com/bcext/cashutil/cashaddr.go:44.33,46.12 2 315230\ngithub.com/bcext/cashutil/cashaddr.go:49.33,51.12 2 18\ngithub.com/bcext/cashutil/cashaddr.go:54.33,57.12 2 112035\ngithub.com/bcext/cashutil/cashaddr.go:60.18,63.48 1 81\ngithub.com/bcext/cashutil/cashaddr.go:67.4,68.12 2 78\ngithub.com/bcext/cashutil/cashaddr.go:63.48,65.5 1 3\ngithub.com/bcext/cashutil/cashaddr.go:76.20,78.3 1 2\ngithub.com/bcext/cashutil/cashaddr.go:82.21,84.3 1 10064\ngithub.com/bcext/cashutil/cashaddr.go:84.3,86.35 2 75\ngithub.com/bcext/cashutil/cashaddr.go:89.3,92.15 2 75\ngithub.com/bcext/cashutil/cashaddr.go:86.35,88.4 1 775\ngithub.com/bcext/cashutil/cashaddr.go:98.33,101.41 2 426439\ngithub.com/bcext/cashutil/cashaddr.go:105.3,105.38 1 426437\ngithub.com/bcext/cashutil/cashaddr.go:101.41,103.4 1 2\ngithub.com/bcext/cashutil/cashaddr.go:109.37,111.3 1 9\ngithub.com/bcext/cashutil/cashaddr.go:117.59,125.25 5 30162\ngithub.com/bcext/cashutil/cashaddr.go:130.2,130.12 1 30162\ngithub.com/bcext/cashutil/cashaddr.go:125.25,128.3 1 241296\ngithub.com/bcext/cashutil/cashaddr.go:134.30,139.2 4 70461\ngithub.com/bcext/cashutil/cashaddr.go:141.41,143.32 2 40299\ngithub.com/bcext/cashutil/cashaddr.go:147.2,148.12 2 40299\ngithub.com/bcext/cashutil/cashaddr.go:143.32,145.3 1 442996\ngithub.com/bcext/cashutil/cashaddr.go:154.31,184.25 2 40299\ngithub.com/bcext/cashutil/cashaddr.go:248.2,248.14 1 40299\ngithub.com/bcext/cashutil/cashaddr.go:184.25,212.19 3 2177212\ngithub.com/bcext/cashutil/cashaddr.go:218.3,218.18 1 2177212\ngithub.com/bcext/cashutil/cashaddr.go:224.3,224.19 1 2177212\ngithub.com/bcext/cashutil/cashaddr.go:230.3,230.19 1 2177212\ngithub.com/bcext/cashutil/cashaddr.go:236.3,236.19 1 2177212\ngithub.com/bcext/cashutil/cashaddr.go:212.19,216.4 1 966892\ngithub.com/bcext/cashutil/cashaddr.go:218.18,222.4 1 947948\ngithub.com/bcext/cashutil/cashaddr.go:224.19,228.4 1 1007370\ngithub.com/bcext/cashutil/cashaddr.go:230.19,234.4 1 1047725\ngithub.com/bcext/cashutil/cashaddr.go:236.19,240.4 1 987800\ngithub.com/bcext/cashutil/cashaddr.go:251.57,253.2 1 10137\ngithub.com/bcext/cashutil/cashaddrconv.go:33.41,34.28 1 30052\ngithub.com/bcext/cashutil/cashaddrconv.go:35.26,37.47 2 15025\ngithub.com/bcext/cashutil/cashaddrconv.go:38.26,40.47 2 15027\ngithub.com/bcext/cashutil/cashaddrconv.go:41.10,42.12 1 0\ngithub.com/bcext/cashutil/cashaddrconv.go:46.75,48.33 1 10056\ngithub.com/bcext/cashutil/cashaddrconv.go:53.2,54.46 2 10056\ngithub.com/bcext/cashutil/cashaddrconv.go:58.2,58.50 1 10026\ngithub.com/bcext/cashutil/cashaddrconv.go:48.33,51.3 2 10056\ngithub.com/bcext/cashutil/cashaddrconv.go:54.46,56.3 1 30\ngithub.com/bcext/cashutil/cashaddrconv.go:62.46,66.18 4 30061\ngithub.com/bcext/cashutil/cashaddrconv.go:87.2,97.12 6 30060\ngithub.com/bcext/cashutil/cashaddrconv.go:67.11,68.18 1 30053\ngithub.com/bcext/cashutil/cashaddrconv.go:69.11,70.18 1 1\ngithub.com/bcext/cashutil/cashaddrconv.go:71.11,72.18 1 1\ngithub.com/bcext/cashutil/cashaddrconv.go:73.11,74.18 1 1\ngithub.com/bcext/cashutil/cashaddrconv.go:75.11,76.18 1 1\ngithub.com/bcext/cashutil/cashaddrconv.go:77.11,78.18 1 1\ngithub.com/bcext/cashutil/cashaddrconv.go:79.11,80.18 1 1\ngithub.com/bcext/cashutil/cashaddrconv.go:81.11,82.18 1 1\ngithub.com/bcext/cashutil/cashaddrconv.go:83.10,84.58 1 1\ngithub.com/bcext/cashutil/cashaddrconv.go:100.84,106.27 5 40140\ngithub.com/bcext/cashutil/cashaddrconv.go:117.2,117.23 1 40140\ngithub.com/bcext/cashutil/cashaddrconv.go:122.2,122.22 1 30066\ngithub.com/bcext/cashutil/cashaddrconv.go:126.2,126.26 1 30066\ngithub.com/bcext/cashutil/cashaddrconv.go:106.27,110.27 3 974829\ngithub.com/bcext/cashutil/cashaddrconv.go:110.27,113.4 2 1204341\ngithub.com/bcext/cashutil/cashaddrconv.go:117.23,119.3 1 10074\ngithub.com/bcext/cashutil/cashaddrconv.go:122.22,124.3 1 30058\ngithub.com/bcext/cashutil/cashaddrconv.go:129.78,131.36 2 10120\ngithub.com/bcext/cashutil/cashaddrconv.go:135.2,135.23 1 10114\ngithub.com/bcext/cashutil/cashaddrconv.go:140.2,141.20 2 10114\ngithub.com/bcext/cashutil/cashaddrconv.go:146.2,148.25 3 10104\ngithub.com/bcext/cashutil/cashaddrconv.go:153.2,157.23 3 10080\ngithub.com/bcext/cashutil/cashaddrconv.go:162.2,164.23 3 10064\ngithub.com/bcext/cashutil/cashaddrconv.go:169.2,169.34 1 10064\ngithub.com/bcext/cashutil/cashaddrconv.go:174.2,176.30 2 10058\ngithub.com/bcext/cashutil/cashaddrconv.go:131.36,133.3 1 6\ngithub.com/bcext/cashutil/cashaddrconv.go:135.23,137.3 1 0\ngithub.com/bcext/cashutil/cashaddrconv.go:141.20,144.3 1 10\ngithub.com/bcext/cashutil/cashaddrconv.go:148.25,151.3 1 24\ngithub.com/bcext/cashutil/cashaddrconv.go:157.23,160.3 1 16\ngithub.com/bcext/cashutil/cashaddrconv.go:164.23,166.3 1 8\ngithub.com/bcext/cashutil/cashaddrconv.go:169.34,171.3 1 6\ngithub.com/bcext/cashutil/cashaddrconv.go:179.96,180.29 1 10026\ngithub.com/bcext/cashutil/cashaddrconv.go:184.2,184.19 1 10026\ngithub.com/bcext/cashutil/cashaddrconv.go:180.29,182.3 1 0\ngithub.com/bcext/cashutil/cashaddrconv.go:185.18,187.17 2 5014\ngithub.com/bcext/cashutil/cashaddrconv.go:190.3,190.19 1 5014\ngithub.com/bcext/cashutil/cashaddrconv.go:191.18,193.17 2 5012\ngithub.com/bcext/cashutil/cashaddrconv.go:196.3,196.19 1 5012\ngithub.com/bcext/cashutil/cashaddrconv.go:197.10,198.36 1 0\ngithub.com/bcext/cashutil/cashaddrconv.go:187.17,189.4 1 0\ngithub.com/bcext/cashutil/cashaddrconv.go:193.17,195.4 1 0\ngithub.com/bcext/cashutil/hash160.go:15.52,18.2 2 22\ngithub.com/bcext/cashutil/hash160.go:21.33,23.2 1 11\ngithub.com/bcext/cashutil/bech32/bech32.go:18.50,22.37 1 18\ngithub.com/bcext/cashutil/bech32/bech32.go:27.2,27.33 1 17\ngithub.com/bcext/cashutil/bech32/bech32.go:35.2,37.36 3 15\ngithub.com/bcext/cashutil/bech32/bech32.go:43.2,50.34 3 15\ngithub.com/bcext/cashutil/bech32/bech32.go:55.2,61.16 4 13\ngithub.com/bcext/cashutil/bech32/bech32.go:66.2,66.41 1 11\ngithub.com/bcext/cashutil/bech32/bech32.go:79.2,79.43 1 6\ngithub.com/bcext/cashutil/bech32/bech32.go:22.37,25.3 1 1\ngithub.com/bcext/cashutil/bech32/bech32.go:27.33,28.36 1 808\ngithub.com/bcext/cashutil/bech32/bech32.go:28.36,31.4 1 2\ngithub.com/bcext/cashutil/bech32/bech32.go:37.36,40.3 1 0\ngithub.com/bcext/cashutil/bech32/bech32.go:50.34,52.3 1 2\ngithub.com/bcext/cashutil/bech32/bech32.go:61.16,64.3 1 2\ngithub.com/bcext/cashutil/bech32/bech32.go:66.41,71.17 4 5\ngithub.com/bcext/cashutil/bech32/bech32.go:75.3,75.61 1 5\ngithub.com/bcext/cashutil/bech32/bech32.go:71.17,74.4 1 5\ngithub.com/bcext/cashutil/bech32/bech32.go:85.54,94.16 4 6\ngithub.com/bcext/cashutil/bech32/bech32.go:98.2,98.35 1 6\ngithub.com/bcext/cashutil/bech32/bech32.go:94.16,97.3 1 0\ngithub.com/bcext/cashutil/bech32/bech32.go:103.44,105.34 2 13\ngithub.com/bcext/cashutil/bech32/bech32.go:113.2,113.21 1 11\ngithub.com/bcext/cashutil/bech32/bech32.go:105.34,107.16 2 460\ngithub.com/bcext/cashutil/bech32/bech32.go:111.3,111.41 1 458\ngithub.com/bcext/cashutil/bech32/bech32.go:107.16,110.4 1 2\ngithub.com/bcext/cashutil/bech32/bech32.go:118.43,120.25 2 11\ngithub.com/bcext/cashutil/bech32/bech32.go:126.2,126.28 1 11\ngithub.com/bcext/cashutil/bech32/bech32.go:120.25,121.29 1 243\ngithub.com/bcext/cashutil/bech32/bech32.go:124.3,124.38 1 243\ngithub.com/bcext/cashutil/bech32/bech32.go:121.29,123.4 1 0\ngithub.com/bcext/cashutil/bech32/bech32.go:131.81,132.62 1 1\ngithub.com/bcext/cashutil/bech32/bech32.go:137.2,144.25 4 1\ngithub.com/bcext/cashutil/bech32/bech32.go:183.2,183.27 1 1\ngithub.com/bcext/cashutil/bech32/bech32.go:191.2,191.57 1 1\ngithub.com/bcext/cashutil/bech32/bech32.go:195.2,195.23 1 1\ngithub.com/bcext/cashutil/bech32/bech32.go:132.62,134.3 1 0\ngithub.com/bcext/cashutil/bech32/bech32.go:144.25,151.23 3 9\ngithub.com/bcext/cashutil/bech32/bech32.go:151.23,158.29 3 22\ngithub.com/bcext/cashutil/bech32/bech32.go:164.4,174.28 5 22\ngithub.com/bcext/cashutil/bech32/bech32.go:158.29,160.5 1 13\ngithub.com/bcext/cashutil/bech32/bech32.go:174.28,178.5 3 14\ngithub.com/bcext/cashutil/bech32/bech32.go:183.27,188.3 4 1\ngithub.com/bcext/cashutil/bech32/bech32.go:191.57,193.3 1 0\ngithub.com/bcext/cashutil/bech32/bech32.go:199.53,203.25 2 11\ngithub.com/bcext/cashutil/bech32/bech32.go:206.2,210.25 5 11\ngithub.com/bcext/cashutil/bech32/bech32.go:213.2,213.12 1 11\ngithub.com/bcext/cashutil/bech32/bech32.go:203.25,205.3 1 339\ngithub.com/bcext/cashutil/bech32/bech32.go:210.25,212.3 1 66\ngithub.com/bcext/cashutil/bech32/bech32.go:217.38,219.27 2 22\ngithub.com/bcext/cashutil/bech32/bech32.go:228.2,228.12 1 22\ngithub.com/bcext/cashutil/bech32/bech32.go:219.27,222.26 3 1686\ngithub.com/bcext/cashutil/bech32/bech32.go:222.26,223.27 1 8430\ngithub.com/bcext/cashutil/bech32/bech32.go:223.27,225.5 1 3907\ngithub.com/bcext/cashutil/bech32/bech32.go:232.40,234.32 2 22\ngithub.com/bcext/cashutil/bech32/bech32.go:237.2,238.32 2 22\ngithub.com/bcext/cashutil/bech32/bech32.go:241.2,241.10 1 22\ngithub.com/bcext/cashutil/bech32/bech32.go:234.32,236.3 1 402\ngithub.com/bcext/cashutil/bech32/bech32.go:238.32,240.3 1 402\ngithub.com/bcext/cashutil/bech32/bech32.go:245.57,247.25 2 11\ngithub.com/bcext/cashutil/bech32/bech32.go:250.2,251.35 2 11\ngithub.com/bcext/cashutil/bech32/bech32.go:247.25,249.3 1 455\ngithub.com/bcext/cashutil/coinset/coins.go:51.40,57.29 2 110\ngithub.com/bcext/cashutil/coinset/coins.go:60.2,60.19 1 110\ngithub.com/bcext/cashutil/coinset/coins.go:57.29,59.3 1 92\ngithub.com/bcext/cashutil/coinset/coins.go:64.35,66.69 2 48\ngithub.com/bcext/cashutil/coinset/coins.go:69.2,69.14 1 48\ngithub.com/bcext/cashutil/coinset/coins.go:66.69,68.3 1 85\ngithub.com/bcext/cashutil/coinset/coins.go:73.57,75.2 1 144\ngithub.com/bcext/cashutil/coinset/coins.go:79.53,81.2 1 14\ngithub.com/bcext/cashutil/coinset/coins.go:84.30,86.2 1 31\ngithub.com/bcext/cashutil/coinset/coins.go:90.37,94.2 3 203\ngithub.com/bcext/cashutil/coinset/coins.go:97.35,99.17 2 5\ngithub.com/bcext/cashutil/coinset/coins.go:102.2,102.31 1 4\ngithub.com/bcext/cashutil/coinset/coins.go:99.17,101.3 1 1\ngithub.com/bcext/cashutil/coinset/coins.go:106.37,108.18 2 2\ngithub.com/bcext/cashutil/coinset/coins.go:111.2,111.32 1 1\ngithub.com/bcext/cashutil/coinset/coins.go:108.18,110.3 1 1\ngithub.com/bcext/cashutil/coinset/coins.go:117.56,123.2 5 5\ngithub.com/bcext/cashutil/coinset/coins.go:127.76,131.29 4 1\ngithub.com/bcext/cashutil/coinset/coins.go:141.2,141.14 1 1\ngithub.com/bcext/cashutil/coinset/coins.go:131.29,140.3 1 1\ngithub.com/bcext/cashutil/coinset/coins.go:152.84,154.2 1 101\ngithub.com/bcext/cashutil/coinset/coins.go:181.100,183.53 2 54\ngithub.com/bcext/cashutil/coinset/coins.go:189.2,189.42 1 20\ngithub.com/bcext/cashutil/coinset/coins.go:183.53,185.76 2 101\ngithub.com/bcext/cashutil/coinset/coins.go:185.76,187.4 1 34\ngithub.com/bcext/cashutil/coinset/coins.go:202.101,208.2 4 35\ngithub.com/bcext/cashutil/coinset/coins.go:224.103,230.2 4 10\ngithub.com/bcext/cashutil/coinset/coins.go:250.103,258.42 5 24\ngithub.com/bcext/cashutil/coinset/coins.go:264.2,264.21 1 24\ngithub.com/bcext/cashutil/coinset/coins.go:269.2,269.52 1 16\ngithub.com/bcext/cashutil/coinset/coins.go:330.2,330.42 1 3\ngithub.com/bcext/cashutil/coinset/coins.go:258.42,259.62 1 45\ngithub.com/bcext/cashutil/coinset/coins.go:259.62,261.9 2 16\ngithub.com/bcext/cashutil/coinset/coins.go:264.21,266.3 1 8\ngithub.com/bcext/cashutil/coinset/coins.go:269.52,278.17 3 24\ngithub.com/bcext/cashutil/coinset/coins.go:278.17,281.94 1 13\ngithub.com/bcext/cashutil/coinset/coins.go:281.94,285.30 4 9\ngithub.com/bcext/cashutil/coinset/coins.go:288.5,297.19 3 9\ngithub.com/bcext/cashutil/coinset/coins.go:301.5,301.44 1 2\ngithub.com/bcext/cashutil/coinset/coins.go:305.5,305.24 1 2\ngithub.com/bcext/cashutil/coinset/coins.go:285.30,287.6 1 9\ngithub.com/bcext/cashutil/coinset/coins.go:297.19,298.14 1 7\ngithub.com/bcext/cashutil/coinset/coins.go:301.44,303.6 1 2\ngithub.com/bcext/cashutil/coinset/coins.go:308.4,312.37 2 11\ngithub.com/bcext/cashutil/coinset/coins.go:326.4,326.29 1 11\ngithub.com/bcext/cashutil/coinset/coins.go:312.37,313.43 1 8\ngithub.com/bcext/cashutil/coinset/coins.go:316.5,316.41 1 6\ngithub.com/bcext/cashutil/coinset/coins.go:320.5,321.92 2 5\ngithub.com/bcext/cashutil/coinset/coins.go:313.43,314.11 1 2\ngithub.com/bcext/cashutil/coinset/coins.go:316.41,317.14 1 1\ngithub.com/bcext/cashutil/coinset/coins.go:321.92,323.14 2 3\ngithub.com/bcext/cashutil/coinset/coins.go:335.41,335.58 1 34\ngithub.com/bcext/cashutil/coinset/coins.go:336.41,336.68 1 45\ngithub.com/bcext/cashutil/coinset/coins.go:337.41,337.85 1 98\ngithub.com/bcext/cashutil/coinset/coins.go:341.39,341.56 1 35\ngithub.com/bcext/cashutil/coinset/coins.go:342.39,342.66 1 22\ngithub.com/bcext/cashutil/coinset/coins.go:343.39,343.77 1 65\ngithub.com/bcext/cashutil/coinset/coins.go:358.45,360.2 1 1\ngithub.com/bcext/cashutil/coinset/coins.go:363.37,365.2 1 1\ngithub.com/bcext/cashutil/coinset/coins.go:368.42,370.2 1 3\ngithub.com/bcext/cashutil/coinset/coins.go:373.46,375.2 1 2\ngithub.com/bcext/cashutil/coinset/coins.go:382.40,384.2 1 1\ngithub.com/bcext/cashutil/coinset/coins.go:388.39,390.2 1 1\ngithub.com/bcext/cashutil/coinset/coins.go:394.39,396.2 1 1\ngithub.com/bcext/cashutil/bloom/filter.go:23.36,24.11 1 46\ngithub.com/bcext/cashutil/bloom/filter.go:27.2,27.10 1 1\ngithub.com/bcext/cashutil/bloom/filter.go:24.11,26.3 1 45\ngithub.com/bcext/cashutil/bloom/filter.go:46.92,48.18 1 23\ngithub.com/bcext/cashutil/bloom/filter.go:51.2,51.19 1 23\ngithub.com/bcext/cashutil/bloom/filter.go:60.2,76.3 7 23\ngithub.com/bcext/cashutil/bloom/filter.go:48.18,50.3 1 1\ngithub.com/bcext/cashutil/bloom/filter.go:51.19,53.3 1 2\ngithub.com/bcext/cashutil/bloom/filter.go:81.53,85.2 1 2\ngithub.com/bcext/cashutil/bloom/filter.go:90.35,95.2 4 2\ngithub.com/bcext/cashutil/bloom/filter.go:100.54,104.2 3 1\ngithub.com/bcext/cashutil/bloom/filter.go:109.28,113.2 3 1\ngithub.com/bcext/cashutil/bloom/filter.go:117.60,126.2 2 843\ngithub.com/bcext/cashutil/bloom/filter.go:132.45,133.29 1 108\ngithub.com/bcext/cashutil/bloom/filter.go:144.2,144.58 1 108\ngithub.com/bcext/cashutil/bloom/filter.go:150.2,150.13 1 19\ngithub.com/bcext/cashutil/bloom/filter.go:133.29,135.3 1 0\ngithub.com/bcext/cashutil/bloom/filter.go:144.58,146.56 2 370\ngithub.com/bcext/cashutil/bloom/filter.go:146.56,148.4 1 89\ngithub.com/bcext/cashutil/bloom/filter.go:157.45,162.2 4 9\ngithub.com/bcext/cashutil/bloom/filter.go:168.65,175.2 4 20\ngithub.com/bcext/cashutil/bloom/filter.go:181.65,186.2 4 4\ngithub.com/bcext/cashutil/bloom/filter.go:191.36,192.29 1 31\ngithub.com/bcext/cashutil/bloom/filter.go:203.2,203.58 1 31\ngithub.com/bcext/cashutil/bloom/filter.go:192.29,194.3 1 0\ngithub.com/bcext/cashutil/bloom/filter.go:203.58,206.3 2 473\ngithub.com/bcext/cashutil/bloom/filter.go:212.36,216.2 3 18\ngithub.com/bcext/cashutil/bloom/filter.go:221.49,225.2 3 7\ngithub.com/bcext/cashutil/bloom/filter.go:230.56,237.2 4 6\ngithub.com/bcext/cashutil/bloom/filter.go:242.56,246.2 3 3\ngithub.com/bcext/cashutil/bloom/filter.go:253.93,254.32 1 4\ngithub.com/bcext/cashutil/bloom/filter.go:255.27,257.27 2 2\ngithub.com/bcext/cashutil/bloom/filter.go:258.36,260.65 2 2\ngithub.com/bcext/cashutil/bloom/filter.go:260.65,263.4 2 1\ngithub.com/bcext/cashutil/bloom/filter.go:273.58,286.41 2 20\ngithub.com/bcext/cashutil/bloom/filter.go:304.2,304.13 1 20\ngithub.com/bcext/cashutil/bloom/filter.go:313.2,313.39 1 13\ngithub.com/bcext/cashutil/bloom/filter.go:329.2,329.14 1 9\ngithub.com/bcext/cashutil/bloom/filter.go:286.41,288.17 2 35\ngithub.com/bcext/cashutil/bloom/filter.go:292.3,292.35 1 35\ngithub.com/bcext/cashutil/bloom/filter.go:288.17,289.12 1 0\ngithub.com/bcext/cashutil/bloom/filter.go:292.35,293.25 1 35\ngithub.com/bcext/cashutil/bloom/filter.go:297.4,299.9 3 4\ngithub.com/bcext/cashutil/bloom/filter.go:293.25,294.13 1 31\ngithub.com/bcext/cashutil/bloom/filter.go:304.13,306.3 1 7\ngithub.com/bcext/cashutil/bloom/filter.go:313.39,314.49 1 16\ngithub.com/bcext/cashutil/bloom/filter.go:318.3,319.17 2 14\ngithub.com/bcext/cashutil/bloom/filter.go:322.3,322.35 1 14\ngithub.com/bcext/cashutil/bloom/filter.go:314.49,316.4 1 2\ngithub.com/bcext/cashutil/bloom/filter.go:319.17,320.12 1 0\ngithub.com/bcext/cashutil/bloom/filter.go:322.35,323.24 1 24\ngithub.com/bcext/cashutil/bloom/filter.go:323.24,325.5 1 2\ngithub.com/bcext/cashutil/bloom/filter.go:338.58,343.2 4 20\ngithub.com/bcext/cashutil/bloom/filter.go:349.55,354.2 4 10\ngithub.com/bcext/cashutil/bloom/merkleblock.go:26.59,28.2 1 12\ngithub.com/bcext/cashutil/bloom/merkleblock.go:32.68,33.17 1 11\ngithub.com/bcext/cashutil/bloom/merkleblock.go:37.2,39.41 3 3\ngithub.com/bcext/cashutil/bloom/merkleblock.go:44.2,44.51 1 3\ngithub.com/bcext/cashutil/bloom/merkleblock.go:33.17,35.3 1 8\ngithub.com/bcext/cashutil/bloom/merkleblock.go:39.41,41.3 1 2\ngithub.com/bcext/cashutil/bloom/merkleblock.go:41.3,43.3 1 1\ngithub.com/bcext/cashutil/bloom/merkleblock.go:51.60,54.66 2 10\ngithub.com/bcext/cashutil/bloom/merkleblock.go:57.2,62.37 2 10\ngithub.com/bcext/cashutil/bloom/merkleblock.go:71.2,75.41 2 4\ngithub.com/bcext/cashutil/bloom/merkleblock.go:54.66,56.3 1 23\ngithub.com/bcext/cashutil/bloom/merkleblock.go:62.37,65.3 2 6\ngithub.com/bcext/cashutil/bloom/merkleblock.go:75.41,77.3 1 4\ngithub.com/bcext/cashutil/bloom/merkleblock.go:82.93,92.48 4 2\ngithub.com/bcext/cashutil/bloom/merkleblock.go:103.2,104.39 2 2\ngithub.com/bcext/cashutil/bloom/merkleblock.go:109.2,118.42 3 2\ngithub.com/bcext/cashutil/bloom/merkleblock.go:121.2,121.56 1 2\ngithub.com/bcext/cashutil/bloom/merkleblock.go:124.2,124.40 1 2\ngithub.com/bcext/cashutil/bloom/merkleblock.go:92.48,93.34 1 8\ngithub.com/bcext/cashutil/bloom/merkleblock.go:99.3,99.57 1 8\ngithub.com/bcext/cashutil/bloom/merkleblock.go:93.34,96.4 2 3\ngithub.com/bcext/cashutil/bloom/merkleblock.go:96.4,98.4 1 5\ngithub.com/bcext/cashutil/bloom/merkleblock.go:104.39,106.3 1 3\ngithub.com/bcext/cashutil/bloom/merkleblock.go:118.42,120.3 1 6\ngithub.com/bcext/cashutil/bloom/merkleblock.go:121.56,123.3 1 10\ngithub.com/bcext/cashutil/bloom/murmurhash3.go:26.51,33.41 5 857\ngithub.com/bcext/cashutil/bloom/murmurhash3.go:45.2,48.21 3 857\ngithub.com/bcext/cashutil/bloom/murmurhash3.go:64.2,71.13 7 857\ngithub.com/bcext/cashutil/bloom/murmurhash3.go:33.41,42.3 7 7589\ngithub.com/bcext/cashutil/bloom/murmurhash3.go:49.9,51.14 2 2\ngithub.com/bcext/cashutil/bloom/murmurhash3.go:52.9,54.14 2 4\ngithub.com/bcext/cashutil/bloom/murmurhash3.go:55.9,60.12 5 124\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:125.48,138.2 1 462\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:148.44,150.18 1 804\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:156.2,156.24 1 684\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:162.2,162.17 1 684\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:150.18,152.3 1 120\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:156.24,160.3 3 369\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:170.40,172.2 1 11\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:178.37,180.2 1 275\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:184.50,186.2 1 10\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:209.61,211.25 1 369\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:224.2,225.37 2 368\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:237.2,239.21 3 367\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:252.2,274.57 8 367\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:286.2,288.17 3 367\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:327.2,329.32 2 367\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:211.25,213.3 1 1\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:225.37,227.3 1 1\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:239.21,245.3 1 24\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:245.3,251.3 1 343\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:274.57,276.3 1 0\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:288.17,299.3 5 337\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:299.3,304.41 2 30\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:311.3,312.17 2 30\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:320.3,322.38 3 30\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:304.41,306.4 1 0\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:312.17,314.4 1 0\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:340.54,342.18 1 51\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:347.2,348.16 2 31\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:356.2,357.35 1 30\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:342.18,344.3 1 20\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:348.16,350.3 1 1\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:361.60,363.2 1 10\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:369.62,370.18 1 10\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:374.2,375.21 2 1\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:370.18,372.3 1 9\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:380.90,383.2 2 12\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:388.54,389.42 1 38\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:392.2,392.28 1 38\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:389.42,391.3 1 1\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:396.39,397.21 1 88\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:401.2,413.17 9 80\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:420.2,422.39 3 80\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:397.21,399.3 1 8\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:413.17,416.3 2 38\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:416.3,418.3 1 42\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:427.59,430.2 1 16\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:434.52,435.17 1 8\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:435.17,437.3 1 4\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:437.3,439.3 1 4\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:444.21,446.28 2 32\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:446.28,448.3 1 680\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:455.30,465.2 9 8\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:475.73,477.58 1 27\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:483.2,495.71 7 25\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:499.2,501.29 2 25\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:477.58,479.3 1 2\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:495.71,497.3 1 0\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:506.57,510.40 2 43\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:519.2,522.46 4 42\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:527.2,537.15 8 41\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:554.2,555.28 1 40\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:510.40,512.3 1 1\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:522.46,524.3 1 1\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:537.15,542.60 3 23\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:542.60,544.4 1 0\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:545.3,549.17 2 18\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:549.17,551.4 1 1\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:564.49,566.52 1 9\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:570.2,572.16 3 7\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:576.2,576.17 1 7\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:566.52,568.3 1 2\ngithub.com/bcext/cashutil/hdkeychain/extendedkey.go:572.16,574.3 1 0\ngithub.com/bcext/cashutil/txsort/txsort.go:30.34,33.2 2 5\ngithub.com/bcext/cashutil/txsort/txsort.go:38.39,43.2 4 5\ngithub.com/bcext/cashutil/txsort/txsort.go:47.36,48.49 1 5\ngithub.com/bcext/cashutil/txsort/txsort.go:51.2,51.51 1 3\ngithub.com/bcext/cashutil/txsort/txsort.go:54.2,54.13 1 1\ngithub.com/bcext/cashutil/txsort/txsort.go:48.49,50.3 1 2\ngithub.com/bcext/cashutil/txsort/txsort.go:51.51,53.3 1 2\ngithub.com/bcext/cashutil/txsort/txsort.go:63.45,63.62 1 15\ngithub.com/bcext/cashutil/txsort/txsort.go:64.45,64.62 1 13\ngithub.com/bcext/cashutil/txsort/txsort.go:65.45,65.72 1 6\ngithub.com/bcext/cashutil/txsort/txsort.go:66.45,66.72 1 74\ngithub.com/bcext/cashutil/txsort/txsort.go:70.49,74.20 3 138\ngithub.com/bcext/cashutil/txsort/txsort.go:80.2,81.34 2 135\ngithub.com/bcext/cashutil/txsort/txsort.go:85.2,85.48 1 135\ngithub.com/bcext/cashutil/txsort/txsort.go:74.20,76.3 1 3\ngithub.com/bcext/cashutil/txsort/txsort.go:81.34,84.3 2 2160\ngithub.com/bcext/cashutil/txsort/txsort.go:90.50,91.30 1 13\ngithub.com/bcext/cashutil/txsort/txsort.go:94.2,94.32 1 10\ngithub.com/bcext/cashutil/txsort/txsort.go:91.30,93.3 1 3\ngithub.com/bcext/cashutil/base58/base58.go:17.30,22.35 4 39\ngithub.com/bcext/cashutil/base58/base58.go:33.2,36.50 3 29\ngithub.com/bcext/cashutil/base58/base58.go:41.2,45.12 4 29\ngithub.com/bcext/cashutil/base58/base58.go:22.35,24.17 2 417\ngithub.com/bcext/cashutil/base58/base58.go:27.3,30.21 4 407\ngithub.com/bcext/cashutil/base58/base58.go:24.17,26.4 1 10\ngithub.com/bcext/cashutil/base58/base58.go:36.50,37.34 1 36\ngithub.com/bcext/cashutil/base58/base58.go:37.34,38.9 1 24\ngithub.com/bcext/cashutil/base58/base58.go:49.30,54.25 4 24\ngithub.com/bcext/cashutil/base58/base58.go:61.2,61.22 1 24\ngithub.com/bcext/cashutil/base58/base58.go:69.2,70.30 2 24\ngithub.com/bcext/cashutil/base58/base58.go:74.2,74.23 1 24\ngithub.com/bcext/cashutil/base58/base58.go:54.25,58.3 3 401\ngithub.com/bcext/cashutil/base58/base58.go:61.22,62.13 1 24\ngithub.com/bcext/cashutil/base58/base58.go:65.3,65.40 1 1\ngithub.com/bcext/cashutil/base58/base58.go:62.13,63.9 1 23\ngithub.com/bcext/cashutil/base58/base58.go:70.30,72.3 1 194\ngithub.com/bcext/cashutil/base58/base58check.go:20.45,25.2 4 25\ngithub.com/bcext/cashutil/base58/base58check.go:28.53,35.2 6 12\ngithub.com/bcext/cashutil/base58/base58check.go:38.73,40.22 2 17\ngithub.com/bcext/cashutil/base58/base58check.go:43.2,46.49 4 13\ngithub.com/bcext/cashutil/base58/base58check.go:49.2,51.8 3 12\ngithub.com/bcext/cashutil/base58/base58check.go:40.22,42.3 1 4\ngithub.com/bcext/cashutil/base58/base58check.go:46.49,48.3 1 1\ngithub.com/bcext/cashutil/gcs/gcs.go:54.47,74.2 9 95\ngithub.com/bcext/cashutil/gcs/gcs.go:94.91,98.36 1 1\ngithub.com/bcext/cashutil/gcs/gcs.go:101.2,101.12 1 1\ngithub.com/bcext/cashutil/gcs/gcs.go:106.2,117.14 3 1\ngithub.com/bcext/cashutil/gcs/gcs.go:122.2,134.25 5 1\ngithub.com/bcext/cashutil/gcs/gcs.go:141.2,146.27 3 1\ngithub.com/bcext/cashutil/gcs/gcs.go:170.2,172.16 2 1\ngithub.com/bcext/cashutil/gcs/gcs.go:98.36,100.3 1 0\ngithub.com/bcext/cashutil/gcs/gcs.go:101.12,103.3 1 0\ngithub.com/bcext/cashutil/gcs/gcs.go:117.14,119.3 1 0\ngithub.com/bcext/cashutil/gcs/gcs.go:134.25,140.3 3 17\ngithub.com/bcext/cashutil/gcs/gcs.go:146.27,158.17 4 17\ngithub.com/bcext/cashutil/gcs/gcs.go:162.3,166.35 2 17\ngithub.com/bcext/cashutil/gcs/gcs.go:158.17,161.4 2 17\ngithub.com/bcext/cashutil/gcs/gcs.go:177.72,179.12 1 2\ngithub.com/bcext/cashutil/gcs/gcs.go:184.2,198.15 5 2\ngithub.com/bcext/cashutil/gcs/gcs.go:179.12,181.3 1 0\ngithub.com/bcext/cashutil/gcs/gcs.go:203.63,206.16 3 1\ngithub.com/bcext/cashutil/gcs/gcs.go:209.2,209.20 1 1\ngithub.com/bcext/cashutil/gcs/gcs.go:212.2,212.51 1 1\ngithub.com/bcext/cashutil/gcs/gcs.go:206.16,208.3 1 0\ngithub.com/bcext/cashutil/gcs/gcs.go:209.20,211.3 1 0\ngithub.com/bcext/cashutil/gcs/gcs.go:217.42,221.2 3 17\ngithub.com/bcext/cashutil/gcs/gcs.go:225.43,230.16 4 1\ngithub.com/bcext/cashutil/gcs/gcs.go:234.2,235.16 2 1\ngithub.com/bcext/cashutil/gcs/gcs.go:239.2,239.28 1 1\ngithub.com/bcext/cashutil/gcs/gcs.go:230.16,232.3 1 0\ngithub.com/bcext/cashutil/gcs/gcs.go:235.16,237.3 1 0\ngithub.com/bcext/cashutil/gcs/gcs.go:244.43,249.2 4 0\ngithub.com/bcext/cashutil/gcs/gcs.go:253.44,258.16 4 0\ngithub.com/bcext/cashutil/gcs/gcs.go:262.2,263.16 2 0\ngithub.com/bcext/cashutil/gcs/gcs.go:267.2,268.16 2 0\ngithub.com/bcext/cashutil/gcs/gcs.go:272.2,272.28 1 0\ngithub.com/bcext/cashutil/gcs/gcs.go:258.16,260.3 1 0\ngithub.com/bcext/cashutil/gcs/gcs.go:263.16,265.3 1 0\ngithub.com/bcext/cashutil/gcs/gcs.go:268.16,270.3 1 0\ngithub.com/bcext/cashutil/gcs/gcs.go:277.28,279.2 1 6\ngithub.com/bcext/cashutil/gcs/gcs.go:282.29,284.2 1 6\ngithub.com/bcext/cashutil/gcs/gcs.go:288.70,291.16 2 8\ngithub.com/bcext/cashutil/gcs/gcs.go:295.2,308.23 7 8\ngithub.com/bcext/cashutil/gcs/gcs.go:329.2,329.19 1 2\ngithub.com/bcext/cashutil/gcs/gcs.go:291.16,293.3 1 0\ngithub.com/bcext/cashutil/gcs/gcs.go:308.23,313.17 2 100\ngithub.com/bcext/cashutil/gcs/gcs.go:321.3,322.20 2 98\ngithub.com/bcext/cashutil/gcs/gcs.go:326.3,326.20 1 94\ngithub.com/bcext/cashutil/gcs/gcs.go:313.17,314.21 1 2\ngithub.com/bcext/cashutil/gcs/gcs.go:317.4,317.21 1 0\ngithub.com/bcext/cashutil/gcs/gcs.go:314.21,316.5 1 2\ngithub.com/bcext/cashutil/gcs/gcs.go:322.20,324.4 1 4\ngithub.com/bcext/cashutil/gcs/gcs.go:335.75,337.20 1 4\ngithub.com/bcext/cashutil/gcs/gcs.go:342.2,343.16 2 4\ngithub.com/bcext/cashutil/gcs/gcs.go:347.2,356.25 5 4\ngithub.com/bcext/cashutil/gcs/gcs.go:365.2,373.31 5 4\ngithub.com/bcext/cashutil/gcs/gcs.go:402.2,402.18 1 2\ngithub.com/bcext/cashutil/gcs/gcs.go:337.20,339.3 1 0\ngithub.com/bcext/cashutil/gcs/gcs.go:343.16,345.3 1 0\ngithub.com/bcext/cashutil/gcs/gcs.go:356.25,364.3 3 70\ngithub.com/bcext/cashutil/gcs/gcs.go:373.31,376.10 1 124\ngithub.com/bcext/cashutil/gcs/gcs.go:377.32,380.23 1 66\ngithub.com/bcext/cashutil/gcs/gcs.go:386.32,390.18 2 58\ngithub.com/bcext/cashutil/gcs/gcs.go:396.4,396.23 1 58\ngithub.com/bcext/cashutil/gcs/gcs.go:380.23,383.5 2 64\ngithub.com/bcext/cashutil/gcs/gcs.go:383.5,385.5 1 2\ngithub.com/bcext/cashutil/gcs/gcs.go:390.18,391.22 1 0\ngithub.com/bcext/cashutil/gcs/gcs.go:394.5,394.22 1 0\ngithub.com/bcext/cashutil/gcs/gcs.go:391.22,393.6 1 0\ngithub.com/bcext/cashutil/gcs/gcs.go:407.69,412.16 3 158\ngithub.com/bcext/cashutil/gcs/gcs.go:415.2,415.8 1 158\ngithub.com/bcext/cashutil/gcs/gcs.go:424.2,425.16 2 158\ngithub.com/bcext/cashutil/gcs/gcs.go:430.2,431.15 2 156\ngithub.com/bcext/cashutil/gcs/gcs.go:412.16,414.3 1 0\ngithub.com/bcext/cashutil/gcs/gcs.go:415.8,418.17 3 164\ngithub.com/bcext/cashutil/gcs/gcs.go:418.17,420.4 1 0\ngithub.com/bcext/cashutil/gcs/gcs.go:425.16,427.3 1 2\ngithub.com/bcext/cashutil/gcs/uint64slice.go:13.32,15.2 1 5\ngithub.com/bcext/cashutil/gcs/uint64slice.go:19.42,21.2 1 338\ngithub.com/bcext/cashutil/gcs/uint64slice.go:24.37,26.2 1 151\ngithub.com/bcext/cashutil/gcs/builder/builder.go:43.45,52.16 4 4\ngithub.com/bcext/cashutil/gcs/builder/builder.go:57.2,58.17 2 4\ngithub.com/bcext/cashutil/gcs/builder/builder.go:52.16,54.3 1 0\ngithub.com/bcext/cashutil/gcs/builder/builder.go:63.59,67.2 3 3\ngithub.com/bcext/cashutil/gcs/builder/builder.go:71.55,73.18 1 14\ngithub.com/bcext/cashutil/gcs/builder/builder.go:77.2,77.19 1 13\ngithub.com/bcext/cashutil/gcs/builder/builder.go:73.18,75.3 1 1\ngithub.com/bcext/cashutil/gcs/builder/builder.go:82.64,84.18 1 10\ngithub.com/bcext/cashutil/gcs/builder/builder.go:88.2,89.10 2 9\ngithub.com/bcext/cashutil/gcs/builder/builder.go:84.18,86.3 1 1\ngithub.com/bcext/cashutil/gcs/builder/builder.go:94.74,96.18 1 2\ngithub.com/bcext/cashutil/gcs/builder/builder.go:100.2,100.37 1 1\ngithub.com/bcext/cashutil/gcs/builder/builder.go:96.18,98.3 1 1\ngithub.com/bcext/cashutil/gcs/builder/builder.go:104.48,106.18 1 9\ngithub.com/bcext/cashutil/gcs/builder/builder.go:111.2,111.12 1 8\ngithub.com/bcext/cashutil/gcs/builder/builder.go:116.2,117.10 2 7\ngithub.com/bcext/cashutil/gcs/builder/builder.go:106.18,108.3 1 1\ngithub.com/bcext/cashutil/gcs/builder/builder.go:111.12,114.3 2 1\ngithub.com/bcext/cashutil/gcs/builder/builder.go:121.49,123.18 1 8\ngithub.com/bcext/cashutil/gcs/builder/builder.go:128.2,128.32 1 7\ngithub.com/bcext/cashutil/gcs/builder/builder.go:133.2,134.10 2 7\ngithub.com/bcext/cashutil/gcs/builder/builder.go:123.18,125.3 1 1\ngithub.com/bcext/cashutil/gcs/builder/builder.go:128.32,131.3 2 0\ngithub.com/bcext/cashutil/gcs/builder/builder.go:140.56,142.18 1 8\ngithub.com/bcext/cashutil/gcs/builder/builder.go:146.2,146.19 1 7\ngithub.com/bcext/cashutil/gcs/builder/builder.go:150.2,150.10 1 7\ngithub.com/bcext/cashutil/gcs/builder/builder.go:142.18,144.3 1 1\ngithub.com/bcext/cashutil/gcs/builder/builder.go:146.19,148.3 1 7\ngithub.com/bcext/cashutil/gcs/builder/builder.go:155.56,157.18 1 135\ngithub.com/bcext/cashutil/gcs/builder/builder.go:161.2,162.10 2 133\ngithub.com/bcext/cashutil/gcs/builder/builder.go:157.18,159.3 1 2\ngithub.com/bcext/cashutil/gcs/builder/builder.go:167.60,169.18 1 8\ngithub.com/bcext/cashutil/gcs/builder/builder.go:173.2,173.29 1 7\ngithub.com/bcext/cashutil/gcs/builder/builder.go:176.2,176.10 1 7\ngithub.com/bcext/cashutil/gcs/builder/builder.go:169.18,171.3 1 1\ngithub.com/bcext/cashutil/gcs/builder/builder.go:173.29,175.3 1 119\ngithub.com/bcext/cashutil/gcs/builder/builder.go:181.64,183.18 1 8\ngithub.com/bcext/cashutil/gcs/builder/builder.go:187.2,187.38 1 7\ngithub.com/bcext/cashutil/gcs/builder/builder.go:183.18,185.3 1 1\ngithub.com/bcext/cashutil/gcs/builder/builder.go:192.51,194.18 1 22\ngithub.com/bcext/cashutil/gcs/builder/builder.go:200.2,200.14 1 21\ngithub.com/bcext/cashutil/gcs/builder/builder.go:203.2,203.14 1 21\ngithub.com/bcext/cashutil/gcs/builder/builder.go:207.2,208.27 2 21\ngithub.com/bcext/cashutil/gcs/builder/builder.go:212.2,212.55 1 21\ngithub.com/bcext/cashutil/gcs/builder/builder.go:194.18,196.3 1 1\ngithub.com/bcext/cashutil/gcs/builder/builder.go:200.14,202.3 1 0\ngithub.com/bcext/cashutil/gcs/builder/builder.go:203.14,205.3 1 0\ngithub.com/bcext/cashutil/gcs/builder/builder.go:208.27,210.3 1 378\ngithub.com/bcext/cashutil/gcs/builder/builder.go:217.81,220.2 2 8\ngithub.com/bcext/cashutil/gcs/builder/builder.go:225.70,227.2 1 1\ngithub.com/bcext/cashutil/gcs/builder/builder.go:232.49,234.2 1 1\ngithub.com/bcext/cashutil/gcs/builder/builder.go:239.24,242.2 1 2\ngithub.com/bcext/cashutil/gcs/builder/builder.go:247.76,249.2 1 1\ngithub.com/bcext/cashutil/gcs/builder/builder.go:255.55,257.2 1 1\ngithub.com/bcext/cashutil/gcs/builder/builder.go:261.64,263.16 2 4\ngithub.com/bcext/cashutil/gcs/builder/builder.go:267.2,267.33 1 4\ngithub.com/bcext/cashutil/gcs/builder/builder.go:263.16,266.3 2 0\ngithub.com/bcext/cashutil/gcs/builder/builder.go:273.53,275.2 1 2\ngithub.com/bcext/cashutil/gcs/builder/builder.go:281.34,283.2 1 2\ngithub.com/bcext/cashutil/gcs/builder/builder.go:288.91,295.16 4 0\ngithub.com/bcext/cashutil/gcs/builder/builder.go:301.2,301.40 1 0\ngithub.com/bcext/cashutil/gcs/builder/builder.go:323.2,323.44 1 0\ngithub.com/bcext/cashutil/gcs/builder/builder.go:331.2,331.18 1 0\ngithub.com/bcext/cashutil/gcs/builder/builder.go:295.16,297.3 1 0\ngithub.com/bcext/cashutil/gcs/builder/builder.go:301.40,304.34 1 0\ngithub.com/bcext/cashutil/gcs/builder/builder.go:304.34,305.32 1 0\ngithub.com/bcext/cashutil/gcs/builder/builder.go:312.4,313.51 1 0\ngithub.com/bcext/cashutil/gcs/builder/builder.go:317.4,317.30 1 0\ngithub.com/bcext/cashutil/gcs/builder/builder.go:305.32,306.13 1 0\ngithub.com/bcext/cashutil/gcs/builder/builder.go:313.51,314.13 1 0\ngithub.com/bcext/cashutil/gcs/builder/builder.go:323.44,324.27 1 0\ngithub.com/bcext/cashutil/gcs/builder/builder.go:328.3,328.25 1 0\ngithub.com/bcext/cashutil/gcs/builder/builder.go:324.27,325.12 1 0\ngithub.com/bcext/cashutil/gcs/builder/builder.go:335.64,337.16 2 0\ngithub.com/bcext/cashutil/gcs/builder/builder.go:341.2,341.47 1 0\ngithub.com/bcext/cashutil/gcs/builder/builder.go:337.16,339.3 1 0\ngithub.com/bcext/cashutil/gcs/builder/builder.go:346.97,349.16 3 0\ngithub.com/bcext/cashutil/gcs/builder/builder.go:355.2,360.46 3 0\ngithub.com/bcext/cashutil/gcs/builder/builder.go:349.16,351.3 1 0\n"
  },
  {
    "path": "vendor/github.com/bcext/cashutil/test_coverage.txt",
    "content": "ok  \tgithub.com/bcext/cashutil\t0.237s\tcoverage: 90.1% of statements\n\ngithub.com/bcext/cashutil/cashaddrconv.go\t    packAddrData\t\t\t        100.00% (19/19)\ngithub.com/bcext/cashutil/cashaddrconv.go\t    convertBits\t\t\t            100.00% (15/15)\ngithub.com/bcext/cashutil/cashaddr.go\t\t    polyMod\t\t\t                100.00% (15/15)\ngithub.com/bcext/cashutil/block.go\t\t        Block.Tx\t\t\t            100.00% (12/12)\ngithub.com/bcext/cashutil/wif.go\t\t        WIF.String\t\t\t            100.00% (11/11)\ngithub.com/bcext/cashutil/block.go\t\t        Block.Transactions\t\t        100.00% (11/11)\ngithub.com/bcext/cashutil/amount.go\t\t        AmountUnit.String\t\t        100.00% (8/8)\ngithub.com/bcext/cashutil/cashaddr.go\t\t    createChecksum\t\t\t        100.00% (7/7)\ngithub.com/bcext/cashutil/cashaddrconv.go\t    DecodeCashAddr\t\t\t        100.00% (7/7)\ngithub.com/bcext/cashutil/cashaddr.go\t\t    Encode\t\t\t\t            100.00% (7/7)\ngithub.com/bcext/cashutil/block.go\t\t        NewBlockFromReader\t\t        100.00% (6/6)\ngithub.com/bcext/cashutil/tx.go\t\t\t        NewTxFromReader\t\t            100.00% (6/6)\ngithub.com/bcext/cashutil/block.go\t\t        NewBlockFromBytes\t\t        100.00% (6/6)\ngithub.com/bcext/cashutil/cashaddr.go\t\t    expandPrefix\t\t\t        100.00% (5/5)\ngithub.com/bcext/cashutil/amount.go\t\t        NewAmount\t\t\t            100.00% (5/5)\ngithub.com/bcext/cashutil/address.go\t\t    newAddressPubKeyHash\t\t    100.00% (5/5)\ngithub.com/bcext/cashutil/block.go\t\t        Block.Hash\t\t\t            100.00% (5/5)\ngithub.com/bcext/cashutil/address.go\t\t    newAddressScriptHashFromHash    100.00% (5/5)\ngithub.com/bcext/cashutil/tx.go\t\t\t        Tx.Hash\t\t\t                100.00% (5/5)\ngithub.com/bcext/cashutil/certgen.go\t\t    @70:13\t\t\t\t            100.00% (4/4)\ngithub.com/bcext/cashutil/cashaddr.go\t\t    cat\t\t\t\t                100.00% (4/4)\ngithub.com/bcext/cashutil/certgen.go\t\t    @62:11\t\t\t\t            100.00% (4/4)\ngithub.com/bcext/cashutil/amount.go\t\t        round\t\t\t\t            100.00% (3/3)\ngithub.com/bcext/cashutil/amount.go\t\t        Amount.Format\t\t            100.00% (2/2)\ngithub.com/bcext/cashutil/hash160.go\t\t    calcHash\t                    100.00% (2/2)\ngithub.com/bcext/cashutil/tx.go\t\t\t        NewTxFromBytes\t\t\t        100.00% (2/2)\ngithub.com/bcext/cashutil/address.go\t\t    NewAddressScriptHash\t\t    100.00% (2/2)\ngithub.com/bcext/cashutil/amount.go\t\t        Amount.ToUnit\t\t\t        100.00% (1/1)\ngithub.com/bcext/cashutil/tx.go\t\t\t        Tx.Index\t\t\t            100.00% (1/1)\ngithub.com/bcext/cashutil/tx.go\t\t\t        Tx.SetIndex\t\t\t            100.00% (1/1)\ngithub.com/bcext/cashutil/tx.go\t\t\t        NewTx\t\t\t\t            100.00% (1/1)\ngithub.com/bcext/cashutil/address.go\t\t    AddressPubKey.String\t\t    100.00% (1/1)\ngithub.com/bcext/cashutil/address.go\t\t    AddressPubKey.IsForNet\t\t    100.00% (1/1)\ngithub.com/bcext/cashutil/amount.go\t\t        Amount.String\t\t\t        100.00% (1/1)\ngithub.com/bcext/cashutil/amount.go\t\t        Amount.MulF64\t\t\t        100.00% (1/1)\ngithub.com/bcext/cashutil/tx.go\t\t\t        Tx.MsgTx\t\t\t            100.00% (1/1)\ngithub.com/bcext/cashutil/net.go\t\t        interfaceAddrs\t\t\t        100.00% (1/1)\ngithub.com/bcext/cashutil/block.go\t\t        OutOfRangeError.Error\t\t    100.00% (1/1)\ngithub.com/bcext/cashutil/block.go\t\t        Block.MsgBlock\t\t\t        100.00% (1/1)\ngithub.com/bcext/cashutil/hash160.go\t\t    Hash160\t\t\t                100.00% (1/1)\ngithub.com/bcext/cashutil/address.go\t\t    AddressPubKey.ScriptAddress\t    100.00% (1/1)\ngithub.com/bcext/cashutil/address.go\t\t    AddressPubKey.EncodeAddress\t    100.00% (1/1)\ngithub.com/bcext/cashutil/address.go\t\t    AddressScriptHash.Hash160\t    100.00% (1/1)\ngithub.com/bcext/cashutil/address.go\t\t    AddressScriptHash.String\t    100.00% (1/1)\ngithub.com/bcext/cashutil/address.go\t\t    AddressScriptHash.IsForNet\t    100.00% (1/1)\ngithub.com/bcext/cashutil/block.go\t\t        Block.Height\t\t\t        100.00% (1/1)\ngithub.com/bcext/cashutil/block.go\t\t        Block.SetHeight\t\t            100.00% (1/1)\ngithub.com/bcext/cashutil/block.go\t\t        NewBlock\t\t\t            100.00% (1/1)\ngithub.com/bcext/cashutil/address.go\t\t    AddressScriptHash.ScriptAddress 100.00% (1/1)\ngithub.com/bcext/cashutil/address.go\t\t    AddressScriptHash.EncodeAddress 100.00% (1/1)\ngithub.com/bcext/cashutil/block.go\t\t        NewBlockFromBlockAndBytes\t    100.00% (1/1)\ngithub.com/bcext/cashutil/amount.go\t\t        Amount.ToBCH\t\t\t        100.00% (1/1)\ngithub.com/bcext/cashutil/address.go\t\t    NewAddressScriptHashFromHash\t100.00% (1/1)\ngithub.com/bcext/cashutil/address.go\t\t    AddressPubKeyHash.Hash160\t    100.00% (1/1)\ngithub.com/bcext/cashutil/address.go\t\t    AddressPubKeyHash.IsForNet\t    100.00% (1/1)\ngithub.com/bcext/cashutil/address.go\t\t    AddressPubKeyHash.ScriptAddress 100.00% (1/1)\ngithub.com/bcext/cashutil/address.go\t\t    AddressPubKeyHash.EncodeAddress 100.00% (1/1)\ngithub.com/bcext/cashutil/cashaddr.go\t\t    verifyChecksum\t\t\t        100.00% (1/1)\ngithub.com/bcext/cashutil/address.go\t\t    NewAddressPubKeyHash\t\t    100.00% (1/1)\ngithub.com/bcext/cashutil/address.go\t\t    AddressPubKeyHash.String\t    100.00% (1/1)\ngithub.com/bcext/cashutil/address.go\t\t    encodeAddress\t\t\t        100.00% (1/1)\ngithub.com/bcext/cashutil/cashaddr.go\t\t    Decode\t\t\t\t            97.37% (37/38)\ngithub.com/bcext/cashutil/cashaddrconv.go\t    decodeCashAddrContent\t\t    95.83% (23/24)\ngithub.com/bcext/cashutil/appdata.go\t\t    appDataDir\t\t\t            91.67% (22/24)\ngithub.com/bcext/cashutil/block.go\t\t        Block.TxLoc\t\t\t            88.89% (8/9)\ngithub.com/bcext/cashutil/block.go\t\t        Block.Bytes\t\t\t            88.89% (8/9)\ngithub.com/bcext/cashutil/address.go\t\t    NewAddressPubKey\t\t        87.50% (7/8)\ngithub.com/bcext/cashutil/wif.go\t\t        DecodeWIF\t\t\t            85.00% (17/20)\ngithub.com/bcext/cashutil/cashaddrconv.go\t    EncodeCashAddr\t\t\t        83.33% (5/6)\ngithub.com/bcext/cashutil/address.go\t\t    AddressPubKey.serialize\t        80.00% (4/5)\ngithub.com/bcext/cashutil/address.go\t\t    DecodeAddress\t\t\t        78.95% (15/19)\ngithub.com/bcext/cashutil/certgen.go\t\t    NewTLSCertPair\t\t\t        78.85% (41/52)\ngithub.com/bcext/cashutil/block.go\t\t        Block.TxHash\t\t\t        75.00% (3/4)\ngithub.com/bcext/cashutil/cashaddrconv.go\t    decodeCashAddrDestination\t    66.67% (8/12)\ngithub.com/bcext/cashutil/wif.go\t\t        paddedAppend\t\t\t        66.67% (2/3)\ngithub.com/bcext/cashutil/wif.go\t\t        NewWIF\t\t\t\t            66.67% (2/3)\ngithub.com/bcext/cashutil/wif.go\t\t        WIF.SerializePubKey\t\t        0.00% (0/4)\ngithub.com/bcext/cashutil/address.go\t\t    AddressPubKey.AddressPubKeyHash 0.00% (0/3)\ngithub.com/bcext/cashutil/wif.go\t\t        WIF.IsForNet\t\t\t        0.00% (0/1)\ngithub.com/bcext/cashutil/address.go\t\t    AddressPubKey.Format\t\t    0.00% (0/1)\ngithub.com/bcext/cashutil/address.go\t\t    AddressPubKey.SetFormat\t        0.00% (0/1)\ngithub.com/bcext/cashutil/address.go\t\t    AddressPubKey.PubKey\t\t    0.00% (0/1)\ngithub.com/bcext/cashutil/appdata.go\t\t    AppDataDir\t\t\t            0.00% (0/1)\ngithub.com/bcext/cashutil\t\t\t            ------------------------------- 90.11% (419/465)\n\nTotal Coverage: 90.11% (419/465)\n"
  },
  {
    "path": "vendor/github.com/bcext/cashutil/tx.go",
    "content": "// Copyright (c) 2013-2016 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage cashutil\n\nimport (\n\t\"bytes\"\n\t\"io\"\n\n\t\"github.com/bcext/gcash/chaincfg/chainhash\"\n\t\"github.com/bcext/gcash/wire\"\n)\n\n// TxIndexUnknown is the value returned for a transaction index that is unknown.\n// This is typically because the transaction has not been inserted into a block\n// yet.\nconst TxIndexUnknown = -1\n\n// Tx defines a bitcoin transaction that provides easier and more efficient\n// manipulation of raw transactions.  It also memoizes the hash for the\n// transaction on its first access so subsequent accesses don't have to repeat\n// the relatively expensive hashing operations.\ntype Tx struct {\n\tmsgTx   *wire.MsgTx     // Underlying MsgTx\n\ttxHash  *chainhash.Hash // Cached transaction hash\n\ttxIndex int             // Position within a block or TxIndexUnknown\n}\n\n// MsgTx returns the underlying wire.MsgTx for the transaction.\nfunc (t *Tx) MsgTx() *wire.MsgTx {\n\t// Return the cached transaction.\n\treturn t.msgTx\n}\n\n// Hash returns the hash of the transaction.  This is equivalent to\n// calling TxHash on the underlying wire.MsgTx, however it caches the\n// result so subsequent calls are more efficient.\nfunc (t *Tx) Hash() *chainhash.Hash {\n\t// Return the cached hash if it has already been generated.\n\tif t.txHash != nil {\n\t\treturn t.txHash\n\t}\n\n\t// Cache the hash and return it.\n\thash := t.msgTx.TxHash()\n\tt.txHash = &hash\n\treturn &hash\n}\n\n// Index returns the saved index of the transaction within a block.  This value\n// will be TxIndexUnknown if it hasn't already explicitly been set.\nfunc (t *Tx) Index() int {\n\treturn t.txIndex\n}\n\n// SetIndex sets the index of the transaction in within a block.\nfunc (t *Tx) SetIndex(index int) {\n\tt.txIndex = index\n}\n\n// NewTx returns a new instance of a bitcoin transaction given an underlying\n// wire.MsgTx.  See Tx.\nfunc NewTx(msgTx *wire.MsgTx) *Tx {\n\treturn &Tx{\n\t\tmsgTx:   msgTx,\n\t\ttxIndex: TxIndexUnknown,\n\t}\n}\n\n// NewTxFromBytes returns a new instance of a bitcoin transaction given the\n// serialized bytes.  See Tx.\nfunc NewTxFromBytes(serializedTx []byte) (*Tx, error) {\n\tbr := bytes.NewReader(serializedTx)\n\treturn NewTxFromReader(br)\n}\n\n// NewTxFromReader returns a new instance of a bitcoin transaction given a\n// Reader to deserialize the transaction.  See Tx.\nfunc NewTxFromReader(r io.Reader) (*Tx, error) {\n\t// Deserialize the bytes into a MsgTx.\n\tvar msgTx wire.MsgTx\n\terr := msgTx.Deserialize(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tt := Tx{\n\t\tmsgTx:   &msgTx,\n\t\ttxIndex: TxIndexUnknown,\n\t}\n\treturn &t, nil\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/cashutil/wif.go",
    "content": "// Copyright (c) 2013-2016 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage cashutil\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\n\t\"github.com/bcext/cashutil/base58\"\n\t\"github.com/bcext/gcash/btcec\"\n\t\"github.com/bcext/gcash/chaincfg\"\n\t\"github.com/bcext/gcash/chaincfg/chainhash\"\n)\n\n// ErrMalformedPrivateKey describes an error where a WIF-encoded private\n// key cannot be decoded due to being improperly formatted.  This may occur\n// if the byte length is incorrect or an unexpected magic number was\n// encountered.\nvar ErrMalformedPrivateKey = errors.New(\"malformed private key\")\n\n// compressMagic is the magic byte used to identify a WIF encoding for\n// an address created from a compressed serialized public key.\nconst compressMagic byte = 0x01\n\n// WIF contains the individual components described by the Wallet Import Format\n// (WIF).  A WIF string is typically used to represent a private key and its\n// associated address in a way that  may be easily copied and imported into or\n// exported from wallet software.  WIF strings may be decoded into this\n// structure by calling DecodeWIF or created with a user-provided private key\n// by calling NewWIF.\ntype WIF struct {\n\t// PrivKey is the private key being imported or exported.\n\tPrivKey *btcec.PrivateKey\n\n\t// CompressPubKey specifies whether the address controlled by the\n\t// imported or exported private key was created by hashing a\n\t// compressed (33-byte) serialized public key, rather than an\n\t// uncompressed (65-byte) one.\n\tCompressPubKey bool\n\n\t// netID is the bitcoin network identifier byte used when\n\t// WIF encoding the private key.\n\tnetID byte\n}\n\n// NewWIF creates a new WIF structure to export an address and its private key\n// as a string encoded in the Wallet Import Format.  The compress argument\n// specifies whether the address intended to be imported or exported was created\n// by serializing the public key compressed rather than uncompressed.\nfunc NewWIF(privKey *btcec.PrivateKey, net *chaincfg.Params, compress bool) (*WIF, error) {\n\tif net == nil {\n\t\treturn nil, errors.New(\"no network\")\n\t}\n\treturn &WIF{privKey, compress, net.PrivateKeyID}, nil\n}\n\n// IsForNet returns whether or not the decoded WIF structure is associated\n// with the passed bitcoin network.\nfunc (w *WIF) IsForNet(net *chaincfg.Params) bool {\n\treturn w.netID == net.PrivateKeyID\n}\n\n// DecodeWIF creates a new WIF structure by decoding the string encoding of\n// the import format.\n//\n// The WIF string must be a base58-encoded string of the following byte\n// sequence:\n//\n//  * 1 byte to identify the network, must be 0x80 for mainnet or 0xef for\n//    either testnet3 or the regression test network\n//  * 32 bytes of a binary-encoded, big-endian, zero-padded private key\n//  * Optional 1 byte (equal to 0x01) if the address being imported or exported\n//    was created by taking the RIPEMD160 after SHA256 hash of a serialized\n//    compressed (33-byte) public key\n//  * 4 bytes of checksum, must equal the first four bytes of the double SHA256\n//    of every byte before the checksum in this sequence\n//\n// If the base58-decoded byte sequence does not match this, DecodeWIF will\n// return a non-nil error.  ErrMalformedPrivateKey is returned when the WIF\n// is of an impossible length or the expected compressed pubkey magic number\n// does not equal the expected value of 0x01.  ErrChecksumMismatch is returned\n// if the expected WIF checksum does not match the calculated checksum.\nfunc DecodeWIF(wif string) (*WIF, error) {\n\tdecoded := base58.Decode(wif)\n\tdecodedLen := len(decoded)\n\tvar compress bool\n\n\t// Length of base58 decoded WIF must be 32 bytes + an optional 1 byte\n\t// (0x01) if compressed, plus 1 byte for netID + 4 bytes of checksum.\n\tswitch decodedLen {\n\tcase 1 + btcec.PrivKeyBytesLen + 1 + 4:\n\t\tif decoded[33] != compressMagic {\n\t\t\treturn nil, ErrMalformedPrivateKey\n\t\t}\n\t\tcompress = true\n\tcase 1 + btcec.PrivKeyBytesLen + 4:\n\t\tcompress = false\n\tdefault:\n\t\treturn nil, ErrMalformedPrivateKey\n\t}\n\n\t// Checksum is first four bytes of double SHA256 of the identifier byte\n\t// and privKey.  Verify this matches the final 4 bytes of the decoded\n\t// private key.\n\tvar tosum []byte\n\tif compress {\n\t\ttosum = decoded[:1+btcec.PrivKeyBytesLen+1]\n\t} else {\n\t\ttosum = decoded[:1+btcec.PrivKeyBytesLen]\n\t}\n\tcksum := chainhash.DoubleHashB(tosum)[:4]\n\tif !bytes.Equal(cksum, decoded[decodedLen-4:]) {\n\t\treturn nil, ErrChecksumMismatch\n\t}\n\n\tnetID := decoded[0]\n\tprivKeyBytes := decoded[1 : 1+btcec.PrivKeyBytesLen]\n\tprivKey, _ := btcec.PrivKeyFromBytes(btcec.S256(), privKeyBytes)\n\treturn &WIF{privKey, compress, netID}, nil\n}\n\n// String creates the Wallet Import Format string encoding of a WIF structure.\n// See DecodeWIF for a detailed breakdown of the format and requirements of\n// a valid WIF string.\nfunc (w *WIF) String() string {\n\t// Precalculate size.  Maximum number of bytes before base58 encoding\n\t// is one byte for the network, 32 bytes of private key, possibly one\n\t// extra byte if the pubkey is to be compressed, and finally four\n\t// bytes of checksum.\n\tencodeLen := 1 + btcec.PrivKeyBytesLen + 4\n\tif w.CompressPubKey {\n\t\tencodeLen++\n\t}\n\n\ta := make([]byte, 0, encodeLen)\n\ta = append(a, w.netID)\n\t// Pad and append bytes manually, instead of using Serialize, to\n\t// avoid another call to make.\n\ta = paddedAppend(btcec.PrivKeyBytesLen, a, w.PrivKey.D.Bytes())\n\tif w.CompressPubKey {\n\t\ta = append(a, compressMagic)\n\t}\n\tcksum := chainhash.DoubleHashB(a)[:4]\n\ta = append(a, cksum...)\n\treturn base58.Encode(a)\n}\n\n// SerializePubKey serializes the associated public key of the imported or\n// exported private key in either a compressed or uncompressed format.  The\n// serialization format chosen depends on the value of w.CompressPubKey.\nfunc (w *WIF) SerializePubKey() []byte {\n\tpk := (*btcec.PublicKey)(&w.PrivKey.PublicKey)\n\tif w.CompressPubKey {\n\t\treturn pk.SerializeCompressed()\n\t}\n\treturn pk.SerializeUncompressed()\n}\n\n// paddedAppend appends the src byte slice to dst, returning the new slice.\n// If the length of the source is smaller than the passed size, leading zero\n// bytes are appended to the dst slice before appending src.\nfunc paddedAppend(size uint, dst, src []byte) []byte {\n\tfor i := 0; i < int(size)-len(src); i++ {\n\t\tdst = append(dst, 0)\n\t}\n\treturn append(dst, src...)\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/LICENSE",
    "content": "ISC License\n\nCopyright (c) 2013-2017 The btcsuite developers\nCopyright (c) 2015-2016 The Decred developers\nCopyright (c) 2018 The bcext developers\n\nPermission to use, copy, modify, and distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\nOR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/btcec/README.md",
    "content": "btcec\n=====\n\n[![Build Status](https://travis-ci.org/bcext/gcash.png?branch=master)](https://travis-ci.org/bcext/btcec)\n[![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org)\n[![GoDoc](https://godoc.org/github.com/bcext/gcash/btcec?status.png)](http://godoc.org/github.com/bcext/gcash/btcec)\n\nPackage btcec implements elliptic curve cryptography needed for working with\nBitcoin (secp256k1 only for now). It is designed so that it may be used with the\nstandard crypto/ecdsa packages provided with go.  A comprehensive suite of test\nis provided to ensure proper functionality.  Package btcec was originally based\non work from ThePiachu which is licensed under the same terms as Go, but it has\nsignficantly diverged since then.  The btcsuite developers original is licensed\nunder the liberal ISC license.\n\nAlthough this package was primarily written for btcd, it has intentionally been\ndesigned so it can be used as a standalone package for any projects needing to\nuse secp256k1 elliptic curve cryptography.\n\n## Installation and Updating\n\n```bash\n$ go get -u github.com/bcext/gcash/btcec\n```\n\n## Examples\n\n* [Sign Message](http://godoc.org/github.com/bcext/gcash/btcec#example-package--SignMessage)  \n  Demonstrates signing a message with a secp256k1 private key that is first\n  parsed form raw bytes and serializing the generated signature.\n\n* [Verify Signature](http://godoc.org/github.com/bcext/gcash/btcec#example-package--VerifySignature)  \n  Demonstrates verifying a secp256k1 signature against a public key that is\n  first parsed from raw bytes.  The signature is also parsed from raw bytes.\n\n* [Encryption](http://godoc.org/github.com/bcext/gcash/btcec#example-package--EncryptMessage)\n  Demonstrates encrypting a message for a public key that is first parsed from\n  raw bytes, then decrypting it using the corresponding private key.\n\n* [Decryption](http://godoc.org/github.com/bcext/gcash/btcec#example-package--DecryptMessage)\n  Demonstrates decrypting a message using a private key that is first parsed\n  from raw bytes.\n\n## GPG Verification Key\n\nAll official release tags are signed by Conformal so users can ensure the code\nhas not been tampered with and is coming from the btcsuite developers.  To\nverify the signature perform the following:\n\n- Download the public key from the Conformal website at\n  https://opensource.conformal.com/GIT-GPG-KEY-conformal.txt\n\n- Import the public key into your GPG keyring:\n  ```bash\n  gpg --import GIT-GPG-KEY-conformal.txt\n  ```\n\n- Verify the release tag with the following command where `TAG_NAME` is a\n  placeholder for the specific tag:\n  ```bash\n  git tag -v TAG_NAME\n  ```\n\n## License\n\nPackage btcec is licensed under the [copyfree](http://copyfree.org) ISC License\nexcept for btcec.go and btcec_test.go which is under the same license as Go.\n\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/btcec/btcec.go",
    "content": "// Copyright 2010 The Go Authors. All rights reserved.\n// Copyright 2011 ThePiachu. All rights reserved.\n// Copyright 2013-2014 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcec\n\n// References:\n//   [SECG]: Recommended Elliptic Curve Domain Parameters\n//     http://www.secg.org/sec2-v2.pdf\n//\n//   [GECC]: Guide to Elliptic Curve Cryptography (Hankerson, Menezes, Vanstone)\n\n// This package operates, internally, on Jacobian coordinates. For a given\n// (x, y) position on the curve, the Jacobian coordinates are (x1, y1, z1)\n// where x = x1/z1² and y = y1/z1³. The greatest speedups come when the whole\n// calculation can be performed within the transform (as in ScalarMult and\n// ScalarBaseMult). But even for Add and Double, it's faster to apply and\n// reverse the transform than to operate in affine coordinates.\n\nimport (\n\t\"crypto/elliptic\"\n\t\"math/big\"\n\t\"sync\"\n)\n\nvar (\n\t// fieldOne is simply the integer 1 in field representation.  It is\n\t// used to avoid needing to create it multiple times during the internal\n\t// arithmetic.\n\tfieldOne = new(fieldVal).SetInt(1)\n)\n\n// KoblitzCurve supports a koblitz curve implementation that fits the ECC Curve\n// interface from crypto/elliptic.\ntype KoblitzCurve struct {\n\t*elliptic.CurveParams\n\tq         *big.Int\n\tH         int      // cofactor of the curve.\n\thalfOrder *big.Int // half the order N\n\n\t// byteSize is simply the bit size / 8 and is provided for convenience\n\t// since it is calculated repeatedly.\n\tbyteSize int\n\n\t// bytePoints\n\tbytePoints *[32][256][3]fieldVal\n\n\t// The next 6 values are used specifically for endomorphism\n\t// optimizations in ScalarMult.\n\n\t// lambda must fulfill lambda^3 = 1 mod N where N is the order of G.\n\tlambda *big.Int\n\n\t// beta must fulfill beta^3 = 1 mod P where P is the prime field of the\n\t// curve.\n\tbeta *fieldVal\n\n\t// See the EndomorphismVectors in gensecp256k1.go to see how these are\n\t// derived.\n\ta1 *big.Int\n\tb1 *big.Int\n\ta2 *big.Int\n\tb2 *big.Int\n}\n\n// Params returns the parameters for the curve.\nfunc (curve *KoblitzCurve) Params() *elliptic.CurveParams {\n\treturn curve.CurveParams\n}\n\n// bigAffineToField takes an affine point (x, y) as big integers and converts\n// it to an affine point as field values.\nfunc (curve *KoblitzCurve) bigAffineToField(x, y *big.Int) (*fieldVal, *fieldVal) {\n\tx3, y3 := new(fieldVal), new(fieldVal)\n\tx3.SetByteSlice(x.Bytes())\n\ty3.SetByteSlice(y.Bytes())\n\n\treturn x3, y3\n}\n\n// fieldJacobianToBigAffine takes a Jacobian point (x, y, z) as field values and\n// converts it to an affine point as big integers.\nfunc (curve *KoblitzCurve) fieldJacobianToBigAffine(x, y, z *fieldVal) (*big.Int, *big.Int) {\n\t// Inversions are expensive and both point addition and point doubling\n\t// are faster when working with points that have a z value of one.  So,\n\t// if the point needs to be converted to affine, go ahead and normalize\n\t// the point itself at the same time as the calculation is the same.\n\tvar zInv, tempZ fieldVal\n\tzInv.Set(z).Inverse()   // zInv = Z^-1\n\ttempZ.SquareVal(&zInv)  // tempZ = Z^-2\n\tx.Mul(&tempZ)           // X = X/Z^2 (mag: 1)\n\ty.Mul(tempZ.Mul(&zInv)) // Y = Y/Z^3 (mag: 1)\n\tz.SetInt(1)             // Z = 1 (mag: 1)\n\n\t// Normalize the x and y values.\n\tx.Normalize()\n\ty.Normalize()\n\n\t// Convert the field values for the now affine point to big.Ints.\n\tx3, y3 := new(big.Int), new(big.Int)\n\tx3.SetBytes(x.Bytes()[:])\n\ty3.SetBytes(y.Bytes()[:])\n\treturn x3, y3\n}\n\n// IsOnCurve returns boolean if the point (x,y) is on the curve.\n// Part of the elliptic.Curve interface. This function differs from the\n// crypto/elliptic algorithm since a = 0 not -3.\nfunc (curve *KoblitzCurve) IsOnCurve(x, y *big.Int) bool {\n\t// Convert big ints to field values for faster arithmetic.\n\tfx, fy := curve.bigAffineToField(x, y)\n\n\t// Elliptic curve equation for secp256k1 is: y^2 = x^3 + 7\n\ty2 := new(fieldVal).SquareVal(fy).Normalize()\n\tresult := new(fieldVal).SquareVal(fx).Mul(fx).AddInt(7).Normalize()\n\treturn y2.Equals(result)\n}\n\n// addZ1AndZ2EqualsOne adds two Jacobian points that are already known to have\n// z values of 1 and stores the result in (x3, y3, z3).  That is to say\n// (x1, y1, 1) + (x2, y2, 1) = (x3, y3, z3).  It performs faster addition than\n// the generic add routine since less arithmetic is needed due to the ability to\n// avoid the z value multiplications.\nfunc (curve *KoblitzCurve) addZ1AndZ2EqualsOne(x1, y1, z1, x2, y2, x3, y3, z3 *fieldVal) {\n\t// To compute the point addition efficiently, this implementation splits\n\t// the equation into intermediate elements which are used to minimize\n\t// the number of field multiplications using the method shown at:\n\t// http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#addition-mmadd-2007-bl\n\t//\n\t// In particular it performs the calculations using the following:\n\t// H = X2-X1, HH = H^2, I = 4*HH, J = H*I, r = 2*(Y2-Y1), V = X1*I\n\t// X3 = r^2-J-2*V, Y3 = r*(V-X3)-2*Y1*J, Z3 = 2*H\n\t//\n\t// This results in a cost of 4 field multiplications, 2 field squarings,\n\t// 6 field additions, and 5 integer multiplications.\n\n\t// When the x coordinates are the same for two points on the curve, the\n\t// y coordinates either must be the same, in which case it is point\n\t// doubling, or they are opposite and the result is the point at\n\t// infinity per the group law for elliptic curve cryptography.\n\tx1.Normalize()\n\ty1.Normalize()\n\tx2.Normalize()\n\ty2.Normalize()\n\tif x1.Equals(x2) {\n\t\tif y1.Equals(y2) {\n\t\t\t// Since x1 == x2 and y1 == y2, point doubling must be\n\t\t\t// done, otherwise the addition would end up dividing\n\t\t\t// by zero.\n\t\t\tcurve.doubleJacobian(x1, y1, z1, x3, y3, z3)\n\t\t\treturn\n\t\t}\n\n\t\t// Since x1 == x2 and y1 == -y2, the sum is the point at\n\t\t// infinity per the group law.\n\t\tx3.SetInt(0)\n\t\ty3.SetInt(0)\n\t\tz3.SetInt(0)\n\t\treturn\n\t}\n\n\t// Calculate X3, Y3, and Z3 according to the intermediate elements\n\t// breakdown above.\n\tvar h, i, j, r, v fieldVal\n\tvar negJ, neg2V, negX3 fieldVal\n\th.Set(x1).Negate(1).Add(x2)                // H = X2-X1 (mag: 3)\n\ti.SquareVal(&h).MulInt(4)                  // I = 4*H^2 (mag: 4)\n\tj.Mul2(&h, &i)                             // J = H*I (mag: 1)\n\tr.Set(y1).Negate(1).Add(y2).MulInt(2)      // r = 2*(Y2-Y1) (mag: 6)\n\tv.Mul2(x1, &i)                             // V = X1*I (mag: 1)\n\tnegJ.Set(&j).Negate(1)                     // negJ = -J (mag: 2)\n\tneg2V.Set(&v).MulInt(2).Negate(2)          // neg2V = -(2*V) (mag: 3)\n\tx3.Set(&r).Square().Add(&negJ).Add(&neg2V) // X3 = r^2-J-2*V (mag: 6)\n\tnegX3.Set(x3).Negate(6)                    // negX3 = -X3 (mag: 7)\n\tj.Mul(y1).MulInt(2).Negate(2)              // J = -(2*Y1*J) (mag: 3)\n\ty3.Set(&v).Add(&negX3).Mul(&r).Add(&j)     // Y3 = r*(V-X3)-2*Y1*J (mag: 4)\n\tz3.Set(&h).MulInt(2)                       // Z3 = 2*H (mag: 6)\n\n\t// Normalize the resulting field values to a magnitude of 1 as needed.\n\tx3.Normalize()\n\ty3.Normalize()\n\tz3.Normalize()\n}\n\n// addZ1EqualsZ2 adds two Jacobian points that are already known to have the\n// same z value and stores the result in (x3, y3, z3).  That is to say\n// (x1, y1, z1) + (x2, y2, z1) = (x3, y3, z3).  It performs faster addition than\n// the generic add routine since less arithmetic is needed due to the known\n// equivalence.\nfunc (curve *KoblitzCurve) addZ1EqualsZ2(x1, y1, z1, x2, y2, x3, y3, z3 *fieldVal) {\n\t// To compute the point addition efficiently, this implementation splits\n\t// the equation into intermediate elements which are used to minimize\n\t// the number of field multiplications using a slightly modified version\n\t// of the method shown at:\n\t// http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#addition-mmadd-2007-bl\n\t//\n\t// In particular it performs the calculations using the following:\n\t// A = X2-X1, B = A^2, C=Y2-Y1, D = C^2, E = X1*B, F = X2*B\n\t// X3 = D-E-F, Y3 = C*(E-X3)-Y1*(F-E), Z3 = Z1*A\n\t//\n\t// This results in a cost of 5 field multiplications, 2 field squarings,\n\t// 9 field additions, and 0 integer multiplications.\n\n\t// When the x coordinates are the same for two points on the curve, the\n\t// y coordinates either must be the same, in which case it is point\n\t// doubling, or they are opposite and the result is the point at\n\t// infinity per the group law for elliptic curve cryptography.\n\tx1.Normalize()\n\ty1.Normalize()\n\tx2.Normalize()\n\ty2.Normalize()\n\tif x1.Equals(x2) {\n\t\tif y1.Equals(y2) {\n\t\t\t// Since x1 == x2 and y1 == y2, point doubling must be\n\t\t\t// done, otherwise the addition would end up dividing\n\t\t\t// by zero.\n\t\t\tcurve.doubleJacobian(x1, y1, z1, x3, y3, z3)\n\t\t\treturn\n\t\t}\n\n\t\t// Since x1 == x2 and y1 == -y2, the sum is the point at\n\t\t// infinity per the group law.\n\t\tx3.SetInt(0)\n\t\ty3.SetInt(0)\n\t\tz3.SetInt(0)\n\t\treturn\n\t}\n\n\t// Calculate X3, Y3, and Z3 according to the intermediate elements\n\t// breakdown above.\n\tvar a, b, c, d, e, f fieldVal\n\tvar negX1, negY1, negE, negX3 fieldVal\n\tnegX1.Set(x1).Negate(1)                // negX1 = -X1 (mag: 2)\n\tnegY1.Set(y1).Negate(1)                // negY1 = -Y1 (mag: 2)\n\ta.Set(&negX1).Add(x2)                  // A = X2-X1 (mag: 3)\n\tb.SquareVal(&a)                        // B = A^2 (mag: 1)\n\tc.Set(&negY1).Add(y2)                  // C = Y2-Y1 (mag: 3)\n\td.SquareVal(&c)                        // D = C^2 (mag: 1)\n\te.Mul2(x1, &b)                         // E = X1*B (mag: 1)\n\tnegE.Set(&e).Negate(1)                 // negE = -E (mag: 2)\n\tf.Mul2(x2, &b)                         // F = X2*B (mag: 1)\n\tx3.Add2(&e, &f).Negate(3).Add(&d)      // X3 = D-E-F (mag: 5)\n\tnegX3.Set(x3).Negate(5).Normalize()    // negX3 = -X3 (mag: 1)\n\ty3.Set(y1).Mul(f.Add(&negE)).Negate(3) // Y3 = -(Y1*(F-E)) (mag: 4)\n\ty3.Add(e.Add(&negX3).Mul(&c))          // Y3 = C*(E-X3)+Y3 (mag: 5)\n\tz3.Mul2(z1, &a)                        // Z3 = Z1*A (mag: 1)\n\n\t// Normalize the resulting field values to a magnitude of 1 as needed.\n\tx3.Normalize()\n\ty3.Normalize()\n}\n\n// addZ2EqualsOne adds two Jacobian points when the second point is already\n// known to have a z value of 1 (and the z value for the first point is not 1)\n// and stores the result in (x3, y3, z3).  That is to say (x1, y1, z1) +\n// (x2, y2, 1) = (x3, y3, z3).  It performs faster addition than the generic\n// add routine since less arithmetic is needed due to the ability to avoid\n// multiplications by the second point's z value.\nfunc (curve *KoblitzCurve) addZ2EqualsOne(x1, y1, z1, x2, y2, x3, y3, z3 *fieldVal) {\n\t// To compute the point addition efficiently, this implementation splits\n\t// the equation into intermediate elements which are used to minimize\n\t// the number of field multiplications using the method shown at:\n\t// http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#addition-madd-2007-bl\n\t//\n\t// In particular it performs the calculations using the following:\n\t// Z1Z1 = Z1^2, U2 = X2*Z1Z1, S2 = Y2*Z1*Z1Z1, H = U2-X1, HH = H^2,\n\t// I = 4*HH, J = H*I, r = 2*(S2-Y1), V = X1*I\n\t// X3 = r^2-J-2*V, Y3 = r*(V-X3)-2*Y1*J, Z3 = (Z1+H)^2-Z1Z1-HH\n\t//\n\t// This results in a cost of 7 field multiplications, 4 field squarings,\n\t// 9 field additions, and 4 integer multiplications.\n\n\t// When the x coordinates are the same for two points on the curve, the\n\t// y coordinates either must be the same, in which case it is point\n\t// doubling, or they are opposite and the result is the point at\n\t// infinity per the group law for elliptic curve cryptography.  Since\n\t// any number of Jacobian coordinates can represent the same affine\n\t// point, the x and y values need to be converted to like terms.  Due to\n\t// the assumption made for this function that the second point has a z\n\t// value of 1 (z2=1), the first point is already \"converted\".\n\tvar z1z1, u2, s2 fieldVal\n\tx1.Normalize()\n\ty1.Normalize()\n\tz1z1.SquareVal(z1)                        // Z1Z1 = Z1^2 (mag: 1)\n\tu2.Set(x2).Mul(&z1z1).Normalize()         // U2 = X2*Z1Z1 (mag: 1)\n\ts2.Set(y2).Mul(&z1z1).Mul(z1).Normalize() // S2 = Y2*Z1*Z1Z1 (mag: 1)\n\tif x1.Equals(&u2) {\n\t\tif y1.Equals(&s2) {\n\t\t\t// Since x1 == x2 and y1 == y2, point doubling must be\n\t\t\t// done, otherwise the addition would end up dividing\n\t\t\t// by zero.\n\t\t\tcurve.doubleJacobian(x1, y1, z1, x3, y3, z3)\n\t\t\treturn\n\t\t}\n\n\t\t// Since x1 == x2 and y1 == -y2, the sum is the point at\n\t\t// infinity per the group law.\n\t\tx3.SetInt(0)\n\t\ty3.SetInt(0)\n\t\tz3.SetInt(0)\n\t\treturn\n\t}\n\n\t// Calculate X3, Y3, and Z3 according to the intermediate elements\n\t// breakdown above.\n\tvar h, hh, i, j, r, rr, v fieldVal\n\tvar negX1, negY1, negX3 fieldVal\n\tnegX1.Set(x1).Negate(1)                // negX1 = -X1 (mag: 2)\n\th.Add2(&u2, &negX1)                    // H = U2-X1 (mag: 3)\n\thh.SquareVal(&h)                       // HH = H^2 (mag: 1)\n\ti.Set(&hh).MulInt(4)                   // I = 4 * HH (mag: 4)\n\tj.Mul2(&h, &i)                         // J = H*I (mag: 1)\n\tnegY1.Set(y1).Negate(1)                // negY1 = -Y1 (mag: 2)\n\tr.Set(&s2).Add(&negY1).MulInt(2)       // r = 2*(S2-Y1) (mag: 6)\n\trr.SquareVal(&r)                       // rr = r^2 (mag: 1)\n\tv.Mul2(x1, &i)                         // V = X1*I (mag: 1)\n\tx3.Set(&v).MulInt(2).Add(&j).Negate(3) // X3 = -(J+2*V) (mag: 4)\n\tx3.Add(&rr)                            // X3 = r^2+X3 (mag: 5)\n\tnegX3.Set(x3).Negate(5)                // negX3 = -X3 (mag: 6)\n\ty3.Set(y1).Mul(&j).MulInt(2).Negate(2) // Y3 = -(2*Y1*J) (mag: 3)\n\ty3.Add(v.Add(&negX3).Mul(&r))          // Y3 = r*(V-X3)+Y3 (mag: 4)\n\tz3.Add2(z1, &h).Square()               // Z3 = (Z1+H)^2 (mag: 1)\n\tz3.Add(z1z1.Add(&hh).Negate(2))        // Z3 = Z3-(Z1Z1+HH) (mag: 4)\n\n\t// Normalize the resulting field values to a magnitude of 1 as needed.\n\tx3.Normalize()\n\ty3.Normalize()\n\tz3.Normalize()\n}\n\n// addGeneric adds two Jacobian points (x1, y1, z1) and (x2, y2, z2) without any\n// assumptions about the z values of the two points and stores the result in\n// (x3, y3, z3).  That is to say (x1, y1, z1) + (x2, y2, z2) = (x3, y3, z3).  It\n// is the slowest of the add routines due to requiring the most arithmetic.\nfunc (curve *KoblitzCurve) addGeneric(x1, y1, z1, x2, y2, z2, x3, y3, z3 *fieldVal) {\n\t// To compute the point addition efficiently, this implementation splits\n\t// the equation into intermediate elements which are used to minimize\n\t// the number of field multiplications using the method shown at:\n\t// http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#addition-add-2007-bl\n\t//\n\t// In particular it performs the calculations using the following:\n\t// Z1Z1 = Z1^2, Z2Z2 = Z2^2, U1 = X1*Z2Z2, U2 = X2*Z1Z1, S1 = Y1*Z2*Z2Z2\n\t// S2 = Y2*Z1*Z1Z1, H = U2-U1, I = (2*H)^2, J = H*I, r = 2*(S2-S1)\n\t// V = U1*I\n\t// X3 = r^2-J-2*V, Y3 = r*(V-X3)-2*S1*J, Z3 = ((Z1+Z2)^2-Z1Z1-Z2Z2)*H\n\t//\n\t// This results in a cost of 11 field multiplications, 5 field squarings,\n\t// 9 field additions, and 4 integer multiplications.\n\n\t// When the x coordinates are the same for two points on the curve, the\n\t// y coordinates either must be the same, in which case it is point\n\t// doubling, or they are opposite and the result is the point at\n\t// infinity.  Since any number of Jacobian coordinates can represent the\n\t// same affine point, the x and y values need to be converted to like\n\t// terms.\n\tvar z1z1, z2z2, u1, u2, s1, s2 fieldVal\n\tz1z1.SquareVal(z1)                        // Z1Z1 = Z1^2 (mag: 1)\n\tz2z2.SquareVal(z2)                        // Z2Z2 = Z2^2 (mag: 1)\n\tu1.Set(x1).Mul(&z2z2).Normalize()         // U1 = X1*Z2Z2 (mag: 1)\n\tu2.Set(x2).Mul(&z1z1).Normalize()         // U2 = X2*Z1Z1 (mag: 1)\n\ts1.Set(y1).Mul(&z2z2).Mul(z2).Normalize() // S1 = Y1*Z2*Z2Z2 (mag: 1)\n\ts2.Set(y2).Mul(&z1z1).Mul(z1).Normalize() // S2 = Y2*Z1*Z1Z1 (mag: 1)\n\tif u1.Equals(&u2) {\n\t\tif s1.Equals(&s2) {\n\t\t\t// Since x1 == x2 and y1 == y2, point doubling must be\n\t\t\t// done, otherwise the addition would end up dividing\n\t\t\t// by zero.\n\t\t\tcurve.doubleJacobian(x1, y1, z1, x3, y3, z3)\n\t\t\treturn\n\t\t}\n\n\t\t// Since x1 == x2 and y1 == -y2, the sum is the point at\n\t\t// infinity per the group law.\n\t\tx3.SetInt(0)\n\t\ty3.SetInt(0)\n\t\tz3.SetInt(0)\n\t\treturn\n\t}\n\n\t// Calculate X3, Y3, and Z3 according to the intermediate elements\n\t// breakdown above.\n\tvar h, i, j, r, rr, v fieldVal\n\tvar negU1, negS1, negX3 fieldVal\n\tnegU1.Set(&u1).Negate(1)               // negU1 = -U1 (mag: 2)\n\th.Add2(&u2, &negU1)                    // H = U2-U1 (mag: 3)\n\ti.Set(&h).MulInt(2).Square()           // I = (2*H)^2 (mag: 2)\n\tj.Mul2(&h, &i)                         // J = H*I (mag: 1)\n\tnegS1.Set(&s1).Negate(1)               // negS1 = -S1 (mag: 2)\n\tr.Set(&s2).Add(&negS1).MulInt(2)       // r = 2*(S2-S1) (mag: 6)\n\trr.SquareVal(&r)                       // rr = r^2 (mag: 1)\n\tv.Mul2(&u1, &i)                        // V = U1*I (mag: 1)\n\tx3.Set(&v).MulInt(2).Add(&j).Negate(3) // X3 = -(J+2*V) (mag: 4)\n\tx3.Add(&rr)                            // X3 = r^2+X3 (mag: 5)\n\tnegX3.Set(x3).Negate(5)                // negX3 = -X3 (mag: 6)\n\ty3.Mul2(&s1, &j).MulInt(2).Negate(2)   // Y3 = -(2*S1*J) (mag: 3)\n\ty3.Add(v.Add(&negX3).Mul(&r))          // Y3 = r*(V-X3)+Y3 (mag: 4)\n\tz3.Add2(z1, z2).Square()               // Z3 = (Z1+Z2)^2 (mag: 1)\n\tz3.Add(z1z1.Add(&z2z2).Negate(2))      // Z3 = Z3-(Z1Z1+Z2Z2) (mag: 4)\n\tz3.Mul(&h)                             // Z3 = Z3*H (mag: 1)\n\n\t// Normalize the resulting field values to a magnitude of 1 as needed.\n\tx3.Normalize()\n\ty3.Normalize()\n}\n\n// addJacobian adds the passed Jacobian points (x1, y1, z1) and (x2, y2, z2)\n// together and stores the result in (x3, y3, z3).\nfunc (curve *KoblitzCurve) addJacobian(x1, y1, z1, x2, y2, z2, x3, y3, z3 *fieldVal) {\n\t// A point at infinity is the identity according to the group law for\n\t// elliptic curve cryptography.  Thus, ∞ + P = P and P + ∞ = P.\n\tif (x1.IsZero() && y1.IsZero()) || z1.IsZero() {\n\t\tx3.Set(x2)\n\t\ty3.Set(y2)\n\t\tz3.Set(z2)\n\t\treturn\n\t}\n\tif (x2.IsZero() && y2.IsZero()) || z2.IsZero() {\n\t\tx3.Set(x1)\n\t\ty3.Set(y1)\n\t\tz3.Set(z1)\n\t\treturn\n\t}\n\n\t// Faster point addition can be achieved when certain assumptions are\n\t// met.  For example, when both points have the same z value, arithmetic\n\t// on the z values can be avoided.  This section thus checks for these\n\t// conditions and calls an appropriate add function which is accelerated\n\t// by using those assumptions.\n\tz1.Normalize()\n\tz2.Normalize()\n\tisZ1One := z1.Equals(fieldOne)\n\tisZ2One := z2.Equals(fieldOne)\n\tswitch {\n\tcase isZ1One && isZ2One:\n\t\tcurve.addZ1AndZ2EqualsOne(x1, y1, z1, x2, y2, x3, y3, z3)\n\t\treturn\n\tcase z1.Equals(z2):\n\t\tcurve.addZ1EqualsZ2(x1, y1, z1, x2, y2, x3, y3, z3)\n\t\treturn\n\tcase isZ2One:\n\t\tcurve.addZ2EqualsOne(x1, y1, z1, x2, y2, x3, y3, z3)\n\t\treturn\n\t}\n\n\t// None of the above assumptions are true, so fall back to generic\n\t// point addition.\n\tcurve.addGeneric(x1, y1, z1, x2, y2, z2, x3, y3, z3)\n}\n\n// Add returns the sum of (x1,y1) and (x2,y2). Part of the elliptic.Curve\n// interface.\nfunc (curve *KoblitzCurve) Add(x1, y1, x2, y2 *big.Int) (*big.Int, *big.Int) {\n\t// A point at infinity is the identity according to the group law for\n\t// elliptic curve cryptography.  Thus, ∞ + P = P and P + ∞ = P.\n\tif x1.Sign() == 0 && y1.Sign() == 0 {\n\t\treturn x2, y2\n\t}\n\tif x2.Sign() == 0 && y2.Sign() == 0 {\n\t\treturn x1, y1\n\t}\n\n\t// Convert the affine coordinates from big integers to field values\n\t// and do the point addition in Jacobian projective space.\n\tfx1, fy1 := curve.bigAffineToField(x1, y1)\n\tfx2, fy2 := curve.bigAffineToField(x2, y2)\n\tfx3, fy3, fz3 := new(fieldVal), new(fieldVal), new(fieldVal)\n\tfOne := new(fieldVal).SetInt(1)\n\tcurve.addJacobian(fx1, fy1, fOne, fx2, fy2, fOne, fx3, fy3, fz3)\n\n\t// Convert the Jacobian coordinate field values back to affine big\n\t// integers.\n\treturn curve.fieldJacobianToBigAffine(fx3, fy3, fz3)\n}\n\n// doubleZ1EqualsOne performs point doubling on the passed Jacobian point\n// when the point is already known to have a z value of 1 and stores\n// the result in (x3, y3, z3).  That is to say (x3, y3, z3) = 2*(x1, y1, 1).  It\n// performs faster point doubling than the generic routine since less arithmetic\n// is needed due to the ability to avoid multiplication by the z value.\nfunc (curve *KoblitzCurve) doubleZ1EqualsOne(x1, y1, x3, y3, z3 *fieldVal) {\n\t// This function uses the assumptions that z1 is 1, thus the point\n\t// doubling formulas reduce to:\n\t//\n\t// X3 = (3*X1^2)^2 - 8*X1*Y1^2\n\t// Y3 = (3*X1^2)*(4*X1*Y1^2 - X3) - 8*Y1^4\n\t// Z3 = 2*Y1\n\t//\n\t// To compute the above efficiently, this implementation splits the\n\t// equation into intermediate elements which are used to minimize the\n\t// number of field multiplications in favor of field squarings which\n\t// are roughly 35% faster than field multiplications with the current\n\t// implementation at the time this was written.\n\t//\n\t// This uses a slightly modified version of the method shown at:\n\t// http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#doubling-mdbl-2007-bl\n\t//\n\t// In particular it performs the calculations using the following:\n\t// A = X1^2, B = Y1^2, C = B^2, D = 2*((X1+B)^2-A-C)\n\t// E = 3*A, F = E^2, X3 = F-2*D, Y3 = E*(D-X3)-8*C\n\t// Z3 = 2*Y1\n\t//\n\t// This results in a cost of 1 field multiplication, 5 field squarings,\n\t// 6 field additions, and 5 integer multiplications.\n\tvar a, b, c, d, e, f fieldVal\n\tz3.Set(y1).MulInt(2)                     // Z3 = 2*Y1 (mag: 2)\n\ta.SquareVal(x1)                          // A = X1^2 (mag: 1)\n\tb.SquareVal(y1)                          // B = Y1^2 (mag: 1)\n\tc.SquareVal(&b)                          // C = B^2 (mag: 1)\n\tb.Add(x1).Square()                       // B = (X1+B)^2 (mag: 1)\n\td.Set(&a).Add(&c).Negate(2)              // D = -(A+C) (mag: 3)\n\td.Add(&b).MulInt(2)                      // D = 2*(B+D)(mag: 8)\n\te.Set(&a).MulInt(3)                      // E = 3*A (mag: 3)\n\tf.SquareVal(&e)                          // F = E^2 (mag: 1)\n\tx3.Set(&d).MulInt(2).Negate(16)          // X3 = -(2*D) (mag: 17)\n\tx3.Add(&f)                               // X3 = F+X3 (mag: 18)\n\tf.Set(x3).Negate(18).Add(&d).Normalize() // F = D-X3 (mag: 1)\n\ty3.Set(&c).MulInt(8).Negate(8)           // Y3 = -(8*C) (mag: 9)\n\ty3.Add(f.Mul(&e))                        // Y3 = E*F+Y3 (mag: 10)\n\n\t// Normalize the field values back to a magnitude of 1.\n\tx3.Normalize()\n\ty3.Normalize()\n\tz3.Normalize()\n}\n\n// doubleGeneric performs point doubling on the passed Jacobian point without\n// any assumptions about the z value and stores the result in (x3, y3, z3).\n// That is to say (x3, y3, z3) = 2*(x1, y1, z1).  It is the slowest of the point\n// doubling routines due to requiring the most arithmetic.\nfunc (curve *KoblitzCurve) doubleGeneric(x1, y1, z1, x3, y3, z3 *fieldVal) {\n\t// Point doubling formula for Jacobian coordinates for the secp256k1\n\t// curve:\n\t// X3 = (3*X1^2)^2 - 8*X1*Y1^2\n\t// Y3 = (3*X1^2)*(4*X1*Y1^2 - X3) - 8*Y1^4\n\t// Z3 = 2*Y1*Z1\n\t//\n\t// To compute the above efficiently, this implementation splits the\n\t// equation into intermediate elements which are used to minimize the\n\t// number of field multiplications in favor of field squarings which\n\t// are roughly 35% faster than field multiplications with the current\n\t// implementation at the time this was written.\n\t//\n\t// This uses a slightly modified version of the method shown at:\n\t// http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#doubling-dbl-2009-l\n\t//\n\t// In particular it performs the calculations using the following:\n\t// A = X1^2, B = Y1^2, C = B^2, D = 2*((X1+B)^2-A-C)\n\t// E = 3*A, F = E^2, X3 = F-2*D, Y3 = E*(D-X3)-8*C\n\t// Z3 = 2*Y1*Z1\n\t//\n\t// This results in a cost of 1 field multiplication, 5 field squarings,\n\t// 6 field additions, and 5 integer multiplications.\n\tvar a, b, c, d, e, f fieldVal\n\tz3.Mul2(y1, z1).MulInt(2)                // Z3 = 2*Y1*Z1 (mag: 2)\n\ta.SquareVal(x1)                          // A = X1^2 (mag: 1)\n\tb.SquareVal(y1)                          // B = Y1^2 (mag: 1)\n\tc.SquareVal(&b)                          // C = B^2 (mag: 1)\n\tb.Add(x1).Square()                       // B = (X1+B)^2 (mag: 1)\n\td.Set(&a).Add(&c).Negate(2)              // D = -(A+C) (mag: 3)\n\td.Add(&b).MulInt(2)                      // D = 2*(B+D)(mag: 8)\n\te.Set(&a).MulInt(3)                      // E = 3*A (mag: 3)\n\tf.SquareVal(&e)                          // F = E^2 (mag: 1)\n\tx3.Set(&d).MulInt(2).Negate(16)          // X3 = -(2*D) (mag: 17)\n\tx3.Add(&f)                               // X3 = F+X3 (mag: 18)\n\tf.Set(x3).Negate(18).Add(&d).Normalize() // F = D-X3 (mag: 1)\n\ty3.Set(&c).MulInt(8).Negate(8)           // Y3 = -(8*C) (mag: 9)\n\ty3.Add(f.Mul(&e))                        // Y3 = E*F+Y3 (mag: 10)\n\n\t// Normalize the field values back to a magnitude of 1.\n\tx3.Normalize()\n\ty3.Normalize()\n\tz3.Normalize()\n}\n\n// doubleJacobian doubles the passed Jacobian point (x1, y1, z1) and stores the\n// result in (x3, y3, z3).\nfunc (curve *KoblitzCurve) doubleJacobian(x1, y1, z1, x3, y3, z3 *fieldVal) {\n\t// Doubling a point at infinity is still infinity.\n\tif y1.IsZero() || z1.IsZero() {\n\t\tx3.SetInt(0)\n\t\ty3.SetInt(0)\n\t\tz3.SetInt(0)\n\t\treturn\n\t}\n\n\t// Slightly faster point doubling can be achieved when the z value is 1\n\t// by avoiding the multiplication on the z value.  This section calls\n\t// a point doubling function which is accelerated by using that\n\t// assumption when possible.\n\tif z1.Normalize().Equals(fieldOne) {\n\t\tcurve.doubleZ1EqualsOne(x1, y1, x3, y3, z3)\n\t\treturn\n\t}\n\n\t// Fall back to generic point doubling which works with arbitrary z\n\t// values.\n\tcurve.doubleGeneric(x1, y1, z1, x3, y3, z3)\n}\n\n// Double returns 2*(x1,y1). Part of the elliptic.Curve interface.\nfunc (curve *KoblitzCurve) Double(x1, y1 *big.Int) (*big.Int, *big.Int) {\n\tif y1.Sign() == 0 {\n\t\treturn new(big.Int), new(big.Int)\n\t}\n\n\t// Convert the affine coordinates from big integers to field values\n\t// and do the point doubling in Jacobian projective space.\n\tfx1, fy1 := curve.bigAffineToField(x1, y1)\n\tfx3, fy3, fz3 := new(fieldVal), new(fieldVal), new(fieldVal)\n\tfOne := new(fieldVal).SetInt(1)\n\tcurve.doubleJacobian(fx1, fy1, fOne, fx3, fy3, fz3)\n\n\t// Convert the Jacobian coordinate field values back to affine big\n\t// integers.\n\treturn curve.fieldJacobianToBigAffine(fx3, fy3, fz3)\n}\n\n// splitK returns a balanced length-two representation of k and their signs.\n// This is algorithm 3.74 from [GECC].\n//\n// One thing of note about this algorithm is that no matter what c1 and c2 are,\n// the final equation of k = k1 + k2 * lambda (mod n) will hold.  This is\n// provable mathematically due to how a1/b1/a2/b2 are computed.\n//\n// c1 and c2 are chosen to minimize the max(k1,k2).\nfunc (curve *KoblitzCurve) splitK(k []byte) ([]byte, []byte, int, int) {\n\t// All math here is done with big.Int, which is slow.\n\t// At some point, it might be useful to write something similar to\n\t// fieldVal but for N instead of P as the prime field if this ends up\n\t// being a bottleneck.\n\tbigIntK := new(big.Int)\n\tc1, c2 := new(big.Int), new(big.Int)\n\ttmp1, tmp2 := new(big.Int), new(big.Int)\n\tk1, k2 := new(big.Int), new(big.Int)\n\n\tbigIntK.SetBytes(k)\n\t// c1 = round(b2 * k / n) from step 4.\n\t// Rounding isn't really necessary and costs too much, hence skipped\n\tc1.Mul(curve.b2, bigIntK)\n\tc1.Div(c1, curve.N)\n\t// c2 = round(b1 * k / n) from step 4 (sign reversed to optimize one step)\n\t// Rounding isn't really necessary and costs too much, hence skipped\n\tc2.Mul(curve.b1, bigIntK)\n\tc2.Div(c2, curve.N)\n\t// k1 = k - c1 * a1 - c2 * a2 from step 5 (note c2's sign is reversed)\n\ttmp1.Mul(c1, curve.a1)\n\ttmp2.Mul(c2, curve.a2)\n\tk1.Sub(bigIntK, tmp1)\n\tk1.Add(k1, tmp2)\n\t// k2 = - c1 * b1 - c2 * b2 from step 5 (note c2's sign is reversed)\n\ttmp1.Mul(c1, curve.b1)\n\ttmp2.Mul(c2, curve.b2)\n\tk2.Sub(tmp2, tmp1)\n\n\t// Note Bytes() throws out the sign of k1 and k2. This matters\n\t// since k1 and/or k2 can be negative. Hence, we pass that\n\t// back separately.\n\treturn k1.Bytes(), k2.Bytes(), k1.Sign(), k2.Sign()\n}\n\n// moduloReduce reduces k from more than 32 bytes to 32 bytes and under.  This\n// is done by doing a simple modulo curve.N.  We can do this since G^N = 1 and\n// thus any other valid point on the elliptic curve has the same order.\nfunc (curve *KoblitzCurve) moduloReduce(k []byte) []byte {\n\t// Since the order of G is curve.N, we can use a much smaller number\n\t// by doing modulo curve.N\n\tif len(k) > curve.byteSize {\n\t\t// Reduce k by performing modulo curve.N.\n\t\ttmpK := new(big.Int).SetBytes(k)\n\t\ttmpK.Mod(tmpK, curve.N)\n\t\treturn tmpK.Bytes()\n\t}\n\n\treturn k\n}\n\n// NAF takes a positive integer k and returns the Non-Adjacent Form (NAF) as two\n// byte slices.  The first is where 1s will be.  The second is where -1s will\n// be.  NAF is convenient in that on average, only 1/3rd of its values are\n// non-zero.  This is algorithm 3.30 from [GECC].\n//\n// Essentially, this makes it possible to minimize the number of operations\n// since the resulting ints returned will be at least 50% 0s.\nfunc NAF(k []byte) ([]byte, []byte) {\n\t// The essence of this algorithm is that whenever we have consecutive 1s\n\t// in the binary, we want to put a -1 in the lowest bit and get a bunch\n\t// of 0s up to the highest bit of consecutive 1s.  This is due to this\n\t// identity:\n\t// 2^n + 2^(n-1) + 2^(n-2) + ... + 2^(n-k) = 2^(n+1) - 2^(n-k)\n\t//\n\t// The algorithm thus may need to go 1 more bit than the length of the\n\t// bits we actually have, hence bits being 1 bit longer than was\n\t// necessary.  Since we need to know whether adding will cause a carry,\n\t// we go from right-to-left in this addition.\n\tvar carry, curIsOne, nextIsOne bool\n\t// these default to zero\n\tretPos := make([]byte, len(k)+1)\n\tretNeg := make([]byte, len(k)+1)\n\tfor i := len(k) - 1; i >= 0; i-- {\n\t\tcurByte := k[i]\n\t\tfor j := uint(0); j < 8; j++ {\n\t\t\tcurIsOne = curByte&1 == 1\n\t\t\tif j == 7 {\n\t\t\t\tif i == 0 {\n\t\t\t\t\tnextIsOne = false\n\t\t\t\t} else {\n\t\t\t\t\tnextIsOne = k[i-1]&1 == 1\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnextIsOne = curByte&2 == 2\n\t\t\t}\n\t\t\tif carry {\n\t\t\t\tif curIsOne {\n\t\t\t\t\t// This bit is 1, so continue to carry\n\t\t\t\t\t// and don't need to do anything.\n\t\t\t\t} else {\n\t\t\t\t\t// We've hit a 0 after some number of\n\t\t\t\t\t// 1s.\n\t\t\t\t\tif nextIsOne {\n\t\t\t\t\t\t// Start carrying again since\n\t\t\t\t\t\t// a new sequence of 1s is\n\t\t\t\t\t\t// starting.\n\t\t\t\t\t\tretNeg[i+1] += 1 << j\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Stop carrying since 1s have\n\t\t\t\t\t\t// stopped.\n\t\t\t\t\t\tcarry = false\n\t\t\t\t\t\tretPos[i+1] += 1 << j\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if curIsOne {\n\t\t\t\tif nextIsOne {\n\t\t\t\t\t// If this is the start of at least 2\n\t\t\t\t\t// consecutive 1s, set the current one\n\t\t\t\t\t// to -1 and start carrying.\n\t\t\t\t\tretNeg[i+1] += 1 << j\n\t\t\t\t\tcarry = true\n\t\t\t\t} else {\n\t\t\t\t\t// This is a singleton, not consecutive\n\t\t\t\t\t// 1s.\n\t\t\t\t\tretPos[i+1] += 1 << j\n\t\t\t\t}\n\t\t\t}\n\t\t\tcurByte >>= 1\n\t\t}\n\t}\n\tif carry {\n\t\tretPos[0] = 1\n\t\treturn retPos, retNeg\n\t}\n\treturn retPos[1:], retNeg[1:]\n}\n\n// ScalarMult returns k*(Bx, By) where k is a big endian integer.\n// Part of the elliptic.Curve interface.\nfunc (curve *KoblitzCurve) ScalarMult(Bx, By *big.Int, k []byte) (*big.Int, *big.Int) {\n\t// Point Q = ∞ (point at infinity).\n\tqx, qy, qz := new(fieldVal), new(fieldVal), new(fieldVal)\n\n\t// Decompose K into k1 and k2 in order to halve the number of EC ops.\n\t// See Algorithm 3.74 in [GECC].\n\tk1, k2, signK1, signK2 := curve.splitK(curve.moduloReduce(k))\n\n\t// The main equation here to remember is:\n\t//   k * P = k1 * P + k2 * ϕ(P)\n\t//\n\t// P1 below is P in the equation, P2 below is ϕ(P) in the equation\n\tp1x, p1y := curve.bigAffineToField(Bx, By)\n\tp1yNeg := new(fieldVal).NegateVal(p1y, 1)\n\tp1z := new(fieldVal).SetInt(1)\n\n\t// NOTE: ϕ(x,y) = (βx,y).  The Jacobian z coordinate is 1, so this math\n\t// goes through.\n\tp2x := new(fieldVal).Mul2(p1x, curve.beta)\n\tp2y := new(fieldVal).Set(p1y)\n\tp2yNeg := new(fieldVal).NegateVal(p2y, 1)\n\tp2z := new(fieldVal).SetInt(1)\n\n\t// Flip the positive and negative values of the points as needed\n\t// depending on the signs of k1 and k2.  As mentioned in the equation\n\t// above, each of k1 and k2 are multiplied by the respective point.\n\t// Since -k * P is the same thing as k * -P, and the group law for\n\t// elliptic curves states that P(x, y) = -P(x, -y), it's faster and\n\t// simplifies the code to just make the point negative.\n\tif signK1 == -1 {\n\t\tp1y, p1yNeg = p1yNeg, p1y\n\t}\n\tif signK2 == -1 {\n\t\tp2y, p2yNeg = p2yNeg, p2y\n\t}\n\n\t// NAF versions of k1 and k2 should have a lot more zeros.\n\t//\n\t// The Pos version of the bytes contain the +1s and the Neg versions\n\t// contain the -1s.\n\tk1PosNAF, k1NegNAF := NAF(k1)\n\tk2PosNAF, k2NegNAF := NAF(k2)\n\tk1Len := len(k1PosNAF)\n\tk2Len := len(k2PosNAF)\n\n\tm := k1Len\n\tif m < k2Len {\n\t\tm = k2Len\n\t}\n\n\t// Add left-to-right using the NAF optimization.  See algorithm 3.77\n\t// from [GECC].  This should be faster overall since there will be a lot\n\t// more instances of 0, hence reducing the number of Jacobian additions\n\t// at the cost of 1 possible extra doubling.\n\tvar k1BytePos, k1ByteNeg, k2BytePos, k2ByteNeg byte\n\tfor i := 0; i < m; i++ {\n\t\t// Since we're going left-to-right, pad the front with 0s.\n\t\tif i < m-k1Len {\n\t\t\tk1BytePos = 0\n\t\t\tk1ByteNeg = 0\n\t\t} else {\n\t\t\tk1BytePos = k1PosNAF[i-(m-k1Len)]\n\t\t\tk1ByteNeg = k1NegNAF[i-(m-k1Len)]\n\t\t}\n\t\tif i < m-k2Len {\n\t\t\tk2BytePos = 0\n\t\t\tk2ByteNeg = 0\n\t\t} else {\n\t\t\tk2BytePos = k2PosNAF[i-(m-k2Len)]\n\t\t\tk2ByteNeg = k2NegNAF[i-(m-k2Len)]\n\t\t}\n\n\t\tfor j := 7; j >= 0; j-- {\n\t\t\t// Q = 2 * Q\n\t\t\tcurve.doubleJacobian(qx, qy, qz, qx, qy, qz)\n\n\t\t\tif k1BytePos&0x80 == 0x80 {\n\t\t\t\tcurve.addJacobian(qx, qy, qz, p1x, p1y, p1z,\n\t\t\t\t\tqx, qy, qz)\n\t\t\t} else if k1ByteNeg&0x80 == 0x80 {\n\t\t\t\tcurve.addJacobian(qx, qy, qz, p1x, p1yNeg, p1z,\n\t\t\t\t\tqx, qy, qz)\n\t\t\t}\n\n\t\t\tif k2BytePos&0x80 == 0x80 {\n\t\t\t\tcurve.addJacobian(qx, qy, qz, p2x, p2y, p2z,\n\t\t\t\t\tqx, qy, qz)\n\t\t\t} else if k2ByteNeg&0x80 == 0x80 {\n\t\t\t\tcurve.addJacobian(qx, qy, qz, p2x, p2yNeg, p2z,\n\t\t\t\t\tqx, qy, qz)\n\t\t\t}\n\t\t\tk1BytePos <<= 1\n\t\t\tk1ByteNeg <<= 1\n\t\t\tk2BytePos <<= 1\n\t\t\tk2ByteNeg <<= 1\n\t\t}\n\t}\n\n\t// Convert the Jacobian coordinate field values back to affine big.Ints.\n\treturn curve.fieldJacobianToBigAffine(qx, qy, qz)\n}\n\n// ScalarBaseMult returns k*G where G is the base point of the group and k is a\n// big endian integer.\n// Part of the elliptic.Curve interface.\nfunc (curve *KoblitzCurve) ScalarBaseMult(k []byte) (*big.Int, *big.Int) {\n\tnewK := curve.moduloReduce(k)\n\tdiff := len(curve.bytePoints) - len(newK)\n\n\t// Point Q = ∞ (point at infinity).\n\tqx, qy, qz := new(fieldVal), new(fieldVal), new(fieldVal)\n\n\t// curve.bytePoints has all 256 byte points for each 8-bit window. The\n\t// strategy is to add up the byte points. This is best understood by\n\t// expressing k in base-256 which it already sort of is.\n\t// Each \"digit\" in the 8-bit window can be looked up using bytePoints\n\t// and added together.\n\tfor i, byteVal := range newK {\n\t\tp := curve.bytePoints[diff+i][byteVal]\n\t\tcurve.addJacobian(qx, qy, qz, &p[0], &p[1], &p[2], qx, qy, qz)\n\t}\n\treturn curve.fieldJacobianToBigAffine(qx, qy, qz)\n}\n\n// QPlus1Div4 returns the Q+1/4 constant for the curve for use in calculating\n// square roots via exponention.\nfunc (curve *KoblitzCurve) QPlus1Div4() *big.Int {\n\treturn curve.q\n}\n\nvar initonce sync.Once\nvar secp256k1 KoblitzCurve\n\nfunc initAll() {\n\tinitS256()\n}\n\n// fromHex converts the passed hex string into a big integer pointer and will\n// panic is there is an error.  This is only provided for the hard-coded\n// constants so errors in the source code can bet detected. It will only (and\n// must only) be called for initialization purposes.\nfunc fromHex(s string) *big.Int {\n\tr, ok := new(big.Int).SetString(s, 16)\n\tif !ok {\n\t\tpanic(\"invalid hex in source file: \" + s)\n\t}\n\treturn r\n}\n\nfunc initS256() {\n\t// Curve parameters taken from [SECG] section 2.4.1.\n\tsecp256k1.CurveParams = new(elliptic.CurveParams)\n\tsecp256k1.P = fromHex(\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F\")\n\tsecp256k1.N = fromHex(\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141\")\n\tsecp256k1.B = fromHex(\"0000000000000000000000000000000000000000000000000000000000000007\")\n\tsecp256k1.Gx = fromHex(\"79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798\")\n\tsecp256k1.Gy = fromHex(\"483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8\")\n\tsecp256k1.BitSize = 256\n\tsecp256k1.q = new(big.Int).Div(new(big.Int).Add(secp256k1.P,\n\t\tbig.NewInt(1)), big.NewInt(4))\n\tsecp256k1.H = 1\n\tsecp256k1.halfOrder = new(big.Int).Rsh(secp256k1.N, 1)\n\n\t// Provided for convenience since this gets computed repeatedly.\n\tsecp256k1.byteSize = secp256k1.BitSize / 8\n\n\t// Deserialize and set the pre-computed table used to accelerate scalar\n\t// base multiplication.  This is hard-coded data, so any errors are\n\t// panics because it means something is wrong in the source code.\n\tif err := loadS256BytePoints(); err != nil {\n\t\tpanic(err)\n\t}\n\n\t// Next 6 constants are from Hal Finney's bitcointalk.org post:\n\t// https://bitcointalk.org/index.php?topic=3238.msg45565#msg45565\n\t// May he rest in peace.\n\t//\n\t// They have also been independently derived from the code in the\n\t// EndomorphismVectors function in gensecp256k1.go.\n\tsecp256k1.lambda = fromHex(\"5363AD4CC05C30E0A5261C028812645A122E22EA20816678DF02967C1B23BD72\")\n\tsecp256k1.beta = new(fieldVal).SetHex(\"7AE96A2B657C07106E64479EAC3434E99CF0497512F58995C1396C28719501EE\")\n\tsecp256k1.a1 = fromHex(\"3086D221A7D46BCDE86C90E49284EB15\")\n\tsecp256k1.b1 = fromHex(\"-E4437ED6010E88286F547FA90ABFE4C3\")\n\tsecp256k1.a2 = fromHex(\"114CA50F7A8E2F3F657C1108D9D44CFD8\")\n\tsecp256k1.b2 = fromHex(\"3086D221A7D46BCDE86C90E49284EB15\")\n\n\t// Alternatively, we can use the parameters below, however, they seem\n\t//  to be about 8% slower.\n\t// secp256k1.lambda = fromHex(\"AC9C52B33FA3CF1F5AD9E3FD77ED9BA4A880B9FC8EC739C2E0CFC810B51283CE\")\n\t// secp256k1.beta = new(fieldVal).SetHex(\"851695D49A83F8EF919BB86153CBCB16630FB68AED0A766A3EC693D68E6AFA40\")\n\t// secp256k1.a1 = fromHex(\"E4437ED6010E88286F547FA90ABFE4C3\")\n\t// secp256k1.b1 = fromHex(\"-3086D221A7D46BCDE86C90E49284EB15\")\n\t// secp256k1.a2 = fromHex(\"3086D221A7D46BCDE86C90E49284EB15\")\n\t// secp256k1.b2 = fromHex(\"114CA50F7A8E2F3F657C1108D9D44CFD8\")\n}\n\n// S256 returns a Curve which implements secp256k1.\nfunc S256() *KoblitzCurve {\n\tinitonce.Do(initAll)\n\treturn &secp256k1\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/btcec/ciphering.go",
    "content": "// Copyright (c) 2015-2016 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcec\n\nimport (\n\t\"bytes\"\n\t\"crypto/aes\"\n\t\"crypto/cipher\"\n\t\"crypto/hmac\"\n\t\"crypto/rand\"\n\t\"crypto/sha256\"\n\t\"crypto/sha512\"\n\t\"errors\"\n\t\"io\"\n)\n\nvar (\n\t// ErrInvalidMAC occurs when Message Authentication Check (MAC) fails\n\t// during decryption. This happens because of either invalid private key or\n\t// corrupt ciphertext.\n\tErrInvalidMAC = errors.New(\"invalid mac hash\")\n\n\t// errInputTooShort occurs when the input ciphertext to the Decrypt\n\t// function is less than 134 bytes long.\n\terrInputTooShort = errors.New(\"ciphertext too short\")\n\n\t// errUnsupportedCurve occurs when the first two bytes of the encrypted\n\t// text aren't 0x02CA (= 712 = secp256k1, from OpenSSL).\n\terrUnsupportedCurve = errors.New(\"unsupported curve\")\n\n\terrInvalidXLength = errors.New(\"invalid X length, must be 32\")\n\terrInvalidYLength = errors.New(\"invalid Y length, must be 32\")\n\terrInvalidPadding = errors.New(\"invalid PKCS#7 padding\")\n\n\t// 0x02CA = 714\n\tciphCurveBytes = [2]byte{0x02, 0xCA}\n\t// 0x20 = 32\n\tciphCoordLength = [2]byte{0x00, 0x20}\n)\n\n// GenerateSharedSecret generates a shared secret based on a private key and a\n// public key using Diffie-Hellman key exchange (ECDH) (RFC 4753).\n// RFC5903 Section 9 states we should only return x.\nfunc GenerateSharedSecret(privkey *PrivateKey, pubkey *PublicKey) []byte {\n\tx, _ := pubkey.Curve.ScalarMult(pubkey.X, pubkey.Y, privkey.D.Bytes())\n\treturn x.Bytes()\n}\n\n// Encrypt encrypts data for the target public key using AES-256-CBC. It also\n// generates a private key (the pubkey of which is also in the output). The only\n// supported curve is secp256k1. The `structure' that it encodes everything into\n// is:\n//\n//\tstruct {\n//\t\t// Initialization Vector used for AES-256-CBC\n//\t\tIV [16]byte\n//\t\t// Public Key: curve(2) + len_of_pubkeyX(2) + pubkeyX +\n//\t\t// len_of_pubkeyY(2) + pubkeyY (curve = 714)\n//\t\tPublicKey [70]byte\n//\t\t// Cipher text\n//\t\tData []byte\n//\t\t// HMAC-SHA-256 Message Authentication Code\n//\t\tHMAC [32]byte\n//\t}\n//\n// The primary aim is to ensure byte compatibility with Pyelliptic.  Also, refer\n// to section 5.8.1 of ANSI X9.63 for rationale on this format.\nfunc Encrypt(pubkey *PublicKey, in []byte) ([]byte, error) {\n\tephemeral, err := NewPrivateKey(S256())\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tecdhKey := GenerateSharedSecret(ephemeral, pubkey)\n\tderivedKey := sha512.Sum512(ecdhKey)\n\tkeyE := derivedKey[:32]\n\tkeyM := derivedKey[32:]\n\n\tpaddedIn := addPKCSPadding(in)\n\t// IV + Curve params/X/Y + padded plaintext/ciphertext + HMAC-256\n\tout := make([]byte, aes.BlockSize+70+len(paddedIn)+sha256.Size)\n\tiv := out[:aes.BlockSize]\n\tif _, err = io.ReadFull(rand.Reader, iv); err != nil {\n\t\treturn nil, err\n\t}\n\t// start writing public key\n\tpb := ephemeral.PubKey().SerializeUncompressed()\n\toffset := aes.BlockSize\n\n\t// curve and X length\n\tcopy(out[offset:offset+4], append(ciphCurveBytes[:], ciphCoordLength[:]...))\n\toffset += 4\n\t// X\n\tcopy(out[offset:offset+32], pb[1:33])\n\toffset += 32\n\t// Y length\n\tcopy(out[offset:offset+2], ciphCoordLength[:])\n\toffset += 2\n\t// Y\n\tcopy(out[offset:offset+32], pb[33:])\n\toffset += 32\n\n\t// start encryption\n\tblock, err := aes.NewCipher(keyE)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tmode := cipher.NewCBCEncrypter(block, iv)\n\tmode.CryptBlocks(out[offset:len(out)-sha256.Size], paddedIn)\n\n\t// start HMAC-SHA-256\n\thm := hmac.New(sha256.New, keyM)\n\thm.Write(out[:len(out)-sha256.Size])          // everything is hashed\n\tcopy(out[len(out)-sha256.Size:], hm.Sum(nil)) // write checksum\n\n\treturn out, nil\n}\n\n// Decrypt decrypts data that was encrypted using the Encrypt function.\nfunc Decrypt(priv *PrivateKey, in []byte) ([]byte, error) {\n\t// IV + Curve params/X/Y + 1 block + HMAC-256\n\tif len(in) < aes.BlockSize+70+aes.BlockSize+sha256.Size {\n\t\treturn nil, errInputTooShort\n\t}\n\n\t// read iv\n\tiv := in[:aes.BlockSize]\n\toffset := aes.BlockSize\n\n\t// start reading pubkey\n\tif !bytes.Equal(in[offset:offset+2], ciphCurveBytes[:]) {\n\t\treturn nil, errUnsupportedCurve\n\t}\n\toffset += 2\n\n\tif !bytes.Equal(in[offset:offset+2], ciphCoordLength[:]) {\n\t\treturn nil, errInvalidXLength\n\t}\n\toffset += 2\n\n\txBytes := in[offset : offset+32]\n\toffset += 32\n\n\tif !bytes.Equal(in[offset:offset+2], ciphCoordLength[:]) {\n\t\treturn nil, errInvalidYLength\n\t}\n\toffset += 2\n\n\tyBytes := in[offset : offset+32]\n\toffset += 32\n\n\tpb := make([]byte, 65)\n\tpb[0] = byte(0x04) // uncompressed\n\tcopy(pb[1:33], xBytes)\n\tcopy(pb[33:], yBytes)\n\t// check if (X, Y) lies on the curve and create a Pubkey if it does\n\tpubkey, err := ParsePubKey(pb, S256())\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// check for cipher text length\n\tif (len(in)-aes.BlockSize-offset-sha256.Size)%aes.BlockSize != 0 {\n\t\treturn nil, errInvalidPadding // not padded to 16 bytes\n\t}\n\n\t// read hmac\n\tmessageMAC := in[len(in)-sha256.Size:]\n\n\t// generate shared secret\n\tecdhKey := GenerateSharedSecret(priv, pubkey)\n\tderivedKey := sha512.Sum512(ecdhKey)\n\tkeyE := derivedKey[:32]\n\tkeyM := derivedKey[32:]\n\n\t// verify mac\n\thm := hmac.New(sha256.New, keyM)\n\thm.Write(in[:len(in)-sha256.Size]) // everything is hashed\n\texpectedMAC := hm.Sum(nil)\n\tif !hmac.Equal(messageMAC, expectedMAC) {\n\t\treturn nil, ErrInvalidMAC\n\t}\n\n\t// start decryption\n\tblock, err := aes.NewCipher(keyE)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tmode := cipher.NewCBCDecrypter(block, iv)\n\t// same length as ciphertext\n\tplaintext := make([]byte, len(in)-offset-sha256.Size)\n\tmode.CryptBlocks(plaintext, in[offset:len(in)-sha256.Size])\n\n\treturn removePKCSPadding(plaintext)\n}\n\n// Implement PKCS#7 padding with block size of 16 (AES block size).\n\n// addPKCSPadding adds padding to a block of data\nfunc addPKCSPadding(src []byte) []byte {\n\tpadding := aes.BlockSize - len(src)%aes.BlockSize\n\tpadtext := bytes.Repeat([]byte{byte(padding)}, padding)\n\treturn append(src, padtext...)\n}\n\n// removePKCSPadding removes padding from data that was added with addPKCSPadding\nfunc removePKCSPadding(src []byte) ([]byte, error) {\n\tlength := len(src)\n\tpadLength := int(src[length-1])\n\tif padLength > aes.BlockSize || length < aes.BlockSize {\n\t\treturn nil, errInvalidPadding\n\t}\n\n\treturn src[:length-padLength], nil\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/btcec/doc.go",
    "content": "// Copyright (c) 2013-2014 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\n/*\nPackage btcec implements support for the elliptic curves needed for bitcoin.\n\nBitcoin uses elliptic curve cryptography using koblitz curves\n(specifically secp256k1) for cryptographic functions.  See\nhttp://www.secg.org/collateral/sec2_final.pdf for details on the\nstandard.\n\nThis package provides the data structures and functions implementing the\ncrypto/elliptic Curve interface in order to permit using these curves\nwith the standard crypto/ecdsa package provided with go. Helper\nfunctionality is provided to parse signatures and public keys from\nstandard formats.  It was designed for use with btcd, but should be\ngeneral enough for other uses of elliptic curve crypto.  It was originally based\non some initial work by ThePiachu, but has significantly diverged since then.\n*/\npackage btcec\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/btcec/field.go",
    "content": "// Copyright (c) 2013-2016 The btcsuite developers\n// Copyright (c) 2013-2016 Dave Collins\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcec\n\n// References:\n//   [HAC]: Handbook of Applied Cryptography Menezes, van Oorschot, Vanstone.\n//     http://cacr.uwaterloo.ca/hac/\n\n// All elliptic curve operations for secp256k1 are done in a finite field\n// characterized by a 256-bit prime.  Given this precision is larger than the\n// biggest available native type, obviously some form of bignum math is needed.\n// This package implements specialized fixed-precision field arithmetic rather\n// than relying on an arbitrary-precision arithmetic package such as math/big\n// for dealing with the field math since the size is known.  As a result, rather\n// large performance gains are achieved by taking advantage of many\n// optimizations not available to arbitrary-precision arithmetic and generic\n// modular arithmetic algorithms.\n//\n// There are various ways to internally represent each finite field element.\n// For example, the most obvious representation would be to use an array of 4\n// uint64s (64 bits * 4 = 256 bits).  However, that representation suffers from\n// a couple of issues.  First, there is no native Go type large enough to handle\n// the intermediate results while adding or multiplying two 64-bit numbers, and\n// second there is no space left for overflows when performing the intermediate\n// arithmetic between each array element which would lead to expensive carry\n// propagation.\n//\n// Given the above, this implementation represents the the field elements as\n// 10 uint32s with each word (array entry) treated as base 2^26.  This was\n// chosen for the following reasons:\n// 1) Most systems at the current time are 64-bit (or at least have 64-bit\n//    registers available for specialized purposes such as MMX) so the\n//    intermediate results can typically be done using a native register (and\n//    using uint64s to avoid the need for additional half-word arithmetic)\n// 2) In order to allow addition of the internal words without having to\n//    propagate the the carry, the max normalized value for each register must\n//    be less than the number of bits available in the register\n// 3) Since we're dealing with 32-bit values, 64-bits of overflow is a\n//    reasonable choice for #2\n// 4) Given the need for 256-bits of precision and the properties stated in #1,\n//    #2, and #3, the representation which best accommodates this is 10 uint32s\n//    with base 2^26 (26 bits * 10 = 260 bits, so the final word only needs 22\n//    bits) which leaves the desired 64 bits (32 * 10 = 320, 320 - 256 = 64) for\n//    overflow\n//\n// Since it is so important that the field arithmetic is extremely fast for\n// high performance crypto, this package does not perform any validation where\n// it ordinarily would.  For example, some functions only give the correct\n// result is the field is normalized and there is no checking to ensure it is.\n// While I typically prefer to ensure all state and input is valid for most\n// packages, this code is really only used internally and every extra check\n// counts.\n\nimport (\n\t\"encoding/hex\"\n)\n\n// Constants used to make the code more readable.\nconst (\n\ttwoBitsMask   = 0x3\n\tfourBitsMask  = 0xf\n\tsixBitsMask   = 0x3f\n\teightBitsMask = 0xff\n)\n\n// Constants related to the field representation.\nconst (\n\t// fieldWords is the number of words used to internally represent the\n\t// 256-bit value.\n\tfieldWords = 10\n\n\t// fieldBase is the exponent used to form the numeric base of each word.\n\t// 2^(fieldBase*i) where i is the word position.\n\tfieldBase = 26\n\n\t// fieldOverflowBits is the minimum number of \"overflow\" bits for each\n\t// word in the field value.\n\tfieldOverflowBits = 32 - fieldBase\n\n\t// fieldBaseMask is the mask for the bits in each word needed to\n\t// represent the numeric base of each word (except the most significant\n\t// word).\n\tfieldBaseMask = (1 << fieldBase) - 1\n\n\t// fieldMSBBits is the number of bits in the most significant word used\n\t// to represent the value.\n\tfieldMSBBits = 256 - (fieldBase * (fieldWords - 1))\n\n\t// fieldMSBMask is the mask for the bits in the most significant word\n\t// needed to represent the value.\n\tfieldMSBMask = (1 << fieldMSBBits) - 1\n\n\t// fieldPrimeWordZero is word zero of the secp256k1 prime in the\n\t// internal field representation.  It is used during negation.\n\tfieldPrimeWordZero = 0x3fffc2f\n\n\t// fieldPrimeWordOne is word one of the secp256k1 prime in the\n\t// internal field representation.  It is used during negation.\n\tfieldPrimeWordOne = 0x3ffffbf\n)\n\n// fieldVal implements optimized fixed-precision arithmetic over the\n// secp256k1 finite field.  This means all arithmetic is performed modulo\n// 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f.  It\n// represents each 256-bit value as 10 32-bit integers in base 2^26.  This\n// provides 6 bits of overflow in each word (10 bits in the most significant\n// word) for a total of 64 bits of overflow (9*6 + 10 = 64).  It only implements\n// the arithmetic needed for elliptic curve operations.\n//\n// The following depicts the internal representation:\n// \t -----------------------------------------------------------------\n// \t|        n[9]       |        n[8]       | ... |        n[0]       |\n// \t| 32 bits available | 32 bits available | ... | 32 bits available |\n// \t| 22 bits for value | 26 bits for value | ... | 26 bits for value |\n// \t| 10 bits overflow  |  6 bits overflow  | ... |  6 bits overflow  |\n// \t| Mult: 2^(26*9)    | Mult: 2^(26*8)    | ... | Mult: 2^(26*0)    |\n// \t -----------------------------------------------------------------\n//\n// For example, consider the number 2^49 + 1.  It would be represented as:\n// \tn[0] = 1\n// \tn[1] = 2^23\n// \tn[2..9] = 0\n//\n// The full 256-bit value is then calculated by looping i from 9..0 and\n// doing sum(n[i] * 2^(26i)) like so:\n// \tn[9] * 2^(26*9) = 0    * 2^234 = 0\n// \tn[8] * 2^(26*8) = 0    * 2^208 = 0\n// \t...\n// \tn[1] * 2^(26*1) = 2^23 * 2^26  = 2^49\n// \tn[0] * 2^(26*0) = 1    * 2^0   = 1\n// \tSum: 0 + 0 + ... + 2^49 + 1 = 2^49 + 1\ntype fieldVal struct {\n\tn [10]uint32\n}\n\n// String returns the field value as a human-readable hex string.\nfunc (f fieldVal) String() string {\n\tt := new(fieldVal).Set(&f).Normalize()\n\treturn hex.EncodeToString(t.Bytes()[:])\n}\n\n// Zero sets the field value to zero.  A newly created field value is already\n// set to zero.  This function can be useful to clear an existing field value\n// for reuse.\nfunc (f *fieldVal) Zero() {\n\tf.n[0] = 0\n\tf.n[1] = 0\n\tf.n[2] = 0\n\tf.n[3] = 0\n\tf.n[4] = 0\n\tf.n[5] = 0\n\tf.n[6] = 0\n\tf.n[7] = 0\n\tf.n[8] = 0\n\tf.n[9] = 0\n}\n\n// Set sets the field value equal to the passed value.\n//\n// The field value is returned to support chaining.  This enables syntax like:\n// f := new(fieldVal).Set(f2).Add(1) so that f = f2 + 1 where f2 is not\n// modified.\nfunc (f *fieldVal) Set(val *fieldVal) *fieldVal {\n\t*f = *val\n\treturn f\n}\n\n// SetInt sets the field value to the passed integer.  This is a convenience\n// function since it is fairly common to perform some arithemetic with small\n// native integers.\n//\n// The field value is returned to support chaining.  This enables syntax such\n// as f := new(fieldVal).SetInt(2).Mul(f2) so that f = 2 * f2.\nfunc (f *fieldVal) SetInt(ui uint) *fieldVal {\n\tf.Zero()\n\tf.n[0] = uint32(ui)\n\treturn f\n}\n\n// SetBytes packs the passed 32-byte big-endian value into the internal field\n// value representation.\n//\n// The field value is returned to support chaining.  This enables syntax like:\n// f := new(fieldVal).SetBytes(byteArray).Mul(f2) so that f = ba * f2.\nfunc (f *fieldVal) SetBytes(b *[32]byte) *fieldVal {\n\t// Pack the 256 total bits across the 10 uint32 words with a max of\n\t// 26-bits per word.  This could be done with a couple of for loops,\n\t// but this unrolled version is significantly faster.  Benchmarks show\n\t// this is about 34 times faster than the variant which uses loops.\n\tf.n[0] = uint32(b[31]) | uint32(b[30])<<8 | uint32(b[29])<<16 |\n\t\t(uint32(b[28])&twoBitsMask)<<24\n\tf.n[1] = uint32(b[28])>>2 | uint32(b[27])<<6 | uint32(b[26])<<14 |\n\t\t(uint32(b[25])&fourBitsMask)<<22\n\tf.n[2] = uint32(b[25])>>4 | uint32(b[24])<<4 | uint32(b[23])<<12 |\n\t\t(uint32(b[22])&sixBitsMask)<<20\n\tf.n[3] = uint32(b[22])>>6 | uint32(b[21])<<2 | uint32(b[20])<<10 |\n\t\tuint32(b[19])<<18\n\tf.n[4] = uint32(b[18]) | uint32(b[17])<<8 | uint32(b[16])<<16 |\n\t\t(uint32(b[15])&twoBitsMask)<<24\n\tf.n[5] = uint32(b[15])>>2 | uint32(b[14])<<6 | uint32(b[13])<<14 |\n\t\t(uint32(b[12])&fourBitsMask)<<22\n\tf.n[6] = uint32(b[12])>>4 | uint32(b[11])<<4 | uint32(b[10])<<12 |\n\t\t(uint32(b[9])&sixBitsMask)<<20\n\tf.n[7] = uint32(b[9])>>6 | uint32(b[8])<<2 | uint32(b[7])<<10 |\n\t\tuint32(b[6])<<18\n\tf.n[8] = uint32(b[5]) | uint32(b[4])<<8 | uint32(b[3])<<16 |\n\t\t(uint32(b[2])&twoBitsMask)<<24\n\tf.n[9] = uint32(b[2])>>2 | uint32(b[1])<<6 | uint32(b[0])<<14\n\treturn f\n}\n\n// SetByteSlice packs the passed big-endian value into the internal field value\n// representation.  Only the first 32-bytes are used.  As a result, it is up to\n// the caller to ensure numbers of the appropriate size are used or the value\n// will be truncated.\n//\n// The field value is returned to support chaining.  This enables syntax like:\n// f := new(fieldVal).SetByteSlice(byteSlice)\nfunc (f *fieldVal) SetByteSlice(b []byte) *fieldVal {\n\tvar b32 [32]byte\n\tfor i := 0; i < len(b); i++ {\n\t\tif i < 32 {\n\t\t\tb32[i+(32-len(b))] = b[i]\n\t\t}\n\t}\n\treturn f.SetBytes(&b32)\n}\n\n// SetHex decodes the passed big-endian hex string into the internal field value\n// representation.  Only the first 32-bytes are used.\n//\n// The field value is returned to support chaining.  This enables syntax like:\n// f := new(fieldVal).SetHex(\"0abc\").Add(1) so that f = 0x0abc + 1\nfunc (f *fieldVal) SetHex(hexString string) *fieldVal {\n\tif len(hexString)%2 != 0 {\n\t\thexString = \"0\" + hexString\n\t}\n\tbytes, _ := hex.DecodeString(hexString)\n\treturn f.SetByteSlice(bytes)\n}\n\n// Normalize normalizes the internal field words into the desired range and\n// performs fast modular reduction over the secp256k1 prime by making use of the\n// special form of the prime.\nfunc (f *fieldVal) Normalize() *fieldVal {\n\t// The field representation leaves 6 bits of overflow in each word so\n\t// intermediate calculations can be performed without needing to\n\t// propagate the carry to each higher word during the calculations.  In\n\t// order to normalize, we need to \"compact\" the full 256-bit value to\n\t// the right while propagating any carries through to the high order\n\t// word.\n\t//\n\t// Since this field is doing arithmetic modulo the secp256k1 prime, we\n\t// also need to perform modular reduction over the prime.\n\t//\n\t// Per [HAC] section 14.3.4: Reduction method of moduli of special form,\n\t// when the modulus is of the special form m = b^t - c, highly efficient\n\t// reduction can be achieved.\n\t//\n\t// The secp256k1 prime is equivalent to 2^256 - 4294968273, so it fits\n\t// this criteria.\n\t//\n\t// 4294968273 in field representation (base 2^26) is:\n\t// n[0] = 977\n\t// n[1] = 64\n\t// That is to say (2^26 * 64) + 977 = 4294968273\n\t//\n\t// The algorithm presented in the referenced section typically repeats\n\t// until the quotient is zero.  However, due to our field representation\n\t// we already know to within one reduction how many times we would need\n\t// to repeat as it's the uppermost bits of the high order word.  Thus we\n\t// can simply multiply the magnitude by the field representation of the\n\t// prime and do a single iteration.  After this step there might be an\n\t// additional carry to bit 256 (bit 22 of the high order word).\n\tt9 := f.n[9]\n\tm := t9 >> fieldMSBBits\n\tt9 = t9 & fieldMSBMask\n\tt0 := f.n[0] + m*977\n\tt1 := (t0 >> fieldBase) + f.n[1] + (m << 6)\n\tt0 = t0 & fieldBaseMask\n\tt2 := (t1 >> fieldBase) + f.n[2]\n\tt1 = t1 & fieldBaseMask\n\tt3 := (t2 >> fieldBase) + f.n[3]\n\tt2 = t2 & fieldBaseMask\n\tt4 := (t3 >> fieldBase) + f.n[4]\n\tt3 = t3 & fieldBaseMask\n\tt5 := (t4 >> fieldBase) + f.n[5]\n\tt4 = t4 & fieldBaseMask\n\tt6 := (t5 >> fieldBase) + f.n[6]\n\tt5 = t5 & fieldBaseMask\n\tt7 := (t6 >> fieldBase) + f.n[7]\n\tt6 = t6 & fieldBaseMask\n\tt8 := (t7 >> fieldBase) + f.n[8]\n\tt7 = t7 & fieldBaseMask\n\tt9 = (t8 >> fieldBase) + t9\n\tt8 = t8 & fieldBaseMask\n\n\t// At this point, the magnitude is guaranteed to be one, however, the\n\t// value could still be greater than the prime if there was either a\n\t// carry through to bit 256 (bit 22 of the higher order word) or the\n\t// value is greater than or equal to the field characteristic.  The\n\t// following determines if either or these conditions are true and does\n\t// the final reduction in constant time.\n\t//\n\t// Note that the if/else statements here intentionally do the bitwise\n\t// operators even when it won't change the value to ensure constant time\n\t// between the branches.  Also note that 'm' will be zero when neither\n\t// of the aforementioned conditions are true and the value will not be\n\t// changed when 'm' is zero.\n\tm = 1\n\tif t9 == fieldMSBMask {\n\t\tm &= 1\n\t} else {\n\t\tm &= 0\n\t}\n\tif t2&t3&t4&t5&t6&t7&t8 == fieldBaseMask {\n\t\tm &= 1\n\t} else {\n\t\tm &= 0\n\t}\n\tif ((t0+977)>>fieldBase + t1 + 64) > fieldBaseMask {\n\t\tm &= 1\n\t} else {\n\t\tm &= 0\n\t}\n\tif t9>>fieldMSBBits != 0 {\n\t\tm |= 1\n\t} else {\n\t\tm |= 0\n\t}\n\tt0 = t0 + m*977\n\tt1 = (t0 >> fieldBase) + t1 + (m << 6)\n\tt0 = t0 & fieldBaseMask\n\tt2 = (t1 >> fieldBase) + t2\n\tt1 = t1 & fieldBaseMask\n\tt3 = (t2 >> fieldBase) + t3\n\tt2 = t2 & fieldBaseMask\n\tt4 = (t3 >> fieldBase) + t4\n\tt3 = t3 & fieldBaseMask\n\tt5 = (t4 >> fieldBase) + t5\n\tt4 = t4 & fieldBaseMask\n\tt6 = (t5 >> fieldBase) + t6\n\tt5 = t5 & fieldBaseMask\n\tt7 = (t6 >> fieldBase) + t7\n\tt6 = t6 & fieldBaseMask\n\tt8 = (t7 >> fieldBase) + t8\n\tt7 = t7 & fieldBaseMask\n\tt9 = (t8 >> fieldBase) + t9\n\tt8 = t8 & fieldBaseMask\n\tt9 = t9 & fieldMSBMask // Remove potential multiple of 2^256.\n\n\t// Finally, set the normalized and reduced words.\n\tf.n[0] = t0\n\tf.n[1] = t1\n\tf.n[2] = t2\n\tf.n[3] = t3\n\tf.n[4] = t4\n\tf.n[5] = t5\n\tf.n[6] = t6\n\tf.n[7] = t7\n\tf.n[8] = t8\n\tf.n[9] = t9\n\treturn f\n}\n\n// PutBytes unpacks the field value to a 32-byte big-endian value using the\n// passed byte array.  There is a similar function, Bytes, which unpacks the\n// field value into a new array and returns that.  This version is provided\n// since it can be useful to cut down on the number of allocations by allowing\n// the caller to reuse a buffer.\n//\n// The field value must be normalized for this function to return the correct\n// result.\nfunc (f *fieldVal) PutBytes(b *[32]byte) {\n\t// Unpack the 256 total bits from the 10 uint32 words with a max of\n\t// 26-bits per word.  This could be done with a couple of for loops,\n\t// but this unrolled version is a bit faster.  Benchmarks show this is\n\t// about 10 times faster than the variant which uses loops.\n\tb[31] = byte(f.n[0] & eightBitsMask)\n\tb[30] = byte((f.n[0] >> 8) & eightBitsMask)\n\tb[29] = byte((f.n[0] >> 16) & eightBitsMask)\n\tb[28] = byte((f.n[0]>>24)&twoBitsMask | (f.n[1]&sixBitsMask)<<2)\n\tb[27] = byte((f.n[1] >> 6) & eightBitsMask)\n\tb[26] = byte((f.n[1] >> 14) & eightBitsMask)\n\tb[25] = byte((f.n[1]>>22)&fourBitsMask | (f.n[2]&fourBitsMask)<<4)\n\tb[24] = byte((f.n[2] >> 4) & eightBitsMask)\n\tb[23] = byte((f.n[2] >> 12) & eightBitsMask)\n\tb[22] = byte((f.n[2]>>20)&sixBitsMask | (f.n[3]&twoBitsMask)<<6)\n\tb[21] = byte((f.n[3] >> 2) & eightBitsMask)\n\tb[20] = byte((f.n[3] >> 10) & eightBitsMask)\n\tb[19] = byte((f.n[3] >> 18) & eightBitsMask)\n\tb[18] = byte(f.n[4] & eightBitsMask)\n\tb[17] = byte((f.n[4] >> 8) & eightBitsMask)\n\tb[16] = byte((f.n[4] >> 16) & eightBitsMask)\n\tb[15] = byte((f.n[4]>>24)&twoBitsMask | (f.n[5]&sixBitsMask)<<2)\n\tb[14] = byte((f.n[5] >> 6) & eightBitsMask)\n\tb[13] = byte((f.n[5] >> 14) & eightBitsMask)\n\tb[12] = byte((f.n[5]>>22)&fourBitsMask | (f.n[6]&fourBitsMask)<<4)\n\tb[11] = byte((f.n[6] >> 4) & eightBitsMask)\n\tb[10] = byte((f.n[6] >> 12) & eightBitsMask)\n\tb[9] = byte((f.n[6]>>20)&sixBitsMask | (f.n[7]&twoBitsMask)<<6)\n\tb[8] = byte((f.n[7] >> 2) & eightBitsMask)\n\tb[7] = byte((f.n[7] >> 10) & eightBitsMask)\n\tb[6] = byte((f.n[7] >> 18) & eightBitsMask)\n\tb[5] = byte(f.n[8] & eightBitsMask)\n\tb[4] = byte((f.n[8] >> 8) & eightBitsMask)\n\tb[3] = byte((f.n[8] >> 16) & eightBitsMask)\n\tb[2] = byte((f.n[8]>>24)&twoBitsMask | (f.n[9]&sixBitsMask)<<2)\n\tb[1] = byte((f.n[9] >> 6) & eightBitsMask)\n\tb[0] = byte((f.n[9] >> 14) & eightBitsMask)\n}\n\n// Bytes unpacks the field value to a 32-byte big-endian value.  See PutBytes\n// for a variant that allows the a buffer to be passed which can be useful to\n// to cut down on the number of allocations by allowing the caller to reuse a\n// buffer.\n//\n// The field value must be normalized for this function to return correct\n// result.\nfunc (f *fieldVal) Bytes() *[32]byte {\n\tb := new([32]byte)\n\tf.PutBytes(b)\n\treturn b\n}\n\n// IsZero returns whether or not the field value is equal to zero.\nfunc (f *fieldVal) IsZero() bool {\n\t// The value can only be zero if no bits are set in any of the words.\n\t// This is a constant time implementation.\n\tbits := f.n[0] | f.n[1] | f.n[2] | f.n[3] | f.n[4] |\n\t\tf.n[5] | f.n[6] | f.n[7] | f.n[8] | f.n[9]\n\n\treturn bits == 0\n}\n\n// IsOdd returns whether or not the field value is an odd number.\n//\n// The field value must be normalized for this function to return correct\n// result.\nfunc (f *fieldVal) IsOdd() bool {\n\t// Only odd numbers have the bottom bit set.\n\treturn f.n[0]&1 == 1\n}\n\n// Equals returns whether or not the two field values are the same.  Both\n// field values being compared must be normalized for this function to return\n// the correct result.\nfunc (f *fieldVal) Equals(val *fieldVal) bool {\n\t// Xor only sets bits when they are different, so the two field values\n\t// can only be the same if no bits are set after xoring each word.\n\t// This is a constant time implementation.\n\tbits := (f.n[0] ^ val.n[0]) | (f.n[1] ^ val.n[1]) | (f.n[2] ^ val.n[2]) |\n\t\t(f.n[3] ^ val.n[3]) | (f.n[4] ^ val.n[4]) | (f.n[5] ^ val.n[5]) |\n\t\t(f.n[6] ^ val.n[6]) | (f.n[7] ^ val.n[7]) | (f.n[8] ^ val.n[8]) |\n\t\t(f.n[9] ^ val.n[9])\n\n\treturn bits == 0\n}\n\n// NegateVal negates the passed value and stores the result in f.  The caller\n// must provide the magnitude of the passed value for a correct result.\n//\n// The field value is returned to support chaining.  This enables syntax like:\n// f.NegateVal(f2).AddInt(1) so that f = -f2 + 1.\nfunc (f *fieldVal) NegateVal(val *fieldVal, magnitude uint32) *fieldVal {\n\t// Negation in the field is just the prime minus the value.  However,\n\t// in order to allow negation against a field value without having to\n\t// normalize/reduce it first, multiply by the magnitude (that is how\n\t// \"far\" away it is from the normalized value) to adjust.  Also, since\n\t// negating a value pushes it one more order of magnitude away from the\n\t// normalized range, add 1 to compensate.\n\t//\n\t// For some intuition here, imagine you're performing mod 12 arithmetic\n\t// (picture a clock) and you are negating the number 7.  So you start at\n\t// 12 (which is of course 0 under mod 12) and count backwards (left on\n\t// the clock) 7 times to arrive at 5.  Notice this is just 12-7 = 5.\n\t// Now, assume you're starting with 19, which is a number that is\n\t// already larger than the modulus and congruent to 7 (mod 12).  When a\n\t// value is already in the desired range, its magnitude is 1.  Since 19\n\t// is an additional \"step\", its magnitude (mod 12) is 2.  Since any\n\t// multiple of the modulus is conguent to zero (mod m), the answer can\n\t// be shortcut by simply mulplying the magnitude by the modulus and\n\t// subtracting.  Keeping with the example, this would be (2*12)-19 = 5.\n\tf.n[0] = (magnitude+1)*fieldPrimeWordZero - val.n[0]\n\tf.n[1] = (magnitude+1)*fieldPrimeWordOne - val.n[1]\n\tf.n[2] = (magnitude+1)*fieldBaseMask - val.n[2]\n\tf.n[3] = (magnitude+1)*fieldBaseMask - val.n[3]\n\tf.n[4] = (magnitude+1)*fieldBaseMask - val.n[4]\n\tf.n[5] = (magnitude+1)*fieldBaseMask - val.n[5]\n\tf.n[6] = (magnitude+1)*fieldBaseMask - val.n[6]\n\tf.n[7] = (magnitude+1)*fieldBaseMask - val.n[7]\n\tf.n[8] = (magnitude+1)*fieldBaseMask - val.n[8]\n\tf.n[9] = (magnitude+1)*fieldMSBMask - val.n[9]\n\n\treturn f\n}\n\n// Negate negates the field value.  The existing field value is modified.  The\n// caller must provide the magnitude of the field value for a correct result.\n//\n// The field value is returned to support chaining.  This enables syntax like:\n// f.Negate().AddInt(1) so that f = -f + 1.\nfunc (f *fieldVal) Negate(magnitude uint32) *fieldVal {\n\treturn f.NegateVal(f, magnitude)\n}\n\n// AddInt adds the passed integer to the existing field value and stores the\n// result in f.  This is a convenience function since it is fairly common to\n// perform some arithemetic with small native integers.\n//\n// The field value is returned to support chaining.  This enables syntax like:\n// f.AddInt(1).Add(f2) so that f = f + 1 + f2.\nfunc (f *fieldVal) AddInt(ui uint) *fieldVal {\n\t// Since the field representation intentionally provides overflow bits,\n\t// it's ok to use carryless addition as the carry bit is safely part of\n\t// the word and will be normalized out.\n\tf.n[0] += uint32(ui)\n\n\treturn f\n}\n\n// Add adds the passed value to the existing field value and stores the result\n// in f.\n//\n// The field value is returned to support chaining.  This enables syntax like:\n// f.Add(f2).AddInt(1) so that f = f + f2 + 1.\nfunc (f *fieldVal) Add(val *fieldVal) *fieldVal {\n\t// Since the field representation intentionally provides overflow bits,\n\t// it's ok to use carryless addition as the carry bit is safely part of\n\t// each word and will be normalized out.  This could obviously be done\n\t// in a loop, but the unrolled version is faster.\n\tf.n[0] += val.n[0]\n\tf.n[1] += val.n[1]\n\tf.n[2] += val.n[2]\n\tf.n[3] += val.n[3]\n\tf.n[4] += val.n[4]\n\tf.n[5] += val.n[5]\n\tf.n[6] += val.n[6]\n\tf.n[7] += val.n[7]\n\tf.n[8] += val.n[8]\n\tf.n[9] += val.n[9]\n\n\treturn f\n}\n\n// Add2 adds the passed two field values together and stores the result in f.\n//\n// The field value is returned to support chaining.  This enables syntax like:\n// f3.Add2(f, f2).AddInt(1) so that f3 = f + f2 + 1.\nfunc (f *fieldVal) Add2(val *fieldVal, val2 *fieldVal) *fieldVal {\n\t// Since the field representation intentionally provides overflow bits,\n\t// it's ok to use carryless addition as the carry bit is safely part of\n\t// each word and will be normalized out.  This could obviously be done\n\t// in a loop, but the unrolled version is faster.\n\tf.n[0] = val.n[0] + val2.n[0]\n\tf.n[1] = val.n[1] + val2.n[1]\n\tf.n[2] = val.n[2] + val2.n[2]\n\tf.n[3] = val.n[3] + val2.n[3]\n\tf.n[4] = val.n[4] + val2.n[4]\n\tf.n[5] = val.n[5] + val2.n[5]\n\tf.n[6] = val.n[6] + val2.n[6]\n\tf.n[7] = val.n[7] + val2.n[7]\n\tf.n[8] = val.n[8] + val2.n[8]\n\tf.n[9] = val.n[9] + val2.n[9]\n\n\treturn f\n}\n\n// MulInt multiplies the field value by the passed int and stores the result in\n// f.  Note that this function can overflow if multiplying the value by any of\n// the individual words exceeds a max uint32.  Therefore it is important that\n// the caller ensures no overflows will occur before using this function.\n//\n// The field value is returned to support chaining.  This enables syntax like:\n// f.MulInt(2).Add(f2) so that f = 2 * f + f2.\nfunc (f *fieldVal) MulInt(val uint) *fieldVal {\n\t// Since each word of the field representation can hold up to\n\t// fieldOverflowBits extra bits which will be normalized out, it's safe\n\t// to multiply each word without using a larger type or carry\n\t// propagation so long as the values won't overflow a uint32.  This\n\t// could obviously be done in a loop, but the unrolled version is\n\t// faster.\n\tui := uint32(val)\n\tf.n[0] *= ui\n\tf.n[1] *= ui\n\tf.n[2] *= ui\n\tf.n[3] *= ui\n\tf.n[4] *= ui\n\tf.n[5] *= ui\n\tf.n[6] *= ui\n\tf.n[7] *= ui\n\tf.n[8] *= ui\n\tf.n[9] *= ui\n\n\treturn f\n}\n\n// Mul multiplies the passed value to the existing field value and stores the\n// result in f.  Note that this function can overflow if multiplying any\n// of the individual words exceeds a max uint32.  In practice, this means the\n// magnitude of either value involved in the multiplication must be a max of\n// 8.\n//\n// The field value is returned to support chaining.  This enables syntax like:\n// f.Mul(f2).AddInt(1) so that f = (f * f2) + 1.\nfunc (f *fieldVal) Mul(val *fieldVal) *fieldVal {\n\treturn f.Mul2(f, val)\n}\n\n// Mul2 multiplies the passed two field values together and stores the result\n// result in f.  Note that this function can overflow if multiplying any of\n// the individual words exceeds a max uint32.  In practice, this means the\n// magnitude of either value involved in the multiplication must be a max of\n// 8.\n//\n// The field value is returned to support chaining.  This enables syntax like:\n// f3.Mul2(f, f2).AddInt(1) so that f3 = (f * f2) + 1.\nfunc (f *fieldVal) Mul2(val *fieldVal, val2 *fieldVal) *fieldVal {\n\t// This could be done with a couple of for loops and an array to store\n\t// the intermediate terms, but this unrolled version is significantly\n\t// faster.\n\n\t// Terms for 2^(fieldBase*0).\n\tm := uint64(val.n[0]) * uint64(val2.n[0])\n\tt0 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*1).\n\tm = (m >> fieldBase) +\n\t\tuint64(val.n[0])*uint64(val2.n[1]) +\n\t\tuint64(val.n[1])*uint64(val2.n[0])\n\tt1 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*2).\n\tm = (m >> fieldBase) +\n\t\tuint64(val.n[0])*uint64(val2.n[2]) +\n\t\tuint64(val.n[1])*uint64(val2.n[1]) +\n\t\tuint64(val.n[2])*uint64(val2.n[0])\n\tt2 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*3).\n\tm = (m >> fieldBase) +\n\t\tuint64(val.n[0])*uint64(val2.n[3]) +\n\t\tuint64(val.n[1])*uint64(val2.n[2]) +\n\t\tuint64(val.n[2])*uint64(val2.n[1]) +\n\t\tuint64(val.n[3])*uint64(val2.n[0])\n\tt3 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*4).\n\tm = (m >> fieldBase) +\n\t\tuint64(val.n[0])*uint64(val2.n[4]) +\n\t\tuint64(val.n[1])*uint64(val2.n[3]) +\n\t\tuint64(val.n[2])*uint64(val2.n[2]) +\n\t\tuint64(val.n[3])*uint64(val2.n[1]) +\n\t\tuint64(val.n[4])*uint64(val2.n[0])\n\tt4 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*5).\n\tm = (m >> fieldBase) +\n\t\tuint64(val.n[0])*uint64(val2.n[5]) +\n\t\tuint64(val.n[1])*uint64(val2.n[4]) +\n\t\tuint64(val.n[2])*uint64(val2.n[3]) +\n\t\tuint64(val.n[3])*uint64(val2.n[2]) +\n\t\tuint64(val.n[4])*uint64(val2.n[1]) +\n\t\tuint64(val.n[5])*uint64(val2.n[0])\n\tt5 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*6).\n\tm = (m >> fieldBase) +\n\t\tuint64(val.n[0])*uint64(val2.n[6]) +\n\t\tuint64(val.n[1])*uint64(val2.n[5]) +\n\t\tuint64(val.n[2])*uint64(val2.n[4]) +\n\t\tuint64(val.n[3])*uint64(val2.n[3]) +\n\t\tuint64(val.n[4])*uint64(val2.n[2]) +\n\t\tuint64(val.n[5])*uint64(val2.n[1]) +\n\t\tuint64(val.n[6])*uint64(val2.n[0])\n\tt6 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*7).\n\tm = (m >> fieldBase) +\n\t\tuint64(val.n[0])*uint64(val2.n[7]) +\n\t\tuint64(val.n[1])*uint64(val2.n[6]) +\n\t\tuint64(val.n[2])*uint64(val2.n[5]) +\n\t\tuint64(val.n[3])*uint64(val2.n[4]) +\n\t\tuint64(val.n[4])*uint64(val2.n[3]) +\n\t\tuint64(val.n[5])*uint64(val2.n[2]) +\n\t\tuint64(val.n[6])*uint64(val2.n[1]) +\n\t\tuint64(val.n[7])*uint64(val2.n[0])\n\tt7 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*8).\n\tm = (m >> fieldBase) +\n\t\tuint64(val.n[0])*uint64(val2.n[8]) +\n\t\tuint64(val.n[1])*uint64(val2.n[7]) +\n\t\tuint64(val.n[2])*uint64(val2.n[6]) +\n\t\tuint64(val.n[3])*uint64(val2.n[5]) +\n\t\tuint64(val.n[4])*uint64(val2.n[4]) +\n\t\tuint64(val.n[5])*uint64(val2.n[3]) +\n\t\tuint64(val.n[6])*uint64(val2.n[2]) +\n\t\tuint64(val.n[7])*uint64(val2.n[1]) +\n\t\tuint64(val.n[8])*uint64(val2.n[0])\n\tt8 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*9).\n\tm = (m >> fieldBase) +\n\t\tuint64(val.n[0])*uint64(val2.n[9]) +\n\t\tuint64(val.n[1])*uint64(val2.n[8]) +\n\t\tuint64(val.n[2])*uint64(val2.n[7]) +\n\t\tuint64(val.n[3])*uint64(val2.n[6]) +\n\t\tuint64(val.n[4])*uint64(val2.n[5]) +\n\t\tuint64(val.n[5])*uint64(val2.n[4]) +\n\t\tuint64(val.n[6])*uint64(val2.n[3]) +\n\t\tuint64(val.n[7])*uint64(val2.n[2]) +\n\t\tuint64(val.n[8])*uint64(val2.n[1]) +\n\t\tuint64(val.n[9])*uint64(val2.n[0])\n\tt9 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*10).\n\tm = (m >> fieldBase) +\n\t\tuint64(val.n[1])*uint64(val2.n[9]) +\n\t\tuint64(val.n[2])*uint64(val2.n[8]) +\n\t\tuint64(val.n[3])*uint64(val2.n[7]) +\n\t\tuint64(val.n[4])*uint64(val2.n[6]) +\n\t\tuint64(val.n[5])*uint64(val2.n[5]) +\n\t\tuint64(val.n[6])*uint64(val2.n[4]) +\n\t\tuint64(val.n[7])*uint64(val2.n[3]) +\n\t\tuint64(val.n[8])*uint64(val2.n[2]) +\n\t\tuint64(val.n[9])*uint64(val2.n[1])\n\tt10 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*11).\n\tm = (m >> fieldBase) +\n\t\tuint64(val.n[2])*uint64(val2.n[9]) +\n\t\tuint64(val.n[3])*uint64(val2.n[8]) +\n\t\tuint64(val.n[4])*uint64(val2.n[7]) +\n\t\tuint64(val.n[5])*uint64(val2.n[6]) +\n\t\tuint64(val.n[6])*uint64(val2.n[5]) +\n\t\tuint64(val.n[7])*uint64(val2.n[4]) +\n\t\tuint64(val.n[8])*uint64(val2.n[3]) +\n\t\tuint64(val.n[9])*uint64(val2.n[2])\n\tt11 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*12).\n\tm = (m >> fieldBase) +\n\t\tuint64(val.n[3])*uint64(val2.n[9]) +\n\t\tuint64(val.n[4])*uint64(val2.n[8]) +\n\t\tuint64(val.n[5])*uint64(val2.n[7]) +\n\t\tuint64(val.n[6])*uint64(val2.n[6]) +\n\t\tuint64(val.n[7])*uint64(val2.n[5]) +\n\t\tuint64(val.n[8])*uint64(val2.n[4]) +\n\t\tuint64(val.n[9])*uint64(val2.n[3])\n\tt12 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*13).\n\tm = (m >> fieldBase) +\n\t\tuint64(val.n[4])*uint64(val2.n[9]) +\n\t\tuint64(val.n[5])*uint64(val2.n[8]) +\n\t\tuint64(val.n[6])*uint64(val2.n[7]) +\n\t\tuint64(val.n[7])*uint64(val2.n[6]) +\n\t\tuint64(val.n[8])*uint64(val2.n[5]) +\n\t\tuint64(val.n[9])*uint64(val2.n[4])\n\tt13 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*14).\n\tm = (m >> fieldBase) +\n\t\tuint64(val.n[5])*uint64(val2.n[9]) +\n\t\tuint64(val.n[6])*uint64(val2.n[8]) +\n\t\tuint64(val.n[7])*uint64(val2.n[7]) +\n\t\tuint64(val.n[8])*uint64(val2.n[6]) +\n\t\tuint64(val.n[9])*uint64(val2.n[5])\n\tt14 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*15).\n\tm = (m >> fieldBase) +\n\t\tuint64(val.n[6])*uint64(val2.n[9]) +\n\t\tuint64(val.n[7])*uint64(val2.n[8]) +\n\t\tuint64(val.n[8])*uint64(val2.n[7]) +\n\t\tuint64(val.n[9])*uint64(val2.n[6])\n\tt15 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*16).\n\tm = (m >> fieldBase) +\n\t\tuint64(val.n[7])*uint64(val2.n[9]) +\n\t\tuint64(val.n[8])*uint64(val2.n[8]) +\n\t\tuint64(val.n[9])*uint64(val2.n[7])\n\tt16 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*17).\n\tm = (m >> fieldBase) +\n\t\tuint64(val.n[8])*uint64(val2.n[9]) +\n\t\tuint64(val.n[9])*uint64(val2.n[8])\n\tt17 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*18).\n\tm = (m >> fieldBase) + uint64(val.n[9])*uint64(val2.n[9])\n\tt18 := m & fieldBaseMask\n\n\t// What's left is for 2^(fieldBase*19).\n\tt19 := m >> fieldBase\n\n\t// At this point, all of the terms are grouped into their respective\n\t// base.\n\t//\n\t// Per [HAC] section 14.3.4: Reduction method of moduli of special form,\n\t// when the modulus is of the special form m = b^t - c, highly efficient\n\t// reduction can be achieved per the provided algorithm.\n\t//\n\t// The secp256k1 prime is equivalent to 2^256 - 4294968273, so it fits\n\t// this criteria.\n\t//\n\t// 4294968273 in field representation (base 2^26) is:\n\t// n[0] = 977\n\t// n[1] = 64\n\t// That is to say (2^26 * 64) + 977 = 4294968273\n\t//\n\t// Since each word is in base 26, the upper terms (t10 and up) start\n\t// at 260 bits (versus the final desired range of 256 bits), so the\n\t// field representation of 'c' from above needs to be adjusted for the\n\t// extra 4 bits by multiplying it by 2^4 = 16.  4294968273 * 16 =\n\t// 68719492368.  Thus, the adjusted field representation of 'c' is:\n\t// n[0] = 977 * 16 = 15632\n\t// n[1] = 64 * 16 = 1024\n\t// That is to say (2^26 * 1024) + 15632 = 68719492368\n\t//\n\t// To reduce the final term, t19, the entire 'c' value is needed instead\n\t// of only n[0] because there are no more terms left to handle n[1].\n\t// This means there might be some magnitude left in the upper bits that\n\t// is handled below.\n\tm = t0 + t10*15632\n\tt0 = m & fieldBaseMask\n\tm = (m >> fieldBase) + t1 + t10*1024 + t11*15632\n\tt1 = m & fieldBaseMask\n\tm = (m >> fieldBase) + t2 + t11*1024 + t12*15632\n\tt2 = m & fieldBaseMask\n\tm = (m >> fieldBase) + t3 + t12*1024 + t13*15632\n\tt3 = m & fieldBaseMask\n\tm = (m >> fieldBase) + t4 + t13*1024 + t14*15632\n\tt4 = m & fieldBaseMask\n\tm = (m >> fieldBase) + t5 + t14*1024 + t15*15632\n\tt5 = m & fieldBaseMask\n\tm = (m >> fieldBase) + t6 + t15*1024 + t16*15632\n\tt6 = m & fieldBaseMask\n\tm = (m >> fieldBase) + t7 + t16*1024 + t17*15632\n\tt7 = m & fieldBaseMask\n\tm = (m >> fieldBase) + t8 + t17*1024 + t18*15632\n\tt8 = m & fieldBaseMask\n\tm = (m >> fieldBase) + t9 + t18*1024 + t19*68719492368\n\tt9 = m & fieldMSBMask\n\tm = m >> fieldMSBBits\n\n\t// At this point, if the magnitude is greater than 0, the overall value\n\t// is greater than the max possible 256-bit value.  In particular, it is\n\t// \"how many times larger\" than the max value it is.\n\t//\n\t// The algorithm presented in [HAC] section 14.3.4 repeats until the\n\t// quotient is zero.  However, due to the above, we already know at\n\t// least how many times we would need to repeat as it's the value\n\t// currently in m.  Thus we can simply multiply the magnitude by the\n\t// field representation of the prime and do a single iteration.  Notice\n\t// that nothing will be changed when the magnitude is zero, so we could\n\t// skip this in that case, however always running regardless allows it\n\t// to run in constant time.  The final result will be in the range\n\t// 0 <= result <= prime + (2^64 - c), so it is guaranteed to have a\n\t// magnitude of 1, but it is denormalized.\n\td := t0 + m*977\n\tf.n[0] = uint32(d & fieldBaseMask)\n\td = (d >> fieldBase) + t1 + m*64\n\tf.n[1] = uint32(d & fieldBaseMask)\n\tf.n[2] = uint32((d >> fieldBase) + t2)\n\tf.n[3] = uint32(t3)\n\tf.n[4] = uint32(t4)\n\tf.n[5] = uint32(t5)\n\tf.n[6] = uint32(t6)\n\tf.n[7] = uint32(t7)\n\tf.n[8] = uint32(t8)\n\tf.n[9] = uint32(t9)\n\n\treturn f\n}\n\n// Square squares the field value.  The existing field value is modified.  Note\n// that this function can overflow if multiplying any of the individual words\n// exceeds a max uint32.  In practice, this means the magnitude of the field\n// must be a max of 8 to prevent overflow.\n//\n// The field value is returned to support chaining.  This enables syntax like:\n// f.Square().Mul(f2) so that f = f^2 * f2.\nfunc (f *fieldVal) Square() *fieldVal {\n\treturn f.SquareVal(f)\n}\n\n// SquareVal squares the passed value and stores the result in f.  Note that\n// this function can overflow if multiplying any of the individual words\n// exceeds a max uint32.  In practice, this means the magnitude of the field\n// being squred must be a max of 8 to prevent overflow.\n//\n// The field value is returned to support chaining.  This enables syntax like:\n// f3.SquareVal(f).Mul(f) so that f3 = f^2 * f = f^3.\nfunc (f *fieldVal) SquareVal(val *fieldVal) *fieldVal {\n\t// This could be done with a couple of for loops and an array to store\n\t// the intermediate terms, but this unrolled version is significantly\n\t// faster.\n\n\t// Terms for 2^(fieldBase*0).\n\tm := uint64(val.n[0]) * uint64(val.n[0])\n\tt0 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*1).\n\tm = (m >> fieldBase) + 2*uint64(val.n[0])*uint64(val.n[1])\n\tt1 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*2).\n\tm = (m >> fieldBase) +\n\t\t2*uint64(val.n[0])*uint64(val.n[2]) +\n\t\tuint64(val.n[1])*uint64(val.n[1])\n\tt2 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*3).\n\tm = (m >> fieldBase) +\n\t\t2*uint64(val.n[0])*uint64(val.n[3]) +\n\t\t2*uint64(val.n[1])*uint64(val.n[2])\n\tt3 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*4).\n\tm = (m >> fieldBase) +\n\t\t2*uint64(val.n[0])*uint64(val.n[4]) +\n\t\t2*uint64(val.n[1])*uint64(val.n[3]) +\n\t\tuint64(val.n[2])*uint64(val.n[2])\n\tt4 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*5).\n\tm = (m >> fieldBase) +\n\t\t2*uint64(val.n[0])*uint64(val.n[5]) +\n\t\t2*uint64(val.n[1])*uint64(val.n[4]) +\n\t\t2*uint64(val.n[2])*uint64(val.n[3])\n\tt5 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*6).\n\tm = (m >> fieldBase) +\n\t\t2*uint64(val.n[0])*uint64(val.n[6]) +\n\t\t2*uint64(val.n[1])*uint64(val.n[5]) +\n\t\t2*uint64(val.n[2])*uint64(val.n[4]) +\n\t\tuint64(val.n[3])*uint64(val.n[3])\n\tt6 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*7).\n\tm = (m >> fieldBase) +\n\t\t2*uint64(val.n[0])*uint64(val.n[7]) +\n\t\t2*uint64(val.n[1])*uint64(val.n[6]) +\n\t\t2*uint64(val.n[2])*uint64(val.n[5]) +\n\t\t2*uint64(val.n[3])*uint64(val.n[4])\n\tt7 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*8).\n\tm = (m >> fieldBase) +\n\t\t2*uint64(val.n[0])*uint64(val.n[8]) +\n\t\t2*uint64(val.n[1])*uint64(val.n[7]) +\n\t\t2*uint64(val.n[2])*uint64(val.n[6]) +\n\t\t2*uint64(val.n[3])*uint64(val.n[5]) +\n\t\tuint64(val.n[4])*uint64(val.n[4])\n\tt8 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*9).\n\tm = (m >> fieldBase) +\n\t\t2*uint64(val.n[0])*uint64(val.n[9]) +\n\t\t2*uint64(val.n[1])*uint64(val.n[8]) +\n\t\t2*uint64(val.n[2])*uint64(val.n[7]) +\n\t\t2*uint64(val.n[3])*uint64(val.n[6]) +\n\t\t2*uint64(val.n[4])*uint64(val.n[5])\n\tt9 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*10).\n\tm = (m >> fieldBase) +\n\t\t2*uint64(val.n[1])*uint64(val.n[9]) +\n\t\t2*uint64(val.n[2])*uint64(val.n[8]) +\n\t\t2*uint64(val.n[3])*uint64(val.n[7]) +\n\t\t2*uint64(val.n[4])*uint64(val.n[6]) +\n\t\tuint64(val.n[5])*uint64(val.n[5])\n\tt10 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*11).\n\tm = (m >> fieldBase) +\n\t\t2*uint64(val.n[2])*uint64(val.n[9]) +\n\t\t2*uint64(val.n[3])*uint64(val.n[8]) +\n\t\t2*uint64(val.n[4])*uint64(val.n[7]) +\n\t\t2*uint64(val.n[5])*uint64(val.n[6])\n\tt11 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*12).\n\tm = (m >> fieldBase) +\n\t\t2*uint64(val.n[3])*uint64(val.n[9]) +\n\t\t2*uint64(val.n[4])*uint64(val.n[8]) +\n\t\t2*uint64(val.n[5])*uint64(val.n[7]) +\n\t\tuint64(val.n[6])*uint64(val.n[6])\n\tt12 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*13).\n\tm = (m >> fieldBase) +\n\t\t2*uint64(val.n[4])*uint64(val.n[9]) +\n\t\t2*uint64(val.n[5])*uint64(val.n[8]) +\n\t\t2*uint64(val.n[6])*uint64(val.n[7])\n\tt13 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*14).\n\tm = (m >> fieldBase) +\n\t\t2*uint64(val.n[5])*uint64(val.n[9]) +\n\t\t2*uint64(val.n[6])*uint64(val.n[8]) +\n\t\tuint64(val.n[7])*uint64(val.n[7])\n\tt14 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*15).\n\tm = (m >> fieldBase) +\n\t\t2*uint64(val.n[6])*uint64(val.n[9]) +\n\t\t2*uint64(val.n[7])*uint64(val.n[8])\n\tt15 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*16).\n\tm = (m >> fieldBase) +\n\t\t2*uint64(val.n[7])*uint64(val.n[9]) +\n\t\tuint64(val.n[8])*uint64(val.n[8])\n\tt16 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*17).\n\tm = (m >> fieldBase) + 2*uint64(val.n[8])*uint64(val.n[9])\n\tt17 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*18).\n\tm = (m >> fieldBase) + uint64(val.n[9])*uint64(val.n[9])\n\tt18 := m & fieldBaseMask\n\n\t// What's left is for 2^(fieldBase*19).\n\tt19 := m >> fieldBase\n\n\t// At this point, all of the terms are grouped into their respective\n\t// base.\n\t//\n\t// Per [HAC] section 14.3.4: Reduction method of moduli of special form,\n\t// when the modulus is of the special form m = b^t - c, highly efficient\n\t// reduction can be achieved per the provided algorithm.\n\t//\n\t// The secp256k1 prime is equivalent to 2^256 - 4294968273, so it fits\n\t// this criteria.\n\t//\n\t// 4294968273 in field representation (base 2^26) is:\n\t// n[0] = 977\n\t// n[1] = 64\n\t// That is to say (2^26 * 64) + 977 = 4294968273\n\t//\n\t// Since each word is in base 26, the upper terms (t10 and up) start\n\t// at 260 bits (versus the final desired range of 256 bits), so the\n\t// field representation of 'c' from above needs to be adjusted for the\n\t// extra 4 bits by multiplying it by 2^4 = 16.  4294968273 * 16 =\n\t// 68719492368.  Thus, the adjusted field representation of 'c' is:\n\t// n[0] = 977 * 16 = 15632\n\t// n[1] = 64 * 16 = 1024\n\t// That is to say (2^26 * 1024) + 15632 = 68719492368\n\t//\n\t// To reduce the final term, t19, the entire 'c' value is needed instead\n\t// of only n[0] because there are no more terms left to handle n[1].\n\t// This means there might be some magnitude left in the upper bits that\n\t// is handled below.\n\tm = t0 + t10*15632\n\tt0 = m & fieldBaseMask\n\tm = (m >> fieldBase) + t1 + t10*1024 + t11*15632\n\tt1 = m & fieldBaseMask\n\tm = (m >> fieldBase) + t2 + t11*1024 + t12*15632\n\tt2 = m & fieldBaseMask\n\tm = (m >> fieldBase) + t3 + t12*1024 + t13*15632\n\tt3 = m & fieldBaseMask\n\tm = (m >> fieldBase) + t4 + t13*1024 + t14*15632\n\tt4 = m & fieldBaseMask\n\tm = (m >> fieldBase) + t5 + t14*1024 + t15*15632\n\tt5 = m & fieldBaseMask\n\tm = (m >> fieldBase) + t6 + t15*1024 + t16*15632\n\tt6 = m & fieldBaseMask\n\tm = (m >> fieldBase) + t7 + t16*1024 + t17*15632\n\tt7 = m & fieldBaseMask\n\tm = (m >> fieldBase) + t8 + t17*1024 + t18*15632\n\tt8 = m & fieldBaseMask\n\tm = (m >> fieldBase) + t9 + t18*1024 + t19*68719492368\n\tt9 = m & fieldMSBMask\n\tm = m >> fieldMSBBits\n\n\t// At this point, if the magnitude is greater than 0, the overall value\n\t// is greater than the max possible 256-bit value.  In particular, it is\n\t// \"how many times larger\" than the max value it is.\n\t//\n\t// The algorithm presented in [HAC] section 14.3.4 repeats until the\n\t// quotient is zero.  However, due to the above, we already know at\n\t// least how many times we would need to repeat as it's the value\n\t// currently in m.  Thus we can simply multiply the magnitude by the\n\t// field representation of the prime and do a single iteration.  Notice\n\t// that nothing will be changed when the magnitude is zero, so we could\n\t// skip this in that case, however always running regardless allows it\n\t// to run in constant time.  The final result will be in the range\n\t// 0 <= result <= prime + (2^64 - c), so it is guaranteed to have a\n\t// magnitude of 1, but it is denormalized.\n\tn := t0 + m*977\n\tf.n[0] = uint32(n & fieldBaseMask)\n\tn = (n >> fieldBase) + t1 + m*64\n\tf.n[1] = uint32(n & fieldBaseMask)\n\tf.n[2] = uint32((n >> fieldBase) + t2)\n\tf.n[3] = uint32(t3)\n\tf.n[4] = uint32(t4)\n\tf.n[5] = uint32(t5)\n\tf.n[6] = uint32(t6)\n\tf.n[7] = uint32(t7)\n\tf.n[8] = uint32(t8)\n\tf.n[9] = uint32(t9)\n\n\treturn f\n}\n\n// Inverse finds the modular multiplicative inverse of the field value.  The\n// existing field value is modified.\n//\n// The field value is returned to support chaining.  This enables syntax like:\n// f.Inverse().Mul(f2) so that f = f^-1 * f2.\nfunc (f *fieldVal) Inverse() *fieldVal {\n\t// Fermat's little theorem states that for a nonzero number a and prime\n\t// prime p, a^(p-1) = 1 (mod p).  Since the multipliciative inverse is\n\t// a*b = 1 (mod p), it follows that b = a*a^(p-2) = a^(p-1) = 1 (mod p).\n\t// Thus, a^(p-2) is the multiplicative inverse.\n\t//\n\t// In order to efficiently compute a^(p-2), p-2 needs to be split into\n\t// a sequence of squares and multipications that minimizes the number of\n\t// multiplications needed (since they are more costly than squarings).\n\t// Intermediate results are saved and reused as well.\n\t//\n\t// The secp256k1 prime - 2 is 2^256 - 4294968275.\n\t//\n\t// This has a cost of 258 field squarings and 33 field multiplications.\n\tvar a2, a3, a4, a10, a11, a21, a42, a45, a63, a1019, a1023 fieldVal\n\ta2.SquareVal(f)\n\ta3.Mul2(&a2, f)\n\ta4.SquareVal(&a2)\n\ta10.SquareVal(&a4).Mul(&a2)\n\ta11.Mul2(&a10, f)\n\ta21.Mul2(&a10, &a11)\n\ta42.SquareVal(&a21)\n\ta45.Mul2(&a42, &a3)\n\ta63.Mul2(&a42, &a21)\n\ta1019.SquareVal(&a63).Square().Square().Square().Mul(&a11)\n\ta1023.Mul2(&a1019, &a4)\n\tf.Set(&a63)                                    // f = a^(2^6 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^11 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^16 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^16 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^21 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^26 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^26 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^31 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^36 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^36 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^41 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^46 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^46 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^51 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^56 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^56 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^61 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^66 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^66 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^71 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^76 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^76 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^81 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^86 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^86 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^91 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^96 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^96 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^101 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^106 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^106 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^111 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^116 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^116 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^121 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^126 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^126 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^131 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^136 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^136 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^141 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^146 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^146 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^151 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^156 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^156 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^161 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^166 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^166 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^171 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^176 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^176 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^181 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^186 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^186 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^191 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^196 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^196 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^201 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^206 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^206 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^211 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^216 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^216 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^221 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^226 - 1024)\n\tf.Mul(&a1019)                                  // f = a^(2^226 - 5)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^231 - 160)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^236 - 5120)\n\tf.Mul(&a1023)                                  // f = a^(2^236 - 4097)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^241 - 131104)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^246 - 4195328)\n\tf.Mul(&a1023)                                  // f = a^(2^246 - 4194305)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^251 - 134217760)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^256 - 4294968320)\n\treturn f.Mul(&a45)                             // f = a^(2^256 - 4294968275) = a^(p-2)\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/btcec/genprecomps.go",
    "content": "// Copyright 2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\n// This file is ignored during the regular build due to the following build tag.\n// It is called by go generate and used to automatically generate pre-computed\n// tables used to accelerate operations.\n// +build ignore\n\npackage main\n\nimport (\n\t\"bytes\"\n\t\"compress/zlib\"\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/bcext/gcash/btcec\"\n)\n\nfunc main() {\n\tfi, err := os.Create(\"secp256k1.go\")\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tdefer fi.Close()\n\n\t// Compress the serialized byte points.\n\tserialized := btcec.S256().SerializedBytePoints()\n\tvar compressed bytes.Buffer\n\tw := zlib.NewWriter(&compressed)\n\tif _, err := w.Write(serialized); err != nil {\n\t\tfmt.Println(err)\n\t\tos.Exit(1)\n\t}\n\tw.Close()\n\n\t// Encode the compressed byte points with base64.\n\tencoded := make([]byte, base64.StdEncoding.EncodedLen(compressed.Len()))\n\tbase64.StdEncoding.Encode(encoded, compressed.Bytes())\n\n\tfmt.Fprintln(fi, \"// Copyright (c) 2015 The btcsuite developers\")\n\tfmt.Fprintln(fi, \"// Use of this source code is governed by an ISC\")\n\tfmt.Fprintln(fi, \"// license that can be found in the LICENSE file.\")\n\tfmt.Fprintln(fi)\n\tfmt.Fprintln(fi, \"package btcec\")\n\tfmt.Fprintln(fi)\n\tfmt.Fprintln(fi, \"// Auto-generated file (see genprecomps.go)\")\n\tfmt.Fprintln(fi, \"// DO NOT EDIT\")\n\tfmt.Fprintln(fi)\n\tfmt.Fprintf(fi, \"var secp256k1BytePoints = %q\\n\", string(encoded))\n\n\ta1, b1, a2, b2 := btcec.S256().EndomorphismVectors()\n\tfmt.Println(\"The following values are the computed linearly \" +\n\t\t\"independent vectors needed to make use of the secp256k1 \" +\n\t\t\"endomorphism:\")\n\tfmt.Printf(\"a1: %x\\n\", a1)\n\tfmt.Printf(\"b1: %x\\n\", b1)\n\tfmt.Printf(\"a2: %x\\n\", a2)\n\tfmt.Printf(\"b2: %x\\n\", b2)\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/btcec/gensecp256k1.go",
    "content": "// Copyright (c) 2014-2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\n// This file is ignored during the regular build due to the following build tag.\n// This build tag is set during go generate.\n// +build gensecp256k1\n\npackage btcec\n\n// References:\n//   [GECC]: Guide to Elliptic Curve Cryptography (Hankerson, Menezes, Vanstone)\n\nimport (\n\t\"encoding/binary\"\n\t\"math/big\"\n)\n\n// secp256k1BytePoints are dummy points used so the code which generates the\n// real values can compile.\nvar secp256k1BytePoints = \"\"\n\n// getDoublingPoints returns all the possible G^(2^i) for i in\n// 0..n-1 where n is the curve's bit size (256 in the case of secp256k1)\n// the coordinates are recorded as Jacobian coordinates.\nfunc (curve *KoblitzCurve) getDoublingPoints() [][3]fieldVal {\n\tdoublingPoints := make([][3]fieldVal, curve.BitSize)\n\n\t// initialize px, py, pz to the Jacobian coordinates for the base point\n\tpx, py := curve.bigAffineToField(curve.Gx, curve.Gy)\n\tpz := new(fieldVal).SetInt(1)\n\tfor i := 0; i < curve.BitSize; i++ {\n\t\tdoublingPoints[i] = [3]fieldVal{*px, *py, *pz}\n\t\t// P = 2*P\n\t\tcurve.doubleJacobian(px, py, pz, px, py, pz)\n\t}\n\treturn doublingPoints\n}\n\n// SerializedBytePoints returns a serialized byte slice which contains all of\n// the possible points per 8-bit window.  This is used to when generating\n// secp256k1.go.\nfunc (curve *KoblitzCurve) SerializedBytePoints() []byte {\n\tdoublingPoints := curve.getDoublingPoints()\n\n\t// Segregate the bits into byte-sized windows\n\tserialized := make([]byte, curve.byteSize*256*3*10*4)\n\toffset := 0\n\tfor byteNum := 0; byteNum < curve.byteSize; byteNum++ {\n\t\t// Grab the 8 bits that make up this byte from doublingPoints.\n\t\tstartingBit := 8 * (curve.byteSize - byteNum - 1)\n\t\tcomputingPoints := doublingPoints[startingBit : startingBit+8]\n\n\t\t// Compute all points in this window and serialize them.\n\t\tfor i := 0; i < 256; i++ {\n\t\t\tpx, py, pz := new(fieldVal), new(fieldVal), new(fieldVal)\n\t\t\tfor j := 0; j < 8; j++ {\n\t\t\t\tif i>>uint(j)&1 == 1 {\n\t\t\t\t\tcurve.addJacobian(px, py, pz, &computingPoints[j][0],\n\t\t\t\t\t\t&computingPoints[j][1], &computingPoints[j][2], px, py, pz)\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor i := 0; i < 10; i++ {\n\t\t\t\tbinary.LittleEndian.PutUint32(serialized[offset:], px.n[i])\n\t\t\t\toffset += 4\n\t\t\t}\n\t\t\tfor i := 0; i < 10; i++ {\n\t\t\t\tbinary.LittleEndian.PutUint32(serialized[offset:], py.n[i])\n\t\t\t\toffset += 4\n\t\t\t}\n\t\t\tfor i := 0; i < 10; i++ {\n\t\t\t\tbinary.LittleEndian.PutUint32(serialized[offset:], pz.n[i])\n\t\t\t\toffset += 4\n\t\t\t}\n\t\t}\n\t}\n\n\treturn serialized\n}\n\n// sqrt returns the square root of the provided big integer using Newton's\n// method.  It's only compiled and used during generation of pre-computed\n// values, so speed is not a huge concern.\nfunc sqrt(n *big.Int) *big.Int {\n\t// Initial guess = 2^(log_2(n)/2)\n\tguess := big.NewInt(2)\n\tguess.Exp(guess, big.NewInt(int64(n.BitLen()/2)), nil)\n\n\t// Now refine using Newton's method.\n\tbig2 := big.NewInt(2)\n\tprevGuess := big.NewInt(0)\n\tfor {\n\t\tprevGuess.Set(guess)\n\t\tguess.Add(guess, new(big.Int).Div(n, guess))\n\t\tguess.Div(guess, big2)\n\t\tif guess.Cmp(prevGuess) == 0 {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn guess\n}\n\n// EndomorphismVectors runs the first 3 steps of algorithm 3.74 from [GECC] to\n// generate the linearly independent vectors needed to generate a balanced\n// length-two representation of a multiplier such that k = k1 + k2λ (mod N) and\n// returns them.  Since the values will always be the same given the fact that N\n// and λ are fixed, the final results can be accelerated by storing the\n// precomputed values with the curve.\nfunc (curve *KoblitzCurve) EndomorphismVectors() (a1, b1, a2, b2 *big.Int) {\n\tbigMinus1 := big.NewInt(-1)\n\n\t// This section uses an extended Euclidean algorithm to generate a\n\t// sequence of equations:\n\t//  s[i] * N + t[i] * λ = r[i]\n\n\tnSqrt := sqrt(curve.N)\n\tu, v := new(big.Int).Set(curve.N), new(big.Int).Set(curve.lambda)\n\tx1, y1 := big.NewInt(1), big.NewInt(0)\n\tx2, y2 := big.NewInt(0), big.NewInt(1)\n\tq, r := new(big.Int), new(big.Int)\n\tqu, qx1, qy1 := new(big.Int), new(big.Int), new(big.Int)\n\ts, t := new(big.Int), new(big.Int)\n\tri, ti := new(big.Int), new(big.Int)\n\ta1, b1, a2, b2 = new(big.Int), new(big.Int), new(big.Int), new(big.Int)\n\tfound, oneMore := false, false\n\tfor u.Sign() != 0 {\n\t\t// q = v/u\n\t\tq.Div(v, u)\n\n\t\t// r = v - q*u\n\t\tqu.Mul(q, u)\n\t\tr.Sub(v, qu)\n\n\t\t// s = x2 - q*x1\n\t\tqx1.Mul(q, x1)\n\t\ts.Sub(x2, qx1)\n\n\t\t// t = y2 - q*y1\n\t\tqy1.Mul(q, y1)\n\t\tt.Sub(y2, qy1)\n\n\t\t// v = u, u = r, x2 = x1, x1 = s, y2 = y1, y1 = t\n\t\tv.Set(u)\n\t\tu.Set(r)\n\t\tx2.Set(x1)\n\t\tx1.Set(s)\n\t\ty2.Set(y1)\n\t\ty1.Set(t)\n\n\t\t// As soon as the remainder is less than the sqrt of n, the\n\t\t// values of a1 and b1 are known.\n\t\tif !found && r.Cmp(nSqrt) < 0 {\n\t\t\t// When this condition executes ri and ti represent the\n\t\t\t// r[i] and t[i] values such that i is the greatest\n\t\t\t// index for which r >= sqrt(n).  Meanwhile, the current\n\t\t\t// r and t values are r[i+1] and t[i+1], respectively.\n\n\t\t\t// a1 = r[i+1], b1 = -t[i+1]\n\t\t\ta1.Set(r)\n\t\t\tb1.Mul(t, bigMinus1)\n\t\t\tfound = true\n\t\t\toneMore = true\n\n\t\t\t// Skip to the next iteration so ri and ti are not\n\t\t\t// modified.\n\t\t\tcontinue\n\n\t\t} else if oneMore {\n\t\t\t// When this condition executes ri and ti still\n\t\t\t// represent the r[i] and t[i] values while the current\n\t\t\t// r and t are r[i+2] and t[i+2], respectively.\n\n\t\t\t// sum1 = r[i]^2 + t[i]^2\n\t\t\trSquared := new(big.Int).Mul(ri, ri)\n\t\t\ttSquared := new(big.Int).Mul(ti, ti)\n\t\t\tsum1 := new(big.Int).Add(rSquared, tSquared)\n\n\t\t\t// sum2 = r[i+2]^2 + t[i+2]^2\n\t\t\tr2Squared := new(big.Int).Mul(r, r)\n\t\t\tt2Squared := new(big.Int).Mul(t, t)\n\t\t\tsum2 := new(big.Int).Add(r2Squared, t2Squared)\n\n\t\t\t// if (r[i]^2 + t[i]^2) <= (r[i+2]^2 + t[i+2]^2)\n\t\t\tif sum1.Cmp(sum2) <= 0 {\n\t\t\t\t// a2 = r[i], b2 = -t[i]\n\t\t\t\ta2.Set(ri)\n\t\t\t\tb2.Mul(ti, bigMinus1)\n\t\t\t} else {\n\t\t\t\t// a2 = r[i+2], b2 = -t[i+2]\n\t\t\t\ta2.Set(r)\n\t\t\t\tb2.Mul(t, bigMinus1)\n\t\t\t}\n\n\t\t\t// All done.\n\t\t\tbreak\n\t\t}\n\n\t\tri.Set(r)\n\t\tti.Set(t)\n\t}\n\n\treturn a1, b1, a2, b2\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/btcec/precompute.go",
    "content": "// Copyright 2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcec\n\nimport (\n\t\"compress/zlib\"\n\t\"encoding/base64\"\n\t\"encoding/binary\"\n\t\"io/ioutil\"\n\t\"strings\"\n)\n\n//go:generate go run -tags gensecp256k1 genprecomps.go\n\n// loadS256BytePoints decompresses and deserializes the pre-computed byte points\n// used to accelerate scalar base multiplication for the secp256k1 curve.  This\n// approach is used since it allows the compile to use significantly less ram\n// and be performed much faster than it is with hard-coding the final in-memory\n// data structure.  At the same time, it is quite fast to generate the in-memory\n// data structure at init time with this approach versus computing the table.\nfunc loadS256BytePoints() error {\n\t// There will be no byte points to load when generating them.\n\tbp := secp256k1BytePoints\n\tif len(bp) == 0 {\n\t\treturn nil\n\t}\n\n\t// Decompress the pre-computed table used to accelerate scalar base\n\t// multiplication.\n\tdecoder := base64.NewDecoder(base64.StdEncoding, strings.NewReader(bp))\n\tr, err := zlib.NewReader(decoder)\n\tif err != nil {\n\t\treturn err\n\t}\n\tserialized, err := ioutil.ReadAll(r)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Deserialize the precomputed byte points and set the curve to them.\n\toffset := 0\n\tvar bytePoints [32][256][3]fieldVal\n\tfor byteNum := 0; byteNum < 32; byteNum++ {\n\t\t// All points in this window.\n\t\tfor i := 0; i < 256; i++ {\n\t\t\tpx := &bytePoints[byteNum][i][0]\n\t\t\tpy := &bytePoints[byteNum][i][1]\n\t\t\tpz := &bytePoints[byteNum][i][2]\n\t\t\tfor i := 0; i < 10; i++ {\n\t\t\t\tpx.n[i] = binary.LittleEndian.Uint32(serialized[offset:])\n\t\t\t\toffset += 4\n\t\t\t}\n\t\t\tfor i := 0; i < 10; i++ {\n\t\t\t\tpy.n[i] = binary.LittleEndian.Uint32(serialized[offset:])\n\t\t\t\toffset += 4\n\t\t\t}\n\t\t\tfor i := 0; i < 10; i++ {\n\t\t\t\tpz.n[i] = binary.LittleEndian.Uint32(serialized[offset:])\n\t\t\t\toffset += 4\n\t\t\t}\n\t\t}\n\t}\n\tsecp256k1.bytePoints = &bytePoints\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/btcec/privkey.go",
    "content": "// Copyright (c) 2013-2016 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcec\n\nimport (\n\t\"crypto/ecdsa\"\n\t\"crypto/elliptic\"\n\t\"crypto/rand\"\n\t\"math/big\"\n)\n\n// PrivateKey wraps an ecdsa.PrivateKey as a convenience mainly for signing\n// things with the the private key without having to directly import the ecdsa\n// package.\ntype PrivateKey ecdsa.PrivateKey\n\n// PrivKeyFromBytes returns a private and public key for `curve' based on the\n// private key passed as an argument as a byte slice.\nfunc PrivKeyFromBytes(curve elliptic.Curve, pk []byte) (*PrivateKey,\n\t*PublicKey) {\n\tx, y := curve.ScalarBaseMult(pk)\n\n\tpriv := &ecdsa.PrivateKey{\n\t\tPublicKey: ecdsa.PublicKey{\n\t\t\tCurve: curve,\n\t\t\tX:     x,\n\t\t\tY:     y,\n\t\t},\n\t\tD: new(big.Int).SetBytes(pk),\n\t}\n\n\treturn (*PrivateKey)(priv), (*PublicKey)(&priv.PublicKey)\n}\n\n// NewPrivateKey is a wrapper for ecdsa.GenerateKey that returns a PrivateKey\n// instead of the normal ecdsa.PrivateKey.\nfunc NewPrivateKey(curve elliptic.Curve) (*PrivateKey, error) {\n\tkey, err := ecdsa.GenerateKey(curve, rand.Reader)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn (*PrivateKey)(key), nil\n}\n\n// PubKey returns the PublicKey corresponding to this private key.\nfunc (p *PrivateKey) PubKey() *PublicKey {\n\treturn (*PublicKey)(&p.PublicKey)\n}\n\n// ToECDSA returns the private key as a *ecdsa.PrivateKey.\nfunc (p *PrivateKey) ToECDSA() *ecdsa.PrivateKey {\n\treturn (*ecdsa.PrivateKey)(p)\n}\n\n// Sign generates an ECDSA signature for the provided hash (which should be the result\n// of hashing a larger message) using the private key. Produced signature\n// is deterministic (same message and same key yield the same signature) and canonical\n// in accordance with RFC6979 and BIP0062.\nfunc (p *PrivateKey) Sign(hash []byte) (*Signature, error) {\n\treturn signRFC6979(p, hash)\n}\n\n// PrivKeyBytesLen defines the length in bytes of a serialized private key.\nconst PrivKeyBytesLen = 32\n\n// Serialize returns the private key number d as a big-endian binary-encoded\n// number, padded to a length of 32 bytes.\nfunc (p *PrivateKey) Serialize() []byte {\n\tb := make([]byte, 0, PrivKeyBytesLen)\n\treturn paddedAppend(PrivKeyBytesLen, b, p.ToECDSA().D.Bytes())\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/btcec/pubkey.go",
    "content": "// Copyright (c) 2013-2014 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcec\n\nimport (\n\t\"crypto/ecdsa\"\n\t\"errors\"\n\t\"fmt\"\n\t\"math/big\"\n)\n\n// These constants define the lengths of serialized public keys.\nconst (\n\tPubKeyBytesLenCompressed   = 33\n\tPubKeyBytesLenUncompressed = 65\n\tPubKeyBytesLenHybrid       = 65\n)\n\nfunc isOdd(a *big.Int) bool {\n\treturn a.Bit(0) == 1\n}\n\n// decompressPoint decompresses a point on the given curve given the X point and\n// the solution to use.\nfunc decompressPoint(curve *KoblitzCurve, x *big.Int, ybit bool) (*big.Int, error) {\n\t// TODO: This will probably only work for secp256k1 due to\n\t// optimizations.\n\n\t// Y = +-sqrt(x^3 + B)\n\tx3 := new(big.Int).Mul(x, x)\n\tx3.Mul(x3, x)\n\tx3.Add(x3, curve.Params().B)\n\tx3.Mod(x3, curve.Params().P)\n\n\t// Now calculate sqrt mod p of x^3 + B\n\t// This code used to do a full sqrt based on tonelli/shanks,\n\t// but this was replaced by the algorithms referenced in\n\t// https://bitcointalk.org/index.php?topic=162805.msg1712294#msg1712294\n\ty := new(big.Int).Exp(x3, curve.QPlus1Div4(), curve.Params().P)\n\n\tif ybit != isOdd(y) {\n\t\ty.Sub(curve.Params().P, y)\n\t}\n\n\t// Check that y is a square root of x^3 + B.\n\ty2 := new(big.Int).Mul(y, y)\n\ty2.Mod(y2, curve.Params().P)\n\tif y2.Cmp(x3) != 0 {\n\t\treturn nil, fmt.Errorf(\"invalid square root\")\n\t}\n\n\t// Verify that y-coord has expected parity.\n\tif ybit != isOdd(y) {\n\t\treturn nil, fmt.Errorf(\"ybit doesn't match oddness\")\n\t}\n\n\treturn y, nil\n}\n\nconst (\n\tpubkeyCompressed   byte = 0x2 // y_bit + x coord\n\tpubkeyUncompressed byte = 0x4 // x coord + y coord\n\tpubkeyHybrid       byte = 0x6 // y_bit + x coord + y coord\n)\n\n// IsCompressedPubKey returns true the the passed serialized public key has\n// been encoded in compressed format, and false otherwise.\nfunc IsCompressedPubKey(pubKey []byte) bool {\n\t// The public key is only compressed if it is the correct length and\n\t// the format (first byte) is one of the compressed pubkey values.\n\treturn len(pubKey) == PubKeyBytesLenCompressed &&\n\t\t(pubKey[0]&^byte(0x1) == pubkeyCompressed)\n}\n\n// ParsePubKey parses a public key for a koblitz curve from a bytestring into a\n// ecdsa.Publickey, verifying that it is valid. It supports compressed,\n// uncompressed and hybrid signature formats.\nfunc ParsePubKey(pubKeyStr []byte, curve *KoblitzCurve) (key *PublicKey, err error) {\n\tpubkey := PublicKey{}\n\tpubkey.Curve = curve\n\n\tif len(pubKeyStr) == 0 {\n\t\treturn nil, errors.New(\"pubkey string is empty\")\n\t}\n\n\tformat := pubKeyStr[0]\n\tybit := (format & 0x1) == 0x1\n\tformat &= ^byte(0x1)\n\n\tswitch len(pubKeyStr) {\n\tcase PubKeyBytesLenUncompressed:\n\t\tif format != pubkeyUncompressed && format != pubkeyHybrid {\n\t\t\treturn nil, fmt.Errorf(\"invalid magic in pubkey str: \"+\n\t\t\t\t\"%d\", pubKeyStr[0])\n\t\t}\n\n\t\tpubkey.X = new(big.Int).SetBytes(pubKeyStr[1:33])\n\t\tpubkey.Y = new(big.Int).SetBytes(pubKeyStr[33:])\n\t\t// hybrid keys have extra information, make use of it.\n\t\tif format == pubkeyHybrid && ybit != isOdd(pubkey.Y) {\n\t\t\treturn nil, fmt.Errorf(\"ybit doesn't match oddness\")\n\t\t}\n\tcase PubKeyBytesLenCompressed:\n\t\t// format is 0x2 | solution, <X coordinate>\n\t\t// solution determines which solution of the curve we use.\n\t\t/// y^2 = x^3 + Curve.B\n\t\tif format != pubkeyCompressed {\n\t\t\treturn nil, fmt.Errorf(\"invalid magic in compressed \"+\n\t\t\t\t\"pubkey string: %d\", pubKeyStr[0])\n\t\t}\n\t\tpubkey.X = new(big.Int).SetBytes(pubKeyStr[1:33])\n\t\tpubkey.Y, err = decompressPoint(curve, pubkey.X, ybit)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\tdefault: // wrong!\n\t\treturn nil, fmt.Errorf(\"invalid pub key length %d\",\n\t\t\tlen(pubKeyStr))\n\t}\n\n\tif pubkey.X.Cmp(pubkey.Curve.Params().P) >= 0 {\n\t\treturn nil, fmt.Errorf(\"pubkey X parameter is >= to P\")\n\t}\n\tif pubkey.Y.Cmp(pubkey.Curve.Params().P) >= 0 {\n\t\treturn nil, fmt.Errorf(\"pubkey Y parameter is >= to P\")\n\t}\n\tif !pubkey.Curve.IsOnCurve(pubkey.X, pubkey.Y) {\n\t\treturn nil, fmt.Errorf(\"pubkey isn't on secp256k1 curve\")\n\t}\n\treturn &pubkey, nil\n}\n\n// PublicKey is an ecdsa.PublicKey with additional functions to\n// serialize in uncompressed, compressed, and hybrid formats.\ntype PublicKey ecdsa.PublicKey\n\n// ToECDSA returns the public key as a *ecdsa.PublicKey.\nfunc (p *PublicKey) ToECDSA() *ecdsa.PublicKey {\n\treturn (*ecdsa.PublicKey)(p)\n}\n\n// SerializeUncompressed serializes a public key in a 65-byte uncompressed\n// format.\nfunc (p *PublicKey) SerializeUncompressed() []byte {\n\tb := make([]byte, 0, PubKeyBytesLenUncompressed)\n\tb = append(b, pubkeyUncompressed)\n\tb = paddedAppend(32, b, p.X.Bytes())\n\treturn paddedAppend(32, b, p.Y.Bytes())\n}\n\n// SerializeCompressed serializes a public key in a 33-byte compressed format.\nfunc (p *PublicKey) SerializeCompressed() []byte {\n\tb := make([]byte, 0, PubKeyBytesLenCompressed)\n\tformat := pubkeyCompressed\n\tif isOdd(p.Y) {\n\t\tformat |= 0x1\n\t}\n\tb = append(b, format)\n\treturn paddedAppend(32, b, p.X.Bytes())\n}\n\n// SerializeHybrid serializes a public key in a 65-byte hybrid format.\nfunc (p *PublicKey) SerializeHybrid() []byte {\n\tb := make([]byte, 0, PubKeyBytesLenHybrid)\n\tformat := pubkeyHybrid\n\tif isOdd(p.Y) {\n\t\tformat |= 0x1\n\t}\n\tb = append(b, format)\n\tb = paddedAppend(32, b, p.X.Bytes())\n\treturn paddedAppend(32, b, p.Y.Bytes())\n}\n\n// IsEqual compares this PublicKey instance to the one passed, returning true if\n// both PublicKeys are equivalent. A PublicKey is equivalent to another, if they\n// both have the same X and Y coordinate.\nfunc (p *PublicKey) IsEqual(otherPubKey *PublicKey) bool {\n\treturn p.X.Cmp(otherPubKey.X) == 0 &&\n\t\tp.Y.Cmp(otherPubKey.Y) == 0\n}\n\n// paddedAppend appends the src byte slice to dst, returning the new slice.\n// If the length of the source is smaller than the passed size, leading zero\n// bytes are appended to the dst slice before appending src.\nfunc paddedAppend(size uint, dst, src []byte) []byte {\n\tfor i := 0; i < int(size)-len(src); i++ {\n\t\tdst = append(dst, 0)\n\t}\n\treturn append(dst, src...)\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/btcec/secp256k1.go",
    "content": "// Copyright (c) 2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcec\n\n// Auto-generated file (see genprecomps.go)\n// DO NOT EDIT\n\nvar secp256k1BytePoints = \"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\"\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/btcec/signature.go",
    "content": "// Copyright (c) 2013-2017 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcec\n\nimport (\n\t\"bytes\"\n\t\"crypto/ecdsa\"\n\t\"crypto/elliptic\"\n\t\"crypto/hmac\"\n\t\"crypto/sha256\"\n\t\"errors\"\n\t\"fmt\"\n\t\"hash\"\n\t\"math/big\"\n)\n\n// Errors returned by canonicalPadding.\nvar (\n\terrNegativeValue          = errors.New(\"value may be interpreted as negative\")\n\terrExcessivelyPaddedValue = errors.New(\"value is excessively padded\")\n)\n\n// Signature is a type representing an ecdsa signature.\ntype Signature struct {\n\tR *big.Int\n\tS *big.Int\n}\n\nvar (\n\t// Used in RFC6979 implementation when testing the nonce for correctness\n\tone = big.NewInt(1)\n\n\t// oneInitializer is used to fill a byte slice with byte 0x01.  It is provided\n\t// here to avoid the need to create it multiple times.\n\toneInitializer = []byte{0x01}\n)\n\n// Serialize returns the ECDSA signature in the more strict DER format.  Note\n// that the serialized bytes returned do not include the appended hash type\n// used in Bitcoin signature scripts.\n//\n// encoding/asn1 is broken so we hand roll this output:\n//\n// 0x30 <length> 0x02 <length r> r 0x02 <length s> s\nfunc (sig *Signature) Serialize() []byte {\n\t// low 'S' malleability breaker\n\tsigS := sig.S\n\tif sigS.Cmp(S256().halfOrder) == 1 {\n\t\tsigS = new(big.Int).Sub(S256().N, sigS)\n\t}\n\t// Ensure the encoded bytes for the r and s values are canonical and\n\t// thus suitable for DER encoding.\n\trb := canonicalizeInt(sig.R)\n\tsb := canonicalizeInt(sigS)\n\n\t// total length of returned signature is 1 byte for each magic and\n\t// length (6 total), plus lengths of r and s\n\tlength := 6 + len(rb) + len(sb)\n\tb := make([]byte, length)\n\n\tb[0] = 0x30\n\tb[1] = byte(length - 2)\n\tb[2] = 0x02\n\tb[3] = byte(len(rb))\n\toffset := copy(b[4:], rb) + 4\n\tb[offset] = 0x02\n\tb[offset+1] = byte(len(sb))\n\tcopy(b[offset+2:], sb)\n\treturn b\n}\n\n// Verify calls ecdsa.Verify to verify the signature of hash using the public\n// key.  It returns true if the signature is valid, false otherwise.\nfunc (sig *Signature) Verify(hash []byte, pubKey *PublicKey) bool {\n\treturn ecdsa.Verify(pubKey.ToECDSA(), hash, sig.R, sig.S)\n}\n\n// IsEqual compares this Signature instance to the one passed, returning true\n// if both Signatures are equivalent. A signature is equivalent to another, if\n// they both have the same scalar value for R and S.\nfunc (sig *Signature) IsEqual(otherSig *Signature) bool {\n\treturn sig.R.Cmp(otherSig.R) == 0 &&\n\t\tsig.S.Cmp(otherSig.S) == 0\n}\n\nfunc parseSig(sigStr []byte, curve elliptic.Curve, der bool) (*Signature, error) {\n\t// Originally this code used encoding/asn1 in order to parse the\n\t// signature, but a number of problems were found with this approach.\n\t// Despite the fact that signatures are stored as DER, the difference\n\t// between go's idea of a bignum (and that they have sign) doesn't agree\n\t// with the openssl one (where they do not). The above is true as of\n\t// Go 1.1. In the end it was simpler to rewrite the code to explicitly\n\t// understand the format which is this:\n\t// 0x30 <length of whole message> <0x02> <length of R> <R> 0x2\n\t// <length of S> <S>.\n\n\tsignature := &Signature{}\n\n\t// minimal message is when both numbers are 1 bytes. adding up to:\n\t// 0x30 + len + 0x02 + 0x01 + <byte> + 0x2 + 0x01 + <byte>\n\tif len(sigStr) < 8 {\n\t\treturn nil, errors.New(\"malformed signature: too short\")\n\t}\n\t// 0x30\n\tindex := 0\n\tif sigStr[index] != 0x30 {\n\t\treturn nil, errors.New(\"malformed signature: no header magic\")\n\t}\n\tindex++\n\t// length of remaining message\n\tsiglen := sigStr[index]\n\tindex++\n\tif int(siglen+2) > len(sigStr) {\n\t\treturn nil, errors.New(\"malformed signature: bad length\")\n\t}\n\t// trim the slice we're working on so we only look at what matters.\n\tsigStr = sigStr[:siglen+2]\n\n\t// 0x02\n\tif sigStr[index] != 0x02 {\n\t\treturn nil,\n\t\t\terrors.New(\"malformed signature: no 1st int marker\")\n\t}\n\tindex++\n\n\t// Length of signature R.\n\trLen := int(sigStr[index])\n\t// must be positive, must be able to fit in another 0x2, <len> <s>\n\t// hence the -3. We assume that the length must be at least one byte.\n\tindex++\n\tif rLen <= 0 || rLen > len(sigStr)-index-3 {\n\t\treturn nil, errors.New(\"malformed signature: bogus R length\")\n\t}\n\n\t// Then R itself.\n\trBytes := sigStr[index : index+rLen]\n\tif der {\n\t\tswitch err := canonicalPadding(rBytes); err {\n\t\tcase errNegativeValue:\n\t\t\treturn nil, errors.New(\"signature R is negative\")\n\t\tcase errExcessivelyPaddedValue:\n\t\t\treturn nil, errors.New(\"signature R is excessively padded\")\n\t\t}\n\t}\n\tsignature.R = new(big.Int).SetBytes(rBytes)\n\tindex += rLen\n\t// 0x02. length already checked in previous if.\n\tif sigStr[index] != 0x02 {\n\t\treturn nil, errors.New(\"malformed signature: no 2nd int marker\")\n\t}\n\tindex++\n\n\t// Length of signature S.\n\tsLen := int(sigStr[index])\n\tindex++\n\t// S should be the rest of the string.\n\tif sLen <= 0 || sLen > len(sigStr)-index {\n\t\treturn nil, errors.New(\"malformed signature: bogus S length\")\n\t}\n\n\t// Then S itself.\n\tsBytes := sigStr[index : index+sLen]\n\tif der {\n\t\tswitch err := canonicalPadding(sBytes); err {\n\t\tcase errNegativeValue:\n\t\t\treturn nil, errors.New(\"signature S is negative\")\n\t\tcase errExcessivelyPaddedValue:\n\t\t\treturn nil, errors.New(\"signature S is excessively padded\")\n\t\t}\n\t}\n\tsignature.S = new(big.Int).SetBytes(sBytes)\n\tindex += sLen\n\n\t// sanity check length parsing\n\tif index != len(sigStr) {\n\t\treturn nil, fmt.Errorf(\"malformed signature: bad final length %v != %v\",\n\t\t\tindex, len(sigStr))\n\t}\n\n\t// Verify also checks this, but we can be more sure that we parsed\n\t// correctly if we verify here too.\n\t// FWIW the ecdsa spec states that R and S must be | 1, N - 1 |\n\t// but crypto/ecdsa only checks for Sign != 0. Mirror that.\n\tif signature.R.Sign() != 1 {\n\t\treturn nil, errors.New(\"signature R isn't 1 or more\")\n\t}\n\tif signature.S.Sign() != 1 {\n\t\treturn nil, errors.New(\"signature S isn't 1 or more\")\n\t}\n\tif signature.R.Cmp(curve.Params().N) >= 0 {\n\t\treturn nil, errors.New(\"signature R is >= curve.N\")\n\t}\n\tif signature.S.Cmp(curve.Params().N) >= 0 {\n\t\treturn nil, errors.New(\"signature S is >= curve.N\")\n\t}\n\n\treturn signature, nil\n}\n\n// ParseSignature parses a signature in BER format for the curve type `curve'\n// into a Signature type, performing some basic sanity checks.  If parsing\n// according to the more strict DER format is needed, use ParseDERSignature.\nfunc ParseSignature(sigStr []byte, curve elliptic.Curve) (*Signature, error) {\n\treturn parseSig(sigStr, curve, false)\n}\n\n// ParseDERSignature parses a signature in DER format for the curve type\n// `curve` into a Signature type.  If parsing according to the less strict\n// BER format is needed, use ParseSignature.\nfunc ParseDERSignature(sigStr []byte, curve elliptic.Curve) (*Signature, error) {\n\treturn parseSig(sigStr, curve, true)\n}\n\n// canonicalizeInt returns the bytes for the passed big integer adjusted as\n// necessary to ensure that a big-endian encoded integer can't possibly be\n// misinterpreted as a negative number.  This can happen when the most\n// significant bit is set, so it is padded by a leading zero byte in this case.\n// Also, the returned bytes will have at least a single byte when the passed\n// value is 0.  This is required for DER encoding.\nfunc canonicalizeInt(val *big.Int) []byte {\n\tb := val.Bytes()\n\tif len(b) == 0 {\n\t\tb = []byte{0x00}\n\t}\n\tif b[0]&0x80 != 0 {\n\t\tpaddedBytes := make([]byte, len(b)+1)\n\t\tcopy(paddedBytes[1:], b)\n\t\tb = paddedBytes\n\t}\n\treturn b\n}\n\n// canonicalPadding checks whether a big-endian encoded integer could\n// possibly be misinterpreted as a negative number (even though OpenSSL\n// treats all numbers as unsigned), or if there is any unnecessary\n// leading zero padding.\nfunc canonicalPadding(b []byte) error {\n\tswitch {\n\tcase b[0]&0x80 == 0x80:\n\t\treturn errNegativeValue\n\tcase len(b) > 1 && b[0] == 0x00 && b[1]&0x80 != 0x80:\n\t\treturn errExcessivelyPaddedValue\n\tdefault:\n\t\treturn nil\n\t}\n}\n\n// hashToInt converts a hash value to an integer. There is some disagreement\n// about how this is done. [NSA] suggests that this is done in the obvious\n// manner, but [SECG] truncates the hash to the bit-length of the curve order\n// first. We follow [SECG] because that's what OpenSSL does. Additionally,\n// OpenSSL right shifts excess bits from the number if the hash is too large\n// and we mirror that too.\n// This is borrowed from crypto/ecdsa.\nfunc hashToInt(hash []byte, c elliptic.Curve) *big.Int {\n\torderBits := c.Params().N.BitLen()\n\torderBytes := (orderBits + 7) / 8\n\tif len(hash) > orderBytes {\n\t\thash = hash[:orderBytes]\n\t}\n\n\tret := new(big.Int).SetBytes(hash)\n\texcess := len(hash)*8 - orderBits\n\tif excess > 0 {\n\t\tret.Rsh(ret, uint(excess))\n\t}\n\treturn ret\n}\n\n// recoverKeyFromSignature recovers a public key from the signature \"sig\" on the\n// given message hash \"msg\". Based on the algorithm found in section 5.1.5 of\n// SEC 1 Ver 2.0, page 47-48 (53 and 54 in the pdf). This performs the details\n// in the inner loop in Step 1. The counter provided is actually the j parameter\n// of the loop * 2 - on the first iteration of j we do the R case, else the -R\n// case in step 1.6. This counter is used in the bitcoin compressed signature\n// format and thus we match bitcoind's behaviour here.\nfunc recoverKeyFromSignature(curve *KoblitzCurve, sig *Signature, msg []byte,\n\titer int, doChecks bool) (*PublicKey, error) {\n\t// 1.1 x = (n * i) + r\n\tRx := new(big.Int).Mul(curve.Params().N,\n\t\tnew(big.Int).SetInt64(int64(iter/2)))\n\tRx.Add(Rx, sig.R)\n\tif Rx.Cmp(curve.Params().P) != -1 {\n\t\treturn nil, errors.New(\"calculated Rx is larger than curve P\")\n\t}\n\n\t// convert 02<Rx> to point R. (step 1.2 and 1.3). If we are on an odd\n\t// iteration then 1.6 will be done with -R, so we calculate the other\n\t// term when uncompressing the point.\n\tRy, err := decompressPoint(curve, Rx, iter%2 == 1)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// 1.4 Check n*R is point at infinity\n\tif doChecks {\n\t\tnRx, nRy := curve.ScalarMult(Rx, Ry, curve.Params().N.Bytes())\n\t\tif nRx.Sign() != 0 || nRy.Sign() != 0 {\n\t\t\treturn nil, errors.New(\"n*R does not equal the point at infinity\")\n\t\t}\n\t}\n\n\t// 1.5 calculate e from message using the same algorithm as ecdsa\n\t// signature calculation.\n\te := hashToInt(msg, curve)\n\n\t// Step 1.6.1:\n\t// We calculate the two terms sR and eG separately multiplied by the\n\t// inverse of r (from the signature). We then add them to calculate\n\t// Q = r^-1(sR-eG)\n\tinvr := new(big.Int).ModInverse(sig.R, curve.Params().N)\n\n\t// first term.\n\tinvrS := new(big.Int).Mul(invr, sig.S)\n\tinvrS.Mod(invrS, curve.Params().N)\n\tsRx, sRy := curve.ScalarMult(Rx, Ry, invrS.Bytes())\n\n\t// second term.\n\te.Neg(e)\n\te.Mod(e, curve.Params().N)\n\te.Mul(e, invr)\n\te.Mod(e, curve.Params().N)\n\tminuseGx, minuseGy := curve.ScalarBaseMult(e.Bytes())\n\n\t// TODO: this would be faster if we did a mult and add in one\n\t// step to prevent the jacobian conversion back and forth.\n\tQx, Qy := curve.Add(sRx, sRy, minuseGx, minuseGy)\n\n\treturn &PublicKey{\n\t\tCurve: curve,\n\t\tX:     Qx,\n\t\tY:     Qy,\n\t}, nil\n}\n\n// SignCompact produces a compact signature of the data in hash with the given\n// private key on the given koblitz curve. The isCompressed  parameter should\n// be used to detail if the given signature should reference a compressed\n// public key or not. If successful the bytes of the compact signature will be\n// returned in the format:\n// <(byte of 27+public key solution)+4 if compressed >< padded bytes for signature R><padded bytes for signature S>\n// where the R and S parameters are padde up to the bitlengh of the curve.\nfunc SignCompact(curve *KoblitzCurve, key *PrivateKey,\n\thash []byte, isCompressedKey bool) ([]byte, error) {\n\tsig, err := key.Sign(hash)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// bitcoind checks the bit length of R and S here. The ecdsa signature\n\t// algorithm returns R and S mod N therefore they will be the bitsize of\n\t// the curve, and thus correctly sized.\n\tfor i := 0; i < (curve.H+1)*2; i++ {\n\t\tpk, err := recoverKeyFromSignature(curve, sig, hash, i, true)\n\t\tif err == nil && pk.X.Cmp(key.X) == 0 && pk.Y.Cmp(key.Y) == 0 {\n\t\t\tresult := make([]byte, 1, 2*curve.byteSize+1)\n\t\t\tresult[0] = 27 + byte(i)\n\t\t\tif isCompressedKey {\n\t\t\t\tresult[0] += 4\n\t\t\t}\n\t\t\t// Not sure this needs rounding but safer to do so.\n\t\t\tcurvelen := (curve.BitSize + 7) / 8\n\n\t\t\t// Pad R and S to curvelen if needed.\n\t\t\tbytelen := (sig.R.BitLen() + 7) / 8\n\t\t\tif bytelen < curvelen {\n\t\t\t\tresult = append(result,\n\t\t\t\t\tmake([]byte, curvelen-bytelen)...)\n\t\t\t}\n\t\t\tresult = append(result, sig.R.Bytes()...)\n\n\t\t\tbytelen = (sig.S.BitLen() + 7) / 8\n\t\t\tif bytelen < curvelen {\n\t\t\t\tresult = append(result,\n\t\t\t\t\tmake([]byte, curvelen-bytelen)...)\n\t\t\t}\n\t\t\tresult = append(result, sig.S.Bytes()...)\n\n\t\t\treturn result, nil\n\t\t}\n\t}\n\n\treturn nil, errors.New(\"no valid solution for pubkey found\")\n}\n\n// RecoverCompact verifies the compact signature \"signature\" of \"hash\" for the\n// Koblitz curve in \"curve\". If the signature matches then the recovered public\n// key will be returned as well as a boolen if the original key was compressed\n// or not, else an error will be returned.\nfunc RecoverCompact(curve *KoblitzCurve, signature,\n\thash []byte) (*PublicKey, bool, error) {\n\tbitlen := (curve.BitSize + 7) / 8\n\tif len(signature) != 1+bitlen*2 {\n\t\treturn nil, false, errors.New(\"invalid compact signature size\")\n\t}\n\n\titeration := int((signature[0] - 27) & ^byte(4))\n\n\t// format is <header byte><bitlen R><bitlen S>\n\tsig := &Signature{\n\t\tR: new(big.Int).SetBytes(signature[1 : bitlen+1]),\n\t\tS: new(big.Int).SetBytes(signature[bitlen+1:]),\n\t}\n\t// The iteration used here was encoded\n\tkey, err := recoverKeyFromSignature(curve, sig, hash, iteration, false)\n\tif err != nil {\n\t\treturn nil, false, err\n\t}\n\n\treturn key, ((signature[0] - 27) & 4) == 4, nil\n}\n\n// signRFC6979 generates a deterministic ECDSA signature according to RFC 6979 and BIP 62.\nfunc signRFC6979(privateKey *PrivateKey, hash []byte) (*Signature, error) {\n\n\tprivkey := privateKey.ToECDSA()\n\tN := S256().N\n\thalfOrder := S256().halfOrder\n\tk := nonceRFC6979(privkey.D, hash)\n\tinv := new(big.Int).ModInverse(k, N)\n\tr, _ := privkey.Curve.ScalarBaseMult(k.Bytes())\n\tif r.Cmp(N) == 1 {\n\t\tr.Sub(r, N)\n\t}\n\n\tif r.Sign() == 0 {\n\t\treturn nil, errors.New(\"calculated R is zero\")\n\t}\n\n\te := hashToInt(hash, privkey.Curve)\n\ts := new(big.Int).Mul(privkey.D, r)\n\ts.Add(s, e)\n\ts.Mul(s, inv)\n\ts.Mod(s, N)\n\n\tif s.Cmp(halfOrder) == 1 {\n\t\ts.Sub(N, s)\n\t}\n\tif s.Sign() == 0 {\n\t\treturn nil, errors.New(\"calculated S is zero\")\n\t}\n\treturn &Signature{R: r, S: s}, nil\n}\n\n// nonceRFC6979 generates an ECDSA nonce (`k`) deterministically according to RFC 6979.\n// It takes a 32-byte hash as an input and returns 32-byte nonce to be used in ECDSA algorithm.\nfunc nonceRFC6979(privkey *big.Int, hash []byte) *big.Int {\n\n\tcurve := S256()\n\tq := curve.Params().N\n\tx := privkey\n\talg := sha256.New\n\n\tqlen := q.BitLen()\n\tholen := alg().Size()\n\trolen := (qlen + 7) >> 3\n\tbx := append(int2octets(x, rolen), bits2octets(hash, curve, rolen)...)\n\n\t// Step B\n\tv := bytes.Repeat(oneInitializer, holen)\n\n\t// Step C (Go zeroes the all allocated memory)\n\tk := make([]byte, holen)\n\n\t// Step D\n\tk = mac(alg, k, append(append(v, 0x00), bx...))\n\n\t// Step E\n\tv = mac(alg, k, v)\n\n\t// Step F\n\tk = mac(alg, k, append(append(v, 0x01), bx...))\n\n\t// Step G\n\tv = mac(alg, k, v)\n\n\t// Step H\n\tfor {\n\t\t// Step H1\n\t\tvar t []byte\n\n\t\t// Step H2\n\t\tfor len(t)*8 < qlen {\n\t\t\tv = mac(alg, k, v)\n\t\t\tt = append(t, v...)\n\t\t}\n\n\t\t// Step H3\n\t\tsecret := hashToInt(t, curve)\n\t\tif secret.Cmp(one) >= 0 && secret.Cmp(q) < 0 {\n\t\t\treturn secret\n\t\t}\n\t\tk = mac(alg, k, append(v, 0x00))\n\t\tv = mac(alg, k, v)\n\t}\n}\n\n// mac returns an HMAC of the given key and message.\nfunc mac(alg func() hash.Hash, k, m []byte) []byte {\n\th := hmac.New(alg, k)\n\th.Write(m)\n\treturn h.Sum(nil)\n}\n\n// https://tools.ietf.org/html/rfc6979#section-2.3.3\nfunc int2octets(v *big.Int, rolen int) []byte {\n\tout := v.Bytes()\n\n\t// left pad with zeros if it's too short\n\tif len(out) < rolen {\n\t\tout2 := make([]byte, rolen)\n\t\tcopy(out2[rolen-len(out):], out)\n\t\treturn out2\n\t}\n\n\t// drop most significant bytes if it's too long\n\tif len(out) > rolen {\n\t\tout2 := make([]byte, rolen)\n\t\tcopy(out2, out[len(out)-rolen:])\n\t\treturn out2\n\t}\n\n\treturn out\n}\n\n// https://tools.ietf.org/html/rfc6979#section-2.3.4\nfunc bits2octets(in []byte, curve elliptic.Curve, rolen int) []byte {\n\tz1 := hashToInt(in, curve)\n\tz2 := new(big.Int).Sub(z1, curve.Params().N)\n\tif z2.Sign() < 0 {\n\t\treturn int2octets(z1, rolen)\n\t}\n\treturn int2octets(z2, rolen)\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/chaincfg/README.md",
    "content": "chaincfg\n========\n\n[![Build Status](http://img.shields.io/travis/bcext/gcash.svg)](https://travis-ci.org/bcext/gcash)\n[![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org)\n[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](http://godoc.org/github.com/bcext/gcash/chaincfg)\n\nPackage chaincfg defines chain configuration parameters for the three standard\nBitcoin networks and provides the ability for callers to define their own custom\nBitcoin networks.\n\nAlthough this package was primarily written for gcash, it has intentionally been\ndesigned so it can be used as a standalone package for any projects needing to\nuse parameters for the standard Bitcoin networks or for projects needing to\ndefine their own network.\n\n## Sample Use\n\n```Go\npackage main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"log\"\n\n\t\"github.com/bcext/cashutil\"\n\t\"github.com/bcext/gcash/chaincfg\"\n)\n\nvar testnet = flag.Bool(\"testnet\", false, \"operate on the testnet Bitcoin network\")\n\n// By default (without -testnet), use mainnet.\nvar chainParams = &chaincfg.MainNetParams\n\nfunc main() {\n\tflag.Parse()\n\n\t// Modify active network parameters if operating on testnet.\n\tif *testnet {\n\t\tchainParams = &chaincfg.TestNet3Params\n\t}\n\n\t// later...\n\n\t// Create and print new payment address, specific to the active network.\n\tpubKeyHash := make([]byte, 20)\n\taddr, err := cashutil.NewAddressPubKeyHash(pubKeyHash, chainParams)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tfmt.Println(addr)\n}\n```\n\n## Installation and Updating\n\n```bash\n$ go get -u github.com/bcext/gcash/chaincfg\n```\n\n## GPG Verification Key\n\nAll official release tags are signed by Conformal so users can ensure the code\nhas not been tampered with and is coming from the btcsuite developers.  To\nverify the signature perform the following:\n\n- Download the public key from the Conformal website at\n  https://opensource.conformal.com/GIT-GPG-KEY-conformal.txt\n\n- Import the public key into your GPG keyring:\n  ```bash\n  gpg --import GIT-GPG-KEY-conformal.txt\n  ```\n\n- Verify the release tag with the following command where `TAG_NAME` is a\n  placeholder for the specific tag:\n  ```bash\n  git tag -v TAG_NAME\n  ```\n\n## License\n\nPackage chaincfg is licensed under the [copyfree](http://copyfree.org) ISC\nLicense.\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/chaincfg/chainhash/README.md",
    "content": "chainhash\n=========\n\n[![Build Status](http://img.shields.io/travis/bcext/gcash.svg)](https://travis-ci.org/bcext/gcash)\n[![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org)\n[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](http://godoc.org/github.com/bcext/gcash/chaincfg/chainhash)\n=======\n\nchainhash provides a generic hash type and associated functions that allows the\nspecific hash algorithm to be abstracted.\n\n## Installation and Updating\n\n```bash\n$ go get -u github.com/bcext/gcash/chaincfg/chainhash\n```\n\n## GPG Verification Key\n\nAll official release tags are signed by Conformal so users can ensure the code\nhas not been tampered with and is coming from the btcsuite developers.  To\nverify the signature perform the following:\n\n- Download the public key from the Conformal website at\n  https://opensource.conformal.com/GIT-GPG-KEY-conformal.txt\n\n- Import the public key into your GPG keyring:\n  ```bash\n  gpg --import GIT-GPG-KEY-conformal.txt\n  ```\n\n- Verify the release tag with the following command where `TAG_NAME` is a\n  placeholder for the specific tag:\n  ```bash\n  git tag -v TAG_NAME\n  ```\n\n## License\n\nPackage chainhash is licensed under the [copyfree](http://copyfree.org) ISC\nLicense.\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/chaincfg/chainhash/doc.go",
    "content": "// Package chainhash provides abstracted hash functionality.\n//\n// This package provides a generic hash type and associated functions that\n// allows the specific hash algorithm to be abstracted.\npackage chainhash\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/chaincfg/chainhash/hash.go",
    "content": "// Copyright (c) 2013-2016 The btcsuite developers\n// Copyright (c) 2015 The Decred developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage chainhash\n\nimport (\n\t\"encoding/hex\"\n\t\"fmt\"\n)\n\n// HashSize of array used to store hashes.  See Hash.\nconst HashSize = 32\n\n// MaxHashStringSize is the maximum length of a Hash hash string.\nconst MaxHashStringSize = HashSize * 2\n\n// ErrHashStrSize describes an error that indicates the caller specified a hash\n// string that has too many characters.\nvar ErrHashStrSize = fmt.Errorf(\"max hash string length is %v bytes\", MaxHashStringSize)\n\n// HashOne is a convenient export variable for hash\nvar HashOne = Hash{0x0000000000000000000000000000000000000000000000000000000000000001}\n\n// Hash is used in several of the bitcoin messages and common structures.  It\n// typically represents the double sha256 of data.\ntype Hash [HashSize]byte\n\n// String returns the Hash as the hexadecimal string of the byte-reversed\n// hash.\nfunc (hash Hash) String() string {\n\tfor i := 0; i < HashSize/2; i++ {\n\t\thash[i], hash[HashSize-1-i] = hash[HashSize-1-i], hash[i]\n\t}\n\treturn hex.EncodeToString(hash[:])\n}\n\n// CloneBytes returns a copy of the bytes which represent the hash as a byte\n// slice.\n//\n// NOTE: It is generally cheaper to just slice the hash directly thereby reusing\n// the same bytes rather than calling this method.\nfunc (hash *Hash) CloneBytes() []byte {\n\tnewHash := make([]byte, HashSize)\n\tcopy(newHash, hash[:])\n\n\treturn newHash\n}\n\n// SetBytes sets the bytes which represent the hash.  An error is returned if\n// the number of bytes passed in is not HashSize.\nfunc (hash *Hash) SetBytes(newHash []byte) error {\n\tnhlen := len(newHash)\n\tif nhlen != HashSize {\n\t\treturn fmt.Errorf(\"invalid hash length of %v, want %v\", nhlen,\n\t\t\tHashSize)\n\t}\n\tcopy(hash[:], newHash)\n\n\treturn nil\n}\n\n// IsEqual returns true if target is the same as hash.\nfunc (hash *Hash) IsEqual(target *Hash) bool {\n\tif hash == nil && target == nil {\n\t\treturn true\n\t}\n\tif hash == nil || target == nil {\n\t\treturn false\n\t}\n\treturn *hash == *target\n}\n\n// NewHash returns a new Hash from a byte slice.  An error is returned if\n// the number of bytes passed in is not HashSize.\nfunc NewHash(newHash []byte) (*Hash, error) {\n\tvar sh Hash\n\terr := sh.SetBytes(newHash)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &sh, err\n}\n\n// NewHashFromStr creates a Hash from a hash string.  The string should be\n// the hexadecimal string of a byte-reversed hash, but any missing characters\n// result in zero padding at the end of the Hash.\nfunc NewHashFromStr(hash string) (*Hash, error) {\n\tret := new(Hash)\n\terr := Decode(ret, hash)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n}\n\n// Decode decodes the byte-reversed hexadecimal string encoding of a Hash to a\n// destination.\nfunc Decode(dst *Hash, src string) error {\n\t// Return error if hash string is too long.\n\tif len(src) > MaxHashStringSize {\n\t\treturn ErrHashStrSize\n\t}\n\n\t// Hex decoder expects the hash to be a multiple of two.  When not, pad\n\t// with a leading zero.\n\tvar srcBytes []byte\n\tif len(src)%2 == 0 {\n\t\tsrcBytes = []byte(src)\n\t} else {\n\t\tsrcBytes = make([]byte, 1+len(src))\n\t\tsrcBytes[0] = '0'\n\t\tcopy(srcBytes[1:], src)\n\t}\n\n\t// Hex decode the source bytes to a temporary destination.\n\tvar reversedHash Hash\n\t_, err := hex.Decode(reversedHash[HashSize-hex.DecodedLen(len(srcBytes)):], srcBytes)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Reverse copy from the temporary hash to destination.  Because the\n\t// temporary was zeroed, the written result will be correctly padded.\n\tfor i, b := range reversedHash[:HashSize/2] {\n\t\tdst[i], dst[HashSize-1-i] = reversedHash[HashSize-1-i], b\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/chaincfg/chainhash/hashfuncs.go",
    "content": "// Copyright (c) 2015 The Decred developers\n// Copyright (c) 2016-2017 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage chainhash\n\nimport \"crypto/sha256\"\n\n// HashB calculates hash(b) and returns the resulting bytes.\nfunc HashB(b []byte) []byte {\n\thash := sha256.Sum256(b)\n\treturn hash[:]\n}\n\n// HashH calculates hash(b) and returns the resulting bytes as a Hash.\nfunc HashH(b []byte) Hash {\n\treturn Hash(sha256.Sum256(b))\n}\n\n// DoubleHashB calculates hash(hash(b)) and returns the resulting bytes.\nfunc DoubleHashB(b []byte) []byte {\n\tfirst := sha256.Sum256(b)\n\tsecond := sha256.Sum256(first[:])\n\treturn second[:]\n}\n\n// DoubleHashH calculates hash(hash(b)) and returns the resulting bytes as a\n// Hash.\nfunc DoubleHashH(b []byte) Hash {\n\tfirst := sha256.Sum256(b)\n\treturn Hash(sha256.Sum256(first[:]))\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/chaincfg/doc.go",
    "content": "// Package chaincfg defines chain configuration parameters.\n//\n// In addition to the main Bitcoin network, which is intended for the transfer\n// of monetary value, there also exists two currently active standard networks:\n// regression test and testnet (version 3).  These networks are incompatible\n// with each other (each sharing a different genesis block) and software should\n// handle errors where input intended for one network is used on an application\n// instance running on a different network.\n//\n// For library packages, chaincfg provides the ability to lookup chain\n// parameters and encoding magics when passed a *Params.  Older APIs not updated\n// to the new convention of passing a *Params may lookup the parameters for a\n// wire.BitcoinNet using ParamsForNet, but be aware that this usage is\n// deprecated and will be removed from chaincfg in the future.\n//\n// For main packages, a (typically global) var may be assigned the address of\n// one of the standard Param vars for use as the application's \"active\" network.\n// When a network parameter is needed, it may then be looked up through this\n// variable (either directly, or hidden in a library call).\n//\n//  package main\n//\n//  import (\n//          \"flag\"\n//          \"fmt\"\n//          \"log\"\n//\n//          \"github.com/bcext/cashutil\"\n//          \"github.com/bcext/gcash/chaincfg\"\n//  )\n//\n//  var testnet = flag.Bool(\"testnet\", false, \"operate on the testnet Bitcoin network\")\n//\n//  // By default (without -testnet), use mainnet.\n//  var chainParams = &chaincfg.MainNetParams\n//\n//  func main() {\n//          flag.Parse()\n//\n//          // Modify active network parameters if operating on testnet.\n//          if *testnet {\n//                  chainParams = &chaincfg.TestNet3Params\n//          }\n//\n//          // later...\n//\n//          // Create and print new payment address, specific to the active network.\n//          pubKeyHash := make([]byte, 20)\n//          addr, err := cashutil.NewAddressPubKeyHash(pubKeyHash, chainParams)\n//          if err != nil {\n//                  log.Fatal(err)\n//          }\n//          fmt.Println(addr)\n//  }\n//\n// If an application does not use one of the three standard Bitcoin networks,\n// a new Params struct may be created which defines the parameters for the\n// non-standard network.  As a general rule of thumb, all network parameters\n// should be unique to the network, but parameter collisions can still occur\n// (unfortunately, this is the case with regtest and testnet3 sharing magics).\npackage chaincfg\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/chaincfg/genesis.go",
    "content": "// Copyright (c) 2014-2016 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage chaincfg\n\nimport (\n\t\"time\"\n\n\t\"github.com/bcext/gcash/chaincfg/chainhash\"\n\t\"github.com/bcext/gcash/wire\"\n)\n\n// genesisCoinbaseTx is the coinbase transaction for the genesis blocks for\n// the main network, regression test network, and test network (version 3).\nvar genesisCoinbaseTx = wire.MsgTx{\n\tVersion: 1,\n\tTxIn: []*wire.TxIn{\n\t\t{\n\t\t\tPreviousOutPoint: wire.OutPoint{\n\t\t\t\tHash:  chainhash.Hash{},\n\t\t\t\tIndex: 0xffffffff,\n\t\t\t},\n\t\t\tSignatureScript: []byte{\n\t\t\t\t0x04, 0xff, 0xff, 0x00, 0x1d, 0x01, 0x04, 0x45, /* |.......E| */\n\t\t\t\t0x54, 0x68, 0x65, 0x20, 0x54, 0x69, 0x6d, 0x65, /* |The Time| */\n\t\t\t\t0x73, 0x20, 0x30, 0x33, 0x2f, 0x4a, 0x61, 0x6e, /* |s 03/Jan| */\n\t\t\t\t0x2f, 0x32, 0x30, 0x30, 0x39, 0x20, 0x43, 0x68, /* |/2009 Ch| */\n\t\t\t\t0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x6f, 0x72, /* |ancellor| */\n\t\t\t\t0x20, 0x6f, 0x6e, 0x20, 0x62, 0x72, 0x69, 0x6e, /* | on brin| */\n\t\t\t\t0x6b, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x65, 0x63, /* |k of sec|*/\n\t\t\t\t0x6f, 0x6e, 0x64, 0x20, 0x62, 0x61, 0x69, 0x6c, /* |ond bail| */\n\t\t\t\t0x6f, 0x75, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, /* |out for |*/\n\t\t\t\t0x62, 0x61, 0x6e, 0x6b, 0x73, /* |banks| */\n\t\t\t},\n\t\t\tSequence: 0xffffffff,\n\t\t},\n\t},\n\tTxOut: []*wire.TxOut{\n\t\t{\n\t\t\tValue: 0x12a05f200,\n\t\t\tPkScript: []byte{\n\t\t\t\t0x41, 0x04, 0x67, 0x8a, 0xfd, 0xb0, 0xfe, 0x55, /* |A.g....U| */\n\t\t\t\t0x48, 0x27, 0x19, 0x67, 0xf1, 0xa6, 0x71, 0x30, /* |H'.g..q0| */\n\t\t\t\t0xb7, 0x10, 0x5c, 0xd6, 0xa8, 0x28, 0xe0, 0x39, /* |..\\..(.9| */\n\t\t\t\t0x09, 0xa6, 0x79, 0x62, 0xe0, 0xea, 0x1f, 0x61, /* |..yb...a| */\n\t\t\t\t0xde, 0xb6, 0x49, 0xf6, 0xbc, 0x3f, 0x4c, 0xef, /* |..I..?L.| */\n\t\t\t\t0x38, 0xc4, 0xf3, 0x55, 0x04, 0xe5, 0x1e, 0xc1, /* |8..U....| */\n\t\t\t\t0x12, 0xde, 0x5c, 0x38, 0x4d, 0xf7, 0xba, 0x0b, /* |..\\8M...| */\n\t\t\t\t0x8d, 0x57, 0x8a, 0x4c, 0x70, 0x2b, 0x6b, 0xf1, /* |.W.Lp+k.| */\n\t\t\t\t0x1d, 0x5f, 0xac, /* |._.| */\n\t\t\t},\n\t\t},\n\t},\n\tLockTime: 0,\n}\n\n// genesisHash is the hash of the first block in the block chain for the main\n// network (genesis block).\nvar genesisHash = chainhash.Hash([chainhash.HashSize]byte{ // Make go vet happy.\n\t0x6f, 0xe2, 0x8c, 0x0a, 0xb6, 0xf1, 0xb3, 0x72,\n\t0xc1, 0xa6, 0xa2, 0x46, 0xae, 0x63, 0xf7, 0x4f,\n\t0x93, 0x1e, 0x83, 0x65, 0xe1, 0x5a, 0x08, 0x9c,\n\t0x68, 0xd6, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00,\n})\n\n// genesisMerkleRoot is the hash of the first transaction in the genesis block\n// for the main network.\nvar genesisMerkleRoot = chainhash.Hash([chainhash.HashSize]byte{ // Make go vet happy.\n\t0x3b, 0xa3, 0xed, 0xfd, 0x7a, 0x7b, 0x12, 0xb2,\n\t0x7a, 0xc7, 0x2c, 0x3e, 0x67, 0x76, 0x8f, 0x61,\n\t0x7f, 0xc8, 0x1b, 0xc3, 0x88, 0x8a, 0x51, 0x32,\n\t0x3a, 0x9f, 0xb8, 0xaa, 0x4b, 0x1e, 0x5e, 0x4a,\n})\n\n// genesisBlock defines the genesis block of the block chain which serves as the\n// public transaction ledger for the main network.\nvar genesisBlock = wire.MsgBlock{\n\tHeader: wire.BlockHeader{\n\t\tVersion:    1,\n\t\tPrevBlock:  chainhash.Hash{},         // 0000000000000000000000000000000000000000000000000000000000000000\n\t\tMerkleRoot: genesisMerkleRoot,        // 4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b\n\t\tTimestamp:  time.Unix(0x495fab29, 0), // 2009-01-03 18:15:05 +0000 UTC\n\t\tBits:       0x1d00ffff,               // 486604799 [00000000ffff0000000000000000000000000000000000000000000000000000]\n\t\tNonce:      0x7c2bac1d,               // 2083236893\n\t},\n\tTransactions: []*wire.MsgTx{&genesisCoinbaseTx},\n}\n\n// regTestGenesisHash is the hash of the first block in the block chain for the\n// regression test network (genesis block).\nvar regTestGenesisHash = chainhash.Hash([chainhash.HashSize]byte{ // Make go vet happy.\n\t0x06, 0x22, 0x6e, 0x46, 0x11, 0x1a, 0x0b, 0x59,\n\t0xca, 0xaf, 0x12, 0x60, 0x43, 0xeb, 0x5b, 0xbf,\n\t0x28, 0xc3, 0x4f, 0x3a, 0x5e, 0x33, 0x2a, 0x1f,\n\t0xc7, 0xb2, 0xb7, 0x3c, 0xf1, 0x88, 0x91, 0x0f,\n})\n\n// regTestGenesisMerkleRoot is the hash of the first transaction in the genesis\n// block for the regression test network.  It is the same as the merkle root for\n// the main network.\nvar regTestGenesisMerkleRoot = genesisMerkleRoot\n\n// regTestGenesisBlock defines the genesis block of the block chain which serves\n// as the public transaction ledger for the regression test network.\nvar regTestGenesisBlock = wire.MsgBlock{\n\tHeader: wire.BlockHeader{\n\t\tVersion:    1,\n\t\tPrevBlock:  chainhash.Hash{},         // 0000000000000000000000000000000000000000000000000000000000000000\n\t\tMerkleRoot: regTestGenesisMerkleRoot, // 4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b\n\t\tTimestamp:  time.Unix(1296688602, 0), // 2011-02-02 23:16:42 +0000 UTC\n\t\tBits:       0x207fffff,               // 545259519 [7fffff0000000000000000000000000000000000000000000000000000000000]\n\t\tNonce:      2,\n\t},\n\tTransactions: []*wire.MsgTx{&genesisCoinbaseTx},\n}\n\n// testNet3GenesisHash is the hash of the first block in the block chain for the\n// test network (version 3).\nvar testNet3GenesisHash = chainhash.Hash([chainhash.HashSize]byte{ // Make go vet happy.\n\t0x43, 0x49, 0x7f, 0xd7, 0xf8, 0x26, 0x95, 0x71,\n\t0x08, 0xf4, 0xa3, 0x0f, 0xd9, 0xce, 0xc3, 0xae,\n\t0xba, 0x79, 0x97, 0x20, 0x84, 0xe9, 0x0e, 0xad,\n\t0x01, 0xea, 0x33, 0x09, 0x00, 0x00, 0x00, 0x00,\n})\n\n// testNet3GenesisMerkleRoot is the hash of the first transaction in the genesis\n// block for the test network (version 3).  It is the same as the merkle root\n// for the main network.\nvar testNet3GenesisMerkleRoot = genesisMerkleRoot\n\n// testNet3GenesisBlock defines the genesis block of the block chain which\n// serves as the public transaction ledger for the test network (version 3).\nvar testNet3GenesisBlock = wire.MsgBlock{\n\tHeader: wire.BlockHeader{\n\t\tVersion:    1,\n\t\tPrevBlock:  chainhash.Hash{},          // 0000000000000000000000000000000000000000000000000000000000000000\n\t\tMerkleRoot: testNet3GenesisMerkleRoot, // 4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b\n\t\tTimestamp:  time.Unix(1296688602, 0),  // 2011-02-02 23:16:42 +0000 UTC\n\t\tBits:       0x1d00ffff,                // 486604799 [00000000ffff0000000000000000000000000000000000000000000000000000]\n\t\tNonce:      0x18aea41a,                // 414098458\n\t},\n\tTransactions: []*wire.MsgTx{&genesisCoinbaseTx},\n}\n\n// simNetGenesisHash is the hash of the first block in the block chain for the\n// simulation test network.\nvar simNetGenesisHash = chainhash.Hash([chainhash.HashSize]byte{ // Make go vet happy.\n\t0xf6, 0x7a, 0xd7, 0x69, 0x5d, 0x9b, 0x66, 0x2a,\n\t0x72, 0xff, 0x3d, 0x8e, 0xdb, 0xbb, 0x2d, 0xe0,\n\t0xbf, 0xa6, 0x7b, 0x13, 0x97, 0x4b, 0xb9, 0x91,\n\t0x0d, 0x11, 0x6d, 0x5c, 0xbd, 0x86, 0x3e, 0x68,\n})\n\n// simNetGenesisMerkleRoot is the hash of the first transaction in the genesis\n// block for the simulation test network.  It is the same as the merkle root for\n// the main network.\nvar simNetGenesisMerkleRoot = genesisMerkleRoot\n\n// simNetGenesisBlock defines the genesis block of the block chain which serves\n// as the public transaction ledger for the simulation test network.\nvar simNetGenesisBlock = wire.MsgBlock{\n\tHeader: wire.BlockHeader{\n\t\tVersion:    1,\n\t\tPrevBlock:  chainhash.Hash{},         // 0000000000000000000000000000000000000000000000000000000000000000\n\t\tMerkleRoot: simNetGenesisMerkleRoot,  // 4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b\n\t\tTimestamp:  time.Unix(1401292357, 0), // 2014-05-28 15:52:37 +0000 UTC\n\t\tBits:       0x207fffff,               // 545259519 [7fffff0000000000000000000000000000000000000000000000000000000000]\n\t\tNonce:      2,\n\t},\n\tTransactions: []*wire.MsgTx{&genesisCoinbaseTx},\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/chaincfg/params.go",
    "content": "// Copyright (c) 2014-2016 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage chaincfg\n\nimport (\n\t\"errors\"\n\t\"math\"\n\t\"math/big\"\n\t\"time\"\n\n\t\"github.com/bcext/gcash/chaincfg/chainhash\"\n\t\"github.com/bcext/gcash/wire\"\n)\n\n// These variables are the chain proof-of-work limit parameters for each default\n// network.\nvar (\n\t// bigOne is 1 represented as a big.Int.  It is defined here to avoid\n\t// the overhead of creating it multiple times.\n\tbigOne = big.NewInt(1)\n\n\t// mainPowLimit is the highest proof of work value a Bitcoin block can\n\t// have for the main network.  It is the value 2^224 - 1.\n\tmainPowLimit = new(big.Int).Sub(new(big.Int).Lsh(bigOne, 224), bigOne)\n\n\t// regressionPowLimit is the highest proof of work value a Bitcoin block\n\t// can have for the regression test network.  It is the value 2^255 - 1.\n\tregressionPowLimit = new(big.Int).Sub(new(big.Int).Lsh(bigOne, 255), bigOne)\n\n\t// testNet3PowLimit is the highest proof of work value a Bitcoin block\n\t// can have for the test network (version 3).  It is the value\n\t// 2^224 - 1.\n\ttestNet3PowLimit = new(big.Int).Sub(new(big.Int).Lsh(bigOne, 224), bigOne)\n\n\t// simNetPowLimit is the highest proof of work value a Bitcoin block\n\t// can have for the simulation test network.  It is the value 2^255 - 1.\n\tsimNetPowLimit = new(big.Int).Sub(new(big.Int).Lsh(bigOne, 255), bigOne)\n)\n\n// Checkpoint identifies a known good point in the block chain.  Using\n// checkpoints allows a few optimizations for old blocks during initial download\n// and also prevents forks from old blocks.\n//\n// Each checkpoint is selected based upon several factors.  See the\n// documentation for blockchain.IsCheckpointCandidate for details on the\n// selection criteria.\ntype Checkpoint struct {\n\tHeight int32\n\tHash   *chainhash.Hash\n}\n\n// DNSSeed identifies a DNS seed.\ntype DNSSeed struct {\n\t// Host defines the hostname of the seed.\n\tHost string\n\n\t// HasFiltering defines whether the seed supports filtering\n\t// by service flags (wire.ServiceFlag).\n\tHasFiltering bool\n}\n\n// ConsensusDeployment defines details related to a specific consensus rule\n// change that is voted in.  This is part of BIP0009.\ntype ConsensusDeployment struct {\n\t// BitNumber defines the specific bit number within the block version\n\t// this particular soft-fork deployment refers to.\n\tBitNumber uint8\n\n\t// StartTime is the median block time after which voting on the\n\t// deployment starts.\n\tStartTime uint64\n\n\t// ExpireTime is the median block time after which the attempted\n\t// deployment expires.\n\tExpireTime uint64\n}\n\n// Constants that define the deployment offset in the deployments field of the\n// parameters for each deployment.  This is useful to be able to get the details\n// of a specific deployment by name.\nconst (\n\t// DeploymentTestDummy defines the rule change deployment ID for testing\n\t// purposes.\n\tDeploymentTestDummy = iota\n\n\t// DeploymentCSV defines the rule change deployment ID for the CSV\n\t// soft-fork package. The CSV package includes the deployment of BIPS\n\t// 68, 112, and 113.\n\tDeploymentCSV\n\n\t// NOTE: DefinedDeployments must always come last since it is used to\n\t// determine how many defined deployments there currently are.\n\n\t// DefinedDeployments is the number of currently defined deployments.\n\tDefinedDeployments\n)\n\n// Params defines a Bitcoin network by its parameters.  These parameters may be\n// used by Bitcoin applications to differentiate networks as well as addresses\n// and keys for one network from those intended for use on another network.\ntype Params struct {\n\t// Name defines a human-readable identifier for the network.\n\tName string\n\n\t// Net defines the magic bytes used to identify the network.\n\tNet wire.BitcoinNet\n\n\t// DefaultPort defines the default peer-to-peer port for the network.\n\tDefaultPort string\n\n\t// DNSSeeds defines a list of DNS seeds for the network that are used\n\t// as one method to discover peers.\n\tDNSSeeds []DNSSeed\n\n\t// GenesisBlock defines the first block of the chain.\n\tGenesisBlock *wire.MsgBlock\n\n\t// GenesisHash is the starting block hash.\n\tGenesisHash *chainhash.Hash\n\n\t// PowLimit defines the highest allowed proof of work value for a block\n\t// as a uint256.\n\tPowLimit *big.Int\n\n\t// PowLimitBits defines the highest allowed proof of work value for a\n\t// block in compact form.\n\tPowLimitBits uint32\n\n\t// These fields define the block heights at which the specified softfork\n\t// BIP became active.\n\tBIP0034Height int32\n\tBIP0065Height int32\n\tBIP0066Height int32\n\n\t// Block height at which UAHF kicks in\n\tUAHFHeight int32\n\t// Block height at which the new DAA becomes active\n\tDAAHeight int32\n\n\t// Nov 15, 2018 hard fork\n\tMagneticAnomalyActivationTime int64\n\n\t// Unix time used for MTP activation of 15 May 2019 12:00:00 UTC upgrade\n\tGreatWallActivationTime int64\n\n\t// CoinbaseMaturity is the number of blocks required before newly mined\n\t// coins (coinbase transactions) can be spent.\n\tCoinbaseMaturity uint16\n\n\t// SubsidyReductionInterval is the interval of blocks before the subsidy\n\t// is reduced.\n\tSubsidyReductionInterval int32\n\n\t// TargetTimespan is the desired amount of time that should elapse\n\t// before the block difficulty requirement is examined to determine how\n\t// it should be changed in order to maintain the desired block\n\t// generation rate.\n\tTargetTimespan time.Duration\n\n\t// TargetTimePerBlock is the desired amount of time to generate each\n\t// block.\n\tTargetTimePerBlock time.Duration\n\n\t// RetargetAdjustmentFactor is the adjustment factor used to limit\n\t// the minimum and maximum amount of adjustment that can occur between\n\t// difficulty retargets.\n\tRetargetAdjustmentFactor int64\n\n\t// ReduceMinDifficulty defines whether the network should reduce the\n\t// minimum required difficulty after a long enough period of time has\n\t// passed without finding a block.  This is really only useful for test\n\t// networks and should not be set on a main network.\n\tReduceMinDifficulty bool\n\n\t// MinDiffReductionTime is the amount of time after which the minimum\n\t// required difficulty should be reduced when a block hasn't been found.\n\t//\n\t// NOTE: This only applies if ReduceMinDifficulty is true.\n\tMinDiffReductionTime time.Duration\n\n\t// GenerateSupported specifies whether or not CPU mining is allowed.\n\tGenerateSupported bool\n\n\t// Checkpoints ordered from oldest to newest.\n\tCheckpoints []Checkpoint\n\n\t// These fields are related to voting on consensus rule changes as\n\t// defined by BIP0009.\n\t//\n\t// RuleChangeActivationThreshold is the number of blocks in a threshold\n\t// state retarget window for which a positive vote for a rule change\n\t// must be cast in order to lock in a rule change. It should typically\n\t// be 95% for the main network and 75% for test networks.\n\t//\n\t// MinerConfirmationWindow is the number of blocks in each threshold\n\t// state retarget window.\n\t//\n\t// Deployments define the specific consensus rule changes to be voted\n\t// on.\n\tRuleChangeActivationThreshold uint32\n\tMinerConfirmationWindow       uint32\n\tDeployments                   [DefinedDeployments]ConsensusDeployment\n\n\t// Mempool parameters\n\tRelayNonStdTxs bool\n\n\t// Address encoding magics\n\tPubKeyHashAddrID byte // First byte of a P2PKH address\n\tScriptHashAddrID byte // First byte of a P2SH address\n\tPrivateKeyID     byte // First byte of a WIF private key\n\tCashAddrPrefix   string\n\n\t// BIP32 hierarchical deterministic extended key magics\n\tHDPrivateKeyID [4]byte\n\tHDPublicKeyID  [4]byte\n\n\t// BIP44 coin type used in the hierarchical deterministic path for\n\t// address generation.\n\tHDCoinType uint32\n}\n\n// MainNetParams defines the network parameters for the main Bitcoin network.\nvar MainNetParams = Params{\n\tName:        \"mainnet\",\n\tNet:         wire.MainNet,\n\tDefaultPort: \"8333\",\n\tDNSSeeds: []DNSSeed{\n\t\t{\"seed.bitcoinabc.org\", true},                  // Bitcoin ABC seeder\n\t\t{\"seed-abc.bitcoinforks.org\", true},            // bitcoinforks seeders\n\t\t{\"btccash-seeder.bitcoinunlimited.info\", true}, // BU backed seeder\n\t\t{\"seed.bitprim.org\", true},                     // Bitprim\n\t\t{\"seed.deadalnix.me\", true},                    // Amaury SÉCHET\n\t\t{\"seeder.criptolayer.net\", true},               // criptolayer.net\n\t},\n\n\t// Chain parameters\n\tGenesisBlock:                  &genesisBlock,\n\tGenesisHash:                   &genesisHash,\n\tPowLimit:                      mainPowLimit,\n\tPowLimitBits:                  0x1d00ffff,\n\tBIP0034Height:                 227931, // 000000000000024b89b42a942fe0d9fea3bb44ab7bd1b19115dd6a759c0808b8\n\tBIP0065Height:                 388381, // 000000000000000004c2b624ed5d7756c508d90fd0da2c7c679febfa6c4735f0\n\tBIP0066Height:                 363725, // 00000000000000000379eaa19dce8c9b722d46ae6a57c2f1a988119488b50931\n\tUAHFHeight:                    478558, // 0000000000000000011865af4122fe3b144e2cbeea86142e8ff2fb4107352d43\n\tDAAHeight:                     504031, // 0000000000000000011ebf65b60d0a3de80b8175be709d653b4c1a1beeb6ab9c\n\tMagneticAnomalyActivationTime: 1542300000,\n\tGreatWallActivationTime:       1557921600,\n\n\tCoinbaseMaturity:         100,\n\tSubsidyReductionInterval: 210000,\n\tTargetTimespan:           time.Hour * 24 * 14, // 14 days\n\tTargetTimePerBlock:       time.Minute * 10,    // 10 minutes\n\tRetargetAdjustmentFactor: 4,                   // 25% less, 400% more\n\tReduceMinDifficulty:      false,\n\tMinDiffReductionTime:     0,\n\tGenerateSupported:        false,\n\n\t// Checkpoints ordered from oldest to newest.\n\tCheckpoints: []Checkpoint{\n\t\t{11111, newHashFromStr(\"0000000069e244f73d78e8fd29ba2fd2ed618bd6fa2ee92559f542fdb26e7c1d\")},\n\t\t{33333, newHashFromStr(\"000000002dd5588a74784eaa7ab0507a18ad16a236e7b1ce69f00d7ddfb5d0a6\")},\n\t\t{74000, newHashFromStr(\"0000000000573993a3c9e41ce34471c079dcf5f52a0e824a81e7f953b8661a20\")},\n\t\t{105000, newHashFromStr(\"00000000000291ce28027faea320c8d2b054b2e0fe44a773f3eefb151d6bdc97\")},\n\t\t{134444, newHashFromStr(\"00000000000005b12ffd4cd315cd34ffd4a594f430ac814c91184a0d42d2b0fe\")},\n\t\t{168000, newHashFromStr(\"000000000000099e61ea72015e79632f216fe6cb33d7899acb35b75c8303b763\")},\n\t\t{193000, newHashFromStr(\"000000000000059f452a5f7340de6682a977387c17010ff6e6c3bd83ca8b1317\")},\n\t\t{210000, newHashFromStr(\"000000000000048b95347e83192f69cf0366076336c639f9b7228e9ba171342e\")},\n\t\t{216116, newHashFromStr(\"00000000000001b4f4b433e81ee46494af945cf96014816a4e2370f11b23df4e\")},\n\t\t{225430, newHashFromStr(\"00000000000001c108384350f74090433e7fcf79a606b8e797f065b130575932\")},\n\t\t{250000, newHashFromStr(\"000000000000003887df1f29024b06fc2200b55f8af8f35453d7be294df2d214\")},\n\t\t{267300, newHashFromStr(\"000000000000000a83fbd660e918f218bf37edd92b748ad940483c7c116179ac\")},\n\t\t{279000, newHashFromStr(\"0000000000000001ae8c72a0b0c301f67e3afca10e819efa9041e458e9bd7e40\")},\n\t\t{295000, newHashFromStr(\"00000000000000004d9b4ef50f0f9d686fd69db2e03af35a100370c64632a983\")},\n\t\t// UAHF fork block.\n\t\t{478558, newHashFromStr(\"0000000000000000011865af4122fe3b144e2cbeea86142e8ff2fb4107352d43\")},\n\t\t// Nov, 13 DAA activation block.\n\t\t{504031, newHashFromStr(\"0000000000000000011ebf65b60d0a3de80b8175be709d653b4c1a1beeb6ab9c\")},\n\t\t// Monolith activation.\n\t\t{530359, newHashFromStr(\"0000000000000000011ada8bd08f46074f44a8f155396f43e38acf9501c49103\")},\n\t},\n\n\t// Consensus rule change deployments.\n\t//\n\t// The miner confirmation window is defined as:\n\t//   target proof of work timespan / target proof of work spacing\n\tRuleChangeActivationThreshold: 1916, // 95% of MinerConfirmationWindow\n\tMinerConfirmationWindow:       2016, //\n\tDeployments: [DefinedDeployments]ConsensusDeployment{\n\t\tDeploymentTestDummy: {\n\t\t\tBitNumber:  28,\n\t\t\tStartTime:  1199145601, // January 1, 2008 UTC\n\t\t\tExpireTime: 1230767999, // December 31, 2008 UTC\n\t\t},\n\t\tDeploymentCSV: {\n\t\t\tBitNumber:  0,\n\t\t\tStartTime:  1462060800, // May 1st, 2016\n\t\t\tExpireTime: 1493596800, // May 1st, 2017\n\t\t},\n\t},\n\n\t// Mempool parameters\n\tRelayNonStdTxs: false,\n\n\t// Address encoding magics\n\tPubKeyHashAddrID: 0x00, // starts with 1\n\tScriptHashAddrID: 0x05, // starts with 3\n\tPrivateKeyID:     0x80, // starts with 5 (uncompressed) or K (compressed)\n\n\t// BIP32 hierarchical deterministic extended key magics\n\tHDPrivateKeyID: [4]byte{0x04, 0x88, 0xad, 0xe4}, // starts with xprv\n\tHDPublicKeyID:  [4]byte{0x04, 0x88, 0xb2, 0x1e}, // starts with xpub\n\n\tCashAddrPrefix: \"bitcoincash\",\n\n\t// BIP44 coin type used in the hierarchical deterministic path for\n\t// address generation.\n\tHDCoinType: 0,\n}\n\n// TestNet3Params defines the network parameters for the test Bitcoin network\n// (version 3).  Not to be confused with the regression test network, this\n// network is sometimes simply called \"testnet\".\nvar TestNet3Params = Params{\n\tName:        \"testnet3\",\n\tNet:         wire.TestNet3,\n\tDefaultPort: \"18333\",\n\tDNSSeeds: []DNSSeed{\n\t\t{\"testnet-seed.bitcoinabc.org\", true},       // Bitcoin ABC seeder\n\t\t{\"testnet-seed-abc.bitcoinforks.org\", true}, // bitcoinforks seeders\n\t\t{\"testnet-seed.bitprim.org\", true},          // Bitprim\n\t\t{\"testnet-seed.deadalnix.me\", true},         // Amaury SÉCHET\n\t\t{\"testnet-seeder.criptolayer.net\", true},    // criptolayer.net\n\t},\n\n\t// Chain parameters\n\tGenesisBlock:                  &testNet3GenesisBlock,\n\tGenesisHash:                   &testNet3GenesisHash,\n\tPowLimit:                      testNet3PowLimit,\n\tPowLimitBits:                  0x1d00ffff,\n\tBIP0034Height:                 21111,   // 0000000023b3a96d3484e5abb3755c413e7d41500f8e2a5c3f0dd01299cd8ef8\n\tBIP0065Height:                 581885,  // 00000000007f6655f22f98e72ed80d8b06dc761d5da09df0fa1dc4be4f861eb6\n\tBIP0066Height:                 330776,  // 000000002104c8c45e99a8853285a3b592602a3ccde2b832481da85e9e4ba182\n\tUAHFHeight:                    1155875, // 00000000f17c850672894b9a75b63a1e72830bbd5f4c8889b5c1a80e7faef138\n\tDAAHeight:                     1188697, // 0000000000170ed0918077bde7b4d36cc4c91be69fa09211f748240dabe047fb\n\tMagneticAnomalyActivationTime: 1542300000,\n\tGreatWallActivationTime:       1557921600,\n\n\tCoinbaseMaturity:         100,\n\tSubsidyReductionInterval: 210000,\n\tTargetTimespan:           time.Hour * 24 * 14, // 14 days\n\tTargetTimePerBlock:       time.Minute * 10,    // 10 minutes\n\tRetargetAdjustmentFactor: 4,                   // 25% less, 400% more\n\tReduceMinDifficulty:      true,\n\tMinDiffReductionTime:     time.Minute * 20, // TargetTimePerBlock * 2\n\tGenerateSupported:        false,\n\n\t// Checkpoints ordered from oldest to newest.\n\tCheckpoints: []Checkpoint{\n\t\t{546, newHashFromStr(\"000000002a936ca763904c3c35fce2f3556c559c0214345d31b1bcebf76acb70\")},\n\t\t{1155875, newHashFromStr(\"00000000f17c850672894b9a75b63a1e72830bbd5f4c8889b5c1a80e7faef138\")},\n\t\t{1188697, newHashFromStr(\"0000000000170ed0918077bde7b4d36cc4c91be69fa09211f748240dabe047fb\")},\n\t},\n\n\t// Consensus rule change deployments.\n\t//\n\t// The miner confirmation window is defined as:\n\t//   target proof of work timespan / target proof of work spacing\n\tRuleChangeActivationThreshold: 1512, // 75% of MinerConfirmationWindow\n\tMinerConfirmationWindow:       2016,\n\tDeployments: [DefinedDeployments]ConsensusDeployment{\n\t\tDeploymentTestDummy: {\n\t\t\tBitNumber:  28,\n\t\t\tStartTime:  1199145601, // January 1, 2008 UTC\n\t\t\tExpireTime: 1230767999, // December 31, 2008 UTC\n\t\t},\n\t\tDeploymentCSV: {\n\t\t\tBitNumber:  0,\n\t\t\tStartTime:  1456790400, // March 1st, 2016\n\t\t\tExpireTime: 1493596800, // May 1st, 2017\n\t\t},\n\t},\n\n\t// Mempool parameters\n\tRelayNonStdTxs: true,\n\n\t// Address encoding magics\n\tPubKeyHashAddrID: 0x6f, // starts with m or n\n\tScriptHashAddrID: 0xc4, // starts with 2\n\tPrivateKeyID:     0xef, // starts with 9 (uncompressed) or c (compressed)\n\n\t// BIP32 hierarchical deterministic extended key magics\n\tHDPrivateKeyID: [4]byte{0x04, 0x35, 0x83, 0x94}, // starts with tprv\n\tHDPublicKeyID:  [4]byte{0x04, 0x35, 0x87, 0xcf}, // starts with tpub\n\n\tCashAddrPrefix: \"bchtest\",\n\n\t// BIP44 coin type used in the hierarchical deterministic path for\n\t// address generation.\n\tHDCoinType: 1,\n}\n\n// RegressionNetParams defines the network parameters for the regression test\n// Bitcoin network.  Not to be confused with the test Bitcoin network (version\n// 3), this network is sometimes simply called \"testnet\".\nvar RegressionNetParams = Params{\n\tName:        \"regtest\",\n\tNet:         wire.TestNet,\n\tDefaultPort: \"18444\",\n\t// Regtest mode doesn't have any DNS seeds\n\tDNSSeeds: []DNSSeed{},\n\n\t// Chain parameters\n\tGenesisBlock:                  &regTestGenesisBlock,\n\tGenesisHash:                   &regTestGenesisHash,\n\tPowLimit:                      regressionPowLimit,\n\tPowLimitBits:                  0x207fffff,\n\tCoinbaseMaturity:              100,\n\tBIP0034Height:                 100000000, // Not active - Permit ver 1 blocks\n\tBIP0065Height:                 1351,      // Used by regression tests\n\tBIP0066Height:                 1251,      // Used by regression tests\n\tUAHFHeight:                    0,         // UAHF is always enabled on regtest\n\tDAAHeight:                     0,         // November 13, 2017 hard fork is always on on regtest\n\tMagneticAnomalyActivationTime: 1542300000,\n\tGreatWallActivationTime:       1557921600,\n\n\tSubsidyReductionInterval: 150,\n\tTargetTimespan:           time.Hour * 24 * 14, // 14 days\n\tTargetTimePerBlock:       time.Minute * 10,    // 10 minutes\n\tRetargetAdjustmentFactor: 4,                   // 25% less, 400% more\n\tReduceMinDifficulty:      true,\n\tMinDiffReductionTime:     time.Minute * 20, // TargetTimePerBlock * 2\n\tGenerateSupported:        true,\n\n\t// Checkpoints ordered from oldest to newest.\n\tCheckpoints: nil,\n\n\t// Consensus rule change deployments.\n\t//\n\t// The miner confirmation window is defined as:\n\t//   target proof of work timespan / target proof of work spacing\n\tRuleChangeActivationThreshold: 108, // 75%  of MinerConfirmationWindow\n\tMinerConfirmationWindow:       144,\n\tDeployments: [DefinedDeployments]ConsensusDeployment{\n\t\tDeploymentTestDummy: {\n\t\t\tBitNumber:  28,\n\t\t\tStartTime:  0,             // Always available for vote\n\t\t\tExpireTime: math.MaxInt64, // Never expires\n\t\t},\n\t\tDeploymentCSV: {\n\t\t\tBitNumber:  0,\n\t\t\tStartTime:  0,             // Always available for vote\n\t\t\tExpireTime: math.MaxInt64, // Never expires\n\t\t},\n\t},\n\n\t// Mempool parameters\n\tRelayNonStdTxs: true,\n\n\t// Address encoding magics\n\tPubKeyHashAddrID: 0x6f, // starts with m or n\n\tScriptHashAddrID: 0xc4, // starts with 2\n\tPrivateKeyID:     0xef, // starts with 9 (uncompressed) or c (compressed)\n\n\t// BIP32 hierarchical deterministic extended key magics\n\tHDPrivateKeyID: [4]byte{0x04, 0x35, 0x83, 0x94}, // starts with tprv\n\tHDPublicKeyID:  [4]byte{0x04, 0x35, 0x87, 0xcf}, // starts with tpub\n\n\tCashAddrPrefix: \"bchreg\",\n\n\t// BIP44 coin type used in the hierarchical deterministic path for\n\t// address generation.\n\tHDCoinType: 1,\n}\n\n// SimNetParams defines the network parameters for the simulation test Bitcoin\n// network.  This network is similar to the normal test network except it is\n// intended for private use within a group of individuals doing simulation\n// testing.  The functionality is intended to differ in that the only nodes\n// which are specifically specified are used to create the network rather than\n// following normal discovery rules.  This is important as otherwise it would\n// just turn into another public testnet.\nvar SimNetParams = Params{\n\tName:        \"simnet\",\n\tNet:         wire.SimNet,\n\tDefaultPort: \"18555\",\n\tDNSSeeds:    []DNSSeed{}, // NOTE: There must NOT be any seeds.\n\n\t// Chain parameters\n\tGenesisBlock:                  &simNetGenesisBlock,\n\tGenesisHash:                   &simNetGenesisHash,\n\tPowLimit:                      simNetPowLimit,\n\tPowLimitBits:                  0x207fffff,\n\tBIP0034Height:                 0, // Always active on simnet\n\tBIP0065Height:                 0, // Always active on simnet\n\tBIP0066Height:                 0, // Always active on simnet\n\tUAHFHeight:                    0, // UAHF is always enabled on regtest\n\tDAAHeight:                     0, // November 13, 2017 hard fork is always on on regtest\n\tMagneticAnomalyActivationTime: 1542300000,\n\tGreatWallActivationTime:       1557921600,\n\n\tCoinbaseMaturity:         100,\n\tSubsidyReductionInterval: 210000,\n\tTargetTimespan:           time.Hour * 24 * 14, // 14 days\n\tTargetTimePerBlock:       time.Minute * 10,    // 10 minutes\n\tRetargetAdjustmentFactor: 4,                   // 25% less, 400% more\n\tReduceMinDifficulty:      true,\n\tMinDiffReductionTime:     time.Minute * 20, // TargetTimePerBlock * 2\n\tGenerateSupported:        true,\n\n\t// Checkpoints ordered from oldest to newest.\n\tCheckpoints: nil,\n\n\t// Consensus rule change deployments.\n\t//\n\t// The miner confirmation window is defined as:\n\t//   target proof of work timespan / target proof of work spacing\n\tRuleChangeActivationThreshold: 75, // 75% of MinerConfirmationWindow\n\tMinerConfirmationWindow:       100,\n\tDeployments: [DefinedDeployments]ConsensusDeployment{\n\t\tDeploymentTestDummy: {\n\t\t\tBitNumber:  28,\n\t\t\tStartTime:  0,             // Always available for vote\n\t\t\tExpireTime: math.MaxInt64, // Never expires\n\t\t},\n\t\tDeploymentCSV: {\n\t\t\tBitNumber:  0,\n\t\t\tStartTime:  0,             // Always available for vote\n\t\t\tExpireTime: math.MaxInt64, // Never expires\n\t\t},\n\t},\n\n\t// Mempool parameters\n\tRelayNonStdTxs: true,\n\n\t// Address encoding magics\n\tPubKeyHashAddrID: 0x3f, // starts with S\n\tScriptHashAddrID: 0x7b, // starts with s\n\tPrivateKeyID:     0x64, // starts with 4 (uncompressed) or F (compressed)\n\n\t// BIP32 hierarchical deterministic extended key magics\n\tHDPrivateKeyID: [4]byte{0x04, 0x20, 0xb9, 0x00}, // starts with sprv\n\tHDPublicKeyID:  [4]byte{0x04, 0x20, 0xbd, 0x3a}, // starts with spub\n\n\tCashAddrPrefix: \"bchreg\",\n\n\t// BIP44 coin type used in the hierarchical deterministic path for\n\t// address generation.\n\tHDCoinType: 115, // ASCII for s\n}\n\n// DifficultyAdjustmentInterval returns the number of blocks for retargeting\n// difficulty\nfunc (param *Params) DifficultyAdjustmentInterval() int64 {\n\treturn int64(param.TargetTimespan / param.TargetTimePerBlock)\n}\n\nvar (\n\t// ErrDuplicateNet describes an error where the parameters for a Bitcoin\n\t// network could not be set due to the network already being a standard\n\t// network or previously-registered into this package.\n\tErrDuplicateNet = errors.New(\"duplicate Bitcoin network\")\n\n\t// ErrUnknownHDKeyID describes an error where the provided id which\n\t// is intended to identify the network for a hierarchical deterministic\n\t// private extended key is not registered.\n\tErrUnknownHDKeyID = errors.New(\"unknown hd private extended key bytes\")\n)\n\nvar (\n\tregisteredNets    = make(map[wire.BitcoinNet]struct{})\n\tpubKeyHashAddrIDs = make(map[byte]struct{})\n\tscriptHashAddrIDs = make(map[byte]struct{})\n\thdPrivToPubKeyIDs = make(map[[4]byte][]byte)\n)\n\n// String returns the hostname of the DNS seed in human-readable form.\nfunc (d DNSSeed) String() string {\n\treturn d.Host\n}\n\n// Register registers the network parameters for a Bitcoin network.  This may\n// error with ErrDuplicateNet if the network is already registered (either\n// due to a previous Register call, or the network being one of the default\n// networks).\n//\n// Network parameters should be registered into this package by a main package\n// as early as possible.  Then, library packages may lookup networks or network\n// parameters based on inputs and work regardless of the network being standard\n// or not.\nfunc Register(params *Params) error {\n\tif _, ok := registeredNets[params.Net]; ok {\n\t\treturn ErrDuplicateNet\n\t}\n\tregisteredNets[params.Net] = struct{}{}\n\tpubKeyHashAddrIDs[params.PubKeyHashAddrID] = struct{}{}\n\tscriptHashAddrIDs[params.ScriptHashAddrID] = struct{}{}\n\thdPrivToPubKeyIDs[params.HDPrivateKeyID] = params.HDPublicKeyID[:]\n\n\treturn nil\n}\n\n// mustRegister performs the same function as Register except it panics if there\n// is an error.  This should only be called from package init functions.\nfunc mustRegister(params *Params) {\n\tif err := Register(params); err != nil {\n\t\tpanic(\"failed to register network: \" + err.Error())\n\t}\n}\n\n// IsPubKeyHashAddrID returns whether the id is an identifier known to prefix a\n// pay-to-pubkey-hash address on any default or registered network.  This is\n// used when decoding an address string into a specific address type.  It is up\n// to the caller to check both this and IsScriptHashAddrID and decide whether an\n// address is a pubkey hash address, script hash address, neither, or\n// undeterminable (if both return true).\nfunc IsPubKeyHashAddrID(id byte) bool {\n\t_, ok := pubKeyHashAddrIDs[id]\n\treturn ok\n}\n\n// IsScriptHashAddrID returns whether the id is an identifier known to prefix a\n// pay-to-script-hash address on any default or registered network.  This is\n// used when decoding an address string into a specific address type.  It is up\n// to the caller to check both this and IsPubKeyHashAddrID and decide whether an\n// address is a pubkey hash address, script hash address, neither, or\n// undeterminable (if both return true).\nfunc IsScriptHashAddrID(id byte) bool {\n\t_, ok := scriptHashAddrIDs[id]\n\treturn ok\n}\n\n// HDPrivateKeyToPublicKeyID accepts a private hierarchical deterministic\n// extended key id and returns the associated public key id.  When the provided\n// id is not registered, the ErrUnknownHDKeyID error will be returned.\nfunc HDPrivateKeyToPublicKeyID(id []byte) ([]byte, error) {\n\tif len(id) != 4 {\n\t\treturn nil, ErrUnknownHDKeyID\n\t}\n\n\tvar key [4]byte\n\tcopy(key[:], id)\n\tpubBytes, ok := hdPrivToPubKeyIDs[key]\n\tif !ok {\n\t\treturn nil, ErrUnknownHDKeyID\n\t}\n\n\treturn pubBytes, nil\n}\n\n// newHashFromStr converts the passed big-endian hex string into a\n// chainhash.Hash.  It only differs from the one available in chainhash in that\n// it panics on an error since it will only (and must only) be called with\n// hard-coded, and therefore known good, hashes.\nfunc newHashFromStr(hexStr string) *chainhash.Hash {\n\thash, err := chainhash.NewHashFromStr(hexStr)\n\tif err != nil {\n\t\t// Ordinarily I don't like panics in library code since it\n\t\t// can take applications down without them having a chance to\n\t\t// recover which is extremely annoying, however an exception is\n\t\t// being made in this case because the only way this can panic\n\t\t// is if there is an error in the hard-coded hashes.  Thus it\n\t\t// will only ever potentially panic on init and therefore is\n\t\t// 100% predictable.\n\t\tpanic(err)\n\t}\n\treturn hash\n}\n\nfunc init() {\n\t// Register all default networks when the package is initialized.\n\tmustRegister(&MainNetParams)\n\tmustRegister(&TestNet3Params)\n\tmustRegister(&RegressionNetParams)\n\tmustRegister(&SimNetParams)\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/README.md",
    "content": "wire\n====\n\n[![Build Status](http://img.shields.io/travis/bcext/gcash.svg)](https://travis-ci.org/bcext/gcash)\n[![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org)\n[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](http://godoc.org/github.com/bcext/gcash/wire)\n=======\n\nPackage wire implements the bitcoin wire protocol.  A comprehensive suite of\ntests with 100% test coverage is provided to ensure proper functionality.\n\nThere is an associated blog post about the release of this package\n[here](https://blog.conformal.com/btcwire-the-bitcoin-wire-protocol-package-from-btcd/).\n\nThis package has intentionally been designed so it can be used as a standalone\npackage for any projects needing to interface with bitcoin peers at the wire\nprotocol level.\n\n## Installation and Updating\n\n```bash\n$ go get -u github.com/bcext/gcash/wire\n```\n\n## Bitcoin Message Overview\n\nThe bitcoin protocol consists of exchanging messages between peers. Each message\nis preceded by a header which identifies information about it such as which\nbitcoin network it is a part of, its type, how big it is, and a checksum to\nverify validity. All encoding and decoding of message headers is handled by this\npackage.\n\nTo accomplish this, there is a generic interface for bitcoin messages named\n`Message` which allows messages of any type to be read, written, or passed\naround through channels, functions, etc. In addition, concrete implementations\nof most of the currently supported bitcoin messages are provided. For these\nsupported messages, all of the details of marshalling and unmarshalling to and\nfrom the wire using bitcoin encoding are handled so the caller doesn't have to\nconcern themselves with the specifics.\n\n## Reading Messages Example\n\nIn order to unmarshal bitcoin messages from the wire, use the `ReadMessage`\nfunction. It accepts any `io.Reader`, but typically this will be a `net.Conn`\nto a remote node running a bitcoin peer.  Example syntax is:\n\n```Go\n\t// Use the most recent protocol version supported by the package and the\n\t// main bitcoin network.\n\tpver := wire.ProtocolVersion\n\tbtcnet := wire.MainNet\n\n\t// Reads and validates the next bitcoin message from conn using the\n\t// protocol version pver and the bitcoin network btcnet.  The returns\n\t// are a wire.Message, a []byte which contains the unmarshalled\n\t// raw payload, and a possible error.\n\tmsg, rawPayload, err := wire.ReadMessage(conn, pver, btcnet)\n\tif err != nil {\n\t\t// Log and handle the error\n\t}\n```\n\nSee the package documentation for details on determining the message type.\n\n## Writing Messages Example\n\nIn order to marshal bitcoin messages to the wire, use the `WriteMessage`\nfunction. It accepts any `io.Writer`, but typically this will be a `net.Conn`\nto a remote node running a bitcoin peer. Example syntax to request addresses\nfrom a remote peer is:\n\n```Go\n\t// Use the most recent protocol version supported by the package and the\n\t// main bitcoin network.\n\tpver := wire.ProtocolVersion\n\tbtcnet := wire.MainNet\n\n\t// Create a new getaddr bitcoin message.\n\tmsg := wire.NewMsgGetAddr()\n\n\t// Writes a bitcoin message msg to conn using the protocol version\n\t// pver, and the bitcoin network btcnet.  The return is a possible\n\t// error.\n\terr := wire.WriteMessage(conn, msg, pver, btcnet)\n\tif err != nil {\n\t\t// Log and handle the error\n\t}\n```\n\n## GPG Verification Key\n\nAll official release tags are signed by Conformal so users can ensure the code\nhas not been tampered with and is coming from the btcsuite developers.  To\nverify the signature perform the following:\n\n- Download the public key from the Conformal website at\n  https://opensource.conformal.com/GIT-GPG-KEY-conformal.txt\n\n- Import the public key into your GPG keyring:\n  ```bash\n  gpg --import GIT-GPG-KEY-conformal.txt\n  ```\n\n- Verify the release tag with the following command where `TAG_NAME` is a\n  placeholder for the specific tag:\n  ```bash\n  git tag -v TAG_NAME\n  ```\n\n## License\n\nPackage wire is licensed under the [copyfree](http://copyfree.org) ISC\nLicense.\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/blockheader.go",
    "content": "// Copyright (c) 2013-2016 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"bytes\"\n\t\"io\"\n\t\"time\"\n\n\t\"github.com/bcext/gcash/chaincfg/chainhash\"\n)\n\n// MaxBlockHeaderPayload is the maximum number of bytes a block header can be.\n// Version 4 bytes + Timestamp 4 bytes + Bits 4 bytes + Nonce 4 bytes +\n// PrevBlock and MerkleRoot hashes.\nconst MaxBlockHeaderPayload = 16 + (chainhash.HashSize * 2)\n\n// BlockHeader defines information about a block and is used in the bitcoin\n// block (MsgBlock) and headers (MsgHeaders) messages.\ntype BlockHeader struct {\n\t// Version of the block.  This is not the same as the protocol version.\n\tVersion int32\n\n\t// Hash of the previous block header in the block chain.\n\tPrevBlock chainhash.Hash\n\n\t// Merkle tree reference to hash of all transactions for the block.\n\tMerkleRoot chainhash.Hash\n\n\t// Time the block was created.  This is, unfortunately, encoded as a\n\t// uint32 on the wire and therefore is limited to 2106.\n\tTimestamp time.Time\n\n\t// Difficulty target for the block.\n\tBits uint32\n\n\t// Nonce used to generate the block.\n\tNonce uint32\n}\n\n// blockHeaderLen is a constant that represents the number of bytes for a block\n// header.\nconst blockHeaderLen = 80\n\n// BlockHash computes the block identifier hash for the given block header.\nfunc (h *BlockHeader) BlockHash() chainhash.Hash {\n\t// Encode the header and double sha256 everything prior to the number of\n\t// transactions.  Ignore the error returns since there is no way the\n\t// encode could fail except being out of memory which would cause a\n\t// run-time panic.\n\tbuf := bytes.NewBuffer(make([]byte, 0, MaxBlockHeaderPayload))\n\t_ = writeBlockHeader(buf, 0, h)\n\n\treturn chainhash.DoubleHashH(buf.Bytes())\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\n// See Deserialize for decoding block headers stored to disk, such as in a\n// database, as opposed to decoding block headers from the wire.\nfunc (h *BlockHeader) BtcDecode(r io.Reader, pver uint32) error {\n\treturn readBlockHeader(r, pver, h)\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\n// See Serialize for encoding block headers to be stored to disk, such as in a\n// database, as opposed to encoding block headers for the wire.\nfunc (h *BlockHeader) BtcEncode(w io.Writer, pver uint32) error {\n\treturn writeBlockHeader(w, pver, h)\n}\n\n// Deserialize decodes a block header from r into the receiver using a format\n// that is suitable for long-term storage such as a database while respecting\n// the Version field.\nfunc (h *BlockHeader) Deserialize(r io.Reader) error {\n\t// At the current time, there is no difference between the wire encoding\n\t// at protocol version 0 and the stable long-term storage format.  As\n\t// a result, make use of readBlockHeader.\n\treturn readBlockHeader(r, 0, h)\n}\n\n// Serialize encodes a block header from r into the receiver using a format\n// that is suitable for long-term storage such as a database while respecting\n// the Version field.\nfunc (h *BlockHeader) Serialize(w io.Writer) error {\n\t// At the current time, there is no difference between the wire encoding\n\t// at protocol version 0 and the stable long-term storage format.  As\n\t// a result, make use of writeBlockHeader.\n\treturn writeBlockHeader(w, 0, h)\n}\n\n// NewBlockHeader returns a new BlockHeader using the provided version, previous\n// block hash, merkle root hash, difficulty bits, and nonce used to generate the\n// block with defaults for the remaining fields.\nfunc NewBlockHeader(version int32, prevHash, merkleRootHash *chainhash.Hash,\n\tbits uint32, nonce uint32) *BlockHeader {\n\n\t// Limit the timestamp to one second precision since the protocol\n\t// doesn't support better.\n\treturn &BlockHeader{\n\t\tVersion:    version,\n\t\tPrevBlock:  *prevHash,\n\t\tMerkleRoot: *merkleRootHash,\n\t\tTimestamp:  time.Unix(time.Now().Unix(), 0),\n\t\tBits:       bits,\n\t\tNonce:      nonce,\n\t}\n}\n\n// readBlockHeader reads a bitcoin block header from r.  See Deserialize for\n// decoding block headers stored to disk, such as in a database, as opposed to\n// decoding from the wire.\nfunc readBlockHeader(r io.Reader, pver uint32, bh *BlockHeader) error {\n\treturn readElements(r, &bh.Version, &bh.PrevBlock, &bh.MerkleRoot,\n\t\t(*uint32Time)(&bh.Timestamp), &bh.Bits, &bh.Nonce)\n}\n\n// writeBlockHeader writes a bitcoin block header to w.  See Serialize for\n// encoding block headers to be stored to disk, such as in a database, as\n// opposed to encoding for the wire.\nfunc writeBlockHeader(w io.Writer, pver uint32, bh *BlockHeader) error {\n\tsec := uint32(bh.Timestamp.Unix())\n\treturn writeElements(w, bh.Version, &bh.PrevBlock, &bh.MerkleRoot,\n\t\tsec, bh.Bits, bh.Nonce)\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/common.go",
    "content": "// Copyright (c) 2013-2016 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"crypto/rand\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"time\"\n\n\t\"github.com/bcext/gcash/chaincfg/chainhash\"\n)\n\nconst (\n\t// MaxVarIntPayload is the maximum payload size for a variable length integer.\n\tMaxVarIntPayload = 9\n\n\t// binaryFreeListMaxItems is the number of buffers to keep in the free\n\t// list to use for binary serialization and deserialization.\n\tbinaryFreeListMaxItems = 1024\n)\n\nvar (\n\t// littleEndian is a convenience variable since binary.LittleEndian is\n\t// quite long.\n\tlittleEndian = binary.LittleEndian\n\n\t// bigEndian is a convenience variable since binary.BigEndian is quite\n\t// long.\n\tbigEndian = binary.BigEndian\n)\n\n// binaryFreeList defines a concurrent safe free list of byte slices (up to the\n// maximum number defined by the binaryFreeListMaxItems constant) that have a\n// cap of 8 (thus it supports up to a uint64).  It is used to provide temporary\n// buffers for serializing and deserializing primitive numbers to and from their\n// binary encoding in order to greatly reduce the number of allocations\n// required.\n//\n// For convenience, functions are provided for each of the primitive unsigned\n// integers that automatically obtain a buffer from the free list, perform the\n// necessary binary conversion, read from or write to the given io.Reader or\n// io.Writer, and return the buffer to the free list.\ntype binaryFreeList chan []byte\n\n// Borrow returns a byte slice from the free list with a length of 8.  A new\n// buffer is allocated if there are not any available on the free list.\nfunc (l binaryFreeList) Borrow() []byte {\n\tvar buf []byte\n\tselect {\n\tcase buf = <-l:\n\tdefault:\n\t\tbuf = make([]byte, 8)\n\t}\n\treturn buf[:8]\n}\n\n// Return puts the provided byte slice back on the free list.  The buffer MUST\n// have been obtained via the Borrow function and therefore have a cap of 8.\nfunc (l binaryFreeList) Return(buf []byte) {\n\tselect {\n\tcase l <- buf:\n\tdefault:\n\t\t// Let it go to the garbage collector.\n\t}\n}\n\n// Uint8 reads a single byte from the provided reader using a buffer from the\n// free list and returns it as a uint8.\nfunc (l binaryFreeList) Uint8(r io.Reader) (uint8, error) {\n\tbuf := l.Borrow()[:1]\n\tif _, err := io.ReadFull(r, buf); err != nil {\n\t\tl.Return(buf)\n\t\treturn 0, err\n\t}\n\trv := buf[0]\n\tl.Return(buf)\n\treturn rv, nil\n}\n\n// Uint16 reads two bytes from the provided reader using a buffer from the\n// free list, converts it to a number using the provided byte order, and returns\n// the resulting uint16.\nfunc (l binaryFreeList) Uint16(r io.Reader, byteOrder binary.ByteOrder) (uint16, error) {\n\tbuf := l.Borrow()[:2]\n\tif _, err := io.ReadFull(r, buf); err != nil {\n\t\tl.Return(buf)\n\t\treturn 0, err\n\t}\n\trv := byteOrder.Uint16(buf)\n\tl.Return(buf)\n\treturn rv, nil\n}\n\n// Uint32 reads four bytes from the provided reader using a buffer from the\n// free list, converts it to a number using the provided byte order, and returns\n// the resulting uint32.\nfunc (l binaryFreeList) Uint32(r io.Reader, byteOrder binary.ByteOrder) (uint32, error) {\n\tbuf := l.Borrow()[:4]\n\tif _, err := io.ReadFull(r, buf); err != nil {\n\t\tl.Return(buf)\n\t\treturn 0, err\n\t}\n\trv := byteOrder.Uint32(buf)\n\tl.Return(buf)\n\treturn rv, nil\n}\n\n// Uint64 reads eight bytes from the provided reader using a buffer from the\n// free list, converts it to a number using the provided byte order, and returns\n// the resulting uint64.\nfunc (l binaryFreeList) Uint64(r io.Reader, byteOrder binary.ByteOrder) (uint64, error) {\n\tbuf := l.Borrow()[:8]\n\tif _, err := io.ReadFull(r, buf); err != nil {\n\t\tl.Return(buf)\n\t\treturn 0, err\n\t}\n\trv := byteOrder.Uint64(buf)\n\tl.Return(buf)\n\treturn rv, nil\n}\n\n// PutUint8 copies the provided uint8 into a buffer from the free list and\n// writes the resulting byte to the given writer.\nfunc (l binaryFreeList) PutUint8(w io.Writer, val uint8) error {\n\tbuf := l.Borrow()[:1]\n\tbuf[0] = val\n\t_, err := w.Write(buf)\n\tl.Return(buf)\n\treturn err\n}\n\n// PutUint16 serializes the provided uint16 using the given byte order into a\n// buffer from the free list and writes the resulting two bytes to the given\n// writer.\nfunc (l binaryFreeList) PutUint16(w io.Writer, byteOrder binary.ByteOrder, val uint16) error {\n\tbuf := l.Borrow()[:2]\n\tbyteOrder.PutUint16(buf, val)\n\t_, err := w.Write(buf)\n\tl.Return(buf)\n\treturn err\n}\n\n// PutUint32 serializes the provided uint32 using the given byte order into a\n// buffer from the free list and writes the resulting four bytes to the given\n// writer.\nfunc (l binaryFreeList) PutUint32(w io.Writer, byteOrder binary.ByteOrder, val uint32) error {\n\tbuf := l.Borrow()[:4]\n\tbyteOrder.PutUint32(buf, val)\n\t_, err := w.Write(buf)\n\tl.Return(buf)\n\treturn err\n}\n\n// PutUint64 serializes the provided uint64 using the given byte order into a\n// buffer from the free list and writes the resulting eight bytes to the given\n// writer.\nfunc (l binaryFreeList) PutUint64(w io.Writer, byteOrder binary.ByteOrder, val uint64) error {\n\tbuf := l.Borrow()[:8]\n\tbyteOrder.PutUint64(buf, val)\n\t_, err := w.Write(buf)\n\tl.Return(buf)\n\treturn err\n}\n\n// binarySerializer provides a free list of buffers to use for serializing and\n// deserializing primitive integer values to and from io.Readers and io.Writers.\nvar binarySerializer binaryFreeList = make(chan []byte, binaryFreeListMaxItems)\n\n// errNonCanonicalVarInt is the common format string used for non-canonically\n// encoded variable length integer errors.\nvar errNonCanonicalVarInt = \"non-canonical varint %x - discriminant %x must \" +\n\t\"encode a value greater than %x\"\n\n// uint32Time represents a unix timestamp encoded with a uint32.  It is used as\n// a way to signal the readElement function how to decode a timestamp into a Go\n// time.Time since it is otherwise ambiguous.\ntype uint32Time time.Time\n\n// int64Time represents a unix timestamp encoded with an int64.  It is used as\n// a way to signal the readElement function how to decode a timestamp into a Go\n// time.Time since it is otherwise ambiguous.\ntype int64Time time.Time\n\n// readElement reads the next sequence of bytes from r using little endian\n// depending on the concrete type of element pointed to.\nfunc readElement(r io.Reader, element interface{}) error {\n\t// Attempt to read the element based on the concrete type via fast\n\t// type assertions first.\n\tswitch e := element.(type) {\n\tcase *int32:\n\t\trv, err := binarySerializer.Uint32(r, littleEndian)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*e = int32(rv)\n\t\treturn nil\n\n\tcase *uint32:\n\t\trv, err := binarySerializer.Uint32(r, littleEndian)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*e = rv\n\t\treturn nil\n\n\tcase *int64:\n\t\trv, err := binarySerializer.Uint64(r, littleEndian)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*e = int64(rv)\n\t\treturn nil\n\n\tcase *uint64:\n\t\trv, err := binarySerializer.Uint64(r, littleEndian)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*e = rv\n\t\treturn nil\n\n\tcase *bool:\n\t\trv, err := binarySerializer.Uint8(r)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif rv == 0x00 {\n\t\t\t*e = false\n\t\t} else {\n\t\t\t*e = true\n\t\t}\n\t\treturn nil\n\n\t// Unix timestamp encoded as a uint32.\n\tcase *uint32Time:\n\t\trv, err := binarySerializer.Uint32(r, binary.LittleEndian)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*e = uint32Time(time.Unix(int64(rv), 0))\n\t\treturn nil\n\n\t// Unix timestamp encoded as an int64.\n\tcase *int64Time:\n\t\trv, err := binarySerializer.Uint64(r, binary.LittleEndian)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*e = int64Time(time.Unix(int64(rv), 0))\n\t\treturn nil\n\n\t// Message header checksum.\n\tcase *[4]byte:\n\t\t_, err := io.ReadFull(r, e[:])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\n\t// Message header command.\n\tcase *[CommandSize]uint8:\n\t\t_, err := io.ReadFull(r, e[:])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\n\t// IP address.\n\tcase *[16]byte:\n\t\t_, err := io.ReadFull(r, e[:])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\n\tcase *chainhash.Hash:\n\t\t_, err := io.ReadFull(r, e[:])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\n\tcase *ServiceFlag:\n\t\trv, err := binarySerializer.Uint64(r, littleEndian)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*e = ServiceFlag(rv)\n\t\treturn nil\n\n\tcase *InvType:\n\t\trv, err := binarySerializer.Uint32(r, littleEndian)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*e = InvType(rv)\n\t\treturn nil\n\n\tcase *BitcoinNet:\n\t\trv, err := binarySerializer.Uint32(r, littleEndian)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*e = BitcoinNet(rv)\n\t\treturn nil\n\n\tcase *BloomUpdateType:\n\t\trv, err := binarySerializer.Uint8(r)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*e = BloomUpdateType(rv)\n\t\treturn nil\n\n\tcase *RejectCode:\n\t\trv, err := binarySerializer.Uint8(r)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*e = RejectCode(rv)\n\t\treturn nil\n\t}\n\n\t// Fall back to the slower binary.Read if a fast path was not available\n\t// above.\n\treturn binary.Read(r, littleEndian, element)\n}\n\n// readElements reads multiple items from r.  It is equivalent to multiple\n// calls to readElement.\nfunc readElements(r io.Reader, elements ...interface{}) error {\n\tfor _, element := range elements {\n\t\terr := readElement(r, element)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// writeElement writes the little endian representation of element to w.\nfunc writeElement(w io.Writer, element interface{}) error {\n\t// Attempt to write the element based on the concrete type via fast\n\t// type assertions first.\n\tswitch e := element.(type) {\n\tcase int32:\n\t\terr := binarySerializer.PutUint32(w, littleEndian, uint32(e))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\n\tcase uint32:\n\t\terr := binarySerializer.PutUint32(w, littleEndian, e)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\n\tcase int64:\n\t\terr := binarySerializer.PutUint64(w, littleEndian, uint64(e))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\n\tcase uint64:\n\t\terr := binarySerializer.PutUint64(w, littleEndian, e)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\n\tcase bool:\n\t\tvar err error\n\t\tif e {\n\t\t\terr = binarySerializer.PutUint8(w, 0x01)\n\t\t} else {\n\t\t\terr = binarySerializer.PutUint8(w, 0x00)\n\t\t}\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\n\t// Message header checksum.\n\tcase [4]byte:\n\t\t_, err := w.Write(e[:])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\n\t// Message header command.\n\tcase [CommandSize]uint8:\n\t\t_, err := w.Write(e[:])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\n\t// IP address.\n\tcase [16]byte:\n\t\t_, err := w.Write(e[:])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\n\tcase *chainhash.Hash:\n\t\t_, err := w.Write(e[:])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\n\tcase ServiceFlag:\n\t\terr := binarySerializer.PutUint64(w, littleEndian, uint64(e))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\n\tcase InvType:\n\t\terr := binarySerializer.PutUint32(w, littleEndian, uint32(e))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\n\tcase BitcoinNet:\n\t\terr := binarySerializer.PutUint32(w, littleEndian, uint32(e))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\n\tcase BloomUpdateType:\n\t\terr := binarySerializer.PutUint8(w, uint8(e))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\n\tcase RejectCode:\n\t\terr := binarySerializer.PutUint8(w, uint8(e))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t}\n\n\t// Fall back to the slower binary.Write if a fast path was not available\n\t// above.\n\treturn binary.Write(w, littleEndian, element)\n}\n\n// writeElements writes multiple items to w.  It is equivalent to multiple\n// calls to writeElement.\nfunc writeElements(w io.Writer, elements ...interface{}) error {\n\tfor _, element := range elements {\n\t\terr := writeElement(w, element)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// ReadVarInt reads a variable length integer from r and returns it as a uint64.\nfunc ReadVarInt(r io.Reader, pver uint32) (uint64, error) {\n\tdiscriminant, err := binarySerializer.Uint8(r)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tvar rv uint64\n\tswitch discriminant {\n\tcase 0xff:\n\t\tsv, err := binarySerializer.Uint64(r, littleEndian)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\trv = sv\n\n\t\t// The encoding is not canonical if the value could have been\n\t\t// encoded using fewer bytes.\n\t\tmin := uint64(0x100000000)\n\t\tif rv < min {\n\t\t\treturn 0, messageError(\"ReadVarInt\", fmt.Sprintf(\n\t\t\t\terrNonCanonicalVarInt, rv, discriminant, min))\n\t\t}\n\n\tcase 0xfe:\n\t\tsv, err := binarySerializer.Uint32(r, littleEndian)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\trv = uint64(sv)\n\n\t\t// The encoding is not canonical if the value could have been\n\t\t// encoded using fewer bytes.\n\t\tmin := uint64(0x10000)\n\t\tif rv < min {\n\t\t\treturn 0, messageError(\"ReadVarInt\", fmt.Sprintf(\n\t\t\t\terrNonCanonicalVarInt, rv, discriminant, min))\n\t\t}\n\n\tcase 0xfd:\n\t\tsv, err := binarySerializer.Uint16(r, littleEndian)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\trv = uint64(sv)\n\n\t\t// The encoding is not canonical if the value could have been\n\t\t// encoded using fewer bytes.\n\t\tmin := uint64(0xfd)\n\t\tif rv < min {\n\t\t\treturn 0, messageError(\"ReadVarInt\", fmt.Sprintf(\n\t\t\t\terrNonCanonicalVarInt, rv, discriminant, min))\n\t\t}\n\n\tdefault:\n\t\trv = uint64(discriminant)\n\t}\n\n\treturn rv, nil\n}\n\n// WriteVarInt serializes val to w using a variable number of bytes depending\n// on its value.\nfunc WriteVarInt(w io.Writer, pver uint32, val uint64) error {\n\tif val < 0xfd {\n\t\treturn binarySerializer.PutUint8(w, uint8(val))\n\t}\n\n\tif val <= math.MaxUint16 {\n\t\terr := binarySerializer.PutUint8(w, 0xfd)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn binarySerializer.PutUint16(w, littleEndian, uint16(val))\n\t}\n\n\tif val <= math.MaxUint32 {\n\t\terr := binarySerializer.PutUint8(w, 0xfe)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn binarySerializer.PutUint32(w, littleEndian, uint32(val))\n\t}\n\n\terr := binarySerializer.PutUint8(w, 0xff)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn binarySerializer.PutUint64(w, littleEndian, val)\n}\n\n// VarIntSerializeSize returns the number of bytes it would take to serialize\n// val as a variable length integer.\nfunc VarIntSerializeSize(val uint64) int {\n\t// The value is small enough to be represented by itself, so it's\n\t// just 1 byte.\n\tif val < 0xfd {\n\t\treturn 1\n\t}\n\n\t// Discriminant 1 byte plus 2 bytes for the uint16.\n\tif val <= math.MaxUint16 {\n\t\treturn 3\n\t}\n\n\t// Discriminant 1 byte plus 4 bytes for the uint32.\n\tif val <= math.MaxUint32 {\n\t\treturn 5\n\t}\n\n\t// Discriminant 1 byte plus 8 bytes for the uint64.\n\treturn 9\n}\n\n// ReadVarString reads a variable length string from r and returns it as a Go\n// string.  A variable length string is encoded as a variable length integer\n// containing the length of the string followed by the bytes that represent the\n// string itself.  An error is returned if the length is greater than the\n// maximum block payload size since it helps protect against memory exhaustion\n// attacks and forced panics through malformed messages.\nfunc ReadVarString(r io.Reader, pver uint32) (string, error) {\n\tcount, err := ReadVarInt(r, pver)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\t// Prevent variable length strings that are larger than the maximum\n\t// message size.  It would be possible to cause memory exhaustion and\n\t// panics without a sane upper bound on this count.\n\tif count > MaxMessagePayload {\n\t\tstr := fmt.Sprintf(\"variable length string is too long \"+\n\t\t\t\"[count %d, max %d]\", count, MaxMessagePayload)\n\t\treturn \"\", messageError(\"ReadVarString\", str)\n\t}\n\n\tbuf := make([]byte, count)\n\t_, err = io.ReadFull(r, buf)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn string(buf), nil\n}\n\n// WriteVarString serializes str to w as a variable length integer containing\n// the length of the string followed by the bytes that represent the string\n// itself.\nfunc WriteVarString(w io.Writer, pver uint32, str string) error {\n\terr := WriteVarInt(w, pver, uint64(len(str)))\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, err = w.Write([]byte(str))\n\treturn err\n}\n\n// ReadVarBytes reads a variable length byte array.  A byte array is encoded\n// as a varInt containing the length of the array followed by the bytes\n// themselves.  An error is returned if the length is greater than the\n// passed maxAllowed parameter which helps protect against memory exhaustion\n// attacks and forced panics through malformed messages.  The fieldName\n// parameter is only used for the error message so it provides more context in\n// the error.\nfunc ReadVarBytes(r io.Reader, pver uint32, maxAllowed uint32,\n\tfieldName string) ([]byte, error) {\n\n\tcount, err := ReadVarInt(r, pver)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Prevent byte array larger than the max message size.  It would\n\t// be possible to cause memory exhaustion and panics without a sane\n\t// upper bound on this count.\n\tif count > uint64(maxAllowed) {\n\t\tstr := fmt.Sprintf(\"%s is larger than the max allowed size \"+\n\t\t\t\"[count %d, max %d]\", fieldName, count, maxAllowed)\n\t\treturn nil, messageError(\"ReadVarBytes\", str)\n\t}\n\n\tb := make([]byte, count)\n\t_, err = io.ReadFull(r, b)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn b, nil\n}\n\n// WriteVarBytes serializes a variable length byte array to w as a varInt\n// containing the number of bytes, followed by the bytes themselves.\nfunc WriteVarBytes(w io.Writer, pver uint32, bytes []byte) error {\n\tslen := uint64(len(bytes))\n\terr := WriteVarInt(w, pver, slen)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t_, err = w.Write(bytes)\n\treturn err\n}\n\n// randomUint64 returns a cryptographically random uint64 value.  This\n// unexported version takes a reader primarily to ensure the error paths\n// can be properly tested by passing a fake reader in the tests.\nfunc randomUint64(r io.Reader) (uint64, error) {\n\trv, err := binarySerializer.Uint64(r, bigEndian)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn rv, nil\n}\n\n// RandomUint64 returns a cryptographically random uint64 value.\nfunc RandomUint64() (uint64, error) {\n\treturn randomUint64(rand.Reader)\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/doc.go",
    "content": "// Copyright (c) 2013-2016 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\n/*\nPackage wire implements the bitcoin wire protocol.\n\nFor the complete details of the bitcoin protocol, see the official wiki entry\nat https://en.bitcoin.it/wiki/Protocol_specification.  The following only serves\nas a quick overview to provide information on how to use the package.\n\nAt a high level, this package provides support for marshalling and unmarshalling\nsupported bitcoin messages to and from the wire.  This package does not deal\nwith the specifics of message handling such as what to do when a message is\nreceived.  This provides the caller with a high level of flexibility.\n\nBitcoin Message Overview\n\nThe bitcoin protocol consists of exchanging messages between peers.  Each\nmessage is preceded by a header which identifies information about it such as\nwhich bitcoin network it is a part of, its type, how big it is, and a checksum\nto verify validity.  All encoding and decoding of message headers is handled by\nthis package.\n\nTo accomplish this, there is a generic interface for bitcoin messages named\nMessage which allows messages of any type to be read, written, or passed around\nthrough channels, functions, etc.  In addition, concrete implementations of most\nof the currently supported bitcoin messages are provided.  For these supported\nmessages, all of the details of marshalling and unmarshalling to and from the\nwire using bitcoin encoding are handled so the caller doesn't have to concern\nthemselves with the specifics.\n\nMessage Interaction\n\nThe following provides a quick summary of how the bitcoin messages are intended\nto interact with one another.  As stated above, these interactions are not\ndirectly handled by this package.  For more in-depth details about the\nappropriate interactions, see the official bitcoin protocol wiki entry at\nhttps://en.bitcoin.it/wiki/Protocol_specification.\n\nThe initial handshake consists of two peers sending each other a version message\n(MsgVersion) followed by responding with a verack message (MsgVerAck).  Both\npeers use the information in the version message (MsgVersion) to negotiate\nthings such as protocol version and supported services with each other.  Once\nthe initial handshake is complete, the following chart indicates message\ninteractions in no particular order.\n\n\tPeer A Sends                          Peer B Responds\n\t----------------------------------------------------------------------------\n\tgetaddr message (MsgGetAddr)          addr message (MsgAddr)\n\tgetblocks message (MsgGetBlocks)      inv message (MsgInv)\n\tinv message (MsgInv)                  getdata message (MsgGetData)\n\tgetdata message (MsgGetData)          block message (MsgBlock) -or-\n\t                                      tx message (MsgTx) -or-\n\t                                      notfound message (MsgNotFound)\n\tgetheaders message (MsgGetHeaders)    headers message (MsgHeaders)\n\tping message (MsgPing)                pong message (MsgHeaders)* -or-\n\t                                      (none -- Ability to send message is enough)\n\n\tNOTES:\n\t* The pong message was not added until later protocol versions as defined\n\t  in BIP0031.  The BIP0031Version constant can be used to detect a recent\n\t  enough protocol version for this purpose (version > BIP0031Version).\n\nCommon Parameters\n\nThere are several common parameters that arise when using this package to read\nand write bitcoin messages.  The following sections provide a quick overview of\nthese parameters so the next sections can build on them.\n\nProtocol Version\n\nThe protocol version should be negotiated with the remote peer at a higher\nlevel than this package via the version (MsgVersion) message exchange, however,\nthis package provides the wire.ProtocolVersion constant which indicates the\nlatest protocol version this package supports and is typically the value to use\nfor all outbound connections before a potentially lower protocol version is\nnegotiated.\n\nBitcoin Network\n\nThe bitcoin network is a magic number which is used to identify the start of a\nmessage and which bitcoin network the message applies to.  This package provides\nthe following constants:\n\n\twire.MainNet\n\twire.TestNet  (Regression test network)\n\twire.TestNet3 (Test network version 3)\n\twire.SimNet   (Simulation test network)\n\nDetermining Message Type\n\nAs discussed in the bitcoin message overview section, this package reads\nand writes bitcoin messages using a generic interface named Message.  In\norder to determine the actual concrete type of the message, use a type\nswitch or type assertion.  An example of a type switch follows:\n\n\t// Assumes msg is already a valid concrete message such as one created\n\t// via NewMsgVersion or read via ReadMessage.\n\tswitch msg := msg.(type) {\n\tcase *wire.MsgVersion:\n\t\t// The message is a pointer to a MsgVersion struct.\n\t\tfmt.Printf(\"Protocol version: %v\", msg.ProtocolVersion)\n\tcase *wire.MsgBlock:\n\t\t// The message is a pointer to a MsgBlock struct.\n\t\tfmt.Printf(\"Number of tx in block: %v\", msg.Header.TxnCount)\n\t}\n\nReading Messages\n\nIn order to unmarshall bitcoin messages from the wire, use the ReadMessage\nfunction.  It accepts any io.Reader, but typically this will be a net.Conn to\na remote node running a bitcoin peer.  Example syntax is:\n\n\t// Reads and validates the next bitcoin message from conn using the\n\t// protocol version pver and the bitcoin network btcnet.  The returns\n\t// are a wire.Message, a []byte which contains the unmarshalled\n\t// raw payload, and a possible error.\n\tmsg, rawPayload, err := wire.ReadMessage(conn, pver, btcnet)\n\tif err != nil {\n\t\t// Log and handle the error\n\t}\n\nWriting Messages\n\nIn order to marshall bitcoin messages to the wire, use the WriteMessage\nfunction.  It accepts any io.Writer, but typically this will be a net.Conn to\na remote node running a bitcoin peer.  Example syntax to request addresses\nfrom a remote peer is:\n\n\t// Create a new getaddr bitcoin message.\n\tmsg := wire.NewMsgGetAddr()\n\n\t// Writes a bitcoin message msg to conn using the protocol version\n\t// pver, and the bitcoin network btcnet.  The return is a possible\n\t// error.\n\terr := wire.WriteMessage(conn, msg, pver, btcnet)\n\tif err != nil {\n\t\t// Log and handle the error\n\t}\n\nErrors\n\nErrors returned by this package are either the raw errors provided by underlying\ncalls to read/write from streams such as io.EOF, io.ErrUnexpectedEOF, and\nio.ErrShortWrite, or of type wire.MessageError.  This allows the caller to\ndifferentiate between general IO errors and malformed messages through type\nassertions.\n\nBitcoin Improvement Proposals\n\nThis package includes spec changes outlined by the following BIPs:\n\n\tBIP0014 (https://github.com/bitcoin/bips/blob/master/bip-0014.mediawiki)\n\tBIP0031 (https://github.com/bitcoin/bips/blob/master/bip-0031.mediawiki)\n\tBIP0035 (https://github.com/bitcoin/bips/blob/master/bip-0035.mediawiki)\n\tBIP0037 (https://github.com/bitcoin/bips/blob/master/bip-0037.mediawiki)\n\tBIP0111\t(https://github.com/bitcoin/bips/blob/master/bip-0111.mediawiki)\n\tBIP0130 (https://github.com/bitcoin/bips/blob/master/bip-0130.mediawiki)\n\tBIP0133 (https://github.com/bitcoin/bips/blob/master/bip-0133.mediawiki)\n*/\npackage wire\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/error.go",
    "content": "// Copyright (c) 2013-2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n)\n\n// MessageError describes an issue with a message.\n// An example of some potential issues are messages from the wrong bitcoin\n// network, invalid commands, mismatched checksums, and exceeding max payloads.\n//\n// This provides a mechanism for the caller to type assert the error to\n// differentiate between general io errors such as io.EOF and issues that\n// resulted from malformed messages.\ntype MessageError struct {\n\tFunc        string // Function name\n\tDescription string // Human readable description of the issue\n}\n\n// Error satisfies the error interface and prints human-readable errors.\nfunc (e *MessageError) Error() string {\n\tif e.Func != \"\" {\n\t\treturn fmt.Sprintf(\"%v: %v\", e.Func, e.Description)\n\t}\n\treturn e.Description\n}\n\n// messageError creates an error for the given function and description.\nfunc messageError(f string, desc string) *MessageError {\n\treturn &MessageError{Func: f, Description: desc}\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/invvect.go",
    "content": "// Copyright (c) 2013-2016 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/bcext/gcash/chaincfg/chainhash\"\n)\n\nconst (\n\t// MaxInvPerMsg is the maximum number of inventory vectors that can be in a\n\t// single bitcoin inv message.\n\tMaxInvPerMsg = 50000\n\n\t// Maximum payload size for an inventory vector.\n\tmaxInvVectPayload = 4 + chainhash.HashSize\n)\n\n// InvType represents the allowed types of inventory vectors.  See InvVect.\ntype InvType uint32\n\n// These constants define the various supported inventory vector types.\nconst (\n\tInvTypeError         InvType = 0\n\tInvTypeTx            InvType = 1\n\tInvTypeBlock         InvType = 2\n\tInvTypeFilteredBlock InvType = 3\n)\n\n// Map of service flags back to their constant names for pretty printing.\nvar ivStrings = map[InvType]string{\n\tInvTypeError:         \"ERROR\",\n\tInvTypeTx:            \"MSG_TX\",\n\tInvTypeBlock:         \"MSG_BLOCK\",\n\tInvTypeFilteredBlock: \"MSG_FILTERED_BLOCK\",\n}\n\n// String returns the InvType in human-readable form.\nfunc (invtype InvType) String() string {\n\tif s, ok := ivStrings[invtype]; ok {\n\t\treturn s\n\t}\n\n\treturn fmt.Sprintf(\"Unknown InvType (%d)\", uint32(invtype))\n}\n\n// InvVect defines a bitcoin inventory vector which is used to describe data,\n// as specified by the Type field, that a peer wants, has, or does not have to\n// another peer.\ntype InvVect struct {\n\tType InvType        // Type of data\n\tHash chainhash.Hash // Hash of the data\n}\n\n// NewInvVect returns a new InvVect using the provided type and hash.\nfunc NewInvVect(typ InvType, hash *chainhash.Hash) *InvVect {\n\treturn &InvVect{\n\t\tType: typ,\n\t\tHash: *hash,\n\t}\n}\n\n// readInvVect reads an encoded InvVect from r depending on the protocol\n// version.\nfunc readInvVect(r io.Reader, pver uint32, iv *InvVect) error {\n\treturn readElements(r, &iv.Type, &iv.Hash)\n}\n\n// writeInvVect serializes an InvVect to w depending on the protocol version.\nfunc writeInvVect(w io.Writer, pver uint32, iv *InvVect) error {\n\treturn writeElements(w, iv.Type, &iv.Hash)\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/message.go",
    "content": "// Copyright (c) 2013-2016 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"unicode/utf8\"\n\n\t\"github.com/bcext/gcash/chaincfg/chainhash\"\n)\n\n// MessageHeaderSize is the number of bytes in a bitcoin message header.\n// Bitcoin network (magic) 4 bytes + command 12 bytes + payload length 4 bytes +\n// checksum 4 bytes.\nconst MessageHeaderSize = 24\n\n// CommandSize is the fixed size of all commands in the common bitcoin message\n// header.  Shorter commands must be zero padded.\nconst CommandSize = 12\n\n// MaxMessagePayload is the maximum bytes a message can be regardless of other\n// individual limits imposed by messages themselves.\nconst MaxMessagePayload = (1024 * 1024 * 32) // 32MB\n\n// Commands used in bitcoin message headers which describe the type of message.\nconst (\n\tCmdVersion      = \"version\"\n\tCmdVerAck       = \"verack\"\n\tCmdGetAddr      = \"getaddr\"\n\tCmdAddr         = \"addr\"\n\tCmdGetBlocks    = \"getblocks\"\n\tCmdInv          = \"inv\"\n\tCmdGetData      = \"getdata\"\n\tCmdNotFound     = \"notfound\"\n\tCmdBlock        = \"block\"\n\tCmdTx           = \"tx\"\n\tCmdGetHeaders   = \"getheaders\"\n\tCmdHeaders      = \"headers\"\n\tCmdPing         = \"ping\"\n\tCmdPong         = \"pong\"\n\tCmdAlert        = \"alert\"\n\tCmdMemPool      = \"mempool\"\n\tCmdFilterAdd    = \"filteradd\"\n\tCmdFilterClear  = \"filterclear\"\n\tCmdFilterLoad   = \"filterload\"\n\tCmdMerkleBlock  = \"merkleblock\"\n\tCmdReject       = \"reject\"\n\tCmdSendHeaders  = \"sendheaders\"\n\tCmdFeeFilter    = \"feefilter\"\n\tCmdGetCFilters  = \"getcfilters\"\n\tCmdGetCFHeaders = \"getcfheaders\"\n\tCmdGetCFCheckpt = \"getcfcheckpt\"\n\tCmdCFilter      = \"cfilter\"\n\tCmdCFHeaders    = \"cfheaders\"\n\tCmdCFCheckpt    = \"cfcheckpt\"\n)\n\n// Message is an interface that describes a bitcoin message.  A type that\n// implements Message has complete control over the representation of its data\n// and may therefore contain additional or fewer fields than those which\n// are used directly in the protocol encoded message.\ntype Message interface {\n\tBtcDecode(io.Reader, uint32) error\n\tBtcEncode(io.Writer, uint32) error\n\tCommand() string\n\tMaxPayloadLength(uint32) uint32\n}\n\n// makeEmptyMessage creates a message of the appropriate concrete type based\n// on the command.\nfunc makeEmptyMessage(command string) (Message, error) {\n\tvar msg Message\n\tswitch command {\n\tcase CmdVersion:\n\t\tmsg = &MsgVersion{}\n\n\tcase CmdVerAck:\n\t\tmsg = &MsgVerAck{}\n\n\tcase CmdGetAddr:\n\t\tmsg = &MsgGetAddr{}\n\n\tcase CmdAddr:\n\t\tmsg = &MsgAddr{}\n\n\tcase CmdGetBlocks:\n\t\tmsg = &MsgGetBlocks{}\n\n\tcase CmdBlock:\n\t\tmsg = &MsgBlock{}\n\n\tcase CmdInv:\n\t\tmsg = &MsgInv{}\n\n\tcase CmdGetData:\n\t\tmsg = &MsgGetData{}\n\n\tcase CmdNotFound:\n\t\tmsg = &MsgNotFound{}\n\n\tcase CmdTx:\n\t\tmsg = &MsgTx{}\n\n\tcase CmdPing:\n\t\tmsg = &MsgPing{}\n\n\tcase CmdPong:\n\t\tmsg = &MsgPong{}\n\n\tcase CmdGetHeaders:\n\t\tmsg = &MsgGetHeaders{}\n\n\tcase CmdHeaders:\n\t\tmsg = &MsgHeaders{}\n\n\tcase CmdAlert:\n\t\tmsg = &MsgAlert{}\n\n\tcase CmdMemPool:\n\t\tmsg = &MsgMemPool{}\n\n\tcase CmdFilterAdd:\n\t\tmsg = &MsgFilterAdd{}\n\n\tcase CmdFilterClear:\n\t\tmsg = &MsgFilterClear{}\n\n\tcase CmdFilterLoad:\n\t\tmsg = &MsgFilterLoad{}\n\n\tcase CmdMerkleBlock:\n\t\tmsg = &MsgMerkleBlock{}\n\n\tcase CmdReject:\n\t\tmsg = &MsgReject{}\n\n\tcase CmdSendHeaders:\n\t\tmsg = &MsgSendHeaders{}\n\n\tcase CmdFeeFilter:\n\t\tmsg = &MsgFeeFilter{}\n\n\tcase CmdGetCFilters:\n\t\tmsg = &MsgGetCFilters{}\n\n\tcase CmdGetCFHeaders:\n\t\tmsg = &MsgGetCFHeaders{}\n\n\tcase CmdGetCFCheckpt:\n\t\tmsg = &MsgGetCFCheckpt{}\n\n\tcase CmdCFilter:\n\t\tmsg = &MsgCFilter{}\n\n\tcase CmdCFHeaders:\n\t\tmsg = &MsgCFHeaders{}\n\n\tcase CmdCFCheckpt:\n\t\tmsg = &MsgCFCheckpt{}\n\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"unhandled command [%s]\", command)\n\t}\n\treturn msg, nil\n}\n\n// messageHeader defines the header structure for all bitcoin protocol messages.\ntype messageHeader struct {\n\tmagic    BitcoinNet // 4 bytes\n\tcommand  string     // 12 bytes\n\tlength   uint32     // 4 bytes\n\tchecksum [4]byte    // 4 bytes\n}\n\n// readMessageHeader reads a bitcoin message header from r.\nfunc readMessageHeader(r io.Reader) (int, *messageHeader, error) {\n\t// Since readElements doesn't return the amount of bytes read, attempt\n\t// to read the entire header into a buffer first in case there is a\n\t// short read so the proper amount of read bytes are known.  This works\n\t// since the header is a fixed size.\n\tvar headerBytes [MessageHeaderSize]byte\n\tn, err := io.ReadFull(r, headerBytes[:])\n\tif err != nil {\n\t\treturn n, nil, err\n\t}\n\thr := bytes.NewReader(headerBytes[:])\n\n\t// Create and populate a messageHeader struct from the raw header bytes.\n\thdr := messageHeader{}\n\tvar command [CommandSize]byte\n\treadElements(hr, &hdr.magic, &command, &hdr.length, &hdr.checksum)\n\n\t// Strip trailing zeros from command string.\n\thdr.command = string(bytes.TrimRight(command[:], string(0)))\n\n\treturn n, &hdr, nil\n}\n\n// discardInput reads n bytes from reader r in chunks and discards the read\n// bytes.  This is used to skip payloads when various errors occur and helps\n// prevent rogue nodes from causing massive memory allocation through forging\n// header length.\nfunc discardInput(r io.Reader, n uint32) {\n\tmaxSize := uint32(10 * 1024) // 10k at a time\n\tnumReads := n / maxSize\n\tbytesRemaining := n % maxSize\n\tif n > 0 {\n\t\tbuf := make([]byte, maxSize)\n\t\tfor i := uint32(0); i < numReads; i++ {\n\t\t\tio.ReadFull(r, buf)\n\t\t}\n\t}\n\tif bytesRemaining > 0 {\n\t\tbuf := make([]byte, bytesRemaining)\n\t\tio.ReadFull(r, buf)\n\t}\n}\n\n// WriteMessageN writes a bitcoin Message to w including the\n// necessary header information and returns the number of bytes written.\n// This function is the same as WriteMessageN except it also allows the caller\n// to specify the message encoding format to be used when serializing wire\n// messages.\nfunc WriteMessageN(w io.Writer, msg Message, pver uint32, btcnet BitcoinNet) (int, error) {\n\ttotalBytes := 0\n\n\t// Enforce max command size.\n\tvar command [CommandSize]byte\n\tcmd := msg.Command()\n\tif len(cmd) > CommandSize {\n\t\tstr := fmt.Sprintf(\"command [%s] is too long [max %v]\",\n\t\t\tcmd, CommandSize)\n\t\treturn totalBytes, messageError(\"WriteMessage\", str)\n\t}\n\tcopy(command[:], []byte(cmd))\n\n\t// Encode the message payload.\n\tvar bw bytes.Buffer\n\terr := msg.BtcEncode(&bw, pver)\n\tif err != nil {\n\t\treturn totalBytes, err\n\t}\n\tpayload := bw.Bytes()\n\tlenp := len(payload)\n\n\t// Enforce maximum overall message payload.\n\tif lenp > MaxMessagePayload {\n\t\tstr := fmt.Sprintf(\"message payload is too large - encoded \"+\n\t\t\t\"%d bytes, but maximum message payload is %d bytes\",\n\t\t\tlenp, MaxMessagePayload)\n\t\treturn totalBytes, messageError(\"WriteMessage\", str)\n\t}\n\n\t// Enforce maximum message payload based on the message type.\n\tmpl := msg.MaxPayloadLength(pver)\n\tif uint32(lenp) > mpl {\n\t\tstr := fmt.Sprintf(\"message payload is too large - encoded \"+\n\t\t\t\"%d bytes, but maximum message payload size for \"+\n\t\t\t\"messages of type [%s] is %d.\", lenp, cmd, mpl)\n\t\treturn totalBytes, messageError(\"WriteMessage\", str)\n\t}\n\n\t// Create header for the message.\n\thdr := messageHeader{}\n\thdr.magic = btcnet\n\thdr.command = cmd\n\thdr.length = uint32(lenp)\n\tcopy(hdr.checksum[:], chainhash.DoubleHashB(payload)[0:4])\n\n\t// Encode the header for the message.  This is done to a buffer\n\t// rather than directly to the writer since writeElements doesn't\n\t// return the number of bytes written.\n\thw := bytes.NewBuffer(make([]byte, 0, MessageHeaderSize))\n\twriteElements(hw, hdr.magic, command, hdr.length, hdr.checksum)\n\n\t// Write header.\n\tn, err := w.Write(hw.Bytes())\n\ttotalBytes += n\n\tif err != nil {\n\t\treturn totalBytes, err\n\t}\n\n\t// Write payload.\n\tn, err = w.Write(payload)\n\ttotalBytes += n\n\treturn totalBytes, err\n}\n\n// WriteMessage writes a bitcoin Message to w including the necessary header\n// information.  This function is the same as WriteMessageN except it doesn't\n// doesn't return the number of bytes written.  This function is mainly provided\n// for backwards compatibility with the original API, but it's also useful for\n// callers that don't care about byte counts.\nfunc WriteMessage(w io.Writer, msg Message, pver uint32, btcnet BitcoinNet) error {\n\t_, err := WriteMessageN(w, msg, pver, btcnet)\n\treturn err\n}\n\n// ReadMessageN reads, validates, and parses the next bitcoin Message\n// from r for the provided protocol version and bitcoin network.  It returns the\n// number of bytes read in addition to the parsed Message and raw bytes which\n// comprise the message.  This function is the same as ReadMessageN except it\n// allows the caller to specify which message encoding is to to consult when\n// decoding wire messages.\nfunc ReadMessageN(r io.Reader, pver uint32, btcnet BitcoinNet) (int, Message, []byte, error) {\n\ttotalBytes := 0\n\tn, hdr, err := readMessageHeader(r)\n\ttotalBytes += n\n\tif err != nil {\n\t\treturn totalBytes, nil, nil, err\n\t}\n\n\t// Enforce maximum message payload.\n\tif hdr.length > MaxMessagePayload {\n\t\tstr := fmt.Sprintf(\"message payload is too large - header \"+\n\t\t\t\"indicates %d bytes, but max message payload is %d \"+\n\t\t\t\"bytes.\", hdr.length, MaxMessagePayload)\n\t\treturn totalBytes, nil, nil, messageError(\"ReadMessage\", str)\n\n\t}\n\n\t// Check for messages from the wrong bitcoin network.\n\tif hdr.magic != btcnet {\n\t\tdiscardInput(r, hdr.length)\n\t\tstr := fmt.Sprintf(\"message from other network [%v]\", hdr.magic)\n\t\treturn totalBytes, nil, nil, messageError(\"ReadMessage\", str)\n\t}\n\n\t// Check for malformed commands.\n\tcommand := hdr.command\n\tif !utf8.ValidString(command) {\n\t\tdiscardInput(r, hdr.length)\n\t\tstr := fmt.Sprintf(\"invalid command %v\", []byte(command))\n\t\treturn totalBytes, nil, nil, messageError(\"ReadMessage\", str)\n\t}\n\n\t// Create struct of appropriate message type based on the command.\n\tmsg, err := makeEmptyMessage(command)\n\tif err != nil {\n\t\tdiscardInput(r, hdr.length)\n\t\treturn totalBytes, nil, nil, messageError(\"ReadMessage\",\n\t\t\terr.Error())\n\t}\n\n\t// Check for maximum length based on the message type as a malicious client\n\t// could otherwise create a well-formed header and set the length to max\n\t// numbers in order to exhaust the machine's memory.\n\tmpl := msg.MaxPayloadLength(pver)\n\tif hdr.length > mpl {\n\t\tdiscardInput(r, hdr.length)\n\t\tstr := fmt.Sprintf(\"payload exceeds max length - header \"+\n\t\t\t\"indicates %v bytes, but max payload size for \"+\n\t\t\t\"messages of type [%v] is %v.\", hdr.length, command, mpl)\n\t\treturn totalBytes, nil, nil, messageError(\"ReadMessage\", str)\n\t}\n\n\t// Read payload.\n\tpayload := make([]byte, hdr.length)\n\tn, err = io.ReadFull(r, payload)\n\ttotalBytes += n\n\tif err != nil {\n\t\treturn totalBytes, nil, nil, err\n\t}\n\n\t// Test checksum.\n\tchecksum := chainhash.DoubleHashB(payload)[0:4]\n\tif !bytes.Equal(checksum[:], hdr.checksum[:]) {\n\t\tstr := fmt.Sprintf(\"payload checksum failed - header \"+\n\t\t\t\"indicates %v, but actual checksum is %v.\",\n\t\t\thdr.checksum, checksum)\n\t\treturn totalBytes, nil, nil, messageError(\"ReadMessage\", str)\n\t}\n\n\t// Unmarshal message.  NOTE: This must be a *bytes.Buffer since the\n\t// MsgVersion BtcDecode function requires it.\n\tpr := bytes.NewBuffer(payload)\n\terr = msg.BtcDecode(pr, pver)\n\tif err != nil {\n\t\treturn totalBytes, nil, nil, err\n\t}\n\n\treturn totalBytes, msg, payload, nil\n}\n\n// ReadMessage reads, validates, and parses the next bitcoin Message from r for\n// the provided protocol version and bitcoin network.  It returns the parsed\n// Message and raw bytes which comprise the message.  This function only differs\n// from ReadMessageN in that it doesn't return the number of bytes read.  This\n// function is mainly provided for backwards compatibility with the original\n// API, but it's also useful for callers that don't care about byte counts.\nfunc ReadMessage(r io.Reader, pver uint32, btcnet BitcoinNet) (Message, []byte, error) {\n\t_, msg, buf, err := ReadMessageN(r, pver, btcnet)\n\treturn msg, buf, err\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/msgaddr.go",
    "content": "// Copyright (c) 2013-2015 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\n// MaxAddrPerMsg is the maximum number of addresses that can be in a single\n// bitcoin addr message (MsgAddr).\nconst MaxAddrPerMsg = 1000\n\n// MsgAddr implements the Message interface and represents a bitcoin\n// addr message.  It is used to provide a list of known active peers on the\n// network.  An active peer is considered one that has transmitted a message\n// within the last 3 hours.  Nodes which have not transmitted in that time\n// frame should be forgotten.  Each message is limited to a maximum number of\n// addresses, which is currently 1000.  As a result, multiple messages must\n// be used to relay the full list.\n//\n// Use the AddAddress function to build up the list of known addresses when\n// sending an addr message to another peer.\ntype MsgAddr struct {\n\tAddrList []*NetAddress\n}\n\n// AddAddress adds a known active peer to the message.\nfunc (msg *MsgAddr) AddAddress(na *NetAddress) error {\n\tif len(msg.AddrList)+1 > MaxAddrPerMsg {\n\t\tstr := fmt.Sprintf(\"too many addresses in message [max %v]\",\n\t\t\tMaxAddrPerMsg)\n\t\treturn messageError(\"MsgAddr.AddAddress\", str)\n\t}\n\n\tmsg.AddrList = append(msg.AddrList, na)\n\treturn nil\n}\n\n// AddAddresses adds multiple known active peers to the message.\nfunc (msg *MsgAddr) AddAddresses(netAddrs ...*NetAddress) error {\n\tfor _, na := range netAddrs {\n\t\terr := msg.AddAddress(na)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// ClearAddresses removes all addresses from the message.\nfunc (msg *MsgAddr) ClearAddresses() {\n\tmsg.AddrList = []*NetAddress{}\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgAddr) BtcDecode(r io.Reader, pver uint32) error {\n\tcount, err := ReadVarInt(r, pver)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Limit to max addresses per message.\n\tif count > MaxAddrPerMsg {\n\t\tstr := fmt.Sprintf(\"too many addresses for message \"+\n\t\t\t\"[count %v, max %v]\", count, MaxAddrPerMsg)\n\t\treturn messageError(\"MsgAddr.BtcDecode\", str)\n\t}\n\n\taddrList := make([]NetAddress, count)\n\tmsg.AddrList = make([]*NetAddress, 0, count)\n\tfor i := uint64(0); i < count; i++ {\n\t\tna := &addrList[i]\n\t\terr := readNetAddress(r, pver, na, true)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmsg.AddAddress(na)\n\t}\n\treturn nil\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgAddr) BtcEncode(w io.Writer, pver uint32) error {\n\t// Protocol versions before MultipleAddressVersion only allowed 1 address\n\t// per message.\n\tcount := len(msg.AddrList)\n\tif pver < MultipleAddressVersion && count > 1 {\n\t\tstr := fmt.Sprintf(\"too many addresses for message of \"+\n\t\t\t\"protocol version %v [count %v, max 1]\", pver, count)\n\t\treturn messageError(\"MsgAddr.BtcEncode\", str)\n\n\t}\n\tif count > MaxAddrPerMsg {\n\t\tstr := fmt.Sprintf(\"too many addresses for message \"+\n\t\t\t\"[count %v, max %v]\", count, MaxAddrPerMsg)\n\t\treturn messageError(\"MsgAddr.BtcEncode\", str)\n\t}\n\n\terr := WriteVarInt(w, pver, uint64(count))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, na := range msg.AddrList {\n\t\terr = writeNetAddress(w, pver, na, true)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgAddr) Command() string {\n\treturn CmdAddr\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgAddr) MaxPayloadLength(pver uint32) uint32 {\n\tif pver < MultipleAddressVersion {\n\t\t// Num addresses (varInt) + a single net addresses.\n\t\treturn MaxVarIntPayload + maxNetAddressPayload(pver)\n\t}\n\n\t// Num addresses (varInt) + max allowed addresses.\n\treturn MaxVarIntPayload + (MaxAddrPerMsg * maxNetAddressPayload(pver))\n}\n\n// NewMsgAddr returns a new bitcoin addr message that conforms to the\n// Message interface.  See MsgAddr for details.\nfunc NewMsgAddr() *MsgAddr {\n\treturn &MsgAddr{\n\t\tAddrList: make([]*NetAddress, 0, MaxAddrPerMsg),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/msgalert.go",
    "content": "// Copyright (c) 2013-2015 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n)\n\n// MsgAlert contains a payload and a signature:\n//\n//        ===============================================\n//        |   Field         |   Data Type   |   Size    |\n//        ===============================================\n//        |   payload       |   []uchar     |   ?       |\n//        -----------------------------------------------\n//        |   signature     |   []uchar     |   ?       |\n//        -----------------------------------------------\n//\n// Here payload is an Alert serialized into a byte array to ensure that\n// versions using incompatible alert formats can still relay\n// alerts among one another.\n//\n// An Alert is the payload deserialized as follows:\n//\n//        ===============================================\n//        |   Field         |   Data Type   |   Size    |\n//        ===============================================\n//        |   Version       |   int32       |   4       |\n//        -----------------------------------------------\n//        |   RelayUntil    |   int64       |   8       |\n//        -----------------------------------------------\n//        |   Expiration    |   int64       |   8       |\n//        -----------------------------------------------\n//        |   ID            |   int32       |   4       |\n//        -----------------------------------------------\n//        |   Cancel        |   int32       |   4       |\n//        -----------------------------------------------\n//        |   SetCancel     |   set<int32>  |   ?       |\n//        -----------------------------------------------\n//        |   MinVer        |   int32       |   4       |\n//        -----------------------------------------------\n//        |   MaxVer        |   int32       |   4       |\n//        -----------------------------------------------\n//        |   SetSubVer     |   set<string> |   ?       |\n//        -----------------------------------------------\n//        |   Priority      |   int32       |   4       |\n//        -----------------------------------------------\n//        |   Comment       |   string      |   ?       |\n//        -----------------------------------------------\n//        |   StatusBar     |   string      |   ?       |\n//        -----------------------------------------------\n//        |   Reserved      |   string      |   ?       |\n//        -----------------------------------------------\n//        |   Total  (Fixed)                |   45      |\n//        -----------------------------------------------\n//\n// NOTE:\n//      * string is a VarString i.e VarInt length followed by the string itself\n//      * set<string> is a VarInt followed by as many number of strings\n//      * set<int32> is a VarInt followed by as many number of ints\n//      * fixedAlertSize = 40 + 5*min(VarInt)  = 40 + 5*1 = 45\n//\n// Now we can define bounds on Alert size, SetCancel and SetSubVer\n\n// Fixed size of the alert payload\nconst fixedAlertSize = 45\n\n// maxSignatureSize is the max size of an ECDSA signature.\n// NOTE: Since this size is fixed and < 255, the size of VarInt required = 1.\nconst maxSignatureSize = 72\n\n// maxAlertSize is the maximum size an alert.\n//\n// MessagePayload = VarInt(Alert) + Alert + VarInt(Signature) + Signature\n// MaxMessagePayload = maxAlertSize + max(VarInt) + maxSignatureSize + 1\nconst maxAlertSize = MaxMessagePayload - maxSignatureSize - MaxVarIntPayload - 1\n\n// maxCountSetCancel is the maximum number of cancel IDs that could possibly\n// fit into a maximum size alert.\n//\n// maxAlertSize = fixedAlertSize + max(SetCancel) + max(SetSubVer) + 3*(string)\n// for caculating maximum number of cancel IDs, set all other var  sizes to 0\n// maxAlertSize = fixedAlertSize + (MaxVarIntPayload-1) + x*sizeOf(int32)\n// x = (maxAlertSize - fixedAlertSize - MaxVarIntPayload + 1) / 4\nconst maxCountSetCancel = (maxAlertSize - fixedAlertSize - MaxVarIntPayload + 1) / 4\n\n// maxCountSetSubVer is the maximum number of subversions that could possibly\n// fit into a maximum size alert.\n//\n// maxAlertSize = fixedAlertSize + max(SetCancel) + max(SetSubVer) + 3*(string)\n// for caculating maximum number of subversions, set all other var sizes to 0\n// maxAlertSize = fixedAlertSize + (MaxVarIntPayload-1) + x*sizeOf(string)\n// x = (maxAlertSize - fixedAlertSize - MaxVarIntPayload + 1) / sizeOf(string)\n// subversion would typically be something like \"/Satoshi:0.7.2/\" (15 bytes)\n// so assuming < 255 bytes, sizeOf(string) = sizeOf(uint8) + 255 = 256\nconst maxCountSetSubVer = (maxAlertSize - fixedAlertSize - MaxVarIntPayload + 1) / 256\n\n// Alert contains the data deserialized from the MsgAlert payload.\ntype Alert struct {\n\t// Alert format version\n\tVersion int32\n\n\t// Timestamp beyond which nodes should stop relaying this alert\n\tRelayUntil int64\n\n\t// Timestamp beyond which this alert is no longer in effect and\n\t// should be ignored\n\tExpiration int64\n\n\t// A unique ID number for this alert\n\tID int32\n\n\t// All alerts with an ID less than or equal to this number should\n\t// cancelled, deleted and not accepted in the future\n\tCancel int32\n\n\t// All alert IDs contained in this set should be cancelled as above\n\tSetCancel []int32\n\n\t// This alert only applies to versions greater than or equal to this\n\t// version. Other versions should still relay it.\n\tMinVer int32\n\n\t// This alert only applies to versions less than or equal to this version.\n\t// Other versions should still relay it.\n\tMaxVer int32\n\n\t// If this set contains any elements, then only nodes that have their\n\t// subVer contained in this set are affected by the alert. Other versions\n\t// should still relay it.\n\tSetSubVer []string\n\n\t// Relative priority compared to other alerts\n\tPriority int32\n\n\t// A comment on the alert that is not displayed\n\tComment string\n\n\t// The alert message that is displayed to the user\n\tStatusBar string\n\n\t// Reserved\n\tReserved string\n}\n\n// Serialize encodes the alert to w using the alert protocol encoding format.\nfunc (alert *Alert) Serialize(w io.Writer, pver uint32) error {\n\terr := writeElements(w, alert.Version, alert.RelayUntil,\n\t\talert.Expiration, alert.ID, alert.Cancel)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tcount := len(alert.SetCancel)\n\tif count > maxCountSetCancel {\n\t\tstr := fmt.Sprintf(\"too many cancel alert IDs for alert \"+\n\t\t\t\"[count %v, max %v]\", count, maxCountSetCancel)\n\t\treturn messageError(\"Alert.Serialize\", str)\n\t}\n\terr = WriteVarInt(w, pver, uint64(count))\n\tif err != nil {\n\t\treturn err\n\t}\n\tfor i := 0; i < count; i++ {\n\t\terr = writeElement(w, alert.SetCancel[i])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\terr = writeElements(w, alert.MinVer, alert.MaxVer)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tcount = len(alert.SetSubVer)\n\tif count > maxCountSetSubVer {\n\t\tstr := fmt.Sprintf(\"too many sub versions for alert \"+\n\t\t\t\"[count %v, max %v]\", count, maxCountSetSubVer)\n\t\treturn messageError(\"Alert.Serialize\", str)\n\t}\n\terr = WriteVarInt(w, pver, uint64(count))\n\tif err != nil {\n\t\treturn err\n\t}\n\tfor i := 0; i < count; i++ {\n\t\terr = WriteVarString(w, pver, alert.SetSubVer[i])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\terr = writeElement(w, alert.Priority)\n\tif err != nil {\n\t\treturn err\n\t}\n\terr = WriteVarString(w, pver, alert.Comment)\n\tif err != nil {\n\t\treturn err\n\t}\n\terr = WriteVarString(w, pver, alert.StatusBar)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn WriteVarString(w, pver, alert.Reserved)\n}\n\n// Deserialize decodes from r into the receiver using the alert protocol\n// encoding format.\nfunc (alert *Alert) Deserialize(r io.Reader, pver uint32) error {\n\terr := readElements(r, &alert.Version, &alert.RelayUntil,\n\t\t&alert.Expiration, &alert.ID, &alert.Cancel)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// SetCancel: first read a VarInt that contains\n\t// count - the number of Cancel IDs, then\n\t// iterate count times and read them\n\tcount, err := ReadVarInt(r, pver)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif count > maxCountSetCancel {\n\t\tstr := fmt.Sprintf(\"too many cancel alert IDs for alert \"+\n\t\t\t\"[count %v, max %v]\", count, maxCountSetCancel)\n\t\treturn messageError(\"Alert.Deserialize\", str)\n\t}\n\talert.SetCancel = make([]int32, count)\n\tfor i := 0; i < int(count); i++ {\n\t\terr := readElement(r, &alert.SetCancel[i])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\terr = readElements(r, &alert.MinVer, &alert.MaxVer)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// SetSubVer: similar to SetCancel\n\t// but read count number of sub-version strings\n\tcount, err = ReadVarInt(r, pver)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif count > maxCountSetSubVer {\n\t\tstr := fmt.Sprintf(\"too many sub versions for alert \"+\n\t\t\t\"[count %v, max %v]\", count, maxCountSetSubVer)\n\t\treturn messageError(\"Alert.Deserialize\", str)\n\t}\n\talert.SetSubVer = make([]string, count)\n\tfor i := 0; i < int(count); i++ {\n\t\talert.SetSubVer[i], err = ReadVarString(r, pver)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\terr = readElement(r, &alert.Priority)\n\tif err != nil {\n\t\treturn err\n\t}\n\talert.Comment, err = ReadVarString(r, pver)\n\tif err != nil {\n\t\treturn err\n\t}\n\talert.StatusBar, err = ReadVarString(r, pver)\n\tif err != nil {\n\t\treturn err\n\t}\n\talert.Reserved, err = ReadVarString(r, pver)\n\treturn err\n}\n\n// NewAlert returns an new Alert with values provided.\nfunc NewAlert(version int32, relayUntil int64, expiration int64,\n\tid int32, cancel int32, setCancel []int32, minVer int32,\n\tmaxVer int32, setSubVer []string, priority int32, comment string,\n\tstatusBar string) *Alert {\n\treturn &Alert{\n\t\tVersion:    version,\n\t\tRelayUntil: relayUntil,\n\t\tExpiration: expiration,\n\t\tID:         id,\n\t\tCancel:     cancel,\n\t\tSetCancel:  setCancel,\n\t\tMinVer:     minVer,\n\t\tMaxVer:     maxVer,\n\t\tSetSubVer:  setSubVer,\n\t\tPriority:   priority,\n\t\tComment:    comment,\n\t\tStatusBar:  statusBar,\n\t\tReserved:   \"\",\n\t}\n}\n\n// NewAlertFromPayload returns an Alert with values deserialized from the\n// serialized payload.\nfunc NewAlertFromPayload(serializedPayload []byte, pver uint32) (*Alert, error) {\n\tvar alert Alert\n\tr := bytes.NewReader(serializedPayload)\n\terr := alert.Deserialize(r, pver)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &alert, nil\n}\n\n// MsgAlert  implements the Message interface and defines a bitcoin alert\n// message.\n//\n// This is a signed message that provides notifications that the client should\n// display if the signature matches the key.  bitcoind/bitcoin-qt only checks\n// against a signature from the core developers.\ntype MsgAlert struct {\n\t// SerializedPayload is the alert payload serialized as a string so that the\n\t// version can change but the Alert can still be passed on by older\n\t// clients.\n\tSerializedPayload []byte\n\n\t// Signature is the ECDSA signature of the message.\n\tSignature []byte\n\n\t// Deserialized Payload\n\tPayload *Alert\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgAlert) BtcDecode(r io.Reader, pver uint32) error {\n\tvar err error\n\n\tmsg.SerializedPayload, err = ReadVarBytes(r, pver, MaxMessagePayload,\n\t\t\"alert serialized payload\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tmsg.Payload, err = NewAlertFromPayload(msg.SerializedPayload, pver)\n\tif err != nil {\n\t\tmsg.Payload = nil\n\t}\n\n\tmsg.Signature, err = ReadVarBytes(r, pver, MaxMessagePayload,\n\t\t\"alert signature\")\n\treturn err\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgAlert) BtcEncode(w io.Writer, pver uint32) error {\n\tvar err error\n\tvar serializedpayload []byte\n\tif msg.Payload != nil {\n\t\t// try to Serialize Payload if possible\n\t\tr := new(bytes.Buffer)\n\t\terr = msg.Payload.Serialize(r, pver)\n\t\tif err != nil {\n\t\t\t// Serialize failed - ignore & fallback\n\t\t\t// to SerializedPayload\n\t\t\tserializedpayload = msg.SerializedPayload\n\t\t} else {\n\t\t\tserializedpayload = r.Bytes()\n\t\t}\n\t} else {\n\t\tserializedpayload = msg.SerializedPayload\n\t}\n\tslen := uint64(len(serializedpayload))\n\tif slen == 0 {\n\t\treturn messageError(\"MsgAlert.BtcEncode\", \"empty serialized payload\")\n\t}\n\terr = WriteVarBytes(w, pver, serializedpayload)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn WriteVarBytes(w, pver, msg.Signature)\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgAlert) Command() string {\n\treturn CmdAlert\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgAlert) MaxPayloadLength(pver uint32) uint32 {\n\t// Since this can vary depending on the message, make it the max\n\t// size allowed.\n\treturn MaxMessagePayload\n}\n\n// NewMsgAlert returns a new bitcoin alert message that conforms to the Message\n// interface.  See MsgAlert for details.\nfunc NewMsgAlert(serializedPayload []byte, signature []byte) *MsgAlert {\n\treturn &MsgAlert{\n\t\tSerializedPayload: serializedPayload,\n\t\tSignature:         signature,\n\t\tPayload:           nil,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/msgblock.go",
    "content": "// Copyright (c) 2013-2016 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/bcext/gcash/chaincfg/chainhash\"\n)\n\n// defaultTransactionAlloc is the default size used for the backing array\n// for transactions.  The transaction array will dynamically grow as needed, but\n// this figure is intended to provide enough space for the number of\n// transactions in the vast majority of blocks without needing to grow the\n// backing array multiple times.\nconst defaultTransactionAlloc = 2048\n\n// MaxBlocksPerMsg is the maximum number of blocks allowed per message.\nconst MaxBlocksPerMsg = 500\n\n// MaxBlockPayload is the maximum bytes a block message can be in bytes.\nconst MaxBlockPayload = 2 * 32000000\n\n// maxTxPerBlock is the maximum number of transactions that could\n// possibly fit into a block.\nconst maxTxPerBlock = (MaxBlockPayload / minTxPayload) + 1\n\n// TxLoc holds locator data for the offset and length of where a transaction is\n// located within a MsgBlock data buffer.\ntype TxLoc struct {\n\tTxStart int\n\tTxLen   int\n}\n\n// MsgBlock implements the Message interface and represents a bitcoin\n// block message.  It is used to deliver block and transaction information in\n// response to a getdata message (MsgGetData) for a given block hash.\ntype MsgBlock struct {\n\tHeader       BlockHeader\n\tTransactions []*MsgTx\n}\n\n// AddTransaction adds a transaction to the message.\nfunc (msg *MsgBlock) AddTransaction(tx *MsgTx) error {\n\tmsg.Transactions = append(msg.Transactions, tx)\n\treturn nil\n\n}\n\n// ClearTransactions removes all transactions from the message.\nfunc (msg *MsgBlock) ClearTransactions() {\n\tmsg.Transactions = make([]*MsgTx, 0, defaultTransactionAlloc)\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\n// See Deserialize for decoding blocks stored to disk, such as in a database, as\n// opposed to decoding blocks from the wire.\nfunc (msg *MsgBlock) BtcDecode(r io.Reader, pver uint32) error {\n\terr := readBlockHeader(r, pver, &msg.Header)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\ttxCount, err := ReadVarInt(r, pver)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Prevent more transactions than could possibly fit into a block.\n\t// It would be possible to cause memory exhaustion and panics without\n\t// a sane upper bound on this count.\n\tif txCount > maxTxPerBlock {\n\t\tstr := fmt.Sprintf(\"too many transactions to fit into a block \"+\n\t\t\t\"[count %d, max %d]\", txCount, maxTxPerBlock)\n\t\treturn messageError(\"MsgBlock.BtcDecode\", str)\n\t}\n\n\tmsg.Transactions = make([]*MsgTx, 0, txCount)\n\tfor i := uint64(0); i < txCount; i++ {\n\t\ttx := MsgTx{}\n\t\terr := tx.BtcDecode(r, pver)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmsg.Transactions = append(msg.Transactions, &tx)\n\t}\n\n\treturn nil\n}\n\n// Deserialize decodes a block from r into the receiver using a format that is\n// suitable for long-term storage such as a database while respecting the\n// Version field in the block.  This function differs from BtcDecode in that\n// BtcDecode decodes from the bitcoin wire protocol as it was sent across the\n// network.  The wire encoding can technically differ depending on the protocol\n// version and doesn't even really need to match the format of a stored block at\n// all.  As of the time this comment was written, the encoded block is the same\n// in both instances, but there is a distinct difference and separating the two\n// allows the API to be flexible enough to deal with changes.\nfunc (msg *MsgBlock) Deserialize(r io.Reader) error {\n\t// At the current time, there is no difference between the wire encoding\n\t// at protocol version 0 and the stable long-term storage format.  As\n\t// a result, make use of BtcDecode.\n\treturn msg.BtcDecode(r, 0)\n}\n\n// DeserializeTxLoc decodes r in the same manner Deserialize does, but it takes\n// a byte buffer instead of a generic reader and returns a slice containing the\n// start and length of each transaction within the raw data that is being\n// deserialized.\nfunc (msg *MsgBlock) DeserializeTxLoc(r *bytes.Buffer) ([]TxLoc, error) {\n\tfullLen := r.Len()\n\n\t// At the current time, there is no difference between the wire encoding\n\t// at protocol version 0 and the stable long-term storage format.  As\n\t// a result, make use of existing wire protocol functions.\n\terr := readBlockHeader(r, 0, &msg.Header)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\ttxCount, err := ReadVarInt(r, 0)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Prevent more transactions than could possibly fit into a block.\n\t// It would be possible to cause memory exhaustion and panics without\n\t// a sane upper bound on this count.\n\tif txCount > maxTxPerBlock {\n\t\tstr := fmt.Sprintf(\"too many transactions to fit into a block \"+\n\t\t\t\"[count %d, max %d]\", txCount, maxTxPerBlock)\n\t\treturn nil, messageError(\"MsgBlock.DeserializeTxLoc\", str)\n\t}\n\n\t// Deserialize each transaction while keeping track of its location\n\t// within the byte stream.\n\tmsg.Transactions = make([]*MsgTx, 0, txCount)\n\ttxLocs := make([]TxLoc, txCount)\n\tfor i := uint64(0); i < txCount; i++ {\n\t\ttxLocs[i].TxStart = fullLen - r.Len()\n\t\ttx := MsgTx{}\n\t\terr := tx.Deserialize(r)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tmsg.Transactions = append(msg.Transactions, &tx)\n\t\ttxLocs[i].TxLen = (fullLen - r.Len()) - txLocs[i].TxStart\n\t}\n\n\treturn txLocs, nil\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\n// See Serialize for encoding blocks to be stored to disk, such as in a\n// database, as opposed to encoding blocks for the wire.\nfunc (msg *MsgBlock) BtcEncode(w io.Writer, pver uint32) error {\n\terr := writeBlockHeader(w, pver, &msg.Header)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = WriteVarInt(w, pver, uint64(len(msg.Transactions)))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, tx := range msg.Transactions {\n\t\terr = tx.BtcEncode(w, pver)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Serialize encodes the block to w using a format that suitable for long-term\n// storage such as a database while respecting the Version field in the block.\n// This function differs from BtcEncode in that BtcEncode encodes the block to\n// the bitcoin wire protocol in order to be sent across the network.  The wire\n// encoding can technically differ depending on the protocol version and doesn't\n// even really need to match the format of a stored block at all.  As of the\n// time this comment was written, the encoded block is the same in both\n// instances, but there is a distinct difference and separating the two allows\n// the API to be flexible enough to deal with changes.\nfunc (msg *MsgBlock) Serialize(w io.Writer) error {\n\t// At the current time, there is no difference between the wire encoding\n\t// at protocol version 0 and the stable long-term storage format.  As\n\t// a result, make use of BtcEncode.\n\treturn msg.BtcEncode(w, 0)\n}\n\n// SerializeSize returns the number of bytes it would take to serialize the\n// block.\nfunc (msg *MsgBlock) SerializeSize() int {\n\t// Block header bytes + Serialized varint size for the number of\n\t// transactions.\n\tn := blockHeaderLen + VarIntSerializeSize(uint64(len(msg.Transactions)))\n\n\tfor _, tx := range msg.Transactions {\n\t\tn += tx.SerializeSize()\n\t}\n\n\treturn n\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgBlock) Command() string {\n\treturn CmdBlock\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgBlock) MaxPayloadLength(pver uint32) uint32 {\n\t// Block header at 80 bytes + transaction count + max transactions\n\t//\t// which can vary up to the MaxBlockPayload (including the block header\n\t//\t// and transaction count).\n\treturn MaxBlockPayload\n}\n\n// BlockHash computes the block identifier hash for this block.\nfunc (msg *MsgBlock) BlockHash() chainhash.Hash {\n\treturn msg.Header.BlockHash()\n}\n\n// TxHashes returns a slice of hashes of all of transactions in this block.\nfunc (msg *MsgBlock) TxHashes() ([]chainhash.Hash, error) {\n\thashList := make([]chainhash.Hash, 0, len(msg.Transactions))\n\tfor _, tx := range msg.Transactions {\n\t\thashList = append(hashList, tx.TxHash())\n\t}\n\treturn hashList, nil\n}\n\n// NewMsgBlock returns a new bitcoin block message that conforms to the\n// Message interface.  See MsgBlock for details.\nfunc NewMsgBlock(blockHeader *BlockHeader) *MsgBlock {\n\treturn &MsgBlock{\n\t\tHeader:       *blockHeader,\n\t\tTransactions: make([]*MsgTx, 0, defaultTransactionAlloc),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/msgcfcheckpt.go",
    "content": "// Copyright (c) 2018 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/bcext/gcash/chaincfg/chainhash\"\n)\n\nconst (\n\t// CFCheckptInterval is the gap (in number of blocks) between each\n\t// filter header checkpoint.\n\tCFCheckptInterval = 1000\n\n\t// maxCFHeadersLen is the max number of filter headers we will attempt\n\t// to decode.\n\tmaxCFHeadersLen = 100000\n)\n\n// ErrInsaneCFHeaderCount signals that we were asked to decode an\n// unreasonable number of cfilter headers.\nvar ErrInsaneCFHeaderCount = errors.New(\n\t\"refusing to decode unreasonable number of filter headers\")\n\n// MsgCFCheckpt implements the Message interface and represents a bitcoin\n// cfcheckpt message.  It is used to deliver committed filter header information\n// in response to a getcfcheckpt message (MsgGetCFCheckpt). See MsgGetCFCheckpt\n// for details on requesting the headers.\ntype MsgCFCheckpt struct {\n\tFilterType    FilterType\n\tStopHash      chainhash.Hash\n\tFilterHeaders []*chainhash.Hash\n}\n\n// AddCFHeader adds a new committed filter header to the message.\nfunc (msg *MsgCFCheckpt) AddCFHeader(header *chainhash.Hash) error {\n\tif len(msg.FilterHeaders) == cap(msg.FilterHeaders) {\n\t\tstr := fmt.Sprintf(\"FilterHeaders has insufficient capacity for \"+\n\t\t\t\"additional header: len = %d\", len(msg.FilterHeaders))\n\t\treturn messageError(\"MsgCFCheckpt.AddCFHeader\", str)\n\t}\n\n\tmsg.FilterHeaders = append(msg.FilterHeaders, header)\n\treturn nil\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgCFCheckpt) BtcDecode(r io.Reader, pver uint32) error {\n\t// Read filter type\n\terr := readElement(r, &msg.FilterType)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Read stop hash\n\terr = readElement(r, &msg.StopHash)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Read number of filter headers\n\tcount, err := ReadVarInt(r, pver)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Refuse to decode an insane number of cfheaders.\n\tif count > maxCFHeadersLen {\n\t\treturn ErrInsaneCFHeaderCount\n\t}\n\n\t// Create a contiguous slice of hashes to deserialize into in order to\n\t// reduce the number of allocations.\n\tmsg.FilterHeaders = make([]*chainhash.Hash, count)\n\tfor i := uint64(0); i < count; i++ {\n\t\tvar cfh chainhash.Hash\n\t\terr := readElement(r, &cfh)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmsg.FilterHeaders[i] = &cfh\n\t}\n\n\treturn nil\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgCFCheckpt) BtcEncode(w io.Writer, pver uint32) error {\n\t// Write filter type\n\terr := writeElement(w, msg.FilterType)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Write stop hash\n\terr = writeElement(w, msg.StopHash)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Write length of FilterHeaders slice\n\tcount := len(msg.FilterHeaders)\n\terr = WriteVarInt(w, pver, uint64(count))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, cfh := range msg.FilterHeaders {\n\t\terr := writeElement(w, cfh)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Deserialize decodes a filter header from r into the receiver using a format\n// that is suitable for long-term storage such as a database. This function\n// differs from BtcDecode in that BtcDecode decodes from the bitcoin wire\n// protocol as it was sent across the network.  The wire encoding can\n// technically differ depending on the protocol version and doesn't even really\n// need to match the format of a stored filter header at all. As of the time\n// this comment was written, the encoded filter header is the same in both\n// instances, but there is a distinct difference and separating the two allows\n// the API to be flexible enough to deal with changes.\nfunc (msg *MsgCFCheckpt) Deserialize(r io.Reader) error {\n\t// At the current time, there is no difference between the wire encoding\n\t// and the stable long-term storage format.  As a result, make use of\n\t// BtcDecode.\n\treturn msg.BtcDecode(r, 0)\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgCFCheckpt) Command() string {\n\treturn CmdCFCheckpt\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver. This is part of the Message interface implementation.\nfunc (msg *MsgCFCheckpt) MaxPayloadLength(pver uint32) uint32 {\n\t// Message size depends on the blockchain height, so return general limit\n\t// for all messages.\n\treturn MaxMessagePayload\n}\n\n// NewMsgCFCheckpt returns a new bitcoin cfheaders message that conforms to\n// the Message interface. See MsgCFCheckpt for details.\nfunc NewMsgCFCheckpt(filterType FilterType, stopHash *chainhash.Hash,\n\theadersCount int) *MsgCFCheckpt {\n\treturn &MsgCFCheckpt{\n\t\tFilterType:    filterType,\n\t\tStopHash:      *stopHash,\n\t\tFilterHeaders: make([]*chainhash.Hash, 0, headersCount),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/msgcfheaders.go",
    "content": "// Copyright (c) 2017 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/bcext/gcash/chaincfg/chainhash\"\n)\n\nconst (\n\t// MaxCFHeaderPayload is the maximum byte size of a committed\n\t// filter header.\n\tMaxCFHeaderPayload = chainhash.HashSize\n\n\t// MaxCFHeadersPerMsg is the maximum number of committed filter headers\n\t// that can be in a single bitcoin cfheaders message.\n\tMaxCFHeadersPerMsg = 2000\n)\n\n// MsgCFHeaders implements the Message interface and represents a bitcoin\n// cfheaders message.  It is used to deliver committed filter header information\n// in response to a getcfheaders message (MsgGetCFHeaders). The maximum number\n// of committed filter headers per message is currently 2000. See\n// MsgGetCFHeaders for details on requesting the headers.\ntype MsgCFHeaders struct {\n\tFilterType       FilterType\n\tStopHash         chainhash.Hash\n\tPrevFilterHeader chainhash.Hash\n\tFilterHashes     []*chainhash.Hash\n}\n\n// AddCFHash adds a new filter hash to the message.\nfunc (msg *MsgCFHeaders) AddCFHash(hash *chainhash.Hash) error {\n\tif len(msg.FilterHashes)+1 > MaxCFHeadersPerMsg {\n\t\tstr := fmt.Sprintf(\"too many block headers in message [max %v]\",\n\t\t\tMaxBlockHeadersPerMsg)\n\t\treturn messageError(\"MsgCFHeaders.AddCFHash\", str)\n\t}\n\n\tmsg.FilterHashes = append(msg.FilterHashes, hash)\n\treturn nil\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgCFHeaders) BtcDecode(r io.Reader, pver uint32) error {\n\t// Read filter type\n\terr := readElement(r, &msg.FilterType)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Read stop hash\n\terr = readElement(r, &msg.StopHash)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Read prev filter header\n\terr = readElement(r, &msg.PrevFilterHeader)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Read number of filter headers\n\tcount, err := ReadVarInt(r, pver)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Limit to max committed filter headers per message.\n\tif count > MaxCFHeadersPerMsg {\n\t\tstr := fmt.Sprintf(\"too many committed filter headers for \"+\n\t\t\t\"message [count %v, max %v]\", count,\n\t\t\tMaxBlockHeadersPerMsg)\n\t\treturn messageError(\"MsgCFHeaders.BtcDecode\", str)\n\t}\n\n\t// Create a contiguous slice of hashes to deserialize into in order to\n\t// reduce the number of allocations.\n\tmsg.FilterHashes = make([]*chainhash.Hash, 0, count)\n\tfor i := uint64(0); i < count; i++ {\n\t\tvar cfh chainhash.Hash\n\t\terr := readElement(r, &cfh)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmsg.AddCFHash(&cfh)\n\t}\n\n\treturn nil\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgCFHeaders) BtcEncode(w io.Writer, pver uint32) error {\n\t// Write filter type\n\terr := writeElement(w, msg.FilterType)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Write stop hash\n\terr = writeElement(w, msg.StopHash)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Write prev filter header\n\terr = writeElement(w, msg.PrevFilterHeader)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Limit to max committed headers per message.\n\tcount := len(msg.FilterHashes)\n\tif count > MaxCFHeadersPerMsg {\n\t\tstr := fmt.Sprintf(\"too many committed filter headers for \"+\n\t\t\t\"message [count %v, max %v]\", count,\n\t\t\tMaxBlockHeadersPerMsg)\n\t\treturn messageError(\"MsgCFHeaders.BtcEncode\", str)\n\t}\n\n\terr = WriteVarInt(w, pver, uint64(count))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, cfh := range msg.FilterHashes {\n\t\terr := writeElement(w, cfh)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Deserialize decodes a filter header from r into the receiver using a format\n// that is suitable for long-term storage such as a database. This function\n// differs from BtcDecode in that BtcDecode decodes from the bitcoin wire\n// protocol as it was sent across the network.  The wire encoding can\n// technically differ depending on the protocol version and doesn't even really\n// need to match the format of a stored filter header at all. As of the time\n// this comment was written, the encoded filter header is the same in both\n// instances, but there is a distinct difference and separating the two allows\n// the API to be flexible enough to deal with changes.\nfunc (msg *MsgCFHeaders) Deserialize(r io.Reader) error {\n\t// At the current time, there is no difference between the wire encoding\n\t// and the stable long-term storage format.  As a result, make use of\n\t// BtcDecode.\n\treturn msg.BtcDecode(r, 0)\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgCFHeaders) Command() string {\n\treturn CmdCFHeaders\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver. This is part of the Message interface implementation.\nfunc (msg *MsgCFHeaders) MaxPayloadLength(pver uint32) uint32 {\n\t// Hash size + filter type + num headers (varInt) +\n\t// (header size * max headers).\n\treturn 1 + chainhash.HashSize + chainhash.HashSize + MaxVarIntPayload +\n\t\t(MaxCFHeaderPayload * MaxCFHeadersPerMsg)\n}\n\n// NewMsgCFHeaders returns a new bitcoin cfheaders message that conforms to\n// the Message interface. See MsgCFHeaders for details.\nfunc NewMsgCFHeaders() *MsgCFHeaders {\n\treturn &MsgCFHeaders{\n\t\tFilterHashes: make([]*chainhash.Hash, 0, MaxCFHeadersPerMsg),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/msgcfilter.go",
    "content": "// Copyright (c) 2017 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/bcext/gcash/chaincfg/chainhash\"\n)\n\n// FilterType is used to represent a filter type.\ntype FilterType uint8\n\nconst (\n\t// GCSFilterRegular is the regular filter type.\n\tGCSFilterRegular FilterType = iota\n)\n\nconst (\n\t// MaxCFilterDataSize is the maximum byte size of a committed filter.\n\t// The maximum size is currently defined as 256KiB.\n\tMaxCFilterDataSize = 256 * 1024\n)\n\n// MsgCFilter implements the Message interface and represents a bitcoin cfilter\n// message. It is used to deliver a committed filter in response to a\n// getcfilters (MsgGetCFilters) message.\ntype MsgCFilter struct {\n\tFilterType FilterType\n\tBlockHash  chainhash.Hash\n\tData       []byte\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgCFilter) BtcDecode(r io.Reader, pver uint32) error {\n\t// Read filter type\n\terr := readElement(r, &msg.FilterType)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Read the hash of the filter's block\n\terr = readElement(r, &msg.BlockHash)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Read filter data\n\tmsg.Data, err = ReadVarBytes(r, pver, MaxCFilterDataSize,\n\t\t\"cfilter data\")\n\treturn err\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgCFilter) BtcEncode(w io.Writer, pver uint32) error {\n\tsize := len(msg.Data)\n\tif size > MaxCFilterDataSize {\n\t\tstr := fmt.Sprintf(\"cfilter size too large for message \"+\n\t\t\t\"[size %v, max %v]\", size, MaxCFilterDataSize)\n\t\treturn messageError(\"MsgCFilter.BtcEncode\", str)\n\t}\n\n\terr := writeElement(w, msg.FilterType)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = writeElement(w, msg.BlockHash)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn WriteVarBytes(w, pver, msg.Data)\n}\n\n// Deserialize decodes a filter from r into the receiver using a format that is\n// suitable for long-term storage such as a database. This function differs\n// from BtcDecode in that BtcDecode decodes from the bitcoin wire protocol as\n// it was sent across the network.  The wire encoding can technically differ\n// depending on the protocol version and doesn't even really need to match the\n// format of a stored filter at all. As of the time this comment was written,\n// the encoded filter is the same in both instances, but there is a distinct\n// difference and separating the two allows the API to be flexible enough to\n// deal with changes.\nfunc (msg *MsgCFilter) Deserialize(r io.Reader) error {\n\t// At the current time, there is no difference between the wire encoding\n\t// and the stable long-term storage format.  As a result, make use of\n\t// BtcDecode.\n\treturn msg.BtcDecode(r, 0)\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgCFilter) Command() string {\n\treturn CmdCFilter\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgCFilter) MaxPayloadLength(pver uint32) uint32 {\n\treturn uint32(VarIntSerializeSize(MaxCFilterDataSize)) +\n\t\tMaxCFilterDataSize + chainhash.HashSize + 1\n}\n\n// NewMsgCFilter returns a new bitcoin cfilter message that conforms to the\n// Message interface. See MsgCFilter for details.\nfunc NewMsgCFilter(filterType FilterType, blockHash *chainhash.Hash,\n\tdata []byte) *MsgCFilter {\n\treturn &MsgCFilter{\n\t\tFilterType: filterType,\n\t\tBlockHash:  *blockHash,\n\t\tData:       data,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/msgfeefilter.go",
    "content": "// Copyright (c) 2016 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\n// MsgFeeFilter implements the Message interface and represents a bitcoin\n// feefilter message.  It is used to request the receiving peer does not\n// announce any transactions below the specified minimum fee rate.\n//\n// This message was not added until protocol versions starting with\n// FeeFilterVersion.\ntype MsgFeeFilter struct {\n\tMinFee int64\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgFeeFilter) BtcDecode(r io.Reader, pver uint32) error {\n\tif pver < FeeFilterVersion {\n\t\tstr := fmt.Sprintf(\"feefilter message invalid for protocol \"+\n\t\t\t\"version %d\", pver)\n\t\treturn messageError(\"MsgFeeFilter.BtcDecode\", str)\n\t}\n\n\treturn readElement(r, &msg.MinFee)\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgFeeFilter) BtcEncode(w io.Writer, pver uint32) error {\n\tif pver < FeeFilterVersion {\n\t\tstr := fmt.Sprintf(\"feefilter message invalid for protocol \"+\n\t\t\t\"version %d\", pver)\n\t\treturn messageError(\"MsgFeeFilter.BtcEncode\", str)\n\t}\n\n\treturn writeElement(w, msg.MinFee)\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgFeeFilter) Command() string {\n\treturn CmdFeeFilter\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgFeeFilter) MaxPayloadLength(pver uint32) uint32 {\n\treturn 8\n}\n\n// NewMsgFeeFilter returns a new bitcoin feefilter message that conforms to\n// the Message interface.  See MsgFeeFilter for details.\nfunc NewMsgFeeFilter(minfee int64) *MsgFeeFilter {\n\treturn &MsgFeeFilter{\n\t\tMinFee: minfee,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/msgfilteradd.go",
    "content": "// Copyright (c) 2014-2015 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\nconst (\n\t// MaxFilterAddDataSize is the maximum byte size of a data\n\t// element to add to the Bloom filter.  It is equal to the\n\t// maximum element size of a script.\n\tMaxFilterAddDataSize = 520\n)\n\n// MsgFilterAdd implements the Message interface and represents a bitcoin\n// filteradd message.  It is used to add a data element to an existing Bloom\n// filter.\n//\n// This message was not added until protocol version BIP0037Version.\ntype MsgFilterAdd struct {\n\tData []byte\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgFilterAdd) BtcDecode(r io.Reader, pver uint32) error {\n\tif pver < BIP0037Version {\n\t\tstr := fmt.Sprintf(\"filteradd message invalid for protocol \"+\n\t\t\t\"version %d\", pver)\n\t\treturn messageError(\"MsgFilterAdd.BtcDecode\", str)\n\t}\n\n\tvar err error\n\tmsg.Data, err = ReadVarBytes(r, pver, MaxFilterAddDataSize,\n\t\t\"filteradd data\")\n\treturn err\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgFilterAdd) BtcEncode(w io.Writer, pver uint32) error {\n\tif pver < BIP0037Version {\n\t\tstr := fmt.Sprintf(\"filteradd message invalid for protocol \"+\n\t\t\t\"version %d\", pver)\n\t\treturn messageError(\"MsgFilterAdd.BtcEncode\", str)\n\t}\n\n\tsize := len(msg.Data)\n\tif size > MaxFilterAddDataSize {\n\t\tstr := fmt.Sprintf(\"filteradd size too large for message \"+\n\t\t\t\"[size %v, max %v]\", size, MaxFilterAddDataSize)\n\t\treturn messageError(\"MsgFilterAdd.BtcEncode\", str)\n\t}\n\n\treturn WriteVarBytes(w, pver, msg.Data)\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgFilterAdd) Command() string {\n\treturn CmdFilterAdd\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgFilterAdd) MaxPayloadLength(pver uint32) uint32 {\n\treturn uint32(VarIntSerializeSize(MaxFilterAddDataSize)) +\n\t\tMaxFilterAddDataSize\n}\n\n// NewMsgFilterAdd returns a new bitcoin filteradd message that conforms to the\n// Message interface.  See MsgFilterAdd for details.\nfunc NewMsgFilterAdd(data []byte) *MsgFilterAdd {\n\treturn &MsgFilterAdd{\n\t\tData: data,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/msgfilterclear.go",
    "content": "// Copyright (c) 2014-2015 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\n// MsgFilterClear implements the Message interface and represents a bitcoin\n// filterclear message which is used to reset a Bloom filter.\n//\n// This message was not added until protocol version BIP0037Version and has\n// no payload.\ntype MsgFilterClear struct{}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgFilterClear) BtcDecode(r io.Reader, pver uint32) error {\n\tif pver < BIP0037Version {\n\t\tstr := fmt.Sprintf(\"filterclear message invalid for protocol \"+\n\t\t\t\"version %d\", pver)\n\t\treturn messageError(\"MsgFilterClear.BtcDecode\", str)\n\t}\n\n\treturn nil\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgFilterClear) BtcEncode(w io.Writer, pver uint32) error {\n\tif pver < BIP0037Version {\n\t\tstr := fmt.Sprintf(\"filterclear message invalid for protocol \"+\n\t\t\t\"version %d\", pver)\n\t\treturn messageError(\"MsgFilterClear.BtcEncode\", str)\n\t}\n\n\treturn nil\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgFilterClear) Command() string {\n\treturn CmdFilterClear\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgFilterClear) MaxPayloadLength(pver uint32) uint32 {\n\treturn 0\n}\n\n// NewMsgFilterClear returns a new bitcoin filterclear message that conforms to the Message\n// interface.  See MsgFilterClear for details.\nfunc NewMsgFilterClear() *MsgFilterClear {\n\treturn &MsgFilterClear{}\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/msgfilterload.go",
    "content": "// Copyright (c) 2014-2015 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\n// BloomUpdateType specifies how the filter is updated when a match is found\ntype BloomUpdateType uint8\n\nconst (\n\t// BloomUpdateNone indicates the filter is not adjusted when a match is\n\t// found.\n\tBloomUpdateNone BloomUpdateType = 0\n\n\t// BloomUpdateAll indicates if the filter matches any data element in a\n\t// public key script, the outpoint is serialized and inserted into the\n\t// filter.\n\tBloomUpdateAll BloomUpdateType = 1\n\n\t// BloomUpdateP2PubkeyOnly indicates if the filter matches a data\n\t// element in a public key script and the script is of the standard\n\t// pay-to-pubkey or multisig, the outpoint is serialized and inserted\n\t// into the filter.\n\tBloomUpdateP2PubkeyOnly BloomUpdateType = 2\n)\n\nconst (\n\t// MaxFilterLoadHashFuncs is the maximum number of hash functions to\n\t// load into the Bloom filter.\n\tMaxFilterLoadHashFuncs = 50\n\n\t// MaxFilterLoadFilterSize is the maximum size in bytes a filter may be.\n\tMaxFilterLoadFilterSize = 36000\n)\n\n// MsgFilterLoad implements the Message interface and represents a bitcoin\n// filterload message which is used to reset a Bloom filter.\n//\n// This message was not added until protocol version BIP0037Version.\ntype MsgFilterLoad struct {\n\tFilter    []byte\n\tHashFuncs uint32\n\tTweak     uint32\n\tFlags     BloomUpdateType\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgFilterLoad) BtcDecode(r io.Reader, pver uint32) error {\n\tif pver < BIP0037Version {\n\t\tstr := fmt.Sprintf(\"filterload message invalid for protocol \"+\n\t\t\t\"version %d\", pver)\n\t\treturn messageError(\"MsgFilterLoad.BtcDecode\", str)\n\t}\n\n\tvar err error\n\tmsg.Filter, err = ReadVarBytes(r, pver, MaxFilterLoadFilterSize,\n\t\t\"filterload filter size\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = readElements(r, &msg.HashFuncs, &msg.Tweak, &msg.Flags)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif msg.HashFuncs > MaxFilterLoadHashFuncs {\n\t\tstr := fmt.Sprintf(\"too many filter hash functions for message \"+\n\t\t\t\"[count %v, max %v]\", msg.HashFuncs, MaxFilterLoadHashFuncs)\n\t\treturn messageError(\"MsgFilterLoad.BtcDecode\", str)\n\t}\n\n\treturn nil\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgFilterLoad) BtcEncode(w io.Writer, pver uint32) error {\n\tif pver < BIP0037Version {\n\t\tstr := fmt.Sprintf(\"filterload message invalid for protocol \"+\n\t\t\t\"version %d\", pver)\n\t\treturn messageError(\"MsgFilterLoad.BtcEncode\", str)\n\t}\n\n\tsize := len(msg.Filter)\n\tif size > MaxFilterLoadFilterSize {\n\t\tstr := fmt.Sprintf(\"filterload filter size too large for message \"+\n\t\t\t\"[size %v, max %v]\", size, MaxFilterLoadFilterSize)\n\t\treturn messageError(\"MsgFilterLoad.BtcEncode\", str)\n\t}\n\n\tif msg.HashFuncs > MaxFilterLoadHashFuncs {\n\t\tstr := fmt.Sprintf(\"too many filter hash functions for message \"+\n\t\t\t\"[count %v, max %v]\", msg.HashFuncs, MaxFilterLoadHashFuncs)\n\t\treturn messageError(\"MsgFilterLoad.BtcEncode\", str)\n\t}\n\n\terr := WriteVarBytes(w, pver, msg.Filter)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn writeElements(w, msg.HashFuncs, msg.Tweak, msg.Flags)\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgFilterLoad) Command() string {\n\treturn CmdFilterLoad\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgFilterLoad) MaxPayloadLength(pver uint32) uint32 {\n\t// Num filter bytes (varInt) + filter + 4 bytes hash funcs +\n\t// 4 bytes tweak + 1 byte flags.\n\treturn uint32(VarIntSerializeSize(MaxFilterLoadFilterSize)) +\n\t\tMaxFilterLoadFilterSize + 9\n}\n\n// NewMsgFilterLoad returns a new bitcoin filterload message that conforms to\n// the Message interface.  See MsgFilterLoad for details.\nfunc NewMsgFilterLoad(filter []byte, hashFuncs uint32, tweak uint32, flags BloomUpdateType) *MsgFilterLoad {\n\treturn &MsgFilterLoad{\n\t\tFilter:    filter,\n\t\tHashFuncs: hashFuncs,\n\t\tTweak:     tweak,\n\t\tFlags:     flags,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/msggetaddr.go",
    "content": "// Copyright (c) 2013-2015 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"io\"\n)\n\n// MsgGetAddr implements the Message interface and represents a bitcoin\n// getaddr message.  It is used to request a list of known active peers on the\n// network from a peer to help identify potential nodes.  The list is returned\n// via one or more addr messages (MsgAddr).\n//\n// This message has no payload.\ntype MsgGetAddr struct{}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgGetAddr) BtcDecode(r io.Reader, pver uint32) error {\n\treturn nil\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgGetAddr) BtcEncode(w io.Writer, pver uint32) error {\n\treturn nil\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgGetAddr) Command() string {\n\treturn CmdGetAddr\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgGetAddr) MaxPayloadLength(pver uint32) uint32 {\n\treturn 0\n}\n\n// NewMsgGetAddr returns a new bitcoin getaddr message that conforms to the\n// Message interface.  See MsgGetAddr for details.\nfunc NewMsgGetAddr() *MsgGetAddr {\n\treturn &MsgGetAddr{}\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/msggetblocks.go",
    "content": "// Copyright (c) 2013-2016 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/bcext/gcash/chaincfg/chainhash\"\n)\n\n// MaxBlockLocatorsPerMsg is the maximum number of block locator hashes allowed\n// per message.\nconst MaxBlockLocatorsPerMsg = 500\n\n// MsgGetBlocks implements the Message interface and represents a bitcoin\n// getblocks message.  It is used to request a list of blocks starting after the\n// last known hash in the slice of block locator hashes.  The list is returned\n// via an inv message (MsgInv) and is limited by a specific hash to stop at or\n// the maximum number of blocks per message, which is currently 500.\n//\n// Set the HashStop field to the hash at which to stop and use\n// AddBlockLocatorHash to build up the list of block locator hashes.\n//\n// The algorithm for building the block locator hashes should be to add the\n// hashes in reverse order until you reach the genesis block.  In order to keep\n// the list of locator hashes to a reasonable number of entries, first add the\n// most recent 10 block hashes, then double the step each loop iteration to\n// exponentially decrease the number of hashes the further away from head and\n// closer to the genesis block you get.\ntype MsgGetBlocks struct {\n\tProtocolVersion    uint32\n\tBlockLocatorHashes []*chainhash.Hash\n\tHashStop           chainhash.Hash\n}\n\n// AddBlockLocatorHash adds a new block locator hash to the message.\nfunc (msg *MsgGetBlocks) AddBlockLocatorHash(hash *chainhash.Hash) error {\n\tif len(msg.BlockLocatorHashes)+1 > MaxBlockLocatorsPerMsg {\n\t\tstr := fmt.Sprintf(\"too many block locator hashes for message [max %v]\",\n\t\t\tMaxBlockLocatorsPerMsg)\n\t\treturn messageError(\"MsgGetBlocks.AddBlockLocatorHash\", str)\n\t}\n\n\tmsg.BlockLocatorHashes = append(msg.BlockLocatorHashes, hash)\n\treturn nil\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgGetBlocks) BtcDecode(r io.Reader, pver uint32) error {\n\terr := readElement(r, &msg.ProtocolVersion)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Read num block locator hashes and limit to max.\n\tcount, err := ReadVarInt(r, pver)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif count > MaxBlockLocatorsPerMsg {\n\t\tstr := fmt.Sprintf(\"too many block locator hashes for message \"+\n\t\t\t\"[count %v, max %v]\", count, MaxBlockLocatorsPerMsg)\n\t\treturn messageError(\"MsgGetBlocks.BtcDecode\", str)\n\t}\n\n\t// Create a contiguous slice of hashes to deserialize into in order to\n\t// reduce the number of allocations.\n\tlocatorHashes := make([]chainhash.Hash, count)\n\tmsg.BlockLocatorHashes = make([]*chainhash.Hash, 0, count)\n\tfor i := uint64(0); i < count; i++ {\n\t\thash := &locatorHashes[i]\n\t\terr := readElement(r, hash)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmsg.AddBlockLocatorHash(hash)\n\t}\n\n\treturn readElement(r, &msg.HashStop)\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgGetBlocks) BtcEncode(w io.Writer, pver uint32) error {\n\tcount := len(msg.BlockLocatorHashes)\n\tif count > MaxBlockLocatorsPerMsg {\n\t\tstr := fmt.Sprintf(\"too many block locator hashes for message \"+\n\t\t\t\"[count %v, max %v]\", count, MaxBlockLocatorsPerMsg)\n\t\treturn messageError(\"MsgGetBlocks.BtcEncode\", str)\n\t}\n\n\terr := writeElement(w, msg.ProtocolVersion)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = WriteVarInt(w, pver, uint64(count))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, hash := range msg.BlockLocatorHashes {\n\t\terr = writeElement(w, hash)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn writeElement(w, &msg.HashStop)\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgGetBlocks) Command() string {\n\treturn CmdGetBlocks\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgGetBlocks) MaxPayloadLength(pver uint32) uint32 {\n\t// Protocol version 4 bytes + num hashes (varInt) + max block locator\n\t// hashes + hash stop.\n\treturn 4 + MaxVarIntPayload + (MaxBlockLocatorsPerMsg * chainhash.HashSize) + chainhash.HashSize\n}\n\n// NewMsgGetBlocks returns a new bitcoin getblocks message that conforms to the\n// Message interface using the passed parameters and defaults for the remaining\n// fields.\nfunc NewMsgGetBlocks(hashStop *chainhash.Hash) *MsgGetBlocks {\n\treturn &MsgGetBlocks{\n\t\tProtocolVersion:    ProtocolVersion,\n\t\tBlockLocatorHashes: make([]*chainhash.Hash, 0, MaxBlockLocatorsPerMsg),\n\t\tHashStop:           *hashStop,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/msggetcfcheckpt.go",
    "content": "// Copyright (c) 2018 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"io\"\n\n\t\"github.com/bcext/gcash/chaincfg/chainhash\"\n)\n\n// MsgGetCFCheckpt is a request for filter headers at evenly spaced intervals\n// throughout the blockchain history. It allows to set the FilterType field to\n// get headers in the chain of basic (0x00) or extended (0x01) headers.\ntype MsgGetCFCheckpt struct {\n\tFilterType FilterType\n\tStopHash   chainhash.Hash\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgGetCFCheckpt) BtcDecode(r io.Reader, pver uint32) error {\n\terr := readElement(r, &msg.FilterType)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn readElement(r, &msg.StopHash)\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgGetCFCheckpt) BtcEncode(w io.Writer, pver uint32) error {\n\terr := writeElement(w, msg.FilterType)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn writeElement(w, &msg.StopHash)\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgGetCFCheckpt) Command() string {\n\treturn CmdGetCFCheckpt\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgGetCFCheckpt) MaxPayloadLength(pver uint32) uint32 {\n\t// Filter type + uint32 + block hash\n\treturn 1 + chainhash.HashSize\n}\n\n// NewMsgGetCFCheckpt returns a new bitcoin getcfcheckpt message that conforms\n// to the Message interface using the passed parameters and defaults for the\n// remaining fields.\nfunc NewMsgGetCFCheckpt(filterType FilterType, stopHash *chainhash.Hash) *MsgGetCFCheckpt {\n\treturn &MsgGetCFCheckpt{\n\t\tFilterType: filterType,\n\t\tStopHash:   *stopHash,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/msggetcfheaders.go",
    "content": "// Copyright (c) 2017 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"io\"\n\n\t\"github.com/bcext/gcash/chaincfg/chainhash\"\n)\n\n// MsgGetCFHeaders is a message similar to MsgGetHeaders, but for committed\n// filter headers. It allows to set the FilterType field to get headers in the\n// chain of basic (0x00) or extended (0x01) headers.\ntype MsgGetCFHeaders struct {\n\tFilterType  FilterType\n\tStartHeight uint32\n\tStopHash    chainhash.Hash\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgGetCFHeaders) BtcDecode(r io.Reader, pver uint32) error {\n\terr := readElement(r, &msg.FilterType)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = readElement(r, &msg.StartHeight)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn readElement(r, &msg.StopHash)\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgGetCFHeaders) BtcEncode(w io.Writer, pver uint32) error {\n\terr := writeElement(w, msg.FilterType)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = writeElement(w, &msg.StartHeight)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn writeElement(w, &msg.StopHash)\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgGetCFHeaders) Command() string {\n\treturn CmdGetCFHeaders\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgGetCFHeaders) MaxPayloadLength(pver uint32) uint32 {\n\t// Filter type + uint32 + block hash\n\treturn 1 + 4 + chainhash.HashSize\n}\n\n// NewMsgGetCFHeaders returns a new bitcoin getcfheader message that conforms to\n// the Message interface using the passed parameters and defaults for the\n// remaining fields.\nfunc NewMsgGetCFHeaders(filterType FilterType, startHeight uint32,\n\tstopHash *chainhash.Hash) *MsgGetCFHeaders {\n\treturn &MsgGetCFHeaders{\n\t\tFilterType:  filterType,\n\t\tStartHeight: startHeight,\n\t\tStopHash:    *stopHash,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/msggetcfilters.go",
    "content": "// Copyright (c) 2017 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"io\"\n\n\t\"github.com/bcext/gcash/chaincfg/chainhash\"\n)\n\n// MaxGetCFiltersReqRange the maximum number of filters that may be requested in\n// a getcfheaders message.\nconst MaxGetCFiltersReqRange = 1000\n\n// MsgGetCFilters implements the Message interface and represents a bitcoin\n// getcfilters message. It is used to request committed filters for a range of\n// blocks.\ntype MsgGetCFilters struct {\n\tFilterType  FilterType\n\tStartHeight uint32\n\tStopHash    chainhash.Hash\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgGetCFilters) BtcDecode(r io.Reader, pver uint32) error {\n\terr := readElement(r, &msg.FilterType)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = readElement(r, &msg.StartHeight)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn readElement(r, &msg.StopHash)\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgGetCFilters) BtcEncode(w io.Writer, pver uint32) error {\n\terr := writeElement(w, msg.FilterType)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = writeElement(w, &msg.StartHeight)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn writeElement(w, &msg.StopHash)\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgGetCFilters) Command() string {\n\treturn CmdGetCFilters\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgGetCFilters) MaxPayloadLength(pver uint32) uint32 {\n\t// Filter type + uint32 + block hash\n\treturn 1 + 4 + chainhash.HashSize\n}\n\n// NewMsgGetCFilters returns a new bitcoin getcfilters message that conforms to\n// the Message interface using the passed parameters and defaults for the\n// remaining fields.\nfunc NewMsgGetCFilters(filterType FilterType, startHeight uint32,\n\tstopHash *chainhash.Hash) *MsgGetCFilters {\n\treturn &MsgGetCFilters{\n\t\tFilterType:  filterType,\n\t\tStartHeight: startHeight,\n\t\tStopHash:    *stopHash,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/msggetdata.go",
    "content": "// Copyright (c) 2013-2015 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\n// MsgGetData implements the Message interface and represents a bitcoin\n// getdata message.  It is used to request data such as blocks and transactions\n// from another peer.  It should be used in response to the inv (MsgInv) message\n// to request the actual data referenced by each inventory vector the receiving\n// peer doesn't already have.  Each message is limited to a maximum number of\n// inventory vectors, which is currently 50,000.  As a result, multiple messages\n// must be used to request larger amounts of data.\n//\n// Use the AddInvVect function to build up the list of inventory vectors when\n// sending a getdata message to another peer.\ntype MsgGetData struct {\n\tInvList []*InvVect\n}\n\n// AddInvVect adds an inventory vector to the message.\nfunc (msg *MsgGetData) AddInvVect(iv *InvVect) error {\n\tif len(msg.InvList)+1 > MaxInvPerMsg {\n\t\tstr := fmt.Sprintf(\"too many invvect in message [max %v]\",\n\t\t\tMaxInvPerMsg)\n\t\treturn messageError(\"MsgGetData.AddInvVect\", str)\n\t}\n\n\tmsg.InvList = append(msg.InvList, iv)\n\treturn nil\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgGetData) BtcDecode(r io.Reader, pver uint32) error {\n\tcount, err := ReadVarInt(r, pver)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Limit to max inventory vectors per message.\n\tif count > MaxInvPerMsg {\n\t\tstr := fmt.Sprintf(\"too many invvect in message [%v]\", count)\n\t\treturn messageError(\"MsgGetData.BtcDecode\", str)\n\t}\n\n\t// Create a contiguous slice of inventory vectors to deserialize into in\n\t// order to reduce the number of allocations.\n\tinvList := make([]InvVect, count)\n\tmsg.InvList = make([]*InvVect, 0, count)\n\tfor i := uint64(0); i < count; i++ {\n\t\tiv := &invList[i]\n\t\terr := readInvVect(r, pver, iv)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmsg.AddInvVect(iv)\n\t}\n\n\treturn nil\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgGetData) BtcEncode(w io.Writer, pver uint32) error {\n\t// Limit to max inventory vectors per message.\n\tcount := len(msg.InvList)\n\tif count > MaxInvPerMsg {\n\t\tstr := fmt.Sprintf(\"too many invvect in message [%v]\", count)\n\t\treturn messageError(\"MsgGetData.BtcEncode\", str)\n\t}\n\n\terr := WriteVarInt(w, pver, uint64(count))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, iv := range msg.InvList {\n\t\terr := writeInvVect(w, pver, iv)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgGetData) Command() string {\n\treturn CmdGetData\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgGetData) MaxPayloadLength(pver uint32) uint32 {\n\t// Num inventory vectors (varInt) + max allowed inventory vectors.\n\treturn MaxVarIntPayload + (MaxInvPerMsg * maxInvVectPayload)\n}\n\n// NewMsgGetData returns a new bitcoin getdata message that conforms to the\n// Message interface.  See MsgGetData for details.\nfunc NewMsgGetData() *MsgGetData {\n\treturn &MsgGetData{\n\t\tInvList: make([]*InvVect, 0, defaultInvListAlloc),\n\t}\n}\n\n// NewMsgGetDataSizeHint returns a new bitcoin getdata message that conforms to\n// the Message interface.  See MsgGetData for details.  This function differs\n// from NewMsgGetData in that it allows a default allocation size for the\n// backing array which houses the inventory vector list.  This allows callers\n// who know in advance how large the inventory list will grow to avoid the\n// overhead of growing the internal backing array several times when appending\n// large amounts of inventory vectors with AddInvVect.  Note that the specified\n// hint is just that - a hint that is used for the default allocation size.\n// Adding more (or less) inventory vectors will still work properly.  The size\n// hint is limited to MaxInvPerMsg.\nfunc NewMsgGetDataSizeHint(sizeHint uint) *MsgGetData {\n\t// Limit the specified hint to the maximum allow per message.\n\tif sizeHint > MaxInvPerMsg {\n\t\tsizeHint = MaxInvPerMsg\n\t}\n\n\treturn &MsgGetData{\n\t\tInvList: make([]*InvVect, 0, sizeHint),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/msggetheaders.go",
    "content": "// Copyright (c) 2013-2016 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/bcext/gcash/chaincfg/chainhash\"\n)\n\n// MsgGetHeaders implements the Message interface and represents a bitcoin\n// getheaders message.  It is used to request a list of block headers for\n// blocks starting after the last known hash in the slice of block locator\n// hashes.  The list is returned via a headers message (MsgHeaders) and is\n// limited by a specific hash to stop at or the maximum number of block headers\n// per message, which is currently 2000.\n//\n// Set the HashStop field to the hash at which to stop and use\n// AddBlockLocatorHash to build up the list of block locator hashes.\n//\n// The algorithm for building the block locator hashes should be to add the\n// hashes in reverse order until you reach the genesis block.  In order to keep\n// the list of locator hashes to a resonable number of entries, first add the\n// most recent 10 block hashes, then double the step each loop iteration to\n// exponentially decrease the number of hashes the further away from head and\n// closer to the genesis block you get.\ntype MsgGetHeaders struct {\n\tProtocolVersion    uint32\n\tBlockLocatorHashes []*chainhash.Hash\n\tHashStop           chainhash.Hash\n}\n\n// AddBlockLocatorHash adds a new block locator hash to the message.\nfunc (msg *MsgGetHeaders) AddBlockLocatorHash(hash *chainhash.Hash) error {\n\tif len(msg.BlockLocatorHashes)+1 > MaxBlockLocatorsPerMsg {\n\t\tstr := fmt.Sprintf(\"too many block locator hashes for message [max %v]\",\n\t\t\tMaxBlockLocatorsPerMsg)\n\t\treturn messageError(\"MsgGetHeaders.AddBlockLocatorHash\", str)\n\t}\n\n\tmsg.BlockLocatorHashes = append(msg.BlockLocatorHashes, hash)\n\treturn nil\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgGetHeaders) BtcDecode(r io.Reader, pver uint32) error {\n\terr := readElement(r, &msg.ProtocolVersion)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Read num block locator hashes and limit to max.\n\tcount, err := ReadVarInt(r, pver)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif count > MaxBlockLocatorsPerMsg {\n\t\tstr := fmt.Sprintf(\"too many block locator hashes for message \"+\n\t\t\t\"[count %v, max %v]\", count, MaxBlockLocatorsPerMsg)\n\t\treturn messageError(\"MsgGetHeaders.BtcDecode\", str)\n\t}\n\n\t// Create a contiguous slice of hashes to deserialize into in order to\n\t// reduce the number of allocations.\n\tlocatorHashes := make([]chainhash.Hash, count)\n\tmsg.BlockLocatorHashes = make([]*chainhash.Hash, 0, count)\n\tfor i := uint64(0); i < count; i++ {\n\t\thash := &locatorHashes[i]\n\t\terr := readElement(r, hash)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmsg.AddBlockLocatorHash(hash)\n\t}\n\n\treturn readElement(r, &msg.HashStop)\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgGetHeaders) BtcEncode(w io.Writer, pver uint32) error {\n\t// Limit to max block locator hashes per message.\n\tcount := len(msg.BlockLocatorHashes)\n\tif count > MaxBlockLocatorsPerMsg {\n\t\tstr := fmt.Sprintf(\"too many block locator hashes for message \"+\n\t\t\t\"[count %v, max %v]\", count, MaxBlockLocatorsPerMsg)\n\t\treturn messageError(\"MsgGetHeaders.BtcEncode\", str)\n\t}\n\n\terr := writeElement(w, msg.ProtocolVersion)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = WriteVarInt(w, pver, uint64(count))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, hash := range msg.BlockLocatorHashes {\n\t\terr := writeElement(w, hash)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn writeElement(w, &msg.HashStop)\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgGetHeaders) Command() string {\n\treturn CmdGetHeaders\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgGetHeaders) MaxPayloadLength(pver uint32) uint32 {\n\t// Version 4 bytes + num block locator hashes (varInt) + max allowed block\n\t// locators + hash stop.\n\treturn 4 + MaxVarIntPayload + (MaxBlockLocatorsPerMsg *\n\t\tchainhash.HashSize) + chainhash.HashSize\n}\n\n// NewMsgGetHeaders returns a new bitcoin getheaders message that conforms to\n// the Message interface.  See MsgGetHeaders for details.\nfunc NewMsgGetHeaders() *MsgGetHeaders {\n\treturn &MsgGetHeaders{\n\t\tBlockLocatorHashes: make([]*chainhash.Hash, 0,\n\t\t\tMaxBlockLocatorsPerMsg),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/msgheaders.go",
    "content": "// Copyright (c) 2013-2016 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\n// MaxBlockHeadersPerMsg is the maximum number of block headers that can be in\n// a single bitcoin headers message.\nconst MaxBlockHeadersPerMsg = 2000\n\n// MsgHeaders implements the Message interface and represents a bitcoin headers\n// message.  It is used to deliver block header information in response\n// to a getheaders message (MsgGetHeaders).  The maximum number of block headers\n// per message is currently 2000.  See MsgGetHeaders for details on requesting\n// the headers.\ntype MsgHeaders struct {\n\tHeaders []*BlockHeader\n}\n\n// AddBlockHeader adds a new block header to the message.\nfunc (msg *MsgHeaders) AddBlockHeader(bh *BlockHeader) error {\n\tif len(msg.Headers)+1 > MaxBlockHeadersPerMsg {\n\t\tstr := fmt.Sprintf(\"too many block headers in message [max %v]\",\n\t\t\tMaxBlockHeadersPerMsg)\n\t\treturn messageError(\"MsgHeaders.AddBlockHeader\", str)\n\t}\n\n\tmsg.Headers = append(msg.Headers, bh)\n\treturn nil\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgHeaders) BtcDecode(r io.Reader, pver uint32) error {\n\tcount, err := ReadVarInt(r, pver)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Limit to max block headers per message.\n\tif count > MaxBlockHeadersPerMsg {\n\t\tstr := fmt.Sprintf(\"too many block headers for message \"+\n\t\t\t\"[count %v, max %v]\", count, MaxBlockHeadersPerMsg)\n\t\treturn messageError(\"MsgHeaders.BtcDecode\", str)\n\t}\n\n\t// Create a contiguous slice of headers to deserialize into in order to\n\t// reduce the number of allocations.\n\theaders := make([]BlockHeader, count)\n\tmsg.Headers = make([]*BlockHeader, 0, count)\n\tfor i := uint64(0); i < count; i++ {\n\t\tbh := &headers[i]\n\t\terr := readBlockHeader(r, pver, bh)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\ttxCount, err := ReadVarInt(r, pver)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Ensure the transaction count is zero for headers.\n\t\tif txCount > 0 {\n\t\t\tstr := fmt.Sprintf(\"block headers may not contain \"+\n\t\t\t\t\"transactions [count %v]\", txCount)\n\t\t\treturn messageError(\"MsgHeaders.BtcDecode\", str)\n\t\t}\n\t\tmsg.AddBlockHeader(bh)\n\t}\n\n\treturn nil\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgHeaders) BtcEncode(w io.Writer, pver uint32) error {\n\t// Limit to max block headers per message.\n\tcount := len(msg.Headers)\n\tif count > MaxBlockHeadersPerMsg {\n\t\tstr := fmt.Sprintf(\"too many block headers for message \"+\n\t\t\t\"[count %v, max %v]\", count, MaxBlockHeadersPerMsg)\n\t\treturn messageError(\"MsgHeaders.BtcEncode\", str)\n\t}\n\n\terr := WriteVarInt(w, pver, uint64(count))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, bh := range msg.Headers {\n\t\terr := writeBlockHeader(w, pver, bh)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// The wire protocol encoding always includes a 0 for the number\n\t\t// of transactions on header messages.  This is really just an\n\t\t// artifact of the way the original implementation serializes\n\t\t// block headers, but it is required.\n\t\terr = WriteVarInt(w, pver, 0)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgHeaders) Command() string {\n\treturn CmdHeaders\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgHeaders) MaxPayloadLength(pver uint32) uint32 {\n\t// Num headers (varInt) + max allowed headers (header length + 1 byte\n\t// for the number of transactions which is always 0).\n\treturn MaxVarIntPayload + ((MaxBlockHeaderPayload + 1) *\n\t\tMaxBlockHeadersPerMsg)\n}\n\n// NewMsgHeaders returns a new bitcoin headers message that conforms to the\n// Message interface.  See MsgHeaders for details.\nfunc NewMsgHeaders() *MsgHeaders {\n\treturn &MsgHeaders{\n\t\tHeaders: make([]*BlockHeader, 0, MaxBlockHeadersPerMsg),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/msginv.go",
    "content": "// Copyright (c) 2013-2015 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\n// defaultInvListAlloc is the default size used for the backing array for an\n// inventory list.  The array will dynamically grow as needed, but this\n// figure is intended to provide enough space for the max number of inventory\n// vectors in a *typical* inventory message without needing to grow the backing\n// array multiple times.  Technically, the list can grow to MaxInvPerMsg, but\n// rather than using that large figure, this figure more accurately reflects the\n// typical case.\nconst defaultInvListAlloc = 1000\n\n// MsgInv implements the Message interface and represents a bitcoin inv message.\n// It is used to advertise a peer's known data such as blocks and transactions\n// through inventory vectors.  It may be sent unsolicited to inform other peers\n// of the data or in response to a getblocks message (MsgGetBlocks).  Each\n// message is limited to a maximum number of inventory vectors, which is\n// currently 50,000.\n//\n// Use the AddInvVect function to build up the list of inventory vectors when\n// sending an inv message to another peer.\ntype MsgInv struct {\n\tInvList []*InvVect\n}\n\n// AddInvVect adds an inventory vector to the message.\nfunc (msg *MsgInv) AddInvVect(iv *InvVect) error {\n\tif len(msg.InvList)+1 > MaxInvPerMsg {\n\t\tstr := fmt.Sprintf(\"too many invvect in message [max %v]\",\n\t\t\tMaxInvPerMsg)\n\t\treturn messageError(\"MsgInv.AddInvVect\", str)\n\t}\n\n\tmsg.InvList = append(msg.InvList, iv)\n\treturn nil\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgInv) BtcDecode(r io.Reader, pver uint32) error {\n\tcount, err := ReadVarInt(r, pver)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Limit to max inventory vectors per message.\n\tif count > MaxInvPerMsg {\n\t\tstr := fmt.Sprintf(\"too many invvect in message [%v]\", count)\n\t\treturn messageError(\"MsgInv.BtcDecode\", str)\n\t}\n\n\t// Create a contiguous slice of inventory vectors to deserialize into in\n\t// order to reduce the number of allocations.\n\tinvList := make([]InvVect, count)\n\tmsg.InvList = make([]*InvVect, 0, count)\n\tfor i := uint64(0); i < count; i++ {\n\t\tiv := &invList[i]\n\t\terr := readInvVect(r, pver, iv)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmsg.AddInvVect(iv)\n\t}\n\n\treturn nil\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgInv) BtcEncode(w io.Writer, pver uint32) error {\n\t// Limit to max inventory vectors per message.\n\tcount := len(msg.InvList)\n\tif count > MaxInvPerMsg {\n\t\tstr := fmt.Sprintf(\"too many invvect in message [%v]\", count)\n\t\treturn messageError(\"MsgInv.BtcEncode\", str)\n\t}\n\n\terr := WriteVarInt(w, pver, uint64(count))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, iv := range msg.InvList {\n\t\terr := writeInvVect(w, pver, iv)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgInv) Command() string {\n\treturn CmdInv\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgInv) MaxPayloadLength(pver uint32) uint32 {\n\t// Num inventory vectors (varInt) + max allowed inventory vectors.\n\treturn MaxVarIntPayload + (MaxInvPerMsg * maxInvVectPayload)\n}\n\n// NewMsgInv returns a new bitcoin inv message that conforms to the Message\n// interface.  See MsgInv for details.\nfunc NewMsgInv() *MsgInv {\n\treturn &MsgInv{\n\t\tInvList: make([]*InvVect, 0, defaultInvListAlloc),\n\t}\n}\n\n// NewMsgInvSizeHint returns a new bitcoin inv message that conforms to the\n// Message interface.  See MsgInv for details.  This function differs from\n// NewMsgInv in that it allows a default allocation size for the backing array\n// which houses the inventory vector list.  This allows callers who know in\n// advance how large the inventory list will grow to avoid the overhead of\n// growing the internal backing array several times when appending large amounts\n// of inventory vectors with AddInvVect.  Note that the specified hint is just\n// that - a hint that is used for the default allocation size.  Adding more\n// (or less) inventory vectors will still work properly.  The size hint is\n// limited to MaxInvPerMsg.\nfunc NewMsgInvSizeHint(sizeHint uint) *MsgInv {\n\t// Limit the specified hint to the maximum allow per message.\n\tif sizeHint > MaxInvPerMsg {\n\t\tsizeHint = MaxInvPerMsg\n\t}\n\n\treturn &MsgInv{\n\t\tInvList: make([]*InvVect, 0, sizeHint),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/msgmempool.go",
    "content": "// Copyright (c) 2013-2015 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\n// MsgMemPool implements the Message interface and represents a bitcoin mempool\n// message.  It is used to request a list of transactions still in the active\n// memory pool of a relay.\n//\n// This message has no payload and was not added until protocol versions\n// starting with BIP0035Version.\ntype MsgMemPool struct{}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgMemPool) BtcDecode(r io.Reader, pver uint32) error {\n\tif pver < BIP0035Version {\n\t\tstr := fmt.Sprintf(\"mempool message invalid for protocol \"+\n\t\t\t\"version %d\", pver)\n\t\treturn messageError(\"MsgMemPool.BtcDecode\", str)\n\t}\n\n\treturn nil\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgMemPool) BtcEncode(w io.Writer, pver uint32) error {\n\tif pver < BIP0035Version {\n\t\tstr := fmt.Sprintf(\"mempool message invalid for protocol \"+\n\t\t\t\"version %d\", pver)\n\t\treturn messageError(\"MsgMemPool.BtcEncode\", str)\n\t}\n\n\treturn nil\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgMemPool) Command() string {\n\treturn CmdMemPool\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgMemPool) MaxPayloadLength(pver uint32) uint32 {\n\treturn 0\n}\n\n// NewMsgMemPool returns a new bitcoin pong message that conforms to the Message\n// interface.  See MsgPong for details.\nfunc NewMsgMemPool() *MsgMemPool {\n\treturn &MsgMemPool{}\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/msgmerkleblock.go",
    "content": "// Copyright (c) 2014-2016 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/bcext/gcash/chaincfg/chainhash\"\n)\n\n// maxFlagsPerMerkleBlock is the maximum number of flag bytes that could\n// possibly fit into a merkle block.  Since each transaction is represented by\n// a single bit, this is the max number of transactions per block divided by\n// 8 bits per byte.  Then an extra one to cover partials.\nconst maxFlagsPerMerkleBlock = maxTxPerBlock / 8\n\n// MsgMerkleBlock implements the Message interface and represents a bitcoin\n// merkleblock message which is used to reset a Bloom filter.\n//\n// This message was not added until protocol version BIP0037Version.\ntype MsgMerkleBlock struct {\n\tHeader       BlockHeader\n\tTransactions uint32\n\tHashes       []*chainhash.Hash\n\tFlags        []byte\n}\n\n// AddTxHash adds a new transaction hash to the message.\nfunc (msg *MsgMerkleBlock) AddTxHash(hash *chainhash.Hash) error {\n\tif len(msg.Hashes)+1 > maxTxPerBlock {\n\t\tstr := fmt.Sprintf(\"too many tx hashes for message [max %v]\",\n\t\t\tmaxTxPerBlock)\n\t\treturn messageError(\"MsgMerkleBlock.AddTxHash\", str)\n\t}\n\n\tmsg.Hashes = append(msg.Hashes, hash)\n\treturn nil\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgMerkleBlock) BtcDecode(r io.Reader, pver uint32) error {\n\tif pver < BIP0037Version {\n\t\tstr := fmt.Sprintf(\"merkleblock message invalid for protocol \"+\n\t\t\t\"version %d\", pver)\n\t\treturn messageError(\"MsgMerkleBlock.BtcDecode\", str)\n\t}\n\n\terr := readBlockHeader(r, pver, &msg.Header)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = readElement(r, &msg.Transactions)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Read num block locator hashes and limit to max.\n\tcount, err := ReadVarInt(r, pver)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif count > maxTxPerBlock {\n\t\tstr := fmt.Sprintf(\"too many transaction hashes for message \"+\n\t\t\t\"[count %v, max %v]\", count, maxTxPerBlock)\n\t\treturn messageError(\"MsgMerkleBlock.BtcDecode\", str)\n\t}\n\n\t// Create a contiguous slice of hashes to deserialize into in order to\n\t// reduce the number of allocations.\n\thashes := make([]chainhash.Hash, count)\n\tmsg.Hashes = make([]*chainhash.Hash, 0, count)\n\tfor i := uint64(0); i < count; i++ {\n\t\thash := &hashes[i]\n\t\terr := readElement(r, hash)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmsg.AddTxHash(hash)\n\t}\n\n\tmsg.Flags, err = ReadVarBytes(r, pver, maxFlagsPerMerkleBlock,\n\t\t\"merkle block flags size\")\n\treturn err\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgMerkleBlock) BtcEncode(w io.Writer, pver uint32) error {\n\tif pver < BIP0037Version {\n\t\tstr := fmt.Sprintf(\"merkleblock message invalid for protocol \"+\n\t\t\t\"version %d\", pver)\n\t\treturn messageError(\"MsgMerkleBlock.BtcEncode\", str)\n\t}\n\n\t// Read num transaction hashes and limit to max.\n\tnumHashes := len(msg.Hashes)\n\tif numHashes > maxTxPerBlock {\n\t\tstr := fmt.Sprintf(\"too many transaction hashes for message \"+\n\t\t\t\"[count %v, max %v]\", numHashes, maxTxPerBlock)\n\t\treturn messageError(\"MsgMerkleBlock.BtcDecode\", str)\n\t}\n\tnumFlagBytes := len(msg.Flags)\n\tif numFlagBytes > maxFlagsPerMerkleBlock {\n\t\tstr := fmt.Sprintf(\"too many flag bytes for message [count %v, \"+\n\t\t\t\"max %v]\", numFlagBytes, maxFlagsPerMerkleBlock)\n\t\treturn messageError(\"MsgMerkleBlock.BtcDecode\", str)\n\t}\n\n\terr := writeBlockHeader(w, pver, &msg.Header)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = writeElement(w, msg.Transactions)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = WriteVarInt(w, pver, uint64(numHashes))\n\tif err != nil {\n\t\treturn err\n\t}\n\tfor _, hash := range msg.Hashes {\n\t\terr = writeElement(w, hash)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn WriteVarBytes(w, pver, msg.Flags)\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgMerkleBlock) Command() string {\n\treturn CmdMerkleBlock\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgMerkleBlock) MaxPayloadLength(pver uint32) uint32 {\n\treturn MaxBlockPayload\n}\n\n// NewMsgMerkleBlock returns a new bitcoin merkleblock message that conforms to\n// the Message interface.  See MsgMerkleBlock for details.\nfunc NewMsgMerkleBlock(bh *BlockHeader) *MsgMerkleBlock {\n\treturn &MsgMerkleBlock{\n\t\tHeader:       *bh,\n\t\tTransactions: 0,\n\t\tHashes:       make([]*chainhash.Hash, 0),\n\t\tFlags:        make([]byte, 0),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/msgnotfound.go",
    "content": "// Copyright (c) 2013-2015 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\n// MsgNotFound defines a bitcoin notfound message which is sent in response to\n// a getdata message if any of the requested data in not available on the peer.\n// Each message is limited to a maximum number of inventory vectors, which is\n// currently 50,000.\n//\n// Use the AddInvVect function to build up the list of inventory vectors when\n// sending a notfound message to another peer.\ntype MsgNotFound struct {\n\tInvList []*InvVect\n}\n\n// AddInvVect adds an inventory vector to the message.\nfunc (msg *MsgNotFound) AddInvVect(iv *InvVect) error {\n\tif len(msg.InvList)+1 > MaxInvPerMsg {\n\t\tstr := fmt.Sprintf(\"too many invvect in message [max %v]\",\n\t\t\tMaxInvPerMsg)\n\t\treturn messageError(\"MsgNotFound.AddInvVect\", str)\n\t}\n\n\tmsg.InvList = append(msg.InvList, iv)\n\treturn nil\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgNotFound) BtcDecode(r io.Reader, pver uint32) error {\n\tcount, err := ReadVarInt(r, pver)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Limit to max inventory vectors per message.\n\tif count > MaxInvPerMsg {\n\t\tstr := fmt.Sprintf(\"too many invvect in message [%v]\", count)\n\t\treturn messageError(\"MsgNotFound.BtcDecode\", str)\n\t}\n\n\t// Create a contiguous slice of inventory vectors to deserialize into in\n\t// order to reduce the number of allocations.\n\tinvList := make([]InvVect, count)\n\tmsg.InvList = make([]*InvVect, 0, count)\n\tfor i := uint64(0); i < count; i++ {\n\t\tiv := &invList[i]\n\t\terr := readInvVect(r, pver, iv)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmsg.AddInvVect(iv)\n\t}\n\n\treturn nil\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgNotFound) BtcEncode(w io.Writer, pver uint32) error {\n\t// Limit to max inventory vectors per message.\n\tcount := len(msg.InvList)\n\tif count > MaxInvPerMsg {\n\t\tstr := fmt.Sprintf(\"too many invvect in message [%v]\", count)\n\t\treturn messageError(\"MsgNotFound.BtcEncode\", str)\n\t}\n\n\terr := WriteVarInt(w, pver, uint64(count))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, iv := range msg.InvList {\n\t\terr := writeInvVect(w, pver, iv)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgNotFound) Command() string {\n\treturn CmdNotFound\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgNotFound) MaxPayloadLength(pver uint32) uint32 {\n\t// Max var int 9 bytes + max InvVects at 36 bytes each.\n\t// Num inventory vectors (varInt) + max allowed inventory vectors.\n\treturn MaxVarIntPayload + (MaxInvPerMsg * maxInvVectPayload)\n}\n\n// NewMsgNotFound returns a new bitcoin notfound message that conforms to the\n// Message interface.  See MsgNotFound for details.\nfunc NewMsgNotFound() *MsgNotFound {\n\treturn &MsgNotFound{\n\t\tInvList: make([]*InvVect, 0, defaultInvListAlloc),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/msgping.go",
    "content": "// Copyright (c) 2013-2015 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"io\"\n)\n\n// MsgPing implements the Message interface and represents a bitcoin ping\n// message.\n//\n// For versions BIP0031Version and earlier, it is used primarily to confirm\n// that a connection is still valid.  A transmission error is typically\n// interpreted as a closed connection and that the peer should be removed.\n// For versions AFTER BIP0031Version it contains an identifier which can be\n// returned in the pong message to determine network timing.\n//\n// The payload for this message just consists of a nonce used for identifying\n// it later.\ntype MsgPing struct {\n\t// Unique value associated with message that is used to identify\n\t// specific ping message.\n\tNonce uint64\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgPing) BtcDecode(r io.Reader, pver uint32) error {\n\t// There was no nonce for BIP0031Version and earlier.\n\t// NOTE: > is not a mistake here.  The BIP0031 was defined as AFTER\n\t// the version unlike most others.\n\tif pver > BIP0031Version {\n\t\terr := readElement(r, &msg.Nonce)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgPing) BtcEncode(w io.Writer, pver uint32) error {\n\t// There was no nonce for BIP0031Version and earlier.\n\t// NOTE: > is not a mistake here.  The BIP0031 was defined as AFTER\n\t// the version unlike most others.\n\tif pver > BIP0031Version {\n\t\terr := writeElement(w, msg.Nonce)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgPing) Command() string {\n\treturn CmdPing\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgPing) MaxPayloadLength(pver uint32) uint32 {\n\tplen := uint32(0)\n\t// There was no nonce for BIP0031Version and earlier.\n\t// NOTE: > is not a mistake here.  The BIP0031 was defined as AFTER\n\t// the version unlike most others.\n\tif pver > BIP0031Version {\n\t\t// Nonce 8 bytes.\n\t\tplen += 8\n\t}\n\n\treturn plen\n}\n\n// NewMsgPing returns a new bitcoin ping message that conforms to the Message\n// interface.  See MsgPing for details.\nfunc NewMsgPing(nonce uint64) *MsgPing {\n\treturn &MsgPing{\n\t\tNonce: nonce,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/msgpong.go",
    "content": "// Copyright (c) 2013-2015 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\n// MsgPong implements the Message interface and represents a bitcoin pong\n// message which is used primarily to confirm that a connection is still valid\n// in response to a bitcoin ping message (MsgPing).\n//\n// This message was not added until protocol versions AFTER BIP0031Version.\ntype MsgPong struct {\n\t// Unique value associated with message that is used to identify\n\t// specific ping message.\n\tNonce uint64\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgPong) BtcDecode(r io.Reader, pver uint32) error {\n\t// NOTE: <= is not a mistake here.  The BIP0031 was defined as AFTER\n\t// the version unlike most others.\n\tif pver <= BIP0031Version {\n\t\tstr := fmt.Sprintf(\"pong message invalid for protocol \"+\n\t\t\t\"version %d\", pver)\n\t\treturn messageError(\"MsgPong.BtcDecode\", str)\n\t}\n\n\treturn readElement(r, &msg.Nonce)\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgPong) BtcEncode(w io.Writer, pver uint32) error {\n\t// NOTE: <= is not a mistake here.  The BIP0031 was defined as AFTER\n\t// the version unlike most others.\n\tif pver <= BIP0031Version {\n\t\tstr := fmt.Sprintf(\"pong message invalid for protocol \"+\n\t\t\t\"version %d\", pver)\n\t\treturn messageError(\"MsgPong.BtcEncode\", str)\n\t}\n\n\treturn writeElement(w, msg.Nonce)\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgPong) Command() string {\n\treturn CmdPong\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgPong) MaxPayloadLength(pver uint32) uint32 {\n\tplen := uint32(0)\n\t// The pong message did not exist for BIP0031Version and earlier.\n\t// NOTE: > is not a mistake here.  The BIP0031 was defined as AFTER\n\t// the version unlike most others.\n\tif pver > BIP0031Version {\n\t\t// Nonce 8 bytes.\n\t\tplen += 8\n\t}\n\n\treturn plen\n}\n\n// NewMsgPong returns a new bitcoin pong message that conforms to the Message\n// interface.  See MsgPong for details.\nfunc NewMsgPong(nonce uint64) *MsgPong {\n\treturn &MsgPong{\n\t\tNonce: nonce,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/msgreject.go",
    "content": "// Copyright (c) 2014-2016 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/bcext/gcash/chaincfg/chainhash\"\n)\n\n// RejectCode represents a numeric value by which a remote peer indicates\n// why a message was rejected.\ntype RejectCode uint8\n\n// These constants define the various supported reject codes.\nconst (\n\tRejectMalformed       RejectCode = 0x01\n\tRejectInvalid         RejectCode = 0x10\n\tRejectObsolete        RejectCode = 0x11\n\tRejectDuplicate       RejectCode = 0x12\n\tRejectNonstandard     RejectCode = 0x40\n\tRejectDust            RejectCode = 0x41\n\tRejectInsufficientFee RejectCode = 0x42\n\tRejectCheckpoint      RejectCode = 0x43\n)\n\n// Map of reject codes back strings for pretty printing.\nvar rejectCodeStrings = map[RejectCode]string{\n\tRejectMalformed:       \"REJECT_MALFORMED\",\n\tRejectInvalid:         \"REJECT_INVALID\",\n\tRejectObsolete:        \"REJECT_OBSOLETE\",\n\tRejectDuplicate:       \"REJECT_DUPLICATE\",\n\tRejectNonstandard:     \"REJECT_NONSTANDARD\",\n\tRejectDust:            \"REJECT_DUST\",\n\tRejectInsufficientFee: \"REJECT_INSUFFICIENTFEE\",\n\tRejectCheckpoint:      \"REJECT_CHECKPOINT\",\n}\n\n// String returns the RejectCode in human-readable form.\nfunc (code RejectCode) String() string {\n\tif s, ok := rejectCodeStrings[code]; ok {\n\t\treturn s\n\t}\n\n\treturn fmt.Sprintf(\"Unknown RejectCode (%d)\", uint8(code))\n}\n\n// MsgReject implements the Message interface and represents a bitcoin reject\n// message.\n//\n// This message was not added until protocol version RejectVersion.\ntype MsgReject struct {\n\t// Cmd is the command for the message which was rejected such as\n\t// as CmdBlock or CmdTx.  This can be obtained from the Command function\n\t// of a Message.\n\tCmd string\n\n\t// RejectCode is a code indicating why the command was rejected.  It\n\t// is encoded as a uint8 on the wire.\n\tCode RejectCode\n\n\t// Reason is a human-readable string with specific details (over and\n\t// above the reject code) about why the command was rejected.\n\tReason string\n\n\t// Hash identifies a specific block or transaction that was rejected\n\t// and therefore only applies the MsgBlock and MsgTx messages.\n\tHash chainhash.Hash\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgReject) BtcDecode(r io.Reader, pver uint32) error {\n\tif pver < RejectVersion {\n\t\tstr := fmt.Sprintf(\"reject message invalid for protocol \"+\n\t\t\t\"version %d\", pver)\n\t\treturn messageError(\"MsgReject.BtcDecode\", str)\n\t}\n\n\t// Command that was rejected.\n\tcmd, err := ReadVarString(r, pver)\n\tif err != nil {\n\t\treturn err\n\t}\n\tmsg.Cmd = cmd\n\n\t// Code indicating why the command was rejected.\n\terr = readElement(r, &msg.Code)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Human readable string with specific details (over and above the\n\t// reject code above) about why the command was rejected.\n\treason, err := ReadVarString(r, pver)\n\tif err != nil {\n\t\treturn err\n\t}\n\tmsg.Reason = reason\n\n\t// CmdBlock and CmdTx messages have an additional hash field that\n\t// identifies the specific block or transaction.\n\tif msg.Cmd == CmdBlock || msg.Cmd == CmdTx {\n\t\terr := readElement(r, &msg.Hash)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgReject) BtcEncode(w io.Writer, pver uint32) error {\n\tif pver < RejectVersion {\n\t\tstr := fmt.Sprintf(\"reject message invalid for protocol \"+\n\t\t\t\"version %d\", pver)\n\t\treturn messageError(\"MsgReject.BtcEncode\", str)\n\t}\n\n\t// Command that was rejected.\n\terr := WriteVarString(w, pver, msg.Cmd)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Code indicating why the command was rejected.\n\terr = writeElement(w, msg.Code)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Human readable string with specific details (over and above the\n\t// reject code above) about why the command was rejected.\n\terr = WriteVarString(w, pver, msg.Reason)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// CmdBlock and CmdTx messages have an additional hash field that\n\t// identifies the specific block or transaction.\n\tif msg.Cmd == CmdBlock || msg.Cmd == CmdTx {\n\t\terr := writeElement(w, &msg.Hash)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgReject) Command() string {\n\treturn CmdReject\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgReject) MaxPayloadLength(pver uint32) uint32 {\n\tplen := uint32(0)\n\t// The reject message did not exist before protocol version\n\t// RejectVersion.\n\tif pver >= RejectVersion {\n\t\t// Unfortunately the bitcoin protocol does not enforce a sane\n\t\t// limit on the length of the reason, so the max payload is the\n\t\t// overall maximum message payload.\n\t\tplen = MaxMessagePayload\n\t}\n\n\treturn plen\n}\n\n// NewMsgReject returns a new bitcoin reject message that conforms to the\n// Message interface.  See MsgReject for details.\nfunc NewMsgReject(command string, code RejectCode, reason string) *MsgReject {\n\treturn &MsgReject{\n\t\tCmd:    command,\n\t\tCode:   code,\n\t\tReason: reason,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/msgsendheaders.go",
    "content": "// Copyright (c) 2016 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\n// MsgSendHeaders implements the Message interface and represents a bitcoin\n// sendheaders message.  It is used to request the peer send block headers\n// rather than inventory vectors.\n//\n// This message has no payload and was not added until protocol versions\n// starting with SendHeadersVersion.\ntype MsgSendHeaders struct{}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgSendHeaders) BtcDecode(r io.Reader, pver uint32) error {\n\tif pver < SendHeadersVersion {\n\t\tstr := fmt.Sprintf(\"sendheaders message invalid for protocol \"+\n\t\t\t\"version %d\", pver)\n\t\treturn messageError(\"MsgSendHeaders.BtcDecode\", str)\n\t}\n\n\treturn nil\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgSendHeaders) BtcEncode(w io.Writer, pver uint32) error {\n\tif pver < SendHeadersVersion {\n\t\tstr := fmt.Sprintf(\"sendheaders message invalid for protocol \"+\n\t\t\t\"version %d\", pver)\n\t\treturn messageError(\"MsgSendHeaders.BtcEncode\", str)\n\t}\n\n\treturn nil\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgSendHeaders) Command() string {\n\treturn CmdSendHeaders\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgSendHeaders) MaxPayloadLength(pver uint32) uint32 {\n\treturn 0\n}\n\n// NewMsgSendHeaders returns a new bitcoin sendheaders message that conforms to\n// the Message interface.  See MsgSendHeaders for details.\nfunc NewMsgSendHeaders() *MsgSendHeaders {\n\treturn &MsgSendHeaders{}\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/msgtx.go",
    "content": "// Copyright (c) 2013-2016 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"strconv\"\n\n\t\"github.com/bcext/gcash/chaincfg/chainhash\"\n)\n\nconst (\n\t// TxVersion is the current latest supported transaction version.\n\tTxVersion = 1\n\n\t// MaxTxInSequenceNum is the maximum sequence number the sequence field\n\t// of a transaction input can be.\n\tMaxTxInSequenceNum uint32 = 0xffffffff\n\n\t// MaxPrevOutIndex is the maximum index the index field of a previous\n\t// outpoint can be.\n\tMaxPrevOutIndex uint32 = 0xffffffff\n\n\t// SequenceLockTimeDisabled is a flag that if set on a transaction\n\t// input's sequence number, the sequence number will not be interpreted\n\t// as a relative locktime.\n\tSequenceLockTimeDisabled = 1 << 31\n\n\t// SequenceLockTimeIsSeconds is a flag that if set on a transaction\n\t// input's sequence number, the relative locktime has units of 512\n\t// seconds.\n\tSequenceLockTimeIsSeconds = 1 << 22\n\n\t// SequenceLockTimeMask is a mask that extracts the relative locktime\n\t// when masked against the transaction input sequence number.\n\tSequenceLockTimeMask = 0x0000ffff\n\n\t// SequenceLockTimeGranularity is the defined time based granularity\n\t// for seconds-based relative time locks. When converting from seconds\n\t// to a sequence number, the value is right shifted by this amount,\n\t// therefore the granularity of relative time locks in 512 or 2^9\n\t// seconds. Enforced relative lock times are multiples of 512 seconds.\n\tSequenceLockTimeGranularity = 9\n\n\t// defaultTxInOutAlloc is the default size used for the backing array for\n\t// transaction inputs and outputs.  The array will dynamically grow as needed,\n\t// but this figure is intended to provide enough space for the number of\n\t// inputs and outputs in a typical transaction without needing to grow the\n\t// backing array multiple times.\n\tdefaultTxInOutAlloc = 15\n\n\t// minTxInPayload is the minimum payload size for a transaction input.\n\t// PreviousOutPoint.Hash + PreviousOutPoint.Index 4 bytes + Varint for\n\t// SignatureScript length 1 byte + Sequence 4 bytes.\n\tminTxInPayload = 9 + chainhash.HashSize\n\n\t// maxTxInPerMessage is the maximum number of transactions inputs that\n\t// a transaction which fits into a message could possibly have.\n\tmaxTxInPerMessage = (MaxMessagePayload / minTxInPayload) + 1\n\n\t// MinTxOutPayload is the minimum payload size for a transaction output.\n\t// Value 8 bytes + Varint for PkScript length 1 byte.\n\tMinTxOutPayload = 9\n\n\t// maxTxOutPerMessage is the maximum number of transactions outputs that\n\t// a transaction which fits into a message could possibly have.\n\tmaxTxOutPerMessage = (MaxMessagePayload / MinTxOutPayload) + 1\n\n\t// minTxPayload is the minimum payload size for a transaction.  Note\n\t// that any realistically usable transaction must have at least one\n\t// input or output, but that is a rule enforced at a higher layer, so\n\t// it is intentionally not included here.\n\t// Version 4 bytes + Varint number of transaction inputs 1 byte + Varint\n\t// number of transaction outputs 1 byte + LockTime 4 bytes + min input\n\t// payload + min output payload.\n\tminTxPayload = 10\n\n\t// freeListMaxScriptSize is the size of each buffer in the free list\n\t// that\tis used for deserializing scripts from the wire before they are\n\t// concatenated into a single contiguous buffers.  This value was chosen\n\t// because it is slightly more than twice the size of the vast majority\n\t// of all \"standard\" scripts.  Larger scripts are still deserialized\n\t// properly as the free list will simply be bypassed for them.\n\tfreeListMaxScriptSize = 512\n\n\t// freeListMaxItems is the number of buffers to keep in the free list\n\t// to use for script deserialization.  This value allows up to 100\n\t// scripts per transaction being simultaneously deserialized by 125\n\t// peers.  Thus, the peak usage of the free list is 12,500 * 512 =\n\t// 6,400,000 bytes.\n\tfreeListMaxItems = 12500\n)\n\n// scriptFreeList defines a free list of byte slices (up to the maximum number\n// defined by the freeListMaxItems constant) that have a cap according to the\n// freeListMaxScriptSize constant.  It is used to provide temporary buffers for\n// deserializing scripts in order to greatly reduce the number of allocations\n// required.\n//\n// The caller can obtain a buffer from the free list by calling the Borrow\n// function and should return it via the Return function when done using it.\ntype scriptFreeList chan []byte\n\n// Borrow returns a byte slice from the free list with a length according the\n// provided size.  A new buffer is allocated if there are any items available.\n//\n// When the size is larger than the max size allowed for items on the free list\n// a new buffer of the appropriate size is allocated and returned.  It is safe\n// to attempt to return said buffer via the Return function as it will be\n// ignored and allowed to go the garbage collector.\nfunc (c scriptFreeList) Borrow(size uint64) []byte {\n\tif size > freeListMaxScriptSize {\n\t\treturn make([]byte, size)\n\t}\n\n\tvar buf []byte\n\tselect {\n\tcase buf = <-c:\n\tdefault:\n\t\tbuf = make([]byte, freeListMaxScriptSize)\n\t}\n\treturn buf[:size]\n}\n\n// Return puts the provided byte slice back on the free list when it has a cap\n// of the expected length.  The buffer is expected to have been obtained via\n// the Borrow function.  Any slices that are not of the appropriate size, such\n// as those whose size is greater than the largest allowed free list item size\n// are simply ignored so they can go to the garbage collector.\nfunc (c scriptFreeList) Return(buf []byte) {\n\t// Ignore any buffers returned that aren't the expected size for the\n\t// free list.\n\tif cap(buf) != freeListMaxScriptSize {\n\t\treturn\n\t}\n\n\t// Return the buffer to the free list when it's not full.  Otherwise let\n\t// it be garbage collected.\n\tselect {\n\tcase c <- buf:\n\tdefault:\n\t\t// Let it go to the garbage collector.\n\t}\n}\n\n// Create the concurrent safe free list to use for script deserialization.  As\n// previously described, this free list is maintained to significantly reduce\n// the number of allocations.\nvar scriptPool scriptFreeList = make(chan []byte, freeListMaxItems)\n\n// OutPoint defines a bitcoin data type that is used to track previous\n// transaction outputs.\ntype OutPoint struct {\n\tHash  chainhash.Hash\n\tIndex uint32\n}\n\n// NewOutPoint returns a new bitcoin transaction outpoint point with the\n// provided hash and index.\nfunc NewOutPoint(hash *chainhash.Hash, index uint32) *OutPoint {\n\treturn &OutPoint{\n\t\tHash:  *hash,\n\t\tIndex: index,\n\t}\n}\n\n// String returns the OutPoint in the human-readable form \"hash:index\".\nfunc (o OutPoint) String() string {\n\t// Allocate enough for hash string, colon, and 10 digits.  Although\n\t// at the time of writing, the number of digits can be no greater than\n\t// the length of the decimal representation of maxTxOutPerMessage, the\n\t// maximum message payload may increase in the future and this\n\t// optimization may go unnoticed, so allocate space for 10 decimal\n\t// digits, which will fit any uint32.\n\tbuf := make([]byte, 2*chainhash.HashSize+1, 2*chainhash.HashSize+1+10)\n\tcopy(buf, o.Hash.String())\n\tbuf[2*chainhash.HashSize] = ':'\n\tbuf = strconv.AppendUint(buf, uint64(o.Index), 10)\n\treturn string(buf)\n}\n\n// TxIn defines a bitcoin transaction input.\ntype TxIn struct {\n\tPreviousOutPoint OutPoint\n\tSignatureScript  []byte\n\tSequence         uint32\n}\n\n// SerializeSize returns the number of bytes it would take to serialize the\n// the transaction input.\nfunc (t *TxIn) SerializeSize() int {\n\t// Outpoint Hash 32 bytes + Outpoint Index 4 bytes + Sequence 4 bytes +\n\t// serialized varint size for the length of SignatureScript +\n\t// SignatureScript bytes.\n\treturn 40 + VarIntSerializeSize(uint64(len(t.SignatureScript))) +\n\t\tlen(t.SignatureScript)\n}\n\n// NewTxIn returns a new bitcoin transaction input with the provided\n// previous outpoint point and signature script with a default sequence of\n// MaxTxInSequenceNum.\nfunc NewTxIn(prevOut *OutPoint, signatureScript []byte) *TxIn {\n\treturn &TxIn{\n\t\tPreviousOutPoint: *prevOut,\n\t\tSignatureScript:  signatureScript,\n\t\tSequence:         MaxTxInSequenceNum,\n\t}\n}\n\n// TxOut defines a bitcoin transaction output.\ntype TxOut struct {\n\tValue    int64\n\tPkScript []byte\n}\n\n// SerializeSize returns the number of bytes it would take to serialize the\n// the transaction output.\nfunc (t *TxOut) SerializeSize() int {\n\t// Value 8 bytes + serialized varint size for the length of PkScript +\n\t// PkScript bytes.\n\treturn 8 + VarIntSerializeSize(uint64(len(t.PkScript))) + len(t.PkScript)\n}\n\n// NewTxOut returns a new bitcoin transaction output with the provided\n// transaction value and public key script.\nfunc NewTxOut(value int64, pkScript []byte) *TxOut {\n\treturn &TxOut{\n\t\tValue:    value,\n\t\tPkScript: pkScript,\n\t}\n}\n\n// MsgTx implements the Message interface and represents a bitcoin tx message.\n// It is used to deliver transaction information in response to a getdata\n// message (MsgGetData) for a given transaction.\n//\n// Use the AddTxIn and AddTxOut functions to build up the list of transaction\n// inputs and outputs.\ntype MsgTx struct {\n\tVersion  int32\n\tTxIn     []*TxIn\n\tTxOut    []*TxOut\n\tLockTime uint32\n}\n\n// AddTxIn adds a transaction input to the message.\nfunc (msg *MsgTx) AddTxIn(ti *TxIn) {\n\tmsg.TxIn = append(msg.TxIn, ti)\n}\n\n// AddTxOut adds a transaction output to the message.\nfunc (msg *MsgTx) AddTxOut(to *TxOut) {\n\tmsg.TxOut = append(msg.TxOut, to)\n}\n\n// TxHash generates the Hash for the transaction.\nfunc (msg *MsgTx) TxHash() chainhash.Hash {\n\t// Encode the transaction and calculate double sha256 on the result.\n\t// Ignore the error returns since the only way the encode could fail\n\t// is being out of memory or due to nil pointers, both of which would\n\t// cause a run-time panic.\n\tbuf := bytes.NewBuffer(make([]byte, 0, msg.SerializeSize()))\n\t_ = msg.Serialize(buf)\n\treturn chainhash.DoubleHashH(buf.Bytes())\n}\n\n// Copy creates a deep copy of a transaction so that the original does not get\n// modified when the copy is manipulated.\nfunc (msg *MsgTx) Copy() *MsgTx {\n\t// Create new tx and start by copying primitive values and making space\n\t// for the transaction inputs and outputs.\n\tnewTx := MsgTx{\n\t\tVersion:  msg.Version,\n\t\tTxIn:     make([]*TxIn, 0, len(msg.TxIn)),\n\t\tTxOut:    make([]*TxOut, 0, len(msg.TxOut)),\n\t\tLockTime: msg.LockTime,\n\t}\n\n\t// Deep copy the old TxIn data.\n\tfor _, oldTxIn := range msg.TxIn {\n\t\t// Deep copy the old previous outpoint.\n\t\toldOutPoint := oldTxIn.PreviousOutPoint\n\t\tnewOutPoint := OutPoint{}\n\t\tnewOutPoint.Hash.SetBytes(oldOutPoint.Hash[:])\n\t\tnewOutPoint.Index = oldOutPoint.Index\n\n\t\t// Deep copy the old signature script.\n\t\tvar newScript []byte\n\t\toldScript := oldTxIn.SignatureScript\n\t\toldScriptLen := len(oldScript)\n\t\tif oldScriptLen > 0 {\n\t\t\tnewScript = make([]byte, oldScriptLen)\n\t\t\tcopy(newScript, oldScript[:oldScriptLen])\n\t\t}\n\n\t\t// Create new txIn with the deep copied data.\n\t\tnewTxIn := TxIn{\n\t\t\tPreviousOutPoint: newOutPoint,\n\t\t\tSignatureScript:  newScript,\n\t\t\tSequence:         oldTxIn.Sequence,\n\t\t}\n\n\t\t// Finally, append this fully copied txin.\n\t\tnewTx.TxIn = append(newTx.TxIn, &newTxIn)\n\t}\n\n\t// Deep copy the old TxOut data.\n\tfor _, oldTxOut := range msg.TxOut {\n\t\t// Deep copy the old PkScript\n\t\tvar newScript []byte\n\t\toldScript := oldTxOut.PkScript\n\t\toldScriptLen := len(oldScript)\n\t\tif oldScriptLen > 0 {\n\t\t\tnewScript = make([]byte, oldScriptLen)\n\t\t\tcopy(newScript, oldScript[:oldScriptLen])\n\t\t}\n\n\t\t// Create new txOut with the deep copied data and append it to\n\t\t// new Tx.\n\t\tnewTxOut := TxOut{\n\t\t\tValue:    oldTxOut.Value,\n\t\t\tPkScript: newScript,\n\t\t}\n\t\tnewTx.TxOut = append(newTx.TxOut, &newTxOut)\n\t}\n\n\treturn &newTx\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\n// See Deserialize for decoding transactions stored to disk, such as in a\n// database, as opposed to decoding transactions from the wire.\nfunc (msg *MsgTx) BtcDecode(r io.Reader, pver uint32) error {\n\tversion, err := binarySerializer.Uint32(r, littleEndian)\n\tif err != nil {\n\t\treturn err\n\t}\n\tmsg.Version = int32(version)\n\n\tcount, err := ReadVarInt(r, pver)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Prevent more input transactions than could possibly fit into a\n\t// message.  It would be possible to cause memory exhaustion and panics\n\t// without a sane upper bound on this count.\n\tif count > uint64(maxTxInPerMessage) {\n\t\tstr := fmt.Sprintf(\"too many input transactions to fit into \"+\n\t\t\t\"max message size [count %d, max %d]\", count,\n\t\t\tmaxTxInPerMessage)\n\t\treturn messageError(\"MsgTx.BtcDecode\", str)\n\t}\n\n\t// returnScriptBuffers is a closure that returns any script buffers that\n\t// were borrowed from the pool when there are any deserialization\n\t// errors.  This is only valid to call before the final step which\n\t// replaces the scripts with the location in a contiguous buffer and\n\t// returns them.\n\treturnScriptBuffers := func() {\n\t\tfor _, txIn := range msg.TxIn {\n\t\t\tif txIn == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif txIn.SignatureScript != nil {\n\t\t\t\tscriptPool.Return(txIn.SignatureScript)\n\t\t\t}\n\t\t}\n\t\tfor _, txOut := range msg.TxOut {\n\t\t\tif txOut == nil || txOut.PkScript == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tscriptPool.Return(txOut.PkScript)\n\t\t}\n\t}\n\n\t// Deserialize the inputs.\n\tvar totalScriptSize uint64\n\ttxIns := make([]TxIn, count)\n\tmsg.TxIn = make([]*TxIn, count)\n\tfor i := uint64(0); i < count; i++ {\n\t\t// The pointer is set now in case a script buffer is borrowed\n\t\t// and needs to be returned to the pool on error.\n\t\tti := &txIns[i]\n\t\tmsg.TxIn[i] = ti\n\t\terr = readTxIn(r, pver, msg.Version, ti)\n\t\tif err != nil {\n\t\t\treturnScriptBuffers()\n\t\t\treturn err\n\t\t}\n\t\ttotalScriptSize += uint64(len(ti.SignatureScript))\n\t}\n\n\tcount, err = ReadVarInt(r, pver)\n\tif err != nil {\n\t\treturnScriptBuffers()\n\t\treturn err\n\t}\n\n\t// Prevent more output transactions than could possibly fit into a\n\t// message.  It would be possible to cause memory exhaustion and panics\n\t// without a sane upper bound on this count.\n\tif count > uint64(maxTxOutPerMessage) {\n\t\treturnScriptBuffers()\n\t\tstr := fmt.Sprintf(\"too many output transactions to fit into \"+\n\t\t\t\"max message size [count %d, max %d]\", count,\n\t\t\tmaxTxOutPerMessage)\n\t\treturn messageError(\"MsgTx.BtcDecode\", str)\n\t}\n\n\t// Deserialize the outputs.\n\ttxOuts := make([]TxOut, count)\n\tmsg.TxOut = make([]*TxOut, count)\n\tfor i := uint64(0); i < count; i++ {\n\t\t// The pointer is set now in case a script buffer is borrowed\n\t\t// and needs to be returned to the pool on error.\n\t\tto := &txOuts[i]\n\t\tmsg.TxOut[i] = to\n\t\terr = readTxOut(r, pver, msg.Version, to)\n\t\tif err != nil {\n\t\t\treturnScriptBuffers()\n\t\t\treturn err\n\t\t}\n\t\ttotalScriptSize += uint64(len(to.PkScript))\n\t}\n\n\tmsg.LockTime, err = binarySerializer.Uint32(r, littleEndian)\n\tif err != nil {\n\t\treturnScriptBuffers()\n\t\treturn err\n\t}\n\n\t// Create a single allocation to house all of the scripts and set each\n\t// input signature script and output public key script to the\n\t// appropriate subslice of the overall contiguous buffer.  Then, return\n\t// each individual script buffer back to the pool so they can be reused\n\t// for future deserializations.  This is done because it significantly\n\t// reduces the number of allocations the garbage collector needs to\n\t// track, which in turn improves performance and drastically reduces the\n\t// amount of runtime overhead that would otherwise be needed to keep\n\t// track of millions of small allocations.\n\t//\n\t// NOTE: It is no longer valid to call the returnScriptBuffers closure\n\t// after these blocks of code run because it is already done and the\n\t// scripts in the transaction inputs and outputs no longer point to the\n\t// buffers.\n\tvar offset uint64\n\tscripts := make([]byte, totalScriptSize)\n\tfor i := 0; i < len(msg.TxIn); i++ {\n\t\t// Copy the signature script into the contiguous buffer at the\n\t\t// appropriate offset.\n\t\tsignatureScript := msg.TxIn[i].SignatureScript\n\t\tcopy(scripts[offset:], signatureScript)\n\n\t\t// Reset the signature script of the transaction input to the\n\t\t// slice of the contiguous buffer where the script lives.\n\t\tscriptSize := uint64(len(signatureScript))\n\t\tend := offset + scriptSize\n\t\tmsg.TxIn[i].SignatureScript = scripts[offset:end:end]\n\t\toffset += scriptSize\n\n\t\t// Return the temporary script buffer to the pool.\n\t\tscriptPool.Return(signatureScript)\n\t}\n\n\tfor i := 0; i < len(msg.TxOut); i++ {\n\t\t// Copy the public key script into the contiguous buffer at the\n\t\t// appropriate offset.\n\t\tpkScript := msg.TxOut[i].PkScript\n\t\tcopy(scripts[offset:], pkScript)\n\n\t\t// Reset the public key script of the transaction output to the\n\t\t// slice of the contiguous buffer where the script lives.\n\t\tscriptSize := uint64(len(pkScript))\n\t\tend := offset + scriptSize\n\t\tmsg.TxOut[i].PkScript = scripts[offset:end:end]\n\t\toffset += scriptSize\n\n\t\t// Return the temporary script buffer to the pool.\n\t\tscriptPool.Return(pkScript)\n\t}\n\n\treturn nil\n}\n\n// Deserialize decodes a transaction from r into the receiver using a format\n// that is suitable for long-term storage such as a database while respecting\n// the Version field in the transaction.  This function differs from BtcDecode\n// in that BtcDecode decodes from the bitcoin wire protocol as it was sent\n// across the network.  The wire encoding can technically differ depending on\n// the protocol version and doesn't even really need to match the format of a\n// stored transaction at all.  As of the time this comment was written, the\n// encoded transaction is the same in both instances, but there is a distinct\n// difference and separating the two allows the API to be flexible enough to\n// deal with changes.\nfunc (msg *MsgTx) Deserialize(r io.Reader) error {\n\t// At the current time, there is no difference between the wire encoding\n\t// at protocol version 0 and the stable long-term storage format.  As\n\t// a result, make use of BtcDecode.\n\treturn msg.BtcDecode(r, 0)\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\n// See Serialize for encoding transactions to be stored to disk, such as in a\n// database, as opposed to encoding transactions for the wire.\nfunc (msg *MsgTx) BtcEncode(w io.Writer, pver uint32) error {\n\terr := binarySerializer.PutUint32(w, littleEndian, uint32(msg.Version))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tcount := uint64(len(msg.TxIn))\n\terr = WriteVarInt(w, pver, count)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, ti := range msg.TxIn {\n\t\terr = writeTxIn(w, pver, msg.Version, ti)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tcount = uint64(len(msg.TxOut))\n\terr = WriteVarInt(w, pver, count)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, to := range msg.TxOut {\n\t\terr = WriteTxOut(w, pver, msg.Version, to)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn binarySerializer.PutUint32(w, littleEndian, msg.LockTime)\n}\n\n// Serialize encodes the transaction to w using a format that suitable for\n// long-term storage such as a database while respecting the Version field in\n// the transaction.  This function differs from BtcEncode in that BtcEncode\n// encodes the transaction to the bitcoin wire protocol in order to be sent\n// across the network.  The wire encoding can technically differ depending on\n// the protocol version and doesn't even really need to match the format of a\n// stored transaction at all.  As of the time this comment was written, the\n// encoded transaction is the same in both instances, but there is a distinct\n// difference and separating the two allows the API to be flexible enough to\n// deal with changes.\nfunc (msg *MsgTx) Serialize(w io.Writer) error {\n\t// At the current time, there is no difference between the wire encoding\n\t// at protocol version 0 and the stable long-term storage format.  As\n\t// a result, make use of BtcEncode.\n\treturn msg.BtcEncode(w, 0)\n}\n\n// SerializeSize returns the serialized size of the transaction.\nfunc (msg *MsgTx) SerializeSize() int {\n\t// Version 4 bytes + LockTime 4 bytes + Serialized varint size for the\n\t// number of transaction inputs and outputs.\n\tn := 8 + VarIntSerializeSize(uint64(len(msg.TxIn))) +\n\t\tVarIntSerializeSize(uint64(len(msg.TxOut)))\n\n\tfor _, txIn := range msg.TxIn {\n\t\tn += txIn.SerializeSize()\n\t}\n\n\tfor _, txOut := range msg.TxOut {\n\t\tn += txOut.SerializeSize()\n\t}\n\n\treturn n\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgTx) Command() string {\n\treturn CmdTx\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgTx) MaxPayloadLength(pver uint32) uint32 {\n\treturn MaxBlockPayload\n}\n\n// PkScriptLocs returns a slice containing the start of each public key script\n// within the raw serialized transaction.  The caller can easily obtain the\n// length of each script by using len on the script available via the\n// appropriate transaction output entry.\nfunc (msg *MsgTx) PkScriptLocs() []int {\n\tnumTxOut := len(msg.TxOut)\n\tif numTxOut == 0 {\n\t\treturn nil\n\t}\n\n\t// The starting offset in the serialized transaction of the first\n\t// transaction output is:\n\t//\n\t// Version 4 bytes + serialized varint size for the number of\n\t// transaction inputs and outputs + serialized size of each transaction\n\t// input.\n\tn := 4 + VarIntSerializeSize(uint64(len(msg.TxIn))) +\n\t\tVarIntSerializeSize(uint64(numTxOut))\n\n\tfor _, txIn := range msg.TxIn {\n\t\tn += txIn.SerializeSize()\n\t}\n\n\t// Calculate and set the appropriate offset for each public key script.\n\tpkScriptLocs := make([]int, numTxOut)\n\tfor i, txOut := range msg.TxOut {\n\t\t// The offset of the script in the transaction output is:\n\t\t//\n\t\t// Value 8 bytes + serialized varint size for the length of\n\t\t// PkScript.\n\t\tn += 8 + VarIntSerializeSize(uint64(len(txOut.PkScript)))\n\t\tpkScriptLocs[i] = n\n\t\tn += len(txOut.PkScript)\n\t}\n\n\treturn pkScriptLocs\n}\n\n// NewMsgTx returns a new bitcoin tx message that conforms to the Message\n// interface.  The return instance has a default version of TxVersion and there\n// are no transaction inputs or outputs.  Also, the lock time is set to zero\n// to indicate the transaction is valid immediately as opposed to some time in\n// future.\nfunc NewMsgTx(version int32) *MsgTx {\n\treturn &MsgTx{\n\t\tVersion: version,\n\t\tTxIn:    make([]*TxIn, 0, defaultTxInOutAlloc),\n\t\tTxOut:   make([]*TxOut, 0, defaultTxInOutAlloc),\n\t}\n}\n\n// readOutPoint reads the next sequence of bytes from r as an OutPoint.\nfunc readOutPoint(r io.Reader, pver uint32, version int32, op *OutPoint) error {\n\t_, err := io.ReadFull(r, op.Hash[:])\n\tif err != nil {\n\t\treturn err\n\t}\n\n\top.Index, err = binarySerializer.Uint32(r, littleEndian)\n\treturn err\n}\n\n// writeOutPoint encodes op to the bitcoin protocol encoding for an OutPoint\n// to w.\nfunc writeOutPoint(w io.Writer, pver uint32, version int32, op *OutPoint) error {\n\t_, err := w.Write(op.Hash[:])\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn binarySerializer.PutUint32(w, littleEndian, op.Index)\n}\n\n// readScript reads a variable length byte array that represents a transaction\n// script.  It is encoded as a varInt containing the length of the array\n// followed by the bytes themselves.  An error is returned if the length is\n// greater than the passed maxAllowed parameter which helps protect against\n// memory exhaustion attacks and forced panics through malformed messages.  The\n// fieldName parameter is only used for the error message so it provides more\n// context in the error.\nfunc readScript(r io.Reader, pver uint32, maxAllowed uint32, fieldName string) ([]byte, error) {\n\tcount, err := ReadVarInt(r, pver)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Prevent byte array larger than the max message size.  It would\n\t// be possible to cause memory exhaustion and panics without a sane\n\t// upper bound on this count.\n\tif count > uint64(maxAllowed) {\n\t\tstr := fmt.Sprintf(\"%s is larger than the max allowed size \"+\n\t\t\t\"[count %d, max %d]\", fieldName, count, maxAllowed)\n\t\treturn nil, messageError(\"readScript\", str)\n\t}\n\n\tb := scriptPool.Borrow(count)\n\t_, err = io.ReadFull(r, b)\n\tif err != nil {\n\t\tscriptPool.Return(b)\n\t\treturn nil, err\n\t}\n\treturn b, nil\n}\n\n// readTxIn reads the next sequence of bytes from r as a transaction input\n// (TxIn).\nfunc readTxIn(r io.Reader, pver uint32, version int32, ti *TxIn) error {\n\terr := readOutPoint(r, pver, version, &ti.PreviousOutPoint)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tti.SignatureScript, err = readScript(r, pver, MaxMessagePayload,\n\t\t\"transaction input signature script\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn readElement(r, &ti.Sequence)\n}\n\n// writeTxIn encodes ti to the bitcoin protocol encoding for a transaction\n// input (TxIn) to w.\nfunc writeTxIn(w io.Writer, pver uint32, version int32, ti *TxIn) error {\n\terr := writeOutPoint(w, pver, version, &ti.PreviousOutPoint)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = WriteVarBytes(w, pver, ti.SignatureScript)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn binarySerializer.PutUint32(w, littleEndian, ti.Sequence)\n}\n\n// readTxOut reads the next sequence of bytes from r as a transaction output\n// (TxOut).\nfunc readTxOut(r io.Reader, pver uint32, version int32, to *TxOut) error {\n\terr := readElement(r, &to.Value)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tto.PkScript, err = readScript(r, pver, MaxMessagePayload,\n\t\t\"transaction output public key script\")\n\treturn err\n}\n\n// WriteTxOut encodes to into the bitcoin protocol encoding for a transaction\n// output (TxOut) to w.\nfunc WriteTxOut(w io.Writer, pver uint32, version int32, to *TxOut) error {\n\terr := binarySerializer.PutUint64(w, littleEndian, uint64(to.Value))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn WriteVarBytes(w, pver, to.PkScript)\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/msgverack.go",
    "content": "// Copyright (c) 2013-2015 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"io\"\n)\n\n// MsgVerAck defines a bitcoin verack message which is used for a peer to\n// acknowledge a version message (MsgVersion) after it has used the information\n// to negotiate parameters.  It implements the Message interface.\n//\n// This message has no payload.\ntype MsgVerAck struct{}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgVerAck) BtcDecode(r io.Reader, pver uint32) error {\n\treturn nil\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgVerAck) BtcEncode(w io.Writer, pver uint32) error {\n\treturn nil\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgVerAck) Command() string {\n\treturn CmdVerAck\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgVerAck) MaxPayloadLength(pver uint32) uint32 {\n\treturn 0\n}\n\n// NewMsgVerAck returns a new bitcoin verack message that conforms to the\n// Message interface.\nfunc NewMsgVerAck() *MsgVerAck {\n\treturn &MsgVerAck{}\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/msgversion.go",
    "content": "// Copyright (c) 2013-2016 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"strings\"\n\t\"time\"\n)\n\n// MaxUserAgentLen is the maximum allowed length for the user agent field in a\n// version message (MsgVersion).\nconst MaxUserAgentLen = 256\n\n// DefaultUserAgent for wire in the stack\nconst DefaultUserAgent = \"/bcext/\"\n\n// MsgVersion implements the Message interface and represents a bitcoin version\n// message.  It is used for a peer to advertise itself as soon as an outbound\n// connection is made.  The remote peer then uses this information along with\n// its own to negotiate.  The remote peer must then respond with a version\n// message of its own containing the negotiated values followed by a verack\n// message (MsgVerAck).  This exchange must take place before any further\n// communication is allowed to proceed.\ntype MsgVersion struct {\n\t// Version of the protocol the node is using.\n\tProtocolVersion int32\n\n\t// Bitfield which identifies the enabled services.\n\tServices ServiceFlag\n\n\t// Time the message was generated.  This is encoded as an int64 on the wire.\n\tTimestamp time.Time\n\n\t// Address of the remote peer.\n\tAddrYou NetAddress\n\n\t// Address of the local peer.\n\tAddrMe NetAddress\n\n\t// Unique value associated with message that is used to detect self\n\t// connections.\n\tNonce uint64\n\n\t// The user agent that generated messsage.  This is a encoded as a varString\n\t// on the wire.  This has a max length of MaxUserAgentLen.\n\tUserAgent string\n\n\t// Last block seen by the generator of the version message.\n\tLastBlock int32\n\n\t// Don't announce transactions to peer.\n\tDisableRelayTx bool\n}\n\n// HasService returns whether the specified service is supported by the peer\n// that generated the message.\nfunc (msg *MsgVersion) HasService(service ServiceFlag) bool {\n\treturn msg.Services&service == service\n}\n\n// AddService adds service as a supported service by the peer generating the\n// message.\nfunc (msg *MsgVersion) AddService(service ServiceFlag) {\n\tmsg.Services |= service\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// The version message is special in that the protocol version hasn't been\n// negotiated yet.  As a result, the pver field is ignored and any fields which\n// are added in new versions are optional.  This also mean that r must be a\n// *bytes.Buffer so the number of remaining bytes can be ascertained.\n//\n// This is part of the Message interface implementation.\nfunc (msg *MsgVersion) BtcDecode(r io.Reader, pver uint32) error {\n\tbuf, ok := r.(*bytes.Buffer)\n\tif !ok {\n\t\treturn fmt.Errorf(\"MsgVersion.BtcDecode reader is not a \" +\n\t\t\t\"*bytes.Buffer\")\n\t}\n\n\terr := readElements(buf, &msg.ProtocolVersion, &msg.Services,\n\t\t(*int64Time)(&msg.Timestamp))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = readNetAddress(buf, pver, &msg.AddrYou, false)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Protocol versions >= 106 added a from address, nonce, and user agent\n\t// field and they are only considered present if there are bytes\n\t// remaining in the message.\n\tif buf.Len() > 0 {\n\t\terr = readNetAddress(buf, pver, &msg.AddrMe, false)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif buf.Len() > 0 {\n\t\terr = readElement(buf, &msg.Nonce)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif buf.Len() > 0 {\n\t\tuserAgent, err := ReadVarString(buf, pver)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\terr = validateUserAgent(userAgent)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmsg.UserAgent = userAgent\n\t}\n\n\t// Protocol versions >= 209 added a last known block field.  It is only\n\t// considered present if there are bytes remaining in the message.\n\tif buf.Len() > 0 {\n\t\terr = readElement(buf, &msg.LastBlock)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// There was no relay transactions field before BIP0037Version, but\n\t// the default behavior prior to the addition of the field was to always\n\t// relay transactions.\n\tif buf.Len() > 0 {\n\t\t// It's safe to ignore the error here since the buffer has at\n\t\t// least one byte and that byte will result in a boolean value\n\t\t// regardless of its value.  Also, the wire encoding for the\n\t\t// field is true when transactions should be relayed, so reverse\n\t\t// it for the DisableRelayTx field.\n\t\tvar relayTx bool\n\t\treadElement(r, &relayTx)\n\t\tmsg.DisableRelayTx = !relayTx\n\t}\n\n\treturn nil\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgVersion) BtcEncode(w io.Writer, pver uint32) error {\n\terr := validateUserAgent(msg.UserAgent)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = writeElements(w, msg.ProtocolVersion, msg.Services,\n\t\tmsg.Timestamp.Unix())\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = writeNetAddress(w, pver, &msg.AddrYou, false)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = writeNetAddress(w, pver, &msg.AddrMe, false)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = writeElement(w, msg.Nonce)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = WriteVarString(w, pver, msg.UserAgent)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = writeElement(w, msg.LastBlock)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// There was no relay transactions field before BIP0037Version.  Also,\n\t// the wire encoding for the field is true when transactions should be\n\t// relayed, so reverse it from the DisableRelayTx field.\n\tif pver >= BIP0037Version {\n\t\terr = writeElement(w, !msg.DisableRelayTx)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgVersion) Command() string {\n\treturn CmdVersion\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgVersion) MaxPayloadLength(pver uint32) uint32 {\n\t// XXX: <= 106 different\n\n\t// Protocol version 4 bytes + services 8 bytes + timestamp 8 bytes +\n\t// remote and local net addresses + nonce 8 bytes + length of user\n\t// agent (varInt) + max allowed useragent length + last block 4 bytes +\n\t// relay transactions flag 1 byte.\n\treturn 33 + (maxNetAddressPayload(pver) * 2) + MaxVarIntPayload +\n\t\tMaxUserAgentLen\n}\n\n// NewMsgVersion returns a new bitcoin version message that conforms to the\n// Message interface using the passed parameters and defaults for the remaining\n// fields.\nfunc NewMsgVersion(me *NetAddress, you *NetAddress, nonce uint64,\n\tlastBlock int32) *MsgVersion {\n\n\t// Limit the timestamp to one second precision since the protocol\n\t// doesn't support better.\n\treturn &MsgVersion{\n\t\tProtocolVersion: int32(ProtocolVersion),\n\t\tServices:        0,\n\t\tTimestamp:       time.Unix(time.Now().Unix(), 0),\n\t\tAddrYou:         *you,\n\t\tAddrMe:          *me,\n\t\tNonce:           nonce,\n\t\tUserAgent:       DefaultUserAgent,\n\t\tLastBlock:       lastBlock,\n\t\tDisableRelayTx:  false,\n\t}\n}\n\n// validateUserAgent checks userAgent length against MaxUserAgentLen\nfunc validateUserAgent(userAgent string) error {\n\tif len(userAgent) > MaxUserAgentLen {\n\t\tstr := fmt.Sprintf(\"user agent too long [len %v, max %v]\",\n\t\t\tlen(userAgent), MaxUserAgentLen)\n\t\treturn messageError(\"MsgVersion\", str)\n\t}\n\treturn nil\n}\n\n// AddUserAgent adds a user agent to the user agent string for the version\n// message.  The version string is not defined to any strict format, although\n// it is recommended to use the form \"major.minor.revision\" e.g. \"2.6.41\".\nfunc (msg *MsgVersion) AddUserAgent(name string, version string,\n\tcomments ...string) error {\n\n\tnewUserAgent := fmt.Sprintf(\"%s:%s\", name, version)\n\tif len(comments) != 0 {\n\t\tnewUserAgent = fmt.Sprintf(\"%s(%s)\", newUserAgent,\n\t\t\tstrings.Join(comments, \"; \"))\n\t}\n\tnewUserAgent = fmt.Sprintf(\"%s%s/\", msg.UserAgent, newUserAgent)\n\terr := validateUserAgent(newUserAgent)\n\tif err != nil {\n\t\treturn err\n\t}\n\tmsg.UserAgent = newUserAgent\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/netaddress.go",
    "content": "// Copyright (c) 2013-2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"encoding/binary\"\n\t\"io\"\n\t\"net\"\n\t\"time\"\n)\n\n// maxNetAddressPayload returns the max payload size for a bitcoin NetAddress\n// based on the protocol version.\nfunc maxNetAddressPayload(pver uint32) uint32 {\n\t// Services 8 bytes + ip 16 bytes + port 2 bytes.\n\tplen := uint32(26)\n\n\t// NetAddressTimeVersion added a timestamp field.\n\tif pver >= NetAddressTimeVersion {\n\t\t// Timestamp 4 bytes.\n\t\tplen += 4\n\t}\n\n\treturn plen\n}\n\n// NetAddress defines information about a peer on the network including the time\n// it was last seen, the services it supports, its IP address, and port.\ntype NetAddress struct {\n\t// Last time the address was seen.  This is, unfortunately, encoded as a\n\t// uint32 on the wire and therefore is limited to 2106.  This field is\n\t// not present in the bitcoin version message (MsgVersion) nor was it\n\t// added until protocol version >= NetAddressTimeVersion.\n\tTimestamp time.Time\n\n\t// Bitfield which identifies the services supported by the address.\n\tServices ServiceFlag\n\n\t// IP address of the peer.\n\tIP net.IP\n\n\t// Port the peer is using.  This is encoded in big endian on the wire\n\t// which differs from most everything else.\n\tPort uint16\n}\n\n// HasService returns whether the specified service is supported by the address.\nfunc (na *NetAddress) HasService(service ServiceFlag) bool {\n\treturn na.Services&service == service\n}\n\n// AddService adds service as a supported service by the peer generating the\n// message.\nfunc (na *NetAddress) AddService(service ServiceFlag) {\n\tna.Services |= service\n}\n\n// NewNetAddressIPPort returns a new NetAddress using the provided IP, port, and\n// supported services with defaults for the remaining fields.\nfunc NewNetAddressIPPort(ip net.IP, port uint16, services ServiceFlag) *NetAddress {\n\treturn NewNetAddressTimestamp(time.Now(), services, ip, port)\n}\n\n// NewNetAddressTimestamp returns a new NetAddress using the provided\n// timestamp, IP, port, and supported services. The timestamp is rounded to\n// single second precision.\nfunc NewNetAddressTimestamp(\n\ttimestamp time.Time, services ServiceFlag, ip net.IP, port uint16) *NetAddress {\n\t// Limit the timestamp to one second precision since the protocol\n\t// doesn't support better.\n\tna := NetAddress{\n\t\tTimestamp: time.Unix(timestamp.Unix(), 0),\n\t\tServices:  services,\n\t\tIP:        ip,\n\t\tPort:      port,\n\t}\n\treturn &na\n}\n\n// NewNetAddress returns a new NetAddress using the provided TCP address and\n// supported services with defaults for the remaining fields.\nfunc NewNetAddress(addr *net.TCPAddr, services ServiceFlag) *NetAddress {\n\treturn NewNetAddressIPPort(addr.IP, uint16(addr.Port), services)\n}\n\n// readNetAddress reads an encoded NetAddress from r depending on the protocol\n// version and whether or not the timestamp is included per ts.  Some messages\n// like version do not include the timestamp.\nfunc readNetAddress(r io.Reader, pver uint32, na *NetAddress, ts bool) error {\n\tvar ip [16]byte\n\n\t// NOTE: The bitcoin protocol uses a uint32 for the timestamp so it will\n\t// stop working somewhere around 2106.  Also timestamp wasn't added until\n\t// protocol version >= NetAddressTimeVersion\n\tif ts && pver >= NetAddressTimeVersion {\n\t\terr := readElement(r, (*uint32Time)(&na.Timestamp))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\terr := readElements(r, &na.Services, &ip)\n\tif err != nil {\n\t\treturn err\n\t}\n\t// Sigh.  Bitcoin protocol mixes little and big endian.\n\tport, err := binarySerializer.Uint16(r, bigEndian)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t*na = NetAddress{\n\t\tTimestamp: na.Timestamp,\n\t\tServices:  na.Services,\n\t\tIP:        net.IP(ip[:]),\n\t\tPort:      port,\n\t}\n\treturn nil\n}\n\n// writeNetAddress serializes a NetAddress to w depending on the protocol\n// version and whether or not the timestamp is included per ts.  Some messages\n// like version do not include the timestamp.\nfunc writeNetAddress(w io.Writer, pver uint32, na *NetAddress, ts bool) error {\n\t// NOTE: The bitcoin protocol uses a uint32 for the timestamp so it will\n\t// stop working somewhere around 2106.  Also timestamp wasn't added until\n\t// until protocol version >= NetAddressTimeVersion.\n\tif ts && pver >= NetAddressTimeVersion {\n\t\terr := writeElement(w, uint32(na.Timestamp.Unix()))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Ensure to always write 16 bytes even if the ip is nil.\n\tvar ip [16]byte\n\tif na.IP != nil {\n\t\tcopy(ip[:], na.IP.To16())\n\t}\n\terr := writeElements(w, na.Services, ip)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Sigh.  Bitcoin protocol mixes little and big endian.\n\treturn binary.Write(w, bigEndian, na.Port)\n}\n"
  },
  {
    "path": "vendor/github.com/bcext/gcash/wire/protocol.go",
    "content": "// Copyright (c) 2013-2016 The btcsuite developers\n// Copyright (c) 2018 The bcext developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// XXX pedro: we will probably need to bump this.\nconst (\n\t// ProtocolVersion is the latest protocol version this package supports. checked\n\tProtocolVersion uint32 = 70015\n\n\t// MultipleAddressVersion is the protocol version which added multiple\n\t// addresses per message (pver >= MultipleAddressVersion).\n\tMultipleAddressVersion uint32 = 209\n\n\t// NetAddressTimeVersion is the protocol version which added the\n\t// timestamp field (pver >= NetAddressTimeVersion).\n\tNetAddressTimeVersion uint32 = 31402\n\n\t// BIP0031Version is the protocol version AFTER which a pong message\n\t// and nonce field in ping were added (pver > BIP0031Version).\n\tBIP0031Version uint32 = 60000\n\n\t// BIP0035Version is the protocol version which added the mempool\n\t// message (pver >= BIP0035Version).\n\tBIP0035Version uint32 = 60002\n\n\t// BIP0037Version is the protocol version which added new connection\n\t// bloom filtering related messages and extended the version message\n\t// with a relay flag (pver >= BIP0037Version).\n\tBIP0037Version uint32 = 70001\n\n\t// RejectVersion is the protocol version which added a new reject\n\t// message.\n\tRejectVersion uint32 = 70002\n\n\t// BIP0111Version is the protocol version which added the SFNodeBloom\n\t// service flag. checked\n\tBIP0111Version uint32 = 70011\n\n\t// SendHeadersVersion is the protocol version which added a new\n\t// sendheaders message. checked\n\tSendHeadersVersion uint32 = 70012\n\n\t// FeeFilterVersion is the protocol version which added a new\n\t// feefilter message. checked\n\tFeeFilterVersion uint32 = 70013\n)\n\n// ServiceFlag identifies services supported by a bitcoin peer.\ntype ServiceFlag uint64\n\nconst (\n\t// SFNodeNetwork is a flag used to indicate a peer is a full node.\n\tSFNodeNetwork ServiceFlag = 1 << iota\n\n\t// SFNodeGetUTXO is a flag used to indicate a peer supports the\n\t// getutxos and utxos commands (BIP0064).\n\tSFNodeGetUTXO\n\n\t// SFNodeBloom is a flag used to indicate a peer supports bloom\n\t// filtering.\n\tSFNodeBloom\n\n\t// SFNodeXthin is a flag used to indicate a peer supports xthin blocks.\n\tSFNodeXthin\n\n\t// SFNodeBitcoinCash means the node supports Bitcoin Cash and the\n\t// associated consensus rule changes.\n\t// This service bit is intended to be used prior until some time after the\n\t// UAHF activation when the Bitcoin Cash network has adequately separated.\n\t// TODO: remove (free up) the SFNodeBitcoinCash service bit once no longer\n\t// needed.\n\tSFNodeBitcoinCash\n\n\t// Bits 24-31 are reserved for temporary experiments. Just pick a bit that\n\t// isn't getting used, or one not being used much, and notify the\n\t// bitcoin-development mailing list. Remember that service bits are just\n\t// unauthenticated advertisements, so your code must be robust against\n\t// collisions and other cases where nodes may be advertising a service they\n\t// do not actually support. Other service bits should be allocated via the\n\t// BIP process.\n)\n\n// Map of service flags back to their constant names for pretty printing.\nvar sfStrings = map[ServiceFlag]string{\n\tSFNodeNetwork: \"SFNodeNetwork\",\n\tSFNodeGetUTXO: \"SFNodeGetUTXO\",\n\tSFNodeBloom:   \"SFNodeBloom\",\n\tSFNodeXthin:   \"SFNodeXthin\",\n}\n\n// orderedSFStrings is an ordered list of service flags from highest to\n// lowest.\nvar orderedSFStrings = []ServiceFlag{\n\tSFNodeNetwork,\n\tSFNodeGetUTXO,\n\tSFNodeBloom,\n\tSFNodeXthin,\n}\n\n// String returns the ServiceFlag in human-readable form.\nfunc (f ServiceFlag) String() string {\n\t// No flags are set.\n\tif f == 0 {\n\t\treturn \"0x0\"\n\t}\n\n\t// Add individual bit flags.\n\ts := \"\"\n\tfor _, flag := range orderedSFStrings {\n\t\tif f&flag == flag {\n\t\t\ts += sfStrings[flag] + \"|\"\n\t\t\tf -= flag\n\t\t}\n\t}\n\n\t// Add any remaining flags which aren't accounted for as hex.\n\ts = strings.TrimRight(s, \"|\")\n\tif f != 0 {\n\t\ts += \"|0x\" + strconv.FormatUint(uint64(f), 16)\n\t}\n\ts = strings.TrimLeft(s, \"|\")\n\treturn s\n}\n\n// BitcoinNet represents which bitcoin network a message belongs to.\ntype BitcoinNet uint32\n\n// Constants used to indicate the message bitcoin network.  They can also be\n// used to seek to the next message when a stream's state is unknown, but\n// this package does not provide that functionality since it's generally a\n// better idea to simply disconnect clients that are misbehaving over TCP.\nconst (\n\t// MainNet represents the main bitcoin network.\n\tMainNet BitcoinNet = 0xe8f3e1e3\n\n\t// TestNet represents the regression test network.\n\tTestNet BitcoinNet = 0xfabfb5da\n\n\t// TestNet3 represents the test network (version 3).\n\tTestNet3 BitcoinNet = 0xf4f3e5f4\n\n\t// SimNet represents the simulation test network.\n\tSimNet BitcoinNet = 0x12141c16\n)\n\n// bnStrings is a map of bitcoin networks back to their constant names for\n// pretty printing.\nvar bnStrings = map[BitcoinNet]string{\n\tMainNet:  \"MainNet\",\n\tTestNet:  \"TestNet\",\n\tTestNet3: \"TestNet3\",\n\tSimNet:   \"SimNet\",\n}\n\n// String returns the BitcoinNet in human-readable form.\nfunc (n BitcoinNet) String() string {\n\tif s, ok := bnStrings[n]; ok {\n\t\treturn s\n\t}\n\n\treturn fmt.Sprintf(\"Unknown BitcoinNet (%d)\", uint32(n))\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/LICENSE",
    "content": "ISC License\n\nCopyright (c) 2013-2017 The btcsuite developers\nCopyright (c) 2015-2016 The Decred developers\n\nPermission to use, copy, modify, and distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\nOR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/btcec/README.md",
    "content": "btcec\n=====\n\n[![Build Status](https://travis-ci.org/btcsuite/btcd.png?branch=master)](https://travis-ci.org/btcsuite/btcec)\n[![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org)\n[![GoDoc](https://godoc.org/github.com/btcsuite/btcd/btcec?status.png)](http://godoc.org/github.com/btcsuite/btcd/btcec)\n\nPackage btcec implements elliptic curve cryptography needed for working with\nBitcoin (secp256k1 only for now). It is designed so that it may be used with the\nstandard crypto/ecdsa packages provided with go.  A comprehensive suite of test\nis provided to ensure proper functionality.  Package btcec was originally based\non work from ThePiachu which is licensed under the same terms as Go, but it has\nsignficantly diverged since then.  The btcsuite developers original is licensed\nunder the liberal ISC license.\n\nAlthough this package was primarily written for btcd, it has intentionally been\ndesigned so it can be used as a standalone package for any projects needing to\nuse secp256k1 elliptic curve cryptography.\n\n## Installation and Updating\n\n```bash\n$ go get -u github.com/btcsuite/btcd/btcec\n```\n\n## Examples\n\n* [Sign Message](http://godoc.org/github.com/btcsuite/btcd/btcec#example-package--SignMessage)  \n  Demonstrates signing a message with a secp256k1 private key that is first\n  parsed form raw bytes and serializing the generated signature.\n\n* [Verify Signature](http://godoc.org/github.com/btcsuite/btcd/btcec#example-package--VerifySignature)  \n  Demonstrates verifying a secp256k1 signature against a public key that is\n  first parsed from raw bytes.  The signature is also parsed from raw bytes.\n\n* [Encryption](http://godoc.org/github.com/btcsuite/btcd/btcec#example-package--EncryptMessage)\n  Demonstrates encrypting a message for a public key that is first parsed from\n  raw bytes, then decrypting it using the corresponding private key.\n\n* [Decryption](http://godoc.org/github.com/btcsuite/btcd/btcec#example-package--DecryptMessage)\n  Demonstrates decrypting a message using a private key that is first parsed\n  from raw bytes.\n\n## GPG Verification Key\n\nAll official release tags are signed by Conformal so users can ensure the code\nhas not been tampered with and is coming from the btcsuite developers.  To\nverify the signature perform the following:\n\n- Download the public key from the Conformal website at\n  https://opensource.conformal.com/GIT-GPG-KEY-conformal.txt\n\n- Import the public key into your GPG keyring:\n  ```bash\n  gpg --import GIT-GPG-KEY-conformal.txt\n  ```\n\n- Verify the release tag with the following command where `TAG_NAME` is a\n  placeholder for the specific tag:\n  ```bash\n  git tag -v TAG_NAME\n  ```\n\n## License\n\nPackage btcec is licensed under the [copyfree](http://copyfree.org) ISC License\nexcept for btcec.go and btcec_test.go which is under the same license as Go.\n\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/btcec/btcec.go",
    "content": "// Copyright 2010 The Go Authors. All rights reserved.\n// Copyright 2011 ThePiachu. All rights reserved.\n// Copyright 2013-2014 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcec\n\n// References:\n//   [SECG]: Recommended Elliptic Curve Domain Parameters\n//     http://www.secg.org/sec2-v2.pdf\n//\n//   [GECC]: Guide to Elliptic Curve Cryptography (Hankerson, Menezes, Vanstone)\n\n// This package operates, internally, on Jacobian coordinates. For a given\n// (x, y) position on the curve, the Jacobian coordinates are (x1, y1, z1)\n// where x = x1/z1² and y = y1/z1³. The greatest speedups come when the whole\n// calculation can be performed within the transform (as in ScalarMult and\n// ScalarBaseMult). But even for Add and Double, it's faster to apply and\n// reverse the transform than to operate in affine coordinates.\n\nimport (\n\t\"crypto/elliptic\"\n\t\"math/big\"\n\t\"sync\"\n)\n\nvar (\n\t// fieldOne is simply the integer 1 in field representation.  It is\n\t// used to avoid needing to create it multiple times during the internal\n\t// arithmetic.\n\tfieldOne = new(fieldVal).SetInt(1)\n)\n\n// KoblitzCurve supports a koblitz curve implementation that fits the ECC Curve\n// interface from crypto/elliptic.\ntype KoblitzCurve struct {\n\t*elliptic.CurveParams\n\tq         *big.Int\n\tH         int      // cofactor of the curve.\n\thalfOrder *big.Int // half the order N\n\n\t// byteSize is simply the bit size / 8 and is provided for convenience\n\t// since it is calculated repeatedly.\n\tbyteSize int\n\n\t// bytePoints\n\tbytePoints *[32][256][3]fieldVal\n\n\t// The next 6 values are used specifically for endomorphism\n\t// optimizations in ScalarMult.\n\n\t// lambda must fulfill lambda^3 = 1 mod N where N is the order of G.\n\tlambda *big.Int\n\n\t// beta must fulfill beta^3 = 1 mod P where P is the prime field of the\n\t// curve.\n\tbeta *fieldVal\n\n\t// See the EndomorphismVectors in gensecp256k1.go to see how these are\n\t// derived.\n\ta1 *big.Int\n\tb1 *big.Int\n\ta2 *big.Int\n\tb2 *big.Int\n}\n\n// Params returns the parameters for the curve.\nfunc (curve *KoblitzCurve) Params() *elliptic.CurveParams {\n\treturn curve.CurveParams\n}\n\n// bigAffineToField takes an affine point (x, y) as big integers and converts\n// it to an affine point as field values.\nfunc (curve *KoblitzCurve) bigAffineToField(x, y *big.Int) (*fieldVal, *fieldVal) {\n\tx3, y3 := new(fieldVal), new(fieldVal)\n\tx3.SetByteSlice(x.Bytes())\n\ty3.SetByteSlice(y.Bytes())\n\n\treturn x3, y3\n}\n\n// fieldJacobianToBigAffine takes a Jacobian point (x, y, z) as field values and\n// converts it to an affine point as big integers.\nfunc (curve *KoblitzCurve) fieldJacobianToBigAffine(x, y, z *fieldVal) (*big.Int, *big.Int) {\n\t// Inversions are expensive and both point addition and point doubling\n\t// are faster when working with points that have a z value of one.  So,\n\t// if the point needs to be converted to affine, go ahead and normalize\n\t// the point itself at the same time as the calculation is the same.\n\tvar zInv, tempZ fieldVal\n\tzInv.Set(z).Inverse()   // zInv = Z^-1\n\ttempZ.SquareVal(&zInv)  // tempZ = Z^-2\n\tx.Mul(&tempZ)           // X = X/Z^2 (mag: 1)\n\ty.Mul(tempZ.Mul(&zInv)) // Y = Y/Z^3 (mag: 1)\n\tz.SetInt(1)             // Z = 1 (mag: 1)\n\n\t// Normalize the x and y values.\n\tx.Normalize()\n\ty.Normalize()\n\n\t// Convert the field values for the now affine point to big.Ints.\n\tx3, y3 := new(big.Int), new(big.Int)\n\tx3.SetBytes(x.Bytes()[:])\n\ty3.SetBytes(y.Bytes()[:])\n\treturn x3, y3\n}\n\n// IsOnCurve returns boolean if the point (x,y) is on the curve.\n// Part of the elliptic.Curve interface. This function differs from the\n// crypto/elliptic algorithm since a = 0 not -3.\nfunc (curve *KoblitzCurve) IsOnCurve(x, y *big.Int) bool {\n\t// Convert big ints to field values for faster arithmetic.\n\tfx, fy := curve.bigAffineToField(x, y)\n\n\t// Elliptic curve equation for secp256k1 is: y^2 = x^3 + 7\n\ty2 := new(fieldVal).SquareVal(fy).Normalize()\n\tresult := new(fieldVal).SquareVal(fx).Mul(fx).AddInt(7).Normalize()\n\treturn y2.Equals(result)\n}\n\n// addZ1AndZ2EqualsOne adds two Jacobian points that are already known to have\n// z values of 1 and stores the result in (x3, y3, z3).  That is to say\n// (x1, y1, 1) + (x2, y2, 1) = (x3, y3, z3).  It performs faster addition than\n// the generic add routine since less arithmetic is needed due to the ability to\n// avoid the z value multiplications.\nfunc (curve *KoblitzCurve) addZ1AndZ2EqualsOne(x1, y1, z1, x2, y2, x3, y3, z3 *fieldVal) {\n\t// To compute the point addition efficiently, this implementation splits\n\t// the equation into intermediate elements which are used to minimize\n\t// the number of field multiplications using the method shown at:\n\t// http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#addition-mmadd-2007-bl\n\t//\n\t// In particular it performs the calculations using the following:\n\t// H = X2-X1, HH = H^2, I = 4*HH, J = H*I, r = 2*(Y2-Y1), V = X1*I\n\t// X3 = r^2-J-2*V, Y3 = r*(V-X3)-2*Y1*J, Z3 = 2*H\n\t//\n\t// This results in a cost of 4 field multiplications, 2 field squarings,\n\t// 6 field additions, and 5 integer multiplications.\n\n\t// When the x coordinates are the same for two points on the curve, the\n\t// y coordinates either must be the same, in which case it is point\n\t// doubling, or they are opposite and the result is the point at\n\t// infinity per the group law for elliptic curve cryptography.\n\tx1.Normalize()\n\ty1.Normalize()\n\tx2.Normalize()\n\ty2.Normalize()\n\tif x1.Equals(x2) {\n\t\tif y1.Equals(y2) {\n\t\t\t// Since x1 == x2 and y1 == y2, point doubling must be\n\t\t\t// done, otherwise the addition would end up dividing\n\t\t\t// by zero.\n\t\t\tcurve.doubleJacobian(x1, y1, z1, x3, y3, z3)\n\t\t\treturn\n\t\t}\n\n\t\t// Since x1 == x2 and y1 == -y2, the sum is the point at\n\t\t// infinity per the group law.\n\t\tx3.SetInt(0)\n\t\ty3.SetInt(0)\n\t\tz3.SetInt(0)\n\t\treturn\n\t}\n\n\t// Calculate X3, Y3, and Z3 according to the intermediate elements\n\t// breakdown above.\n\tvar h, i, j, r, v fieldVal\n\tvar negJ, neg2V, negX3 fieldVal\n\th.Set(x1).Negate(1).Add(x2)                // H = X2-X1 (mag: 3)\n\ti.SquareVal(&h).MulInt(4)                  // I = 4*H^2 (mag: 4)\n\tj.Mul2(&h, &i)                             // J = H*I (mag: 1)\n\tr.Set(y1).Negate(1).Add(y2).MulInt(2)      // r = 2*(Y2-Y1) (mag: 6)\n\tv.Mul2(x1, &i)                             // V = X1*I (mag: 1)\n\tnegJ.Set(&j).Negate(1)                     // negJ = -J (mag: 2)\n\tneg2V.Set(&v).MulInt(2).Negate(2)          // neg2V = -(2*V) (mag: 3)\n\tx3.Set(&r).Square().Add(&negJ).Add(&neg2V) // X3 = r^2-J-2*V (mag: 6)\n\tnegX3.Set(x3).Negate(6)                    // negX3 = -X3 (mag: 7)\n\tj.Mul(y1).MulInt(2).Negate(2)              // J = -(2*Y1*J) (mag: 3)\n\ty3.Set(&v).Add(&negX3).Mul(&r).Add(&j)     // Y3 = r*(V-X3)-2*Y1*J (mag: 4)\n\tz3.Set(&h).MulInt(2)                       // Z3 = 2*H (mag: 6)\n\n\t// Normalize the resulting field values to a magnitude of 1 as needed.\n\tx3.Normalize()\n\ty3.Normalize()\n\tz3.Normalize()\n}\n\n// addZ1EqualsZ2 adds two Jacobian points that are already known to have the\n// same z value and stores the result in (x3, y3, z3).  That is to say\n// (x1, y1, z1) + (x2, y2, z1) = (x3, y3, z3).  It performs faster addition than\n// the generic add routine since less arithmetic is needed due to the known\n// equivalence.\nfunc (curve *KoblitzCurve) addZ1EqualsZ2(x1, y1, z1, x2, y2, x3, y3, z3 *fieldVal) {\n\t// To compute the point addition efficiently, this implementation splits\n\t// the equation into intermediate elements which are used to minimize\n\t// the number of field multiplications using a slightly modified version\n\t// of the method shown at:\n\t// http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#addition-mmadd-2007-bl\n\t//\n\t// In particular it performs the calculations using the following:\n\t// A = X2-X1, B = A^2, C=Y2-Y1, D = C^2, E = X1*B, F = X2*B\n\t// X3 = D-E-F, Y3 = C*(E-X3)-Y1*(F-E), Z3 = Z1*A\n\t//\n\t// This results in a cost of 5 field multiplications, 2 field squarings,\n\t// 9 field additions, and 0 integer multiplications.\n\n\t// When the x coordinates are the same for two points on the curve, the\n\t// y coordinates either must be the same, in which case it is point\n\t// doubling, or they are opposite and the result is the point at\n\t// infinity per the group law for elliptic curve cryptography.\n\tx1.Normalize()\n\ty1.Normalize()\n\tx2.Normalize()\n\ty2.Normalize()\n\tif x1.Equals(x2) {\n\t\tif y1.Equals(y2) {\n\t\t\t// Since x1 == x2 and y1 == y2, point doubling must be\n\t\t\t// done, otherwise the addition would end up dividing\n\t\t\t// by zero.\n\t\t\tcurve.doubleJacobian(x1, y1, z1, x3, y3, z3)\n\t\t\treturn\n\t\t}\n\n\t\t// Since x1 == x2 and y1 == -y2, the sum is the point at\n\t\t// infinity per the group law.\n\t\tx3.SetInt(0)\n\t\ty3.SetInt(0)\n\t\tz3.SetInt(0)\n\t\treturn\n\t}\n\n\t// Calculate X3, Y3, and Z3 according to the intermediate elements\n\t// breakdown above.\n\tvar a, b, c, d, e, f fieldVal\n\tvar negX1, negY1, negE, negX3 fieldVal\n\tnegX1.Set(x1).Negate(1)                // negX1 = -X1 (mag: 2)\n\tnegY1.Set(y1).Negate(1)                // negY1 = -Y1 (mag: 2)\n\ta.Set(&negX1).Add(x2)                  // A = X2-X1 (mag: 3)\n\tb.SquareVal(&a)                        // B = A^2 (mag: 1)\n\tc.Set(&negY1).Add(y2)                  // C = Y2-Y1 (mag: 3)\n\td.SquareVal(&c)                        // D = C^2 (mag: 1)\n\te.Mul2(x1, &b)                         // E = X1*B (mag: 1)\n\tnegE.Set(&e).Negate(1)                 // negE = -E (mag: 2)\n\tf.Mul2(x2, &b)                         // F = X2*B (mag: 1)\n\tx3.Add2(&e, &f).Negate(3).Add(&d)      // X3 = D-E-F (mag: 5)\n\tnegX3.Set(x3).Negate(5).Normalize()    // negX3 = -X3 (mag: 1)\n\ty3.Set(y1).Mul(f.Add(&negE)).Negate(3) // Y3 = -(Y1*(F-E)) (mag: 4)\n\ty3.Add(e.Add(&negX3).Mul(&c))          // Y3 = C*(E-X3)+Y3 (mag: 5)\n\tz3.Mul2(z1, &a)                        // Z3 = Z1*A (mag: 1)\n\n\t// Normalize the resulting field values to a magnitude of 1 as needed.\n\tx3.Normalize()\n\ty3.Normalize()\n}\n\n// addZ2EqualsOne adds two Jacobian points when the second point is already\n// known to have a z value of 1 (and the z value for the first point is not 1)\n// and stores the result in (x3, y3, z3).  That is to say (x1, y1, z1) +\n// (x2, y2, 1) = (x3, y3, z3).  It performs faster addition than the generic\n// add routine since less arithmetic is needed due to the ability to avoid\n// multiplications by the second point's z value.\nfunc (curve *KoblitzCurve) addZ2EqualsOne(x1, y1, z1, x2, y2, x3, y3, z3 *fieldVal) {\n\t// To compute the point addition efficiently, this implementation splits\n\t// the equation into intermediate elements which are used to minimize\n\t// the number of field multiplications using the method shown at:\n\t// http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#addition-madd-2007-bl\n\t//\n\t// In particular it performs the calculations using the following:\n\t// Z1Z1 = Z1^2, U2 = X2*Z1Z1, S2 = Y2*Z1*Z1Z1, H = U2-X1, HH = H^2,\n\t// I = 4*HH, J = H*I, r = 2*(S2-Y1), V = X1*I\n\t// X3 = r^2-J-2*V, Y3 = r*(V-X3)-2*Y1*J, Z3 = (Z1+H)^2-Z1Z1-HH\n\t//\n\t// This results in a cost of 7 field multiplications, 4 field squarings,\n\t// 9 field additions, and 4 integer multiplications.\n\n\t// When the x coordinates are the same for two points on the curve, the\n\t// y coordinates either must be the same, in which case it is point\n\t// doubling, or they are opposite and the result is the point at\n\t// infinity per the group law for elliptic curve cryptography.  Since\n\t// any number of Jacobian coordinates can represent the same affine\n\t// point, the x and y values need to be converted to like terms.  Due to\n\t// the assumption made for this function that the second point has a z\n\t// value of 1 (z2=1), the first point is already \"converted\".\n\tvar z1z1, u2, s2 fieldVal\n\tx1.Normalize()\n\ty1.Normalize()\n\tz1z1.SquareVal(z1)                        // Z1Z1 = Z1^2 (mag: 1)\n\tu2.Set(x2).Mul(&z1z1).Normalize()         // U2 = X2*Z1Z1 (mag: 1)\n\ts2.Set(y2).Mul(&z1z1).Mul(z1).Normalize() // S2 = Y2*Z1*Z1Z1 (mag: 1)\n\tif x1.Equals(&u2) {\n\t\tif y1.Equals(&s2) {\n\t\t\t// Since x1 == x2 and y1 == y2, point doubling must be\n\t\t\t// done, otherwise the addition would end up dividing\n\t\t\t// by zero.\n\t\t\tcurve.doubleJacobian(x1, y1, z1, x3, y3, z3)\n\t\t\treturn\n\t\t}\n\n\t\t// Since x1 == x2 and y1 == -y2, the sum is the point at\n\t\t// infinity per the group law.\n\t\tx3.SetInt(0)\n\t\ty3.SetInt(0)\n\t\tz3.SetInt(0)\n\t\treturn\n\t}\n\n\t// Calculate X3, Y3, and Z3 according to the intermediate elements\n\t// breakdown above.\n\tvar h, hh, i, j, r, rr, v fieldVal\n\tvar negX1, negY1, negX3 fieldVal\n\tnegX1.Set(x1).Negate(1)                // negX1 = -X1 (mag: 2)\n\th.Add2(&u2, &negX1)                    // H = U2-X1 (mag: 3)\n\thh.SquareVal(&h)                       // HH = H^2 (mag: 1)\n\ti.Set(&hh).MulInt(4)                   // I = 4 * HH (mag: 4)\n\tj.Mul2(&h, &i)                         // J = H*I (mag: 1)\n\tnegY1.Set(y1).Negate(1)                // negY1 = -Y1 (mag: 2)\n\tr.Set(&s2).Add(&negY1).MulInt(2)       // r = 2*(S2-Y1) (mag: 6)\n\trr.SquareVal(&r)                       // rr = r^2 (mag: 1)\n\tv.Mul2(x1, &i)                         // V = X1*I (mag: 1)\n\tx3.Set(&v).MulInt(2).Add(&j).Negate(3) // X3 = -(J+2*V) (mag: 4)\n\tx3.Add(&rr)                            // X3 = r^2+X3 (mag: 5)\n\tnegX3.Set(x3).Negate(5)                // negX3 = -X3 (mag: 6)\n\ty3.Set(y1).Mul(&j).MulInt(2).Negate(2) // Y3 = -(2*Y1*J) (mag: 3)\n\ty3.Add(v.Add(&negX3).Mul(&r))          // Y3 = r*(V-X3)+Y3 (mag: 4)\n\tz3.Add2(z1, &h).Square()               // Z3 = (Z1+H)^2 (mag: 1)\n\tz3.Add(z1z1.Add(&hh).Negate(2))        // Z3 = Z3-(Z1Z1+HH) (mag: 4)\n\n\t// Normalize the resulting field values to a magnitude of 1 as needed.\n\tx3.Normalize()\n\ty3.Normalize()\n\tz3.Normalize()\n}\n\n// addGeneric adds two Jacobian points (x1, y1, z1) and (x2, y2, z2) without any\n// assumptions about the z values of the two points and stores the result in\n// (x3, y3, z3).  That is to say (x1, y1, z1) + (x2, y2, z2) = (x3, y3, z3).  It\n// is the slowest of the add routines due to requiring the most arithmetic.\nfunc (curve *KoblitzCurve) addGeneric(x1, y1, z1, x2, y2, z2, x3, y3, z3 *fieldVal) {\n\t// To compute the point addition efficiently, this implementation splits\n\t// the equation into intermediate elements which are used to minimize\n\t// the number of field multiplications using the method shown at:\n\t// http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#addition-add-2007-bl\n\t//\n\t// In particular it performs the calculations using the following:\n\t// Z1Z1 = Z1^2, Z2Z2 = Z2^2, U1 = X1*Z2Z2, U2 = X2*Z1Z1, S1 = Y1*Z2*Z2Z2\n\t// S2 = Y2*Z1*Z1Z1, H = U2-U1, I = (2*H)^2, J = H*I, r = 2*(S2-S1)\n\t// V = U1*I\n\t// X3 = r^2-J-2*V, Y3 = r*(V-X3)-2*S1*J, Z3 = ((Z1+Z2)^2-Z1Z1-Z2Z2)*H\n\t//\n\t// This results in a cost of 11 field multiplications, 5 field squarings,\n\t// 9 field additions, and 4 integer multiplications.\n\n\t// When the x coordinates are the same for two points on the curve, the\n\t// y coordinates either must be the same, in which case it is point\n\t// doubling, or they are opposite and the result is the point at\n\t// infinity.  Since any number of Jacobian coordinates can represent the\n\t// same affine point, the x and y values need to be converted to like\n\t// terms.\n\tvar z1z1, z2z2, u1, u2, s1, s2 fieldVal\n\tz1z1.SquareVal(z1)                        // Z1Z1 = Z1^2 (mag: 1)\n\tz2z2.SquareVal(z2)                        // Z2Z2 = Z2^2 (mag: 1)\n\tu1.Set(x1).Mul(&z2z2).Normalize()         // U1 = X1*Z2Z2 (mag: 1)\n\tu2.Set(x2).Mul(&z1z1).Normalize()         // U2 = X2*Z1Z1 (mag: 1)\n\ts1.Set(y1).Mul(&z2z2).Mul(z2).Normalize() // S1 = Y1*Z2*Z2Z2 (mag: 1)\n\ts2.Set(y2).Mul(&z1z1).Mul(z1).Normalize() // S2 = Y2*Z1*Z1Z1 (mag: 1)\n\tif u1.Equals(&u2) {\n\t\tif s1.Equals(&s2) {\n\t\t\t// Since x1 == x2 and y1 == y2, point doubling must be\n\t\t\t// done, otherwise the addition would end up dividing\n\t\t\t// by zero.\n\t\t\tcurve.doubleJacobian(x1, y1, z1, x3, y3, z3)\n\t\t\treturn\n\t\t}\n\n\t\t// Since x1 == x2 and y1 == -y2, the sum is the point at\n\t\t// infinity per the group law.\n\t\tx3.SetInt(0)\n\t\ty3.SetInt(0)\n\t\tz3.SetInt(0)\n\t\treturn\n\t}\n\n\t// Calculate X3, Y3, and Z3 according to the intermediate elements\n\t// breakdown above.\n\tvar h, i, j, r, rr, v fieldVal\n\tvar negU1, negS1, negX3 fieldVal\n\tnegU1.Set(&u1).Negate(1)               // negU1 = -U1 (mag: 2)\n\th.Add2(&u2, &negU1)                    // H = U2-U1 (mag: 3)\n\ti.Set(&h).MulInt(2).Square()           // I = (2*H)^2 (mag: 2)\n\tj.Mul2(&h, &i)                         // J = H*I (mag: 1)\n\tnegS1.Set(&s1).Negate(1)               // negS1 = -S1 (mag: 2)\n\tr.Set(&s2).Add(&negS1).MulInt(2)       // r = 2*(S2-S1) (mag: 6)\n\trr.SquareVal(&r)                       // rr = r^2 (mag: 1)\n\tv.Mul2(&u1, &i)                        // V = U1*I (mag: 1)\n\tx3.Set(&v).MulInt(2).Add(&j).Negate(3) // X3 = -(J+2*V) (mag: 4)\n\tx3.Add(&rr)                            // X3 = r^2+X3 (mag: 5)\n\tnegX3.Set(x3).Negate(5)                // negX3 = -X3 (mag: 6)\n\ty3.Mul2(&s1, &j).MulInt(2).Negate(2)   // Y3 = -(2*S1*J) (mag: 3)\n\ty3.Add(v.Add(&negX3).Mul(&r))          // Y3 = r*(V-X3)+Y3 (mag: 4)\n\tz3.Add2(z1, z2).Square()               // Z3 = (Z1+Z2)^2 (mag: 1)\n\tz3.Add(z1z1.Add(&z2z2).Negate(2))      // Z3 = Z3-(Z1Z1+Z2Z2) (mag: 4)\n\tz3.Mul(&h)                             // Z3 = Z3*H (mag: 1)\n\n\t// Normalize the resulting field values to a magnitude of 1 as needed.\n\tx3.Normalize()\n\ty3.Normalize()\n}\n\n// addJacobian adds the passed Jacobian points (x1, y1, z1) and (x2, y2, z2)\n// together and stores the result in (x3, y3, z3).\nfunc (curve *KoblitzCurve) addJacobian(x1, y1, z1, x2, y2, z2, x3, y3, z3 *fieldVal) {\n\t// A point at infinity is the identity according to the group law for\n\t// elliptic curve cryptography.  Thus, ∞ + P = P and P + ∞ = P.\n\tif (x1.IsZero() && y1.IsZero()) || z1.IsZero() {\n\t\tx3.Set(x2)\n\t\ty3.Set(y2)\n\t\tz3.Set(z2)\n\t\treturn\n\t}\n\tif (x2.IsZero() && y2.IsZero()) || z2.IsZero() {\n\t\tx3.Set(x1)\n\t\ty3.Set(y1)\n\t\tz3.Set(z1)\n\t\treturn\n\t}\n\n\t// Faster point addition can be achieved when certain assumptions are\n\t// met.  For example, when both points have the same z value, arithmetic\n\t// on the z values can be avoided.  This section thus checks for these\n\t// conditions and calls an appropriate add function which is accelerated\n\t// by using those assumptions.\n\tz1.Normalize()\n\tz2.Normalize()\n\tisZ1One := z1.Equals(fieldOne)\n\tisZ2One := z2.Equals(fieldOne)\n\tswitch {\n\tcase isZ1One && isZ2One:\n\t\tcurve.addZ1AndZ2EqualsOne(x1, y1, z1, x2, y2, x3, y3, z3)\n\t\treturn\n\tcase z1.Equals(z2):\n\t\tcurve.addZ1EqualsZ2(x1, y1, z1, x2, y2, x3, y3, z3)\n\t\treturn\n\tcase isZ2One:\n\t\tcurve.addZ2EqualsOne(x1, y1, z1, x2, y2, x3, y3, z3)\n\t\treturn\n\t}\n\n\t// None of the above assumptions are true, so fall back to generic\n\t// point addition.\n\tcurve.addGeneric(x1, y1, z1, x2, y2, z2, x3, y3, z3)\n}\n\n// Add returns the sum of (x1,y1) and (x2,y2). Part of the elliptic.Curve\n// interface.\nfunc (curve *KoblitzCurve) Add(x1, y1, x2, y2 *big.Int) (*big.Int, *big.Int) {\n\t// A point at infinity is the identity according to the group law for\n\t// elliptic curve cryptography.  Thus, ∞ + P = P and P + ∞ = P.\n\tif x1.Sign() == 0 && y1.Sign() == 0 {\n\t\treturn x2, y2\n\t}\n\tif x2.Sign() == 0 && y2.Sign() == 0 {\n\t\treturn x1, y1\n\t}\n\n\t// Convert the affine coordinates from big integers to field values\n\t// and do the point addition in Jacobian projective space.\n\tfx1, fy1 := curve.bigAffineToField(x1, y1)\n\tfx2, fy2 := curve.bigAffineToField(x2, y2)\n\tfx3, fy3, fz3 := new(fieldVal), new(fieldVal), new(fieldVal)\n\tfOne := new(fieldVal).SetInt(1)\n\tcurve.addJacobian(fx1, fy1, fOne, fx2, fy2, fOne, fx3, fy3, fz3)\n\n\t// Convert the Jacobian coordinate field values back to affine big\n\t// integers.\n\treturn curve.fieldJacobianToBigAffine(fx3, fy3, fz3)\n}\n\n// doubleZ1EqualsOne performs point doubling on the passed Jacobian point\n// when the point is already known to have a z value of 1 and stores\n// the result in (x3, y3, z3).  That is to say (x3, y3, z3) = 2*(x1, y1, 1).  It\n// performs faster point doubling than the generic routine since less arithmetic\n// is needed due to the ability to avoid multiplication by the z value.\nfunc (curve *KoblitzCurve) doubleZ1EqualsOne(x1, y1, x3, y3, z3 *fieldVal) {\n\t// This function uses the assumptions that z1 is 1, thus the point\n\t// doubling formulas reduce to:\n\t//\n\t// X3 = (3*X1^2)^2 - 8*X1*Y1^2\n\t// Y3 = (3*X1^2)*(4*X1*Y1^2 - X3) - 8*Y1^4\n\t// Z3 = 2*Y1\n\t//\n\t// To compute the above efficiently, this implementation splits the\n\t// equation into intermediate elements which are used to minimize the\n\t// number of field multiplications in favor of field squarings which\n\t// are roughly 35% faster than field multiplications with the current\n\t// implementation at the time this was written.\n\t//\n\t// This uses a slightly modified version of the method shown at:\n\t// http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#doubling-mdbl-2007-bl\n\t//\n\t// In particular it performs the calculations using the following:\n\t// A = X1^2, B = Y1^2, C = B^2, D = 2*((X1+B)^2-A-C)\n\t// E = 3*A, F = E^2, X3 = F-2*D, Y3 = E*(D-X3)-8*C\n\t// Z3 = 2*Y1\n\t//\n\t// This results in a cost of 1 field multiplication, 5 field squarings,\n\t// 6 field additions, and 5 integer multiplications.\n\tvar a, b, c, d, e, f fieldVal\n\tz3.Set(y1).MulInt(2)                     // Z3 = 2*Y1 (mag: 2)\n\ta.SquareVal(x1)                          // A = X1^2 (mag: 1)\n\tb.SquareVal(y1)                          // B = Y1^2 (mag: 1)\n\tc.SquareVal(&b)                          // C = B^2 (mag: 1)\n\tb.Add(x1).Square()                       // B = (X1+B)^2 (mag: 1)\n\td.Set(&a).Add(&c).Negate(2)              // D = -(A+C) (mag: 3)\n\td.Add(&b).MulInt(2)                      // D = 2*(B+D)(mag: 8)\n\te.Set(&a).MulInt(3)                      // E = 3*A (mag: 3)\n\tf.SquareVal(&e)                          // F = E^2 (mag: 1)\n\tx3.Set(&d).MulInt(2).Negate(16)          // X3 = -(2*D) (mag: 17)\n\tx3.Add(&f)                               // X3 = F+X3 (mag: 18)\n\tf.Set(x3).Negate(18).Add(&d).Normalize() // F = D-X3 (mag: 1)\n\ty3.Set(&c).MulInt(8).Negate(8)           // Y3 = -(8*C) (mag: 9)\n\ty3.Add(f.Mul(&e))                        // Y3 = E*F+Y3 (mag: 10)\n\n\t// Normalize the field values back to a magnitude of 1.\n\tx3.Normalize()\n\ty3.Normalize()\n\tz3.Normalize()\n}\n\n// doubleGeneric performs point doubling on the passed Jacobian point without\n// any assumptions about the z value and stores the result in (x3, y3, z3).\n// That is to say (x3, y3, z3) = 2*(x1, y1, z1).  It is the slowest of the point\n// doubling routines due to requiring the most arithmetic.\nfunc (curve *KoblitzCurve) doubleGeneric(x1, y1, z1, x3, y3, z3 *fieldVal) {\n\t// Point doubling formula for Jacobian coordinates for the secp256k1\n\t// curve:\n\t// X3 = (3*X1^2)^2 - 8*X1*Y1^2\n\t// Y3 = (3*X1^2)*(4*X1*Y1^2 - X3) - 8*Y1^4\n\t// Z3 = 2*Y1*Z1\n\t//\n\t// To compute the above efficiently, this implementation splits the\n\t// equation into intermediate elements which are used to minimize the\n\t// number of field multiplications in favor of field squarings which\n\t// are roughly 35% faster than field multiplications with the current\n\t// implementation at the time this was written.\n\t//\n\t// This uses a slightly modified version of the method shown at:\n\t// http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#doubling-dbl-2009-l\n\t//\n\t// In particular it performs the calculations using the following:\n\t// A = X1^2, B = Y1^2, C = B^2, D = 2*((X1+B)^2-A-C)\n\t// E = 3*A, F = E^2, X3 = F-2*D, Y3 = E*(D-X3)-8*C\n\t// Z3 = 2*Y1*Z1\n\t//\n\t// This results in a cost of 1 field multiplication, 5 field squarings,\n\t// 6 field additions, and 5 integer multiplications.\n\tvar a, b, c, d, e, f fieldVal\n\tz3.Mul2(y1, z1).MulInt(2)                // Z3 = 2*Y1*Z1 (mag: 2)\n\ta.SquareVal(x1)                          // A = X1^2 (mag: 1)\n\tb.SquareVal(y1)                          // B = Y1^2 (mag: 1)\n\tc.SquareVal(&b)                          // C = B^2 (mag: 1)\n\tb.Add(x1).Square()                       // B = (X1+B)^2 (mag: 1)\n\td.Set(&a).Add(&c).Negate(2)              // D = -(A+C) (mag: 3)\n\td.Add(&b).MulInt(2)                      // D = 2*(B+D)(mag: 8)\n\te.Set(&a).MulInt(3)                      // E = 3*A (mag: 3)\n\tf.SquareVal(&e)                          // F = E^2 (mag: 1)\n\tx3.Set(&d).MulInt(2).Negate(16)          // X3 = -(2*D) (mag: 17)\n\tx3.Add(&f)                               // X3 = F+X3 (mag: 18)\n\tf.Set(x3).Negate(18).Add(&d).Normalize() // F = D-X3 (mag: 1)\n\ty3.Set(&c).MulInt(8).Negate(8)           // Y3 = -(8*C) (mag: 9)\n\ty3.Add(f.Mul(&e))                        // Y3 = E*F+Y3 (mag: 10)\n\n\t// Normalize the field values back to a magnitude of 1.\n\tx3.Normalize()\n\ty3.Normalize()\n\tz3.Normalize()\n}\n\n// doubleJacobian doubles the passed Jacobian point (x1, y1, z1) and stores the\n// result in (x3, y3, z3).\nfunc (curve *KoblitzCurve) doubleJacobian(x1, y1, z1, x3, y3, z3 *fieldVal) {\n\t// Doubling a point at infinity is still infinity.\n\tif y1.IsZero() || z1.IsZero() {\n\t\tx3.SetInt(0)\n\t\ty3.SetInt(0)\n\t\tz3.SetInt(0)\n\t\treturn\n\t}\n\n\t// Slightly faster point doubling can be achieved when the z value is 1\n\t// by avoiding the multiplication on the z value.  This section calls\n\t// a point doubling function which is accelerated by using that\n\t// assumption when possible.\n\tif z1.Normalize().Equals(fieldOne) {\n\t\tcurve.doubleZ1EqualsOne(x1, y1, x3, y3, z3)\n\t\treturn\n\t}\n\n\t// Fall back to generic point doubling which works with arbitrary z\n\t// values.\n\tcurve.doubleGeneric(x1, y1, z1, x3, y3, z3)\n}\n\n// Double returns 2*(x1,y1). Part of the elliptic.Curve interface.\nfunc (curve *KoblitzCurve) Double(x1, y1 *big.Int) (*big.Int, *big.Int) {\n\tif y1.Sign() == 0 {\n\t\treturn new(big.Int), new(big.Int)\n\t}\n\n\t// Convert the affine coordinates from big integers to field values\n\t// and do the point doubling in Jacobian projective space.\n\tfx1, fy1 := curve.bigAffineToField(x1, y1)\n\tfx3, fy3, fz3 := new(fieldVal), new(fieldVal), new(fieldVal)\n\tfOne := new(fieldVal).SetInt(1)\n\tcurve.doubleJacobian(fx1, fy1, fOne, fx3, fy3, fz3)\n\n\t// Convert the Jacobian coordinate field values back to affine big\n\t// integers.\n\treturn curve.fieldJacobianToBigAffine(fx3, fy3, fz3)\n}\n\n// splitK returns a balanced length-two representation of k and their signs.\n// This is algorithm 3.74 from [GECC].\n//\n// One thing of note about this algorithm is that no matter what c1 and c2 are,\n// the final equation of k = k1 + k2 * lambda (mod n) will hold.  This is\n// provable mathematically due to how a1/b1/a2/b2 are computed.\n//\n// c1 and c2 are chosen to minimize the max(k1,k2).\nfunc (curve *KoblitzCurve) splitK(k []byte) ([]byte, []byte, int, int) {\n\t// All math here is done with big.Int, which is slow.\n\t// At some point, it might be useful to write something similar to\n\t// fieldVal but for N instead of P as the prime field if this ends up\n\t// being a bottleneck.\n\tbigIntK := new(big.Int)\n\tc1, c2 := new(big.Int), new(big.Int)\n\ttmp1, tmp2 := new(big.Int), new(big.Int)\n\tk1, k2 := new(big.Int), new(big.Int)\n\n\tbigIntK.SetBytes(k)\n\t// c1 = round(b2 * k / n) from step 4.\n\t// Rounding isn't really necessary and costs too much, hence skipped\n\tc1.Mul(curve.b2, bigIntK)\n\tc1.Div(c1, curve.N)\n\t// c2 = round(b1 * k / n) from step 4 (sign reversed to optimize one step)\n\t// Rounding isn't really necessary and costs too much, hence skipped\n\tc2.Mul(curve.b1, bigIntK)\n\tc2.Div(c2, curve.N)\n\t// k1 = k - c1 * a1 - c2 * a2 from step 5 (note c2's sign is reversed)\n\ttmp1.Mul(c1, curve.a1)\n\ttmp2.Mul(c2, curve.a2)\n\tk1.Sub(bigIntK, tmp1)\n\tk1.Add(k1, tmp2)\n\t// k2 = - c1 * b1 - c2 * b2 from step 5 (note c2's sign is reversed)\n\ttmp1.Mul(c1, curve.b1)\n\ttmp2.Mul(c2, curve.b2)\n\tk2.Sub(tmp2, tmp1)\n\n\t// Note Bytes() throws out the sign of k1 and k2. This matters\n\t// since k1 and/or k2 can be negative. Hence, we pass that\n\t// back separately.\n\treturn k1.Bytes(), k2.Bytes(), k1.Sign(), k2.Sign()\n}\n\n// moduloReduce reduces k from more than 32 bytes to 32 bytes and under.  This\n// is done by doing a simple modulo curve.N.  We can do this since G^N = 1 and\n// thus any other valid point on the elliptic curve has the same order.\nfunc (curve *KoblitzCurve) moduloReduce(k []byte) []byte {\n\t// Since the order of G is curve.N, we can use a much smaller number\n\t// by doing modulo curve.N\n\tif len(k) > curve.byteSize {\n\t\t// Reduce k by performing modulo curve.N.\n\t\ttmpK := new(big.Int).SetBytes(k)\n\t\ttmpK.Mod(tmpK, curve.N)\n\t\treturn tmpK.Bytes()\n\t}\n\n\treturn k\n}\n\n// NAF takes a positive integer k and returns the Non-Adjacent Form (NAF) as two\n// byte slices.  The first is where 1s will be.  The second is where -1s will\n// be.  NAF is convenient in that on average, only 1/3rd of its values are\n// non-zero.  This is algorithm 3.30 from [GECC].\n//\n// Essentially, this makes it possible to minimize the number of operations\n// since the resulting ints returned will be at least 50% 0s.\nfunc NAF(k []byte) ([]byte, []byte) {\n\t// The essence of this algorithm is that whenever we have consecutive 1s\n\t// in the binary, we want to put a -1 in the lowest bit and get a bunch\n\t// of 0s up to the highest bit of consecutive 1s.  This is due to this\n\t// identity:\n\t// 2^n + 2^(n-1) + 2^(n-2) + ... + 2^(n-k) = 2^(n+1) - 2^(n-k)\n\t//\n\t// The algorithm thus may need to go 1 more bit than the length of the\n\t// bits we actually have, hence bits being 1 bit longer than was\n\t// necessary.  Since we need to know whether adding will cause a carry,\n\t// we go from right-to-left in this addition.\n\tvar carry, curIsOne, nextIsOne bool\n\t// these default to zero\n\tretPos := make([]byte, len(k)+1)\n\tretNeg := make([]byte, len(k)+1)\n\tfor i := len(k) - 1; i >= 0; i-- {\n\t\tcurByte := k[i]\n\t\tfor j := uint(0); j < 8; j++ {\n\t\t\tcurIsOne = curByte&1 == 1\n\t\t\tif j == 7 {\n\t\t\t\tif i == 0 {\n\t\t\t\t\tnextIsOne = false\n\t\t\t\t} else {\n\t\t\t\t\tnextIsOne = k[i-1]&1 == 1\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnextIsOne = curByte&2 == 2\n\t\t\t}\n\t\t\tif carry {\n\t\t\t\tif curIsOne {\n\t\t\t\t\t// This bit is 1, so continue to carry\n\t\t\t\t\t// and don't need to do anything.\n\t\t\t\t} else {\n\t\t\t\t\t// We've hit a 0 after some number of\n\t\t\t\t\t// 1s.\n\t\t\t\t\tif nextIsOne {\n\t\t\t\t\t\t// Start carrying again since\n\t\t\t\t\t\t// a new sequence of 1s is\n\t\t\t\t\t\t// starting.\n\t\t\t\t\t\tretNeg[i+1] += 1 << j\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Stop carrying since 1s have\n\t\t\t\t\t\t// stopped.\n\t\t\t\t\t\tcarry = false\n\t\t\t\t\t\tretPos[i+1] += 1 << j\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if curIsOne {\n\t\t\t\tif nextIsOne {\n\t\t\t\t\t// If this is the start of at least 2\n\t\t\t\t\t// consecutive 1s, set the current one\n\t\t\t\t\t// to -1 and start carrying.\n\t\t\t\t\tretNeg[i+1] += 1 << j\n\t\t\t\t\tcarry = true\n\t\t\t\t} else {\n\t\t\t\t\t// This is a singleton, not consecutive\n\t\t\t\t\t// 1s.\n\t\t\t\t\tretPos[i+1] += 1 << j\n\t\t\t\t}\n\t\t\t}\n\t\t\tcurByte >>= 1\n\t\t}\n\t}\n\tif carry {\n\t\tretPos[0] = 1\n\t\treturn retPos, retNeg\n\t}\n\treturn retPos[1:], retNeg[1:]\n}\n\n// ScalarMult returns k*(Bx, By) where k is a big endian integer.\n// Part of the elliptic.Curve interface.\nfunc (curve *KoblitzCurve) ScalarMult(Bx, By *big.Int, k []byte) (*big.Int, *big.Int) {\n\t// Point Q = ∞ (point at infinity).\n\tqx, qy, qz := new(fieldVal), new(fieldVal), new(fieldVal)\n\n\t// Decompose K into k1 and k2 in order to halve the number of EC ops.\n\t// See Algorithm 3.74 in [GECC].\n\tk1, k2, signK1, signK2 := curve.splitK(curve.moduloReduce(k))\n\n\t// The main equation here to remember is:\n\t//   k * P = k1 * P + k2 * ϕ(P)\n\t//\n\t// P1 below is P in the equation, P2 below is ϕ(P) in the equation\n\tp1x, p1y := curve.bigAffineToField(Bx, By)\n\tp1yNeg := new(fieldVal).NegateVal(p1y, 1)\n\tp1z := new(fieldVal).SetInt(1)\n\n\t// NOTE: ϕ(x,y) = (βx,y).  The Jacobian z coordinate is 1, so this math\n\t// goes through.\n\tp2x := new(fieldVal).Mul2(p1x, curve.beta)\n\tp2y := new(fieldVal).Set(p1y)\n\tp2yNeg := new(fieldVal).NegateVal(p2y, 1)\n\tp2z := new(fieldVal).SetInt(1)\n\n\t// Flip the positive and negative values of the points as needed\n\t// depending on the signs of k1 and k2.  As mentioned in the equation\n\t// above, each of k1 and k2 are multiplied by the respective point.\n\t// Since -k * P is the same thing as k * -P, and the group law for\n\t// elliptic curves states that P(x, y) = -P(x, -y), it's faster and\n\t// simplifies the code to just make the point negative.\n\tif signK1 == -1 {\n\t\tp1y, p1yNeg = p1yNeg, p1y\n\t}\n\tif signK2 == -1 {\n\t\tp2y, p2yNeg = p2yNeg, p2y\n\t}\n\n\t// NAF versions of k1 and k2 should have a lot more zeros.\n\t//\n\t// The Pos version of the bytes contain the +1s and the Neg versions\n\t// contain the -1s.\n\tk1PosNAF, k1NegNAF := NAF(k1)\n\tk2PosNAF, k2NegNAF := NAF(k2)\n\tk1Len := len(k1PosNAF)\n\tk2Len := len(k2PosNAF)\n\n\tm := k1Len\n\tif m < k2Len {\n\t\tm = k2Len\n\t}\n\n\t// Add left-to-right using the NAF optimization.  See algorithm 3.77\n\t// from [GECC].  This should be faster overall since there will be a lot\n\t// more instances of 0, hence reducing the number of Jacobian additions\n\t// at the cost of 1 possible extra doubling.\n\tvar k1BytePos, k1ByteNeg, k2BytePos, k2ByteNeg byte\n\tfor i := 0; i < m; i++ {\n\t\t// Since we're going left-to-right, pad the front with 0s.\n\t\tif i < m-k1Len {\n\t\t\tk1BytePos = 0\n\t\t\tk1ByteNeg = 0\n\t\t} else {\n\t\t\tk1BytePos = k1PosNAF[i-(m-k1Len)]\n\t\t\tk1ByteNeg = k1NegNAF[i-(m-k1Len)]\n\t\t}\n\t\tif i < m-k2Len {\n\t\t\tk2BytePos = 0\n\t\t\tk2ByteNeg = 0\n\t\t} else {\n\t\t\tk2BytePos = k2PosNAF[i-(m-k2Len)]\n\t\t\tk2ByteNeg = k2NegNAF[i-(m-k2Len)]\n\t\t}\n\n\t\tfor j := 7; j >= 0; j-- {\n\t\t\t// Q = 2 * Q\n\t\t\tcurve.doubleJacobian(qx, qy, qz, qx, qy, qz)\n\n\t\t\tif k1BytePos&0x80 == 0x80 {\n\t\t\t\tcurve.addJacobian(qx, qy, qz, p1x, p1y, p1z,\n\t\t\t\t\tqx, qy, qz)\n\t\t\t} else if k1ByteNeg&0x80 == 0x80 {\n\t\t\t\tcurve.addJacobian(qx, qy, qz, p1x, p1yNeg, p1z,\n\t\t\t\t\tqx, qy, qz)\n\t\t\t}\n\n\t\t\tif k2BytePos&0x80 == 0x80 {\n\t\t\t\tcurve.addJacobian(qx, qy, qz, p2x, p2y, p2z,\n\t\t\t\t\tqx, qy, qz)\n\t\t\t} else if k2ByteNeg&0x80 == 0x80 {\n\t\t\t\tcurve.addJacobian(qx, qy, qz, p2x, p2yNeg, p2z,\n\t\t\t\t\tqx, qy, qz)\n\t\t\t}\n\t\t\tk1BytePos <<= 1\n\t\t\tk1ByteNeg <<= 1\n\t\t\tk2BytePos <<= 1\n\t\t\tk2ByteNeg <<= 1\n\t\t}\n\t}\n\n\t// Convert the Jacobian coordinate field values back to affine big.Ints.\n\treturn curve.fieldJacobianToBigAffine(qx, qy, qz)\n}\n\n// ScalarBaseMult returns k*G where G is the base point of the group and k is a\n// big endian integer.\n// Part of the elliptic.Curve interface.\nfunc (curve *KoblitzCurve) ScalarBaseMult(k []byte) (*big.Int, *big.Int) {\n\tnewK := curve.moduloReduce(k)\n\tdiff := len(curve.bytePoints) - len(newK)\n\n\t// Point Q = ∞ (point at infinity).\n\tqx, qy, qz := new(fieldVal), new(fieldVal), new(fieldVal)\n\n\t// curve.bytePoints has all 256 byte points for each 8-bit window. The\n\t// strategy is to add up the byte points. This is best understood by\n\t// expressing k in base-256 which it already sort of is.\n\t// Each \"digit\" in the 8-bit window can be looked up using bytePoints\n\t// and added together.\n\tfor i, byteVal := range newK {\n\t\tp := curve.bytePoints[diff+i][byteVal]\n\t\tcurve.addJacobian(qx, qy, qz, &p[0], &p[1], &p[2], qx, qy, qz)\n\t}\n\treturn curve.fieldJacobianToBigAffine(qx, qy, qz)\n}\n\n// QPlus1Div4 returns the Q+1/4 constant for the curve for use in calculating\n// square roots via exponention.\nfunc (curve *KoblitzCurve) QPlus1Div4() *big.Int {\n\treturn curve.q\n}\n\nvar initonce sync.Once\nvar secp256k1 KoblitzCurve\n\nfunc initAll() {\n\tinitS256()\n}\n\n// fromHex converts the passed hex string into a big integer pointer and will\n// panic is there is an error.  This is only provided for the hard-coded\n// constants so errors in the source code can bet detected. It will only (and\n// must only) be called for initialization purposes.\nfunc fromHex(s string) *big.Int {\n\tr, ok := new(big.Int).SetString(s, 16)\n\tif !ok {\n\t\tpanic(\"invalid hex in source file: \" + s)\n\t}\n\treturn r\n}\n\nfunc initS256() {\n\t// Curve parameters taken from [SECG] section 2.4.1.\n\tsecp256k1.CurveParams = new(elliptic.CurveParams)\n\tsecp256k1.P = fromHex(\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F\")\n\tsecp256k1.N = fromHex(\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141\")\n\tsecp256k1.B = fromHex(\"0000000000000000000000000000000000000000000000000000000000000007\")\n\tsecp256k1.Gx = fromHex(\"79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798\")\n\tsecp256k1.Gy = fromHex(\"483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8\")\n\tsecp256k1.BitSize = 256\n\tsecp256k1.q = new(big.Int).Div(new(big.Int).Add(secp256k1.P,\n\t\tbig.NewInt(1)), big.NewInt(4))\n\tsecp256k1.H = 1\n\tsecp256k1.halfOrder = new(big.Int).Rsh(secp256k1.N, 1)\n\n\t// Provided for convenience since this gets computed repeatedly.\n\tsecp256k1.byteSize = secp256k1.BitSize / 8\n\n\t// Deserialize and set the pre-computed table used to accelerate scalar\n\t// base multiplication.  This is hard-coded data, so any errors are\n\t// panics because it means something is wrong in the source code.\n\tif err := loadS256BytePoints(); err != nil {\n\t\tpanic(err)\n\t}\n\n\t// Next 6 constants are from Hal Finney's bitcointalk.org post:\n\t// https://bitcointalk.org/index.php?topic=3238.msg45565#msg45565\n\t// May he rest in peace.\n\t//\n\t// They have also been independently derived from the code in the\n\t// EndomorphismVectors function in gensecp256k1.go.\n\tsecp256k1.lambda = fromHex(\"5363AD4CC05C30E0A5261C028812645A122E22EA20816678DF02967C1B23BD72\")\n\tsecp256k1.beta = new(fieldVal).SetHex(\"7AE96A2B657C07106E64479EAC3434E99CF0497512F58995C1396C28719501EE\")\n\tsecp256k1.a1 = fromHex(\"3086D221A7D46BCDE86C90E49284EB15\")\n\tsecp256k1.b1 = fromHex(\"-E4437ED6010E88286F547FA90ABFE4C3\")\n\tsecp256k1.a2 = fromHex(\"114CA50F7A8E2F3F657C1108D9D44CFD8\")\n\tsecp256k1.b2 = fromHex(\"3086D221A7D46BCDE86C90E49284EB15\")\n\n\t// Alternatively, we can use the parameters below, however, they seem\n\t//  to be about 8% slower.\n\t// secp256k1.lambda = fromHex(\"AC9C52B33FA3CF1F5AD9E3FD77ED9BA4A880B9FC8EC739C2E0CFC810B51283CE\")\n\t// secp256k1.beta = new(fieldVal).SetHex(\"851695D49A83F8EF919BB86153CBCB16630FB68AED0A766A3EC693D68E6AFA40\")\n\t// secp256k1.a1 = fromHex(\"E4437ED6010E88286F547FA90ABFE4C3\")\n\t// secp256k1.b1 = fromHex(\"-3086D221A7D46BCDE86C90E49284EB15\")\n\t// secp256k1.a2 = fromHex(\"3086D221A7D46BCDE86C90E49284EB15\")\n\t// secp256k1.b2 = fromHex(\"114CA50F7A8E2F3F657C1108D9D44CFD8\")\n}\n\n// S256 returns a Curve which implements secp256k1.\nfunc S256() *KoblitzCurve {\n\tinitonce.Do(initAll)\n\treturn &secp256k1\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/btcec/ciphering.go",
    "content": "// Copyright (c) 2015-2016 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcec\n\nimport (\n\t\"bytes\"\n\t\"crypto/aes\"\n\t\"crypto/cipher\"\n\t\"crypto/hmac\"\n\t\"crypto/rand\"\n\t\"crypto/sha256\"\n\t\"crypto/sha512\"\n\t\"errors\"\n\t\"io\"\n)\n\nvar (\n\t// ErrInvalidMAC occurs when Message Authentication Check (MAC) fails\n\t// during decryption. This happens because of either invalid private key or\n\t// corrupt ciphertext.\n\tErrInvalidMAC = errors.New(\"invalid mac hash\")\n\n\t// errInputTooShort occurs when the input ciphertext to the Decrypt\n\t// function is less than 134 bytes long.\n\terrInputTooShort = errors.New(\"ciphertext too short\")\n\n\t// errUnsupportedCurve occurs when the first two bytes of the encrypted\n\t// text aren't 0x02CA (= 712 = secp256k1, from OpenSSL).\n\terrUnsupportedCurve = errors.New(\"unsupported curve\")\n\n\terrInvalidXLength = errors.New(\"invalid X length, must be 32\")\n\terrInvalidYLength = errors.New(\"invalid Y length, must be 32\")\n\terrInvalidPadding = errors.New(\"invalid PKCS#7 padding\")\n\n\t// 0x02CA = 714\n\tciphCurveBytes = [2]byte{0x02, 0xCA}\n\t// 0x20 = 32\n\tciphCoordLength = [2]byte{0x00, 0x20}\n)\n\n// GenerateSharedSecret generates a shared secret based on a private key and a\n// public key using Diffie-Hellman key exchange (ECDH) (RFC 4753).\n// RFC5903 Section 9 states we should only return x.\nfunc GenerateSharedSecret(privkey *PrivateKey, pubkey *PublicKey) []byte {\n\tx, _ := pubkey.Curve.ScalarMult(pubkey.X, pubkey.Y, privkey.D.Bytes())\n\treturn x.Bytes()\n}\n\n// Encrypt encrypts data for the target public key using AES-256-CBC. It also\n// generates a private key (the pubkey of which is also in the output). The only\n// supported curve is secp256k1. The `structure' that it encodes everything into\n// is:\n//\n//\tstruct {\n//\t\t// Initialization Vector used for AES-256-CBC\n//\t\tIV [16]byte\n//\t\t// Public Key: curve(2) + len_of_pubkeyX(2) + pubkeyX +\n//\t\t// len_of_pubkeyY(2) + pubkeyY (curve = 714)\n//\t\tPublicKey [70]byte\n//\t\t// Cipher text\n//\t\tData []byte\n//\t\t// HMAC-SHA-256 Message Authentication Code\n//\t\tHMAC [32]byte\n//\t}\n//\n// The primary aim is to ensure byte compatibility with Pyelliptic.  Also, refer\n// to section 5.8.1 of ANSI X9.63 for rationale on this format.\nfunc Encrypt(pubkey *PublicKey, in []byte) ([]byte, error) {\n\tephemeral, err := NewPrivateKey(S256())\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tecdhKey := GenerateSharedSecret(ephemeral, pubkey)\n\tderivedKey := sha512.Sum512(ecdhKey)\n\tkeyE := derivedKey[:32]\n\tkeyM := derivedKey[32:]\n\n\tpaddedIn := addPKCSPadding(in)\n\t// IV + Curve params/X/Y + padded plaintext/ciphertext + HMAC-256\n\tout := make([]byte, aes.BlockSize+70+len(paddedIn)+sha256.Size)\n\tiv := out[:aes.BlockSize]\n\tif _, err = io.ReadFull(rand.Reader, iv); err != nil {\n\t\treturn nil, err\n\t}\n\t// start writing public key\n\tpb := ephemeral.PubKey().SerializeUncompressed()\n\toffset := aes.BlockSize\n\n\t// curve and X length\n\tcopy(out[offset:offset+4], append(ciphCurveBytes[:], ciphCoordLength[:]...))\n\toffset += 4\n\t// X\n\tcopy(out[offset:offset+32], pb[1:33])\n\toffset += 32\n\t// Y length\n\tcopy(out[offset:offset+2], ciphCoordLength[:])\n\toffset += 2\n\t// Y\n\tcopy(out[offset:offset+32], pb[33:])\n\toffset += 32\n\n\t// start encryption\n\tblock, err := aes.NewCipher(keyE)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tmode := cipher.NewCBCEncrypter(block, iv)\n\tmode.CryptBlocks(out[offset:len(out)-sha256.Size], paddedIn)\n\n\t// start HMAC-SHA-256\n\thm := hmac.New(sha256.New, keyM)\n\thm.Write(out[:len(out)-sha256.Size])          // everything is hashed\n\tcopy(out[len(out)-sha256.Size:], hm.Sum(nil)) // write checksum\n\n\treturn out, nil\n}\n\n// Decrypt decrypts data that was encrypted using the Encrypt function.\nfunc Decrypt(priv *PrivateKey, in []byte) ([]byte, error) {\n\t// IV + Curve params/X/Y + 1 block + HMAC-256\n\tif len(in) < aes.BlockSize+70+aes.BlockSize+sha256.Size {\n\t\treturn nil, errInputTooShort\n\t}\n\n\t// read iv\n\tiv := in[:aes.BlockSize]\n\toffset := aes.BlockSize\n\n\t// start reading pubkey\n\tif !bytes.Equal(in[offset:offset+2], ciphCurveBytes[:]) {\n\t\treturn nil, errUnsupportedCurve\n\t}\n\toffset += 2\n\n\tif !bytes.Equal(in[offset:offset+2], ciphCoordLength[:]) {\n\t\treturn nil, errInvalidXLength\n\t}\n\toffset += 2\n\n\txBytes := in[offset : offset+32]\n\toffset += 32\n\n\tif !bytes.Equal(in[offset:offset+2], ciphCoordLength[:]) {\n\t\treturn nil, errInvalidYLength\n\t}\n\toffset += 2\n\n\tyBytes := in[offset : offset+32]\n\toffset += 32\n\n\tpb := make([]byte, 65)\n\tpb[0] = byte(0x04) // uncompressed\n\tcopy(pb[1:33], xBytes)\n\tcopy(pb[33:], yBytes)\n\t// check if (X, Y) lies on the curve and create a Pubkey if it does\n\tpubkey, err := ParsePubKey(pb, S256())\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// check for cipher text length\n\tif (len(in)-aes.BlockSize-offset-sha256.Size)%aes.BlockSize != 0 {\n\t\treturn nil, errInvalidPadding // not padded to 16 bytes\n\t}\n\n\t// read hmac\n\tmessageMAC := in[len(in)-sha256.Size:]\n\n\t// generate shared secret\n\tecdhKey := GenerateSharedSecret(priv, pubkey)\n\tderivedKey := sha512.Sum512(ecdhKey)\n\tkeyE := derivedKey[:32]\n\tkeyM := derivedKey[32:]\n\n\t// verify mac\n\thm := hmac.New(sha256.New, keyM)\n\thm.Write(in[:len(in)-sha256.Size]) // everything is hashed\n\texpectedMAC := hm.Sum(nil)\n\tif !hmac.Equal(messageMAC, expectedMAC) {\n\t\treturn nil, ErrInvalidMAC\n\t}\n\n\t// start decryption\n\tblock, err := aes.NewCipher(keyE)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tmode := cipher.NewCBCDecrypter(block, iv)\n\t// same length as ciphertext\n\tplaintext := make([]byte, len(in)-offset-sha256.Size)\n\tmode.CryptBlocks(plaintext, in[offset:len(in)-sha256.Size])\n\n\treturn removePKCSPadding(plaintext)\n}\n\n// Implement PKCS#7 padding with block size of 16 (AES block size).\n\n// addPKCSPadding adds padding to a block of data\nfunc addPKCSPadding(src []byte) []byte {\n\tpadding := aes.BlockSize - len(src)%aes.BlockSize\n\tpadtext := bytes.Repeat([]byte{byte(padding)}, padding)\n\treturn append(src, padtext...)\n}\n\n// removePKCSPadding removes padding from data that was added with addPKCSPadding\nfunc removePKCSPadding(src []byte) ([]byte, error) {\n\tlength := len(src)\n\tpadLength := int(src[length-1])\n\tif padLength > aes.BlockSize || length < aes.BlockSize {\n\t\treturn nil, errInvalidPadding\n\t}\n\n\treturn src[:length-padLength], nil\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/btcec/doc.go",
    "content": "// Copyright (c) 2013-2014 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\n/*\nPackage btcec implements support for the elliptic curves needed for bitcoin.\n\nBitcoin uses elliptic curve cryptography using koblitz curves\n(specifically secp256k1) for cryptographic functions.  See\nhttp://www.secg.org/collateral/sec2_final.pdf for details on the\nstandard.\n\nThis package provides the data structures and functions implementing the\ncrypto/elliptic Curve interface in order to permit using these curves\nwith the standard crypto/ecdsa package provided with go. Helper\nfunctionality is provided to parse signatures and public keys from\nstandard formats.  It was designed for use with btcd, but should be\ngeneral enough for other uses of elliptic curve crypto.  It was originally based\non some initial work by ThePiachu, but has significantly diverged since then.\n*/\npackage btcec\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/btcec/field.go",
    "content": "// Copyright (c) 2013-2016 The btcsuite developers\n// Copyright (c) 2013-2016 Dave Collins\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcec\n\n// References:\n//   [HAC]: Handbook of Applied Cryptography Menezes, van Oorschot, Vanstone.\n//     http://cacr.uwaterloo.ca/hac/\n\n// All elliptic curve operations for secp256k1 are done in a finite field\n// characterized by a 256-bit prime.  Given this precision is larger than the\n// biggest available native type, obviously some form of bignum math is needed.\n// This package implements specialized fixed-precision field arithmetic rather\n// than relying on an arbitrary-precision arithmetic package such as math/big\n// for dealing with the field math since the size is known.  As a result, rather\n// large performance gains are achieved by taking advantage of many\n// optimizations not available to arbitrary-precision arithmetic and generic\n// modular arithmetic algorithms.\n//\n// There are various ways to internally represent each finite field element.\n// For example, the most obvious representation would be to use an array of 4\n// uint64s (64 bits * 4 = 256 bits).  However, that representation suffers from\n// a couple of issues.  First, there is no native Go type large enough to handle\n// the intermediate results while adding or multiplying two 64-bit numbers, and\n// second there is no space left for overflows when performing the intermediate\n// arithmetic between each array element which would lead to expensive carry\n// propagation.\n//\n// Given the above, this implementation represents the the field elements as\n// 10 uint32s with each word (array entry) treated as base 2^26.  This was\n// chosen for the following reasons:\n// 1) Most systems at the current time are 64-bit (or at least have 64-bit\n//    registers available for specialized purposes such as MMX) so the\n//    intermediate results can typically be done using a native register (and\n//    using uint64s to avoid the need for additional half-word arithmetic)\n// 2) In order to allow addition of the internal words without having to\n//    propagate the the carry, the max normalized value for each register must\n//    be less than the number of bits available in the register\n// 3) Since we're dealing with 32-bit values, 64-bits of overflow is a\n//    reasonable choice for #2\n// 4) Given the need for 256-bits of precision and the properties stated in #1,\n//    #2, and #3, the representation which best accommodates this is 10 uint32s\n//    with base 2^26 (26 bits * 10 = 260 bits, so the final word only needs 22\n//    bits) which leaves the desired 64 bits (32 * 10 = 320, 320 - 256 = 64) for\n//    overflow\n//\n// Since it is so important that the field arithmetic is extremely fast for\n// high performance crypto, this package does not perform any validation where\n// it ordinarily would.  For example, some functions only give the correct\n// result is the field is normalized and there is no checking to ensure it is.\n// While I typically prefer to ensure all state and input is valid for most\n// packages, this code is really only used internally and every extra check\n// counts.\n\nimport (\n\t\"encoding/hex\"\n)\n\n// Constants used to make the code more readable.\nconst (\n\ttwoBitsMask   = 0x3\n\tfourBitsMask  = 0xf\n\tsixBitsMask   = 0x3f\n\teightBitsMask = 0xff\n)\n\n// Constants related to the field representation.\nconst (\n\t// fieldWords is the number of words used to internally represent the\n\t// 256-bit value.\n\tfieldWords = 10\n\n\t// fieldBase is the exponent used to form the numeric base of each word.\n\t// 2^(fieldBase*i) where i is the word position.\n\tfieldBase = 26\n\n\t// fieldOverflowBits is the minimum number of \"overflow\" bits for each\n\t// word in the field value.\n\tfieldOverflowBits = 32 - fieldBase\n\n\t// fieldBaseMask is the mask for the bits in each word needed to\n\t// represent the numeric base of each word (except the most significant\n\t// word).\n\tfieldBaseMask = (1 << fieldBase) - 1\n\n\t// fieldMSBBits is the number of bits in the most significant word used\n\t// to represent the value.\n\tfieldMSBBits = 256 - (fieldBase * (fieldWords - 1))\n\n\t// fieldMSBMask is the mask for the bits in the most significant word\n\t// needed to represent the value.\n\tfieldMSBMask = (1 << fieldMSBBits) - 1\n\n\t// fieldPrimeWordZero is word zero of the secp256k1 prime in the\n\t// internal field representation.  It is used during negation.\n\tfieldPrimeWordZero = 0x3fffc2f\n\n\t// fieldPrimeWordOne is word one of the secp256k1 prime in the\n\t// internal field representation.  It is used during negation.\n\tfieldPrimeWordOne = 0x3ffffbf\n)\n\n// fieldVal implements optimized fixed-precision arithmetic over the\n// secp256k1 finite field.  This means all arithmetic is performed modulo\n// 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f.  It\n// represents each 256-bit value as 10 32-bit integers in base 2^26.  This\n// provides 6 bits of overflow in each word (10 bits in the most significant\n// word) for a total of 64 bits of overflow (9*6 + 10 = 64).  It only implements\n// the arithmetic needed for elliptic curve operations.\n//\n// The following depicts the internal representation:\n// \t -----------------------------------------------------------------\n// \t|        n[9]       |        n[8]       | ... |        n[0]       |\n// \t| 32 bits available | 32 bits available | ... | 32 bits available |\n// \t| 22 bits for value | 26 bits for value | ... | 26 bits for value |\n// \t| 10 bits overflow  |  6 bits overflow  | ... |  6 bits overflow  |\n// \t| Mult: 2^(26*9)    | Mult: 2^(26*8)    | ... | Mult: 2^(26*0)    |\n// \t -----------------------------------------------------------------\n//\n// For example, consider the number 2^49 + 1.  It would be represented as:\n// \tn[0] = 1\n// \tn[1] = 2^23\n// \tn[2..9] = 0\n//\n// The full 256-bit value is then calculated by looping i from 9..0 and\n// doing sum(n[i] * 2^(26i)) like so:\n// \tn[9] * 2^(26*9) = 0    * 2^234 = 0\n// \tn[8] * 2^(26*8) = 0    * 2^208 = 0\n// \t...\n// \tn[1] * 2^(26*1) = 2^23 * 2^26  = 2^49\n// \tn[0] * 2^(26*0) = 1    * 2^0   = 1\n// \tSum: 0 + 0 + ... + 2^49 + 1 = 2^49 + 1\ntype fieldVal struct {\n\tn [10]uint32\n}\n\n// String returns the field value as a human-readable hex string.\nfunc (f fieldVal) String() string {\n\tt := new(fieldVal).Set(&f).Normalize()\n\treturn hex.EncodeToString(t.Bytes()[:])\n}\n\n// Zero sets the field value to zero.  A newly created field value is already\n// set to zero.  This function can be useful to clear an existing field value\n// for reuse.\nfunc (f *fieldVal) Zero() {\n\tf.n[0] = 0\n\tf.n[1] = 0\n\tf.n[2] = 0\n\tf.n[3] = 0\n\tf.n[4] = 0\n\tf.n[5] = 0\n\tf.n[6] = 0\n\tf.n[7] = 0\n\tf.n[8] = 0\n\tf.n[9] = 0\n}\n\n// Set sets the field value equal to the passed value.\n//\n// The field value is returned to support chaining.  This enables syntax like:\n// f := new(fieldVal).Set(f2).Add(1) so that f = f2 + 1 where f2 is not\n// modified.\nfunc (f *fieldVal) Set(val *fieldVal) *fieldVal {\n\t*f = *val\n\treturn f\n}\n\n// SetInt sets the field value to the passed integer.  This is a convenience\n// function since it is fairly common to perform some arithemetic with small\n// native integers.\n//\n// The field value is returned to support chaining.  This enables syntax such\n// as f := new(fieldVal).SetInt(2).Mul(f2) so that f = 2 * f2.\nfunc (f *fieldVal) SetInt(ui uint) *fieldVal {\n\tf.Zero()\n\tf.n[0] = uint32(ui)\n\treturn f\n}\n\n// SetBytes packs the passed 32-byte big-endian value into the internal field\n// value representation.\n//\n// The field value is returned to support chaining.  This enables syntax like:\n// f := new(fieldVal).SetBytes(byteArray).Mul(f2) so that f = ba * f2.\nfunc (f *fieldVal) SetBytes(b *[32]byte) *fieldVal {\n\t// Pack the 256 total bits across the 10 uint32 words with a max of\n\t// 26-bits per word.  This could be done with a couple of for loops,\n\t// but this unrolled version is significantly faster.  Benchmarks show\n\t// this is about 34 times faster than the variant which uses loops.\n\tf.n[0] = uint32(b[31]) | uint32(b[30])<<8 | uint32(b[29])<<16 |\n\t\t(uint32(b[28])&twoBitsMask)<<24\n\tf.n[1] = uint32(b[28])>>2 | uint32(b[27])<<6 | uint32(b[26])<<14 |\n\t\t(uint32(b[25])&fourBitsMask)<<22\n\tf.n[2] = uint32(b[25])>>4 | uint32(b[24])<<4 | uint32(b[23])<<12 |\n\t\t(uint32(b[22])&sixBitsMask)<<20\n\tf.n[3] = uint32(b[22])>>6 | uint32(b[21])<<2 | uint32(b[20])<<10 |\n\t\tuint32(b[19])<<18\n\tf.n[4] = uint32(b[18]) | uint32(b[17])<<8 | uint32(b[16])<<16 |\n\t\t(uint32(b[15])&twoBitsMask)<<24\n\tf.n[5] = uint32(b[15])>>2 | uint32(b[14])<<6 | uint32(b[13])<<14 |\n\t\t(uint32(b[12])&fourBitsMask)<<22\n\tf.n[6] = uint32(b[12])>>4 | uint32(b[11])<<4 | uint32(b[10])<<12 |\n\t\t(uint32(b[9])&sixBitsMask)<<20\n\tf.n[7] = uint32(b[9])>>6 | uint32(b[8])<<2 | uint32(b[7])<<10 |\n\t\tuint32(b[6])<<18\n\tf.n[8] = uint32(b[5]) | uint32(b[4])<<8 | uint32(b[3])<<16 |\n\t\t(uint32(b[2])&twoBitsMask)<<24\n\tf.n[9] = uint32(b[2])>>2 | uint32(b[1])<<6 | uint32(b[0])<<14\n\treturn f\n}\n\n// SetByteSlice packs the passed big-endian value into the internal field value\n// representation.  Only the first 32-bytes are used.  As a result, it is up to\n// the caller to ensure numbers of the appropriate size are used or the value\n// will be truncated.\n//\n// The field value is returned to support chaining.  This enables syntax like:\n// f := new(fieldVal).SetByteSlice(byteSlice)\nfunc (f *fieldVal) SetByteSlice(b []byte) *fieldVal {\n\tvar b32 [32]byte\n\tfor i := 0; i < len(b); i++ {\n\t\tif i < 32 {\n\t\t\tb32[i+(32-len(b))] = b[i]\n\t\t}\n\t}\n\treturn f.SetBytes(&b32)\n}\n\n// SetHex decodes the passed big-endian hex string into the internal field value\n// representation.  Only the first 32-bytes are used.\n//\n// The field value is returned to support chaining.  This enables syntax like:\n// f := new(fieldVal).SetHex(\"0abc\").Add(1) so that f = 0x0abc + 1\nfunc (f *fieldVal) SetHex(hexString string) *fieldVal {\n\tif len(hexString)%2 != 0 {\n\t\thexString = \"0\" + hexString\n\t}\n\tbytes, _ := hex.DecodeString(hexString)\n\treturn f.SetByteSlice(bytes)\n}\n\n// Normalize normalizes the internal field words into the desired range and\n// performs fast modular reduction over the secp256k1 prime by making use of the\n// special form of the prime.\nfunc (f *fieldVal) Normalize() *fieldVal {\n\t// The field representation leaves 6 bits of overflow in each word so\n\t// intermediate calculations can be performed without needing to\n\t// propagate the carry to each higher word during the calculations.  In\n\t// order to normalize, we need to \"compact\" the full 256-bit value to\n\t// the right while propagating any carries through to the high order\n\t// word.\n\t//\n\t// Since this field is doing arithmetic modulo the secp256k1 prime, we\n\t// also need to perform modular reduction over the prime.\n\t//\n\t// Per [HAC] section 14.3.4: Reduction method of moduli of special form,\n\t// when the modulus is of the special form m = b^t - c, highly efficient\n\t// reduction can be achieved.\n\t//\n\t// The secp256k1 prime is equivalent to 2^256 - 4294968273, so it fits\n\t// this criteria.\n\t//\n\t// 4294968273 in field representation (base 2^26) is:\n\t// n[0] = 977\n\t// n[1] = 64\n\t// That is to say (2^26 * 64) + 977 = 4294968273\n\t//\n\t// The algorithm presented in the referenced section typically repeats\n\t// until the quotient is zero.  However, due to our field representation\n\t// we already know to within one reduction how many times we would need\n\t// to repeat as it's the uppermost bits of the high order word.  Thus we\n\t// can simply multiply the magnitude by the field representation of the\n\t// prime and do a single iteration.  After this step there might be an\n\t// additional carry to bit 256 (bit 22 of the high order word).\n\tt9 := f.n[9]\n\tm := t9 >> fieldMSBBits\n\tt9 = t9 & fieldMSBMask\n\tt0 := f.n[0] + m*977\n\tt1 := (t0 >> fieldBase) + f.n[1] + (m << 6)\n\tt0 = t0 & fieldBaseMask\n\tt2 := (t1 >> fieldBase) + f.n[2]\n\tt1 = t1 & fieldBaseMask\n\tt3 := (t2 >> fieldBase) + f.n[3]\n\tt2 = t2 & fieldBaseMask\n\tt4 := (t3 >> fieldBase) + f.n[4]\n\tt3 = t3 & fieldBaseMask\n\tt5 := (t4 >> fieldBase) + f.n[5]\n\tt4 = t4 & fieldBaseMask\n\tt6 := (t5 >> fieldBase) + f.n[6]\n\tt5 = t5 & fieldBaseMask\n\tt7 := (t6 >> fieldBase) + f.n[7]\n\tt6 = t6 & fieldBaseMask\n\tt8 := (t7 >> fieldBase) + f.n[8]\n\tt7 = t7 & fieldBaseMask\n\tt9 = (t8 >> fieldBase) + t9\n\tt8 = t8 & fieldBaseMask\n\n\t// At this point, the magnitude is guaranteed to be one, however, the\n\t// value could still be greater than the prime if there was either a\n\t// carry through to bit 256 (bit 22 of the higher order word) or the\n\t// value is greater than or equal to the field characteristic.  The\n\t// following determines if either or these conditions are true and does\n\t// the final reduction in constant time.\n\t//\n\t// Note that the if/else statements here intentionally do the bitwise\n\t// operators even when it won't change the value to ensure constant time\n\t// between the branches.  Also note that 'm' will be zero when neither\n\t// of the aforementioned conditions are true and the value will not be\n\t// changed when 'm' is zero.\n\tm = 1\n\tif t9 == fieldMSBMask {\n\t\tm &= 1\n\t} else {\n\t\tm &= 0\n\t}\n\tif t2&t3&t4&t5&t6&t7&t8 == fieldBaseMask {\n\t\tm &= 1\n\t} else {\n\t\tm &= 0\n\t}\n\tif ((t0+977)>>fieldBase + t1 + 64) > fieldBaseMask {\n\t\tm &= 1\n\t} else {\n\t\tm &= 0\n\t}\n\tif t9>>fieldMSBBits != 0 {\n\t\tm |= 1\n\t} else {\n\t\tm |= 0\n\t}\n\tt0 = t0 + m*977\n\tt1 = (t0 >> fieldBase) + t1 + (m << 6)\n\tt0 = t0 & fieldBaseMask\n\tt2 = (t1 >> fieldBase) + t2\n\tt1 = t1 & fieldBaseMask\n\tt3 = (t2 >> fieldBase) + t3\n\tt2 = t2 & fieldBaseMask\n\tt4 = (t3 >> fieldBase) + t4\n\tt3 = t3 & fieldBaseMask\n\tt5 = (t4 >> fieldBase) + t5\n\tt4 = t4 & fieldBaseMask\n\tt6 = (t5 >> fieldBase) + t6\n\tt5 = t5 & fieldBaseMask\n\tt7 = (t6 >> fieldBase) + t7\n\tt6 = t6 & fieldBaseMask\n\tt8 = (t7 >> fieldBase) + t8\n\tt7 = t7 & fieldBaseMask\n\tt9 = (t8 >> fieldBase) + t9\n\tt8 = t8 & fieldBaseMask\n\tt9 = t9 & fieldMSBMask // Remove potential multiple of 2^256.\n\n\t// Finally, set the normalized and reduced words.\n\tf.n[0] = t0\n\tf.n[1] = t1\n\tf.n[2] = t2\n\tf.n[3] = t3\n\tf.n[4] = t4\n\tf.n[5] = t5\n\tf.n[6] = t6\n\tf.n[7] = t7\n\tf.n[8] = t8\n\tf.n[9] = t9\n\treturn f\n}\n\n// PutBytes unpacks the field value to a 32-byte big-endian value using the\n// passed byte array.  There is a similar function, Bytes, which unpacks the\n// field value into a new array and returns that.  This version is provided\n// since it can be useful to cut down on the number of allocations by allowing\n// the caller to reuse a buffer.\n//\n// The field value must be normalized for this function to return the correct\n// result.\nfunc (f *fieldVal) PutBytes(b *[32]byte) {\n\t// Unpack the 256 total bits from the 10 uint32 words with a max of\n\t// 26-bits per word.  This could be done with a couple of for loops,\n\t// but this unrolled version is a bit faster.  Benchmarks show this is\n\t// about 10 times faster than the variant which uses loops.\n\tb[31] = byte(f.n[0] & eightBitsMask)\n\tb[30] = byte((f.n[0] >> 8) & eightBitsMask)\n\tb[29] = byte((f.n[0] >> 16) & eightBitsMask)\n\tb[28] = byte((f.n[0]>>24)&twoBitsMask | (f.n[1]&sixBitsMask)<<2)\n\tb[27] = byte((f.n[1] >> 6) & eightBitsMask)\n\tb[26] = byte((f.n[1] >> 14) & eightBitsMask)\n\tb[25] = byte((f.n[1]>>22)&fourBitsMask | (f.n[2]&fourBitsMask)<<4)\n\tb[24] = byte((f.n[2] >> 4) & eightBitsMask)\n\tb[23] = byte((f.n[2] >> 12) & eightBitsMask)\n\tb[22] = byte((f.n[2]>>20)&sixBitsMask | (f.n[3]&twoBitsMask)<<6)\n\tb[21] = byte((f.n[3] >> 2) & eightBitsMask)\n\tb[20] = byte((f.n[3] >> 10) & eightBitsMask)\n\tb[19] = byte((f.n[3] >> 18) & eightBitsMask)\n\tb[18] = byte(f.n[4] & eightBitsMask)\n\tb[17] = byte((f.n[4] >> 8) & eightBitsMask)\n\tb[16] = byte((f.n[4] >> 16) & eightBitsMask)\n\tb[15] = byte((f.n[4]>>24)&twoBitsMask | (f.n[5]&sixBitsMask)<<2)\n\tb[14] = byte((f.n[5] >> 6) & eightBitsMask)\n\tb[13] = byte((f.n[5] >> 14) & eightBitsMask)\n\tb[12] = byte((f.n[5]>>22)&fourBitsMask | (f.n[6]&fourBitsMask)<<4)\n\tb[11] = byte((f.n[6] >> 4) & eightBitsMask)\n\tb[10] = byte((f.n[6] >> 12) & eightBitsMask)\n\tb[9] = byte((f.n[6]>>20)&sixBitsMask | (f.n[7]&twoBitsMask)<<6)\n\tb[8] = byte((f.n[7] >> 2) & eightBitsMask)\n\tb[7] = byte((f.n[7] >> 10) & eightBitsMask)\n\tb[6] = byte((f.n[7] >> 18) & eightBitsMask)\n\tb[5] = byte(f.n[8] & eightBitsMask)\n\tb[4] = byte((f.n[8] >> 8) & eightBitsMask)\n\tb[3] = byte((f.n[8] >> 16) & eightBitsMask)\n\tb[2] = byte((f.n[8]>>24)&twoBitsMask | (f.n[9]&sixBitsMask)<<2)\n\tb[1] = byte((f.n[9] >> 6) & eightBitsMask)\n\tb[0] = byte((f.n[9] >> 14) & eightBitsMask)\n}\n\n// Bytes unpacks the field value to a 32-byte big-endian value.  See PutBytes\n// for a variant that allows the a buffer to be passed which can be useful to\n// to cut down on the number of allocations by allowing the caller to reuse a\n// buffer.\n//\n// The field value must be normalized for this function to return correct\n// result.\nfunc (f *fieldVal) Bytes() *[32]byte {\n\tb := new([32]byte)\n\tf.PutBytes(b)\n\treturn b\n}\n\n// IsZero returns whether or not the field value is equal to zero.\nfunc (f *fieldVal) IsZero() bool {\n\t// The value can only be zero if no bits are set in any of the words.\n\t// This is a constant time implementation.\n\tbits := f.n[0] | f.n[1] | f.n[2] | f.n[3] | f.n[4] |\n\t\tf.n[5] | f.n[6] | f.n[7] | f.n[8] | f.n[9]\n\n\treturn bits == 0\n}\n\n// IsOdd returns whether or not the field value is an odd number.\n//\n// The field value must be normalized for this function to return correct\n// result.\nfunc (f *fieldVal) IsOdd() bool {\n\t// Only odd numbers have the bottom bit set.\n\treturn f.n[0]&1 == 1\n}\n\n// Equals returns whether or not the two field values are the same.  Both\n// field values being compared must be normalized for this function to return\n// the correct result.\nfunc (f *fieldVal) Equals(val *fieldVal) bool {\n\t// Xor only sets bits when they are different, so the two field values\n\t// can only be the same if no bits are set after xoring each word.\n\t// This is a constant time implementation.\n\tbits := (f.n[0] ^ val.n[0]) | (f.n[1] ^ val.n[1]) | (f.n[2] ^ val.n[2]) |\n\t\t(f.n[3] ^ val.n[3]) | (f.n[4] ^ val.n[4]) | (f.n[5] ^ val.n[5]) |\n\t\t(f.n[6] ^ val.n[6]) | (f.n[7] ^ val.n[7]) | (f.n[8] ^ val.n[8]) |\n\t\t(f.n[9] ^ val.n[9])\n\n\treturn bits == 0\n}\n\n// NegateVal negates the passed value and stores the result in f.  The caller\n// must provide the magnitude of the passed value for a correct result.\n//\n// The field value is returned to support chaining.  This enables syntax like:\n// f.NegateVal(f2).AddInt(1) so that f = -f2 + 1.\nfunc (f *fieldVal) NegateVal(val *fieldVal, magnitude uint32) *fieldVal {\n\t// Negation in the field is just the prime minus the value.  However,\n\t// in order to allow negation against a field value without having to\n\t// normalize/reduce it first, multiply by the magnitude (that is how\n\t// \"far\" away it is from the normalized value) to adjust.  Also, since\n\t// negating a value pushes it one more order of magnitude away from the\n\t// normalized range, add 1 to compensate.\n\t//\n\t// For some intuition here, imagine you're performing mod 12 arithmetic\n\t// (picture a clock) and you are negating the number 7.  So you start at\n\t// 12 (which is of course 0 under mod 12) and count backwards (left on\n\t// the clock) 7 times to arrive at 5.  Notice this is just 12-7 = 5.\n\t// Now, assume you're starting with 19, which is a number that is\n\t// already larger than the modulus and congruent to 7 (mod 12).  When a\n\t// value is already in the desired range, its magnitude is 1.  Since 19\n\t// is an additional \"step\", its magnitude (mod 12) is 2.  Since any\n\t// multiple of the modulus is conguent to zero (mod m), the answer can\n\t// be shortcut by simply mulplying the magnitude by the modulus and\n\t// subtracting.  Keeping with the example, this would be (2*12)-19 = 5.\n\tf.n[0] = (magnitude+1)*fieldPrimeWordZero - val.n[0]\n\tf.n[1] = (magnitude+1)*fieldPrimeWordOne - val.n[1]\n\tf.n[2] = (magnitude+1)*fieldBaseMask - val.n[2]\n\tf.n[3] = (magnitude+1)*fieldBaseMask - val.n[3]\n\tf.n[4] = (magnitude+1)*fieldBaseMask - val.n[4]\n\tf.n[5] = (magnitude+1)*fieldBaseMask - val.n[5]\n\tf.n[6] = (magnitude+1)*fieldBaseMask - val.n[6]\n\tf.n[7] = (magnitude+1)*fieldBaseMask - val.n[7]\n\tf.n[8] = (magnitude+1)*fieldBaseMask - val.n[8]\n\tf.n[9] = (magnitude+1)*fieldMSBMask - val.n[9]\n\n\treturn f\n}\n\n// Negate negates the field value.  The existing field value is modified.  The\n// caller must provide the magnitude of the field value for a correct result.\n//\n// The field value is returned to support chaining.  This enables syntax like:\n// f.Negate().AddInt(1) so that f = -f + 1.\nfunc (f *fieldVal) Negate(magnitude uint32) *fieldVal {\n\treturn f.NegateVal(f, magnitude)\n}\n\n// AddInt adds the passed integer to the existing field value and stores the\n// result in f.  This is a convenience function since it is fairly common to\n// perform some arithemetic with small native integers.\n//\n// The field value is returned to support chaining.  This enables syntax like:\n// f.AddInt(1).Add(f2) so that f = f + 1 + f2.\nfunc (f *fieldVal) AddInt(ui uint) *fieldVal {\n\t// Since the field representation intentionally provides overflow bits,\n\t// it's ok to use carryless addition as the carry bit is safely part of\n\t// the word and will be normalized out.\n\tf.n[0] += uint32(ui)\n\n\treturn f\n}\n\n// Add adds the passed value to the existing field value and stores the result\n// in f.\n//\n// The field value is returned to support chaining.  This enables syntax like:\n// f.Add(f2).AddInt(1) so that f = f + f2 + 1.\nfunc (f *fieldVal) Add(val *fieldVal) *fieldVal {\n\t// Since the field representation intentionally provides overflow bits,\n\t// it's ok to use carryless addition as the carry bit is safely part of\n\t// each word and will be normalized out.  This could obviously be done\n\t// in a loop, but the unrolled version is faster.\n\tf.n[0] += val.n[0]\n\tf.n[1] += val.n[1]\n\tf.n[2] += val.n[2]\n\tf.n[3] += val.n[3]\n\tf.n[4] += val.n[4]\n\tf.n[5] += val.n[5]\n\tf.n[6] += val.n[6]\n\tf.n[7] += val.n[7]\n\tf.n[8] += val.n[8]\n\tf.n[9] += val.n[9]\n\n\treturn f\n}\n\n// Add2 adds the passed two field values together and stores the result in f.\n//\n// The field value is returned to support chaining.  This enables syntax like:\n// f3.Add2(f, f2).AddInt(1) so that f3 = f + f2 + 1.\nfunc (f *fieldVal) Add2(val *fieldVal, val2 *fieldVal) *fieldVal {\n\t// Since the field representation intentionally provides overflow bits,\n\t// it's ok to use carryless addition as the carry bit is safely part of\n\t// each word and will be normalized out.  This could obviously be done\n\t// in a loop, but the unrolled version is faster.\n\tf.n[0] = val.n[0] + val2.n[0]\n\tf.n[1] = val.n[1] + val2.n[1]\n\tf.n[2] = val.n[2] + val2.n[2]\n\tf.n[3] = val.n[3] + val2.n[3]\n\tf.n[4] = val.n[4] + val2.n[4]\n\tf.n[5] = val.n[5] + val2.n[5]\n\tf.n[6] = val.n[6] + val2.n[6]\n\tf.n[7] = val.n[7] + val2.n[7]\n\tf.n[8] = val.n[8] + val2.n[8]\n\tf.n[9] = val.n[9] + val2.n[9]\n\n\treturn f\n}\n\n// MulInt multiplies the field value by the passed int and stores the result in\n// f.  Note that this function can overflow if multiplying the value by any of\n// the individual words exceeds a max uint32.  Therefore it is important that\n// the caller ensures no overflows will occur before using this function.\n//\n// The field value is returned to support chaining.  This enables syntax like:\n// f.MulInt(2).Add(f2) so that f = 2 * f + f2.\nfunc (f *fieldVal) MulInt(val uint) *fieldVal {\n\t// Since each word of the field representation can hold up to\n\t// fieldOverflowBits extra bits which will be normalized out, it's safe\n\t// to multiply each word without using a larger type or carry\n\t// propagation so long as the values won't overflow a uint32.  This\n\t// could obviously be done in a loop, but the unrolled version is\n\t// faster.\n\tui := uint32(val)\n\tf.n[0] *= ui\n\tf.n[1] *= ui\n\tf.n[2] *= ui\n\tf.n[3] *= ui\n\tf.n[4] *= ui\n\tf.n[5] *= ui\n\tf.n[6] *= ui\n\tf.n[7] *= ui\n\tf.n[8] *= ui\n\tf.n[9] *= ui\n\n\treturn f\n}\n\n// Mul multiplies the passed value to the existing field value and stores the\n// result in f.  Note that this function can overflow if multiplying any\n// of the individual words exceeds a max uint32.  In practice, this means the\n// magnitude of either value involved in the multiplication must be a max of\n// 8.\n//\n// The field value is returned to support chaining.  This enables syntax like:\n// f.Mul(f2).AddInt(1) so that f = (f * f2) + 1.\nfunc (f *fieldVal) Mul(val *fieldVal) *fieldVal {\n\treturn f.Mul2(f, val)\n}\n\n// Mul2 multiplies the passed two field values together and stores the result\n// result in f.  Note that this function can overflow if multiplying any of\n// the individual words exceeds a max uint32.  In practice, this means the\n// magnitude of either value involved in the multiplication must be a max of\n// 8.\n//\n// The field value is returned to support chaining.  This enables syntax like:\n// f3.Mul2(f, f2).AddInt(1) so that f3 = (f * f2) + 1.\nfunc (f *fieldVal) Mul2(val *fieldVal, val2 *fieldVal) *fieldVal {\n\t// This could be done with a couple of for loops and an array to store\n\t// the intermediate terms, but this unrolled version is significantly\n\t// faster.\n\n\t// Terms for 2^(fieldBase*0).\n\tm := uint64(val.n[0]) * uint64(val2.n[0])\n\tt0 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*1).\n\tm = (m >> fieldBase) +\n\t\tuint64(val.n[0])*uint64(val2.n[1]) +\n\t\tuint64(val.n[1])*uint64(val2.n[0])\n\tt1 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*2).\n\tm = (m >> fieldBase) +\n\t\tuint64(val.n[0])*uint64(val2.n[2]) +\n\t\tuint64(val.n[1])*uint64(val2.n[1]) +\n\t\tuint64(val.n[2])*uint64(val2.n[0])\n\tt2 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*3).\n\tm = (m >> fieldBase) +\n\t\tuint64(val.n[0])*uint64(val2.n[3]) +\n\t\tuint64(val.n[1])*uint64(val2.n[2]) +\n\t\tuint64(val.n[2])*uint64(val2.n[1]) +\n\t\tuint64(val.n[3])*uint64(val2.n[0])\n\tt3 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*4).\n\tm = (m >> fieldBase) +\n\t\tuint64(val.n[0])*uint64(val2.n[4]) +\n\t\tuint64(val.n[1])*uint64(val2.n[3]) +\n\t\tuint64(val.n[2])*uint64(val2.n[2]) +\n\t\tuint64(val.n[3])*uint64(val2.n[1]) +\n\t\tuint64(val.n[4])*uint64(val2.n[0])\n\tt4 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*5).\n\tm = (m >> fieldBase) +\n\t\tuint64(val.n[0])*uint64(val2.n[5]) +\n\t\tuint64(val.n[1])*uint64(val2.n[4]) +\n\t\tuint64(val.n[2])*uint64(val2.n[3]) +\n\t\tuint64(val.n[3])*uint64(val2.n[2]) +\n\t\tuint64(val.n[4])*uint64(val2.n[1]) +\n\t\tuint64(val.n[5])*uint64(val2.n[0])\n\tt5 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*6).\n\tm = (m >> fieldBase) +\n\t\tuint64(val.n[0])*uint64(val2.n[6]) +\n\t\tuint64(val.n[1])*uint64(val2.n[5]) +\n\t\tuint64(val.n[2])*uint64(val2.n[4]) +\n\t\tuint64(val.n[3])*uint64(val2.n[3]) +\n\t\tuint64(val.n[4])*uint64(val2.n[2]) +\n\t\tuint64(val.n[5])*uint64(val2.n[1]) +\n\t\tuint64(val.n[6])*uint64(val2.n[0])\n\tt6 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*7).\n\tm = (m >> fieldBase) +\n\t\tuint64(val.n[0])*uint64(val2.n[7]) +\n\t\tuint64(val.n[1])*uint64(val2.n[6]) +\n\t\tuint64(val.n[2])*uint64(val2.n[5]) +\n\t\tuint64(val.n[3])*uint64(val2.n[4]) +\n\t\tuint64(val.n[4])*uint64(val2.n[3]) +\n\t\tuint64(val.n[5])*uint64(val2.n[2]) +\n\t\tuint64(val.n[6])*uint64(val2.n[1]) +\n\t\tuint64(val.n[7])*uint64(val2.n[0])\n\tt7 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*8).\n\tm = (m >> fieldBase) +\n\t\tuint64(val.n[0])*uint64(val2.n[8]) +\n\t\tuint64(val.n[1])*uint64(val2.n[7]) +\n\t\tuint64(val.n[2])*uint64(val2.n[6]) +\n\t\tuint64(val.n[3])*uint64(val2.n[5]) +\n\t\tuint64(val.n[4])*uint64(val2.n[4]) +\n\t\tuint64(val.n[5])*uint64(val2.n[3]) +\n\t\tuint64(val.n[6])*uint64(val2.n[2]) +\n\t\tuint64(val.n[7])*uint64(val2.n[1]) +\n\t\tuint64(val.n[8])*uint64(val2.n[0])\n\tt8 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*9).\n\tm = (m >> fieldBase) +\n\t\tuint64(val.n[0])*uint64(val2.n[9]) +\n\t\tuint64(val.n[1])*uint64(val2.n[8]) +\n\t\tuint64(val.n[2])*uint64(val2.n[7]) +\n\t\tuint64(val.n[3])*uint64(val2.n[6]) +\n\t\tuint64(val.n[4])*uint64(val2.n[5]) +\n\t\tuint64(val.n[5])*uint64(val2.n[4]) +\n\t\tuint64(val.n[6])*uint64(val2.n[3]) +\n\t\tuint64(val.n[7])*uint64(val2.n[2]) +\n\t\tuint64(val.n[8])*uint64(val2.n[1]) +\n\t\tuint64(val.n[9])*uint64(val2.n[0])\n\tt9 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*10).\n\tm = (m >> fieldBase) +\n\t\tuint64(val.n[1])*uint64(val2.n[9]) +\n\t\tuint64(val.n[2])*uint64(val2.n[8]) +\n\t\tuint64(val.n[3])*uint64(val2.n[7]) +\n\t\tuint64(val.n[4])*uint64(val2.n[6]) +\n\t\tuint64(val.n[5])*uint64(val2.n[5]) +\n\t\tuint64(val.n[6])*uint64(val2.n[4]) +\n\t\tuint64(val.n[7])*uint64(val2.n[3]) +\n\t\tuint64(val.n[8])*uint64(val2.n[2]) +\n\t\tuint64(val.n[9])*uint64(val2.n[1])\n\tt10 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*11).\n\tm = (m >> fieldBase) +\n\t\tuint64(val.n[2])*uint64(val2.n[9]) +\n\t\tuint64(val.n[3])*uint64(val2.n[8]) +\n\t\tuint64(val.n[4])*uint64(val2.n[7]) +\n\t\tuint64(val.n[5])*uint64(val2.n[6]) +\n\t\tuint64(val.n[6])*uint64(val2.n[5]) +\n\t\tuint64(val.n[7])*uint64(val2.n[4]) +\n\t\tuint64(val.n[8])*uint64(val2.n[3]) +\n\t\tuint64(val.n[9])*uint64(val2.n[2])\n\tt11 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*12).\n\tm = (m >> fieldBase) +\n\t\tuint64(val.n[3])*uint64(val2.n[9]) +\n\t\tuint64(val.n[4])*uint64(val2.n[8]) +\n\t\tuint64(val.n[5])*uint64(val2.n[7]) +\n\t\tuint64(val.n[6])*uint64(val2.n[6]) +\n\t\tuint64(val.n[7])*uint64(val2.n[5]) +\n\t\tuint64(val.n[8])*uint64(val2.n[4]) +\n\t\tuint64(val.n[9])*uint64(val2.n[3])\n\tt12 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*13).\n\tm = (m >> fieldBase) +\n\t\tuint64(val.n[4])*uint64(val2.n[9]) +\n\t\tuint64(val.n[5])*uint64(val2.n[8]) +\n\t\tuint64(val.n[6])*uint64(val2.n[7]) +\n\t\tuint64(val.n[7])*uint64(val2.n[6]) +\n\t\tuint64(val.n[8])*uint64(val2.n[5]) +\n\t\tuint64(val.n[9])*uint64(val2.n[4])\n\tt13 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*14).\n\tm = (m >> fieldBase) +\n\t\tuint64(val.n[5])*uint64(val2.n[9]) +\n\t\tuint64(val.n[6])*uint64(val2.n[8]) +\n\t\tuint64(val.n[7])*uint64(val2.n[7]) +\n\t\tuint64(val.n[8])*uint64(val2.n[6]) +\n\t\tuint64(val.n[9])*uint64(val2.n[5])\n\tt14 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*15).\n\tm = (m >> fieldBase) +\n\t\tuint64(val.n[6])*uint64(val2.n[9]) +\n\t\tuint64(val.n[7])*uint64(val2.n[8]) +\n\t\tuint64(val.n[8])*uint64(val2.n[7]) +\n\t\tuint64(val.n[9])*uint64(val2.n[6])\n\tt15 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*16).\n\tm = (m >> fieldBase) +\n\t\tuint64(val.n[7])*uint64(val2.n[9]) +\n\t\tuint64(val.n[8])*uint64(val2.n[8]) +\n\t\tuint64(val.n[9])*uint64(val2.n[7])\n\tt16 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*17).\n\tm = (m >> fieldBase) +\n\t\tuint64(val.n[8])*uint64(val2.n[9]) +\n\t\tuint64(val.n[9])*uint64(val2.n[8])\n\tt17 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*18).\n\tm = (m >> fieldBase) + uint64(val.n[9])*uint64(val2.n[9])\n\tt18 := m & fieldBaseMask\n\n\t// What's left is for 2^(fieldBase*19).\n\tt19 := m >> fieldBase\n\n\t// At this point, all of the terms are grouped into their respective\n\t// base.\n\t//\n\t// Per [HAC] section 14.3.4: Reduction method of moduli of special form,\n\t// when the modulus is of the special form m = b^t - c, highly efficient\n\t// reduction can be achieved per the provided algorithm.\n\t//\n\t// The secp256k1 prime is equivalent to 2^256 - 4294968273, so it fits\n\t// this criteria.\n\t//\n\t// 4294968273 in field representation (base 2^26) is:\n\t// n[0] = 977\n\t// n[1] = 64\n\t// That is to say (2^26 * 64) + 977 = 4294968273\n\t//\n\t// Since each word is in base 26, the upper terms (t10 and up) start\n\t// at 260 bits (versus the final desired range of 256 bits), so the\n\t// field representation of 'c' from above needs to be adjusted for the\n\t// extra 4 bits by multiplying it by 2^4 = 16.  4294968273 * 16 =\n\t// 68719492368.  Thus, the adjusted field representation of 'c' is:\n\t// n[0] = 977 * 16 = 15632\n\t// n[1] = 64 * 16 = 1024\n\t// That is to say (2^26 * 1024) + 15632 = 68719492368\n\t//\n\t// To reduce the final term, t19, the entire 'c' value is needed instead\n\t// of only n[0] because there are no more terms left to handle n[1].\n\t// This means there might be some magnitude left in the upper bits that\n\t// is handled below.\n\tm = t0 + t10*15632\n\tt0 = m & fieldBaseMask\n\tm = (m >> fieldBase) + t1 + t10*1024 + t11*15632\n\tt1 = m & fieldBaseMask\n\tm = (m >> fieldBase) + t2 + t11*1024 + t12*15632\n\tt2 = m & fieldBaseMask\n\tm = (m >> fieldBase) + t3 + t12*1024 + t13*15632\n\tt3 = m & fieldBaseMask\n\tm = (m >> fieldBase) + t4 + t13*1024 + t14*15632\n\tt4 = m & fieldBaseMask\n\tm = (m >> fieldBase) + t5 + t14*1024 + t15*15632\n\tt5 = m & fieldBaseMask\n\tm = (m >> fieldBase) + t6 + t15*1024 + t16*15632\n\tt6 = m & fieldBaseMask\n\tm = (m >> fieldBase) + t7 + t16*1024 + t17*15632\n\tt7 = m & fieldBaseMask\n\tm = (m >> fieldBase) + t8 + t17*1024 + t18*15632\n\tt8 = m & fieldBaseMask\n\tm = (m >> fieldBase) + t9 + t18*1024 + t19*68719492368\n\tt9 = m & fieldMSBMask\n\tm = m >> fieldMSBBits\n\n\t// At this point, if the magnitude is greater than 0, the overall value\n\t// is greater than the max possible 256-bit value.  In particular, it is\n\t// \"how many times larger\" than the max value it is.\n\t//\n\t// The algorithm presented in [HAC] section 14.3.4 repeats until the\n\t// quotient is zero.  However, due to the above, we already know at\n\t// least how many times we would need to repeat as it's the value\n\t// currently in m.  Thus we can simply multiply the magnitude by the\n\t// field representation of the prime and do a single iteration.  Notice\n\t// that nothing will be changed when the magnitude is zero, so we could\n\t// skip this in that case, however always running regardless allows it\n\t// to run in constant time.  The final result will be in the range\n\t// 0 <= result <= prime + (2^64 - c), so it is guaranteed to have a\n\t// magnitude of 1, but it is denormalized.\n\td := t0 + m*977\n\tf.n[0] = uint32(d & fieldBaseMask)\n\td = (d >> fieldBase) + t1 + m*64\n\tf.n[1] = uint32(d & fieldBaseMask)\n\tf.n[2] = uint32((d >> fieldBase) + t2)\n\tf.n[3] = uint32(t3)\n\tf.n[4] = uint32(t4)\n\tf.n[5] = uint32(t5)\n\tf.n[6] = uint32(t6)\n\tf.n[7] = uint32(t7)\n\tf.n[8] = uint32(t8)\n\tf.n[9] = uint32(t9)\n\n\treturn f\n}\n\n// Square squares the field value.  The existing field value is modified.  Note\n// that this function can overflow if multiplying any of the individual words\n// exceeds a max uint32.  In practice, this means the magnitude of the field\n// must be a max of 8 to prevent overflow.\n//\n// The field value is returned to support chaining.  This enables syntax like:\n// f.Square().Mul(f2) so that f = f^2 * f2.\nfunc (f *fieldVal) Square() *fieldVal {\n\treturn f.SquareVal(f)\n}\n\n// SquareVal squares the passed value and stores the result in f.  Note that\n// this function can overflow if multiplying any of the individual words\n// exceeds a max uint32.  In practice, this means the magnitude of the field\n// being squred must be a max of 8 to prevent overflow.\n//\n// The field value is returned to support chaining.  This enables syntax like:\n// f3.SquareVal(f).Mul(f) so that f3 = f^2 * f = f^3.\nfunc (f *fieldVal) SquareVal(val *fieldVal) *fieldVal {\n\t// This could be done with a couple of for loops and an array to store\n\t// the intermediate terms, but this unrolled version is significantly\n\t// faster.\n\n\t// Terms for 2^(fieldBase*0).\n\tm := uint64(val.n[0]) * uint64(val.n[0])\n\tt0 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*1).\n\tm = (m >> fieldBase) + 2*uint64(val.n[0])*uint64(val.n[1])\n\tt1 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*2).\n\tm = (m >> fieldBase) +\n\t\t2*uint64(val.n[0])*uint64(val.n[2]) +\n\t\tuint64(val.n[1])*uint64(val.n[1])\n\tt2 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*3).\n\tm = (m >> fieldBase) +\n\t\t2*uint64(val.n[0])*uint64(val.n[3]) +\n\t\t2*uint64(val.n[1])*uint64(val.n[2])\n\tt3 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*4).\n\tm = (m >> fieldBase) +\n\t\t2*uint64(val.n[0])*uint64(val.n[4]) +\n\t\t2*uint64(val.n[1])*uint64(val.n[3]) +\n\t\tuint64(val.n[2])*uint64(val.n[2])\n\tt4 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*5).\n\tm = (m >> fieldBase) +\n\t\t2*uint64(val.n[0])*uint64(val.n[5]) +\n\t\t2*uint64(val.n[1])*uint64(val.n[4]) +\n\t\t2*uint64(val.n[2])*uint64(val.n[3])\n\tt5 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*6).\n\tm = (m >> fieldBase) +\n\t\t2*uint64(val.n[0])*uint64(val.n[6]) +\n\t\t2*uint64(val.n[1])*uint64(val.n[5]) +\n\t\t2*uint64(val.n[2])*uint64(val.n[4]) +\n\t\tuint64(val.n[3])*uint64(val.n[3])\n\tt6 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*7).\n\tm = (m >> fieldBase) +\n\t\t2*uint64(val.n[0])*uint64(val.n[7]) +\n\t\t2*uint64(val.n[1])*uint64(val.n[6]) +\n\t\t2*uint64(val.n[2])*uint64(val.n[5]) +\n\t\t2*uint64(val.n[3])*uint64(val.n[4])\n\tt7 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*8).\n\tm = (m >> fieldBase) +\n\t\t2*uint64(val.n[0])*uint64(val.n[8]) +\n\t\t2*uint64(val.n[1])*uint64(val.n[7]) +\n\t\t2*uint64(val.n[2])*uint64(val.n[6]) +\n\t\t2*uint64(val.n[3])*uint64(val.n[5]) +\n\t\tuint64(val.n[4])*uint64(val.n[4])\n\tt8 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*9).\n\tm = (m >> fieldBase) +\n\t\t2*uint64(val.n[0])*uint64(val.n[9]) +\n\t\t2*uint64(val.n[1])*uint64(val.n[8]) +\n\t\t2*uint64(val.n[2])*uint64(val.n[7]) +\n\t\t2*uint64(val.n[3])*uint64(val.n[6]) +\n\t\t2*uint64(val.n[4])*uint64(val.n[5])\n\tt9 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*10).\n\tm = (m >> fieldBase) +\n\t\t2*uint64(val.n[1])*uint64(val.n[9]) +\n\t\t2*uint64(val.n[2])*uint64(val.n[8]) +\n\t\t2*uint64(val.n[3])*uint64(val.n[7]) +\n\t\t2*uint64(val.n[4])*uint64(val.n[6]) +\n\t\tuint64(val.n[5])*uint64(val.n[5])\n\tt10 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*11).\n\tm = (m >> fieldBase) +\n\t\t2*uint64(val.n[2])*uint64(val.n[9]) +\n\t\t2*uint64(val.n[3])*uint64(val.n[8]) +\n\t\t2*uint64(val.n[4])*uint64(val.n[7]) +\n\t\t2*uint64(val.n[5])*uint64(val.n[6])\n\tt11 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*12).\n\tm = (m >> fieldBase) +\n\t\t2*uint64(val.n[3])*uint64(val.n[9]) +\n\t\t2*uint64(val.n[4])*uint64(val.n[8]) +\n\t\t2*uint64(val.n[5])*uint64(val.n[7]) +\n\t\tuint64(val.n[6])*uint64(val.n[6])\n\tt12 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*13).\n\tm = (m >> fieldBase) +\n\t\t2*uint64(val.n[4])*uint64(val.n[9]) +\n\t\t2*uint64(val.n[5])*uint64(val.n[8]) +\n\t\t2*uint64(val.n[6])*uint64(val.n[7])\n\tt13 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*14).\n\tm = (m >> fieldBase) +\n\t\t2*uint64(val.n[5])*uint64(val.n[9]) +\n\t\t2*uint64(val.n[6])*uint64(val.n[8]) +\n\t\tuint64(val.n[7])*uint64(val.n[7])\n\tt14 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*15).\n\tm = (m >> fieldBase) +\n\t\t2*uint64(val.n[6])*uint64(val.n[9]) +\n\t\t2*uint64(val.n[7])*uint64(val.n[8])\n\tt15 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*16).\n\tm = (m >> fieldBase) +\n\t\t2*uint64(val.n[7])*uint64(val.n[9]) +\n\t\tuint64(val.n[8])*uint64(val.n[8])\n\tt16 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*17).\n\tm = (m >> fieldBase) + 2*uint64(val.n[8])*uint64(val.n[9])\n\tt17 := m & fieldBaseMask\n\n\t// Terms for 2^(fieldBase*18).\n\tm = (m >> fieldBase) + uint64(val.n[9])*uint64(val.n[9])\n\tt18 := m & fieldBaseMask\n\n\t// What's left is for 2^(fieldBase*19).\n\tt19 := m >> fieldBase\n\n\t// At this point, all of the terms are grouped into their respective\n\t// base.\n\t//\n\t// Per [HAC] section 14.3.4: Reduction method of moduli of special form,\n\t// when the modulus is of the special form m = b^t - c, highly efficient\n\t// reduction can be achieved per the provided algorithm.\n\t//\n\t// The secp256k1 prime is equivalent to 2^256 - 4294968273, so it fits\n\t// this criteria.\n\t//\n\t// 4294968273 in field representation (base 2^26) is:\n\t// n[0] = 977\n\t// n[1] = 64\n\t// That is to say (2^26 * 64) + 977 = 4294968273\n\t//\n\t// Since each word is in base 26, the upper terms (t10 and up) start\n\t// at 260 bits (versus the final desired range of 256 bits), so the\n\t// field representation of 'c' from above needs to be adjusted for the\n\t// extra 4 bits by multiplying it by 2^4 = 16.  4294968273 * 16 =\n\t// 68719492368.  Thus, the adjusted field representation of 'c' is:\n\t// n[0] = 977 * 16 = 15632\n\t// n[1] = 64 * 16 = 1024\n\t// That is to say (2^26 * 1024) + 15632 = 68719492368\n\t//\n\t// To reduce the final term, t19, the entire 'c' value is needed instead\n\t// of only n[0] because there are no more terms left to handle n[1].\n\t// This means there might be some magnitude left in the upper bits that\n\t// is handled below.\n\tm = t0 + t10*15632\n\tt0 = m & fieldBaseMask\n\tm = (m >> fieldBase) + t1 + t10*1024 + t11*15632\n\tt1 = m & fieldBaseMask\n\tm = (m >> fieldBase) + t2 + t11*1024 + t12*15632\n\tt2 = m & fieldBaseMask\n\tm = (m >> fieldBase) + t3 + t12*1024 + t13*15632\n\tt3 = m & fieldBaseMask\n\tm = (m >> fieldBase) + t4 + t13*1024 + t14*15632\n\tt4 = m & fieldBaseMask\n\tm = (m >> fieldBase) + t5 + t14*1024 + t15*15632\n\tt5 = m & fieldBaseMask\n\tm = (m >> fieldBase) + t6 + t15*1024 + t16*15632\n\tt6 = m & fieldBaseMask\n\tm = (m >> fieldBase) + t7 + t16*1024 + t17*15632\n\tt7 = m & fieldBaseMask\n\tm = (m >> fieldBase) + t8 + t17*1024 + t18*15632\n\tt8 = m & fieldBaseMask\n\tm = (m >> fieldBase) + t9 + t18*1024 + t19*68719492368\n\tt9 = m & fieldMSBMask\n\tm = m >> fieldMSBBits\n\n\t// At this point, if the magnitude is greater than 0, the overall value\n\t// is greater than the max possible 256-bit value.  In particular, it is\n\t// \"how many times larger\" than the max value it is.\n\t//\n\t// The algorithm presented in [HAC] section 14.3.4 repeats until the\n\t// quotient is zero.  However, due to the above, we already know at\n\t// least how many times we would need to repeat as it's the value\n\t// currently in m.  Thus we can simply multiply the magnitude by the\n\t// field representation of the prime and do a single iteration.  Notice\n\t// that nothing will be changed when the magnitude is zero, so we could\n\t// skip this in that case, however always running regardless allows it\n\t// to run in constant time.  The final result will be in the range\n\t// 0 <= result <= prime + (2^64 - c), so it is guaranteed to have a\n\t// magnitude of 1, but it is denormalized.\n\tn := t0 + m*977\n\tf.n[0] = uint32(n & fieldBaseMask)\n\tn = (n >> fieldBase) + t1 + m*64\n\tf.n[1] = uint32(n & fieldBaseMask)\n\tf.n[2] = uint32((n >> fieldBase) + t2)\n\tf.n[3] = uint32(t3)\n\tf.n[4] = uint32(t4)\n\tf.n[5] = uint32(t5)\n\tf.n[6] = uint32(t6)\n\tf.n[7] = uint32(t7)\n\tf.n[8] = uint32(t8)\n\tf.n[9] = uint32(t9)\n\n\treturn f\n}\n\n// Inverse finds the modular multiplicative inverse of the field value.  The\n// existing field value is modified.\n//\n// The field value is returned to support chaining.  This enables syntax like:\n// f.Inverse().Mul(f2) so that f = f^-1 * f2.\nfunc (f *fieldVal) Inverse() *fieldVal {\n\t// Fermat's little theorem states that for a nonzero number a and prime\n\t// prime p, a^(p-1) = 1 (mod p).  Since the multipliciative inverse is\n\t// a*b = 1 (mod p), it follows that b = a*a^(p-2) = a^(p-1) = 1 (mod p).\n\t// Thus, a^(p-2) is the multiplicative inverse.\n\t//\n\t// In order to efficiently compute a^(p-2), p-2 needs to be split into\n\t// a sequence of squares and multipications that minimizes the number of\n\t// multiplications needed (since they are more costly than squarings).\n\t// Intermediate results are saved and reused as well.\n\t//\n\t// The secp256k1 prime - 2 is 2^256 - 4294968275.\n\t//\n\t// This has a cost of 258 field squarings and 33 field multiplications.\n\tvar a2, a3, a4, a10, a11, a21, a42, a45, a63, a1019, a1023 fieldVal\n\ta2.SquareVal(f)\n\ta3.Mul2(&a2, f)\n\ta4.SquareVal(&a2)\n\ta10.SquareVal(&a4).Mul(&a2)\n\ta11.Mul2(&a10, f)\n\ta21.Mul2(&a10, &a11)\n\ta42.SquareVal(&a21)\n\ta45.Mul2(&a42, &a3)\n\ta63.Mul2(&a42, &a21)\n\ta1019.SquareVal(&a63).Square().Square().Square().Mul(&a11)\n\ta1023.Mul2(&a1019, &a4)\n\tf.Set(&a63)                                    // f = a^(2^6 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^11 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^16 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^16 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^21 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^26 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^26 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^31 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^36 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^36 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^41 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^46 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^46 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^51 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^56 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^56 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^61 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^66 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^66 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^71 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^76 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^76 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^81 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^86 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^86 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^91 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^96 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^96 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^101 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^106 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^106 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^111 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^116 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^116 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^121 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^126 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^126 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^131 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^136 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^136 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^141 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^146 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^146 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^151 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^156 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^156 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^161 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^166 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^166 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^171 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^176 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^176 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^181 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^186 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^186 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^191 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^196 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^196 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^201 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^206 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^206 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^211 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^216 - 1024)\n\tf.Mul(&a1023)                                  // f = a^(2^216 - 1)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^221 - 32)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^226 - 1024)\n\tf.Mul(&a1019)                                  // f = a^(2^226 - 5)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^231 - 160)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^236 - 5120)\n\tf.Mul(&a1023)                                  // f = a^(2^236 - 4097)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^241 - 131104)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^246 - 4195328)\n\tf.Mul(&a1023)                                  // f = a^(2^246 - 4194305)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^251 - 134217760)\n\tf.Square().Square().Square().Square().Square() // f = a^(2^256 - 4294968320)\n\treturn f.Mul(&a45)                             // f = a^(2^256 - 4294968275) = a^(p-2)\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/btcec/genprecomps.go",
    "content": "// Copyright 2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\n// This file is ignored during the regular build due to the following build tag.\n// It is called by go generate and used to automatically generate pre-computed\n// tables used to accelerate operations.\n// +build ignore\n\npackage main\n\nimport (\n\t\"bytes\"\n\t\"compress/zlib\"\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/btcsuite/btcd/btcec\"\n)\n\nfunc main() {\n\tfi, err := os.Create(\"secp256k1.go\")\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tdefer fi.Close()\n\n\t// Compress the serialized byte points.\n\tserialized := btcec.S256().SerializedBytePoints()\n\tvar compressed bytes.Buffer\n\tw := zlib.NewWriter(&compressed)\n\tif _, err := w.Write(serialized); err != nil {\n\t\tfmt.Println(err)\n\t\tos.Exit(1)\n\t}\n\tw.Close()\n\n\t// Encode the compressed byte points with base64.\n\tencoded := make([]byte, base64.StdEncoding.EncodedLen(compressed.Len()))\n\tbase64.StdEncoding.Encode(encoded, compressed.Bytes())\n\n\tfmt.Fprintln(fi, \"// Copyright (c) 2015 The btcsuite developers\")\n\tfmt.Fprintln(fi, \"// Use of this source code is governed by an ISC\")\n\tfmt.Fprintln(fi, \"// license that can be found in the LICENSE file.\")\n\tfmt.Fprintln(fi)\n\tfmt.Fprintln(fi, \"package btcec\")\n\tfmt.Fprintln(fi)\n\tfmt.Fprintln(fi, \"// Auto-generated file (see genprecomps.go)\")\n\tfmt.Fprintln(fi, \"// DO NOT EDIT\")\n\tfmt.Fprintln(fi)\n\tfmt.Fprintf(fi, \"var secp256k1BytePoints = %q\\n\", string(encoded))\n\n\ta1, b1, a2, b2 := btcec.S256().EndomorphismVectors()\n\tfmt.Println(\"The following values are the computed linearly \" +\n\t\t\"independent vectors needed to make use of the secp256k1 \" +\n\t\t\"endomorphism:\")\n\tfmt.Printf(\"a1: %x\\n\", a1)\n\tfmt.Printf(\"b1: %x\\n\", b1)\n\tfmt.Printf(\"a2: %x\\n\", a2)\n\tfmt.Printf(\"b2: %x\\n\", b2)\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/btcec/gensecp256k1.go",
    "content": "// Copyright (c) 2014-2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\n// This file is ignored during the regular build due to the following build tag.\n// This build tag is set during go generate.\n// +build gensecp256k1\n\npackage btcec\n\n// References:\n//   [GECC]: Guide to Elliptic Curve Cryptography (Hankerson, Menezes, Vanstone)\n\nimport (\n\t\"encoding/binary\"\n\t\"math/big\"\n)\n\n// secp256k1BytePoints are dummy points used so the code which generates the\n// real values can compile.\nvar secp256k1BytePoints = \"\"\n\n// getDoublingPoints returns all the possible G^(2^i) for i in\n// 0..n-1 where n is the curve's bit size (256 in the case of secp256k1)\n// the coordinates are recorded as Jacobian coordinates.\nfunc (curve *KoblitzCurve) getDoublingPoints() [][3]fieldVal {\n\tdoublingPoints := make([][3]fieldVal, curve.BitSize)\n\n\t// initialize px, py, pz to the Jacobian coordinates for the base point\n\tpx, py := curve.bigAffineToField(curve.Gx, curve.Gy)\n\tpz := new(fieldVal).SetInt(1)\n\tfor i := 0; i < curve.BitSize; i++ {\n\t\tdoublingPoints[i] = [3]fieldVal{*px, *py, *pz}\n\t\t// P = 2*P\n\t\tcurve.doubleJacobian(px, py, pz, px, py, pz)\n\t}\n\treturn doublingPoints\n}\n\n// SerializedBytePoints returns a serialized byte slice which contains all of\n// the possible points per 8-bit window.  This is used to when generating\n// secp256k1.go.\nfunc (curve *KoblitzCurve) SerializedBytePoints() []byte {\n\tdoublingPoints := curve.getDoublingPoints()\n\n\t// Segregate the bits into byte-sized windows\n\tserialized := make([]byte, curve.byteSize*256*3*10*4)\n\toffset := 0\n\tfor byteNum := 0; byteNum < curve.byteSize; byteNum++ {\n\t\t// Grab the 8 bits that make up this byte from doublingPoints.\n\t\tstartingBit := 8 * (curve.byteSize - byteNum - 1)\n\t\tcomputingPoints := doublingPoints[startingBit : startingBit+8]\n\n\t\t// Compute all points in this window and serialize them.\n\t\tfor i := 0; i < 256; i++ {\n\t\t\tpx, py, pz := new(fieldVal), new(fieldVal), new(fieldVal)\n\t\t\tfor j := 0; j < 8; j++ {\n\t\t\t\tif i>>uint(j)&1 == 1 {\n\t\t\t\t\tcurve.addJacobian(px, py, pz, &computingPoints[j][0],\n\t\t\t\t\t\t&computingPoints[j][1], &computingPoints[j][2], px, py, pz)\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor i := 0; i < 10; i++ {\n\t\t\t\tbinary.LittleEndian.PutUint32(serialized[offset:], px.n[i])\n\t\t\t\toffset += 4\n\t\t\t}\n\t\t\tfor i := 0; i < 10; i++ {\n\t\t\t\tbinary.LittleEndian.PutUint32(serialized[offset:], py.n[i])\n\t\t\t\toffset += 4\n\t\t\t}\n\t\t\tfor i := 0; i < 10; i++ {\n\t\t\t\tbinary.LittleEndian.PutUint32(serialized[offset:], pz.n[i])\n\t\t\t\toffset += 4\n\t\t\t}\n\t\t}\n\t}\n\n\treturn serialized\n}\n\n// sqrt returns the square root of the provided big integer using Newton's\n// method.  It's only compiled and used during generation of pre-computed\n// values, so speed is not a huge concern.\nfunc sqrt(n *big.Int) *big.Int {\n\t// Initial guess = 2^(log_2(n)/2)\n\tguess := big.NewInt(2)\n\tguess.Exp(guess, big.NewInt(int64(n.BitLen()/2)), nil)\n\n\t// Now refine using Newton's method.\n\tbig2 := big.NewInt(2)\n\tprevGuess := big.NewInt(0)\n\tfor {\n\t\tprevGuess.Set(guess)\n\t\tguess.Add(guess, new(big.Int).Div(n, guess))\n\t\tguess.Div(guess, big2)\n\t\tif guess.Cmp(prevGuess) == 0 {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn guess\n}\n\n// EndomorphismVectors runs the first 3 steps of algorithm 3.74 from [GECC] to\n// generate the linearly independent vectors needed to generate a balanced\n// length-two representation of a multiplier such that k = k1 + k2λ (mod N) and\n// returns them.  Since the values will always be the same given the fact that N\n// and λ are fixed, the final results can be accelerated by storing the\n// precomputed values with the curve.\nfunc (curve *KoblitzCurve) EndomorphismVectors() (a1, b1, a2, b2 *big.Int) {\n\tbigMinus1 := big.NewInt(-1)\n\n\t// This section uses an extended Euclidean algorithm to generate a\n\t// sequence of equations:\n\t//  s[i] * N + t[i] * λ = r[i]\n\n\tnSqrt := sqrt(curve.N)\n\tu, v := new(big.Int).Set(curve.N), new(big.Int).Set(curve.lambda)\n\tx1, y1 := big.NewInt(1), big.NewInt(0)\n\tx2, y2 := big.NewInt(0), big.NewInt(1)\n\tq, r := new(big.Int), new(big.Int)\n\tqu, qx1, qy1 := new(big.Int), new(big.Int), new(big.Int)\n\ts, t := new(big.Int), new(big.Int)\n\tri, ti := new(big.Int), new(big.Int)\n\ta1, b1, a2, b2 = new(big.Int), new(big.Int), new(big.Int), new(big.Int)\n\tfound, oneMore := false, false\n\tfor u.Sign() != 0 {\n\t\t// q = v/u\n\t\tq.Div(v, u)\n\n\t\t// r = v - q*u\n\t\tqu.Mul(q, u)\n\t\tr.Sub(v, qu)\n\n\t\t// s = x2 - q*x1\n\t\tqx1.Mul(q, x1)\n\t\ts.Sub(x2, qx1)\n\n\t\t// t = y2 - q*y1\n\t\tqy1.Mul(q, y1)\n\t\tt.Sub(y2, qy1)\n\n\t\t// v = u, u = r, x2 = x1, x1 = s, y2 = y1, y1 = t\n\t\tv.Set(u)\n\t\tu.Set(r)\n\t\tx2.Set(x1)\n\t\tx1.Set(s)\n\t\ty2.Set(y1)\n\t\ty1.Set(t)\n\n\t\t// As soon as the remainder is less than the sqrt of n, the\n\t\t// values of a1 and b1 are known.\n\t\tif !found && r.Cmp(nSqrt) < 0 {\n\t\t\t// When this condition executes ri and ti represent the\n\t\t\t// r[i] and t[i] values such that i is the greatest\n\t\t\t// index for which r >= sqrt(n).  Meanwhile, the current\n\t\t\t// r and t values are r[i+1] and t[i+1], respectively.\n\n\t\t\t// a1 = r[i+1], b1 = -t[i+1]\n\t\t\ta1.Set(r)\n\t\t\tb1.Mul(t, bigMinus1)\n\t\t\tfound = true\n\t\t\toneMore = true\n\n\t\t\t// Skip to the next iteration so ri and ti are not\n\t\t\t// modified.\n\t\t\tcontinue\n\n\t\t} else if oneMore {\n\t\t\t// When this condition executes ri and ti still\n\t\t\t// represent the r[i] and t[i] values while the current\n\t\t\t// r and t are r[i+2] and t[i+2], respectively.\n\n\t\t\t// sum1 = r[i]^2 + t[i]^2\n\t\t\trSquared := new(big.Int).Mul(ri, ri)\n\t\t\ttSquared := new(big.Int).Mul(ti, ti)\n\t\t\tsum1 := new(big.Int).Add(rSquared, tSquared)\n\n\t\t\t// sum2 = r[i+2]^2 + t[i+2]^2\n\t\t\tr2Squared := new(big.Int).Mul(r, r)\n\t\t\tt2Squared := new(big.Int).Mul(t, t)\n\t\t\tsum2 := new(big.Int).Add(r2Squared, t2Squared)\n\n\t\t\t// if (r[i]^2 + t[i]^2) <= (r[i+2]^2 + t[i+2]^2)\n\t\t\tif sum1.Cmp(sum2) <= 0 {\n\t\t\t\t// a2 = r[i], b2 = -t[i]\n\t\t\t\ta2.Set(ri)\n\t\t\t\tb2.Mul(ti, bigMinus1)\n\t\t\t} else {\n\t\t\t\t// a2 = r[i+2], b2 = -t[i+2]\n\t\t\t\ta2.Set(r)\n\t\t\t\tb2.Mul(t, bigMinus1)\n\t\t\t}\n\n\t\t\t// All done.\n\t\t\tbreak\n\t\t}\n\n\t\tri.Set(r)\n\t\tti.Set(t)\n\t}\n\n\treturn a1, b1, a2, b2\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/btcec/precompute.go",
    "content": "// Copyright 2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcec\n\nimport (\n\t\"compress/zlib\"\n\t\"encoding/base64\"\n\t\"encoding/binary\"\n\t\"io/ioutil\"\n\t\"strings\"\n)\n\n//go:generate go run -tags gensecp256k1 genprecomps.go\n\n// loadS256BytePoints decompresses and deserializes the pre-computed byte points\n// used to accelerate scalar base multiplication for the secp256k1 curve.  This\n// approach is used since it allows the compile to use significantly less ram\n// and be performed much faster than it is with hard-coding the final in-memory\n// data structure.  At the same time, it is quite fast to generate the in-memory\n// data structure at init time with this approach versus computing the table.\nfunc loadS256BytePoints() error {\n\t// There will be no byte points to load when generating them.\n\tbp := secp256k1BytePoints\n\tif len(bp) == 0 {\n\t\treturn nil\n\t}\n\n\t// Decompress the pre-computed table used to accelerate scalar base\n\t// multiplication.\n\tdecoder := base64.NewDecoder(base64.StdEncoding, strings.NewReader(bp))\n\tr, err := zlib.NewReader(decoder)\n\tif err != nil {\n\t\treturn err\n\t}\n\tserialized, err := ioutil.ReadAll(r)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Deserialize the precomputed byte points and set the curve to them.\n\toffset := 0\n\tvar bytePoints [32][256][3]fieldVal\n\tfor byteNum := 0; byteNum < 32; byteNum++ {\n\t\t// All points in this window.\n\t\tfor i := 0; i < 256; i++ {\n\t\t\tpx := &bytePoints[byteNum][i][0]\n\t\t\tpy := &bytePoints[byteNum][i][1]\n\t\t\tpz := &bytePoints[byteNum][i][2]\n\t\t\tfor i := 0; i < 10; i++ {\n\t\t\t\tpx.n[i] = binary.LittleEndian.Uint32(serialized[offset:])\n\t\t\t\toffset += 4\n\t\t\t}\n\t\t\tfor i := 0; i < 10; i++ {\n\t\t\t\tpy.n[i] = binary.LittleEndian.Uint32(serialized[offset:])\n\t\t\t\toffset += 4\n\t\t\t}\n\t\t\tfor i := 0; i < 10; i++ {\n\t\t\t\tpz.n[i] = binary.LittleEndian.Uint32(serialized[offset:])\n\t\t\t\toffset += 4\n\t\t\t}\n\t\t}\n\t}\n\tsecp256k1.bytePoints = &bytePoints\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/btcec/privkey.go",
    "content": "// Copyright (c) 2013-2016 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcec\n\nimport (\n\t\"crypto/ecdsa\"\n\t\"crypto/elliptic\"\n\t\"crypto/rand\"\n\t\"math/big\"\n)\n\n// PrivateKey wraps an ecdsa.PrivateKey as a convenience mainly for signing\n// things with the the private key without having to directly import the ecdsa\n// package.\ntype PrivateKey ecdsa.PrivateKey\n\n// PrivKeyFromBytes returns a private and public key for `curve' based on the\n// private key passed as an argument as a byte slice.\nfunc PrivKeyFromBytes(curve elliptic.Curve, pk []byte) (*PrivateKey,\n\t*PublicKey) {\n\tx, y := curve.ScalarBaseMult(pk)\n\n\tpriv := &ecdsa.PrivateKey{\n\t\tPublicKey: ecdsa.PublicKey{\n\t\t\tCurve: curve,\n\t\t\tX:     x,\n\t\t\tY:     y,\n\t\t},\n\t\tD: new(big.Int).SetBytes(pk),\n\t}\n\n\treturn (*PrivateKey)(priv), (*PublicKey)(&priv.PublicKey)\n}\n\n// NewPrivateKey is a wrapper for ecdsa.GenerateKey that returns a PrivateKey\n// instead of the normal ecdsa.PrivateKey.\nfunc NewPrivateKey(curve elliptic.Curve) (*PrivateKey, error) {\n\tkey, err := ecdsa.GenerateKey(curve, rand.Reader)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn (*PrivateKey)(key), nil\n}\n\n// PubKey returns the PublicKey corresponding to this private key.\nfunc (p *PrivateKey) PubKey() *PublicKey {\n\treturn (*PublicKey)(&p.PublicKey)\n}\n\n// ToECDSA returns the private key as a *ecdsa.PrivateKey.\nfunc (p *PrivateKey) ToECDSA() *ecdsa.PrivateKey {\n\treturn (*ecdsa.PrivateKey)(p)\n}\n\n// Sign generates an ECDSA signature for the provided hash (which should be the result\n// of hashing a larger message) using the private key. Produced signature\n// is deterministic (same message and same key yield the same signature) and canonical\n// in accordance with RFC6979 and BIP0062.\nfunc (p *PrivateKey) Sign(hash []byte) (*Signature, error) {\n\treturn signRFC6979(p, hash)\n}\n\n// PrivKeyBytesLen defines the length in bytes of a serialized private key.\nconst PrivKeyBytesLen = 32\n\n// Serialize returns the private key number d as a big-endian binary-encoded\n// number, padded to a length of 32 bytes.\nfunc (p *PrivateKey) Serialize() []byte {\n\tb := make([]byte, 0, PrivKeyBytesLen)\n\treturn paddedAppend(PrivKeyBytesLen, b, p.ToECDSA().D.Bytes())\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/btcec/pubkey.go",
    "content": "// Copyright (c) 2013-2014 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcec\n\nimport (\n\t\"crypto/ecdsa\"\n\t\"errors\"\n\t\"fmt\"\n\t\"math/big\"\n)\n\n// These constants define the lengths of serialized public keys.\nconst (\n\tPubKeyBytesLenCompressed   = 33\n\tPubKeyBytesLenUncompressed = 65\n\tPubKeyBytesLenHybrid       = 65\n)\n\nfunc isOdd(a *big.Int) bool {\n\treturn a.Bit(0) == 1\n}\n\n// decompressPoint decompresses a point on the given curve given the X point and\n// the solution to use.\nfunc decompressPoint(curve *KoblitzCurve, x *big.Int, ybit bool) (*big.Int, error) {\n\t// TODO: This will probably only work for secp256k1 due to\n\t// optimizations.\n\n\t// Y = +-sqrt(x^3 + B)\n\tx3 := new(big.Int).Mul(x, x)\n\tx3.Mul(x3, x)\n\tx3.Add(x3, curve.Params().B)\n\tx3.Mod(x3, curve.Params().P)\n\n\t// Now calculate sqrt mod p of x^3 + B\n\t// This code used to do a full sqrt based on tonelli/shanks,\n\t// but this was replaced by the algorithms referenced in\n\t// https://bitcointalk.org/index.php?topic=162805.msg1712294#msg1712294\n\ty := new(big.Int).Exp(x3, curve.QPlus1Div4(), curve.Params().P)\n\n\tif ybit != isOdd(y) {\n\t\ty.Sub(curve.Params().P, y)\n\t}\n\n\t// Check that y is a square root of x^3 + B.\n\ty2 := new(big.Int).Mul(y, y)\n\ty2.Mod(y2, curve.Params().P)\n\tif y2.Cmp(x3) != 0 {\n\t\treturn nil, fmt.Errorf(\"invalid square root\")\n\t}\n\n\t// Verify that y-coord has expected parity.\n\tif ybit != isOdd(y) {\n\t\treturn nil, fmt.Errorf(\"ybit doesn't match oddness\")\n\t}\n\n\treturn y, nil\n}\n\nconst (\n\tpubkeyCompressed   byte = 0x2 // y_bit + x coord\n\tpubkeyUncompressed byte = 0x4 // x coord + y coord\n\tpubkeyHybrid       byte = 0x6 // y_bit + x coord + y coord\n)\n\n// IsCompressedPubKey returns true the the passed serialized public key has\n// been encoded in compressed format, and false otherwise.\nfunc IsCompressedPubKey(pubKey []byte) bool {\n\t// The public key is only compressed if it is the correct length and\n\t// the format (first byte) is one of the compressed pubkey values.\n\treturn len(pubKey) == PubKeyBytesLenCompressed &&\n\t\t(pubKey[0]&^byte(0x1) == pubkeyCompressed)\n}\n\n// ParsePubKey parses a public key for a koblitz curve from a bytestring into a\n// ecdsa.Publickey, verifying that it is valid. It supports compressed,\n// uncompressed and hybrid signature formats.\nfunc ParsePubKey(pubKeyStr []byte, curve *KoblitzCurve) (key *PublicKey, err error) {\n\tpubkey := PublicKey{}\n\tpubkey.Curve = curve\n\n\tif len(pubKeyStr) == 0 {\n\t\treturn nil, errors.New(\"pubkey string is empty\")\n\t}\n\n\tformat := pubKeyStr[0]\n\tybit := (format & 0x1) == 0x1\n\tformat &= ^byte(0x1)\n\n\tswitch len(pubKeyStr) {\n\tcase PubKeyBytesLenUncompressed:\n\t\tif format != pubkeyUncompressed && format != pubkeyHybrid {\n\t\t\treturn nil, fmt.Errorf(\"invalid magic in pubkey str: \"+\n\t\t\t\t\"%d\", pubKeyStr[0])\n\t\t}\n\n\t\tpubkey.X = new(big.Int).SetBytes(pubKeyStr[1:33])\n\t\tpubkey.Y = new(big.Int).SetBytes(pubKeyStr[33:])\n\t\t// hybrid keys have extra information, make use of it.\n\t\tif format == pubkeyHybrid && ybit != isOdd(pubkey.Y) {\n\t\t\treturn nil, fmt.Errorf(\"ybit doesn't match oddness\")\n\t\t}\n\tcase PubKeyBytesLenCompressed:\n\t\t// format is 0x2 | solution, <X coordinate>\n\t\t// solution determines which solution of the curve we use.\n\t\t/// y^2 = x^3 + Curve.B\n\t\tif format != pubkeyCompressed {\n\t\t\treturn nil, fmt.Errorf(\"invalid magic in compressed \"+\n\t\t\t\t\"pubkey string: %d\", pubKeyStr[0])\n\t\t}\n\t\tpubkey.X = new(big.Int).SetBytes(pubKeyStr[1:33])\n\t\tpubkey.Y, err = decompressPoint(curve, pubkey.X, ybit)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\tdefault: // wrong!\n\t\treturn nil, fmt.Errorf(\"invalid pub key length %d\",\n\t\t\tlen(pubKeyStr))\n\t}\n\n\tif pubkey.X.Cmp(pubkey.Curve.Params().P) >= 0 {\n\t\treturn nil, fmt.Errorf(\"pubkey X parameter is >= to P\")\n\t}\n\tif pubkey.Y.Cmp(pubkey.Curve.Params().P) >= 0 {\n\t\treturn nil, fmt.Errorf(\"pubkey Y parameter is >= to P\")\n\t}\n\tif !pubkey.Curve.IsOnCurve(pubkey.X, pubkey.Y) {\n\t\treturn nil, fmt.Errorf(\"pubkey isn't on secp256k1 curve\")\n\t}\n\treturn &pubkey, nil\n}\n\n// PublicKey is an ecdsa.PublicKey with additional functions to\n// serialize in uncompressed, compressed, and hybrid formats.\ntype PublicKey ecdsa.PublicKey\n\n// ToECDSA returns the public key as a *ecdsa.PublicKey.\nfunc (p *PublicKey) ToECDSA() *ecdsa.PublicKey {\n\treturn (*ecdsa.PublicKey)(p)\n}\n\n// SerializeUncompressed serializes a public key in a 65-byte uncompressed\n// format.\nfunc (p *PublicKey) SerializeUncompressed() []byte {\n\tb := make([]byte, 0, PubKeyBytesLenUncompressed)\n\tb = append(b, pubkeyUncompressed)\n\tb = paddedAppend(32, b, p.X.Bytes())\n\treturn paddedAppend(32, b, p.Y.Bytes())\n}\n\n// SerializeCompressed serializes a public key in a 33-byte compressed format.\nfunc (p *PublicKey) SerializeCompressed() []byte {\n\tb := make([]byte, 0, PubKeyBytesLenCompressed)\n\tformat := pubkeyCompressed\n\tif isOdd(p.Y) {\n\t\tformat |= 0x1\n\t}\n\tb = append(b, format)\n\treturn paddedAppend(32, b, p.X.Bytes())\n}\n\n// SerializeHybrid serializes a public key in a 65-byte hybrid format.\nfunc (p *PublicKey) SerializeHybrid() []byte {\n\tb := make([]byte, 0, PubKeyBytesLenHybrid)\n\tformat := pubkeyHybrid\n\tif isOdd(p.Y) {\n\t\tformat |= 0x1\n\t}\n\tb = append(b, format)\n\tb = paddedAppend(32, b, p.X.Bytes())\n\treturn paddedAppend(32, b, p.Y.Bytes())\n}\n\n// IsEqual compares this PublicKey instance to the one passed, returning true if\n// both PublicKeys are equivalent. A PublicKey is equivalent to another, if they\n// both have the same X and Y coordinate.\nfunc (p *PublicKey) IsEqual(otherPubKey *PublicKey) bool {\n\treturn p.X.Cmp(otherPubKey.X) == 0 &&\n\t\tp.Y.Cmp(otherPubKey.Y) == 0\n}\n\n// paddedAppend appends the src byte slice to dst, returning the new slice.\n// If the length of the source is smaller than the passed size, leading zero\n// bytes are appended to the dst slice before appending src.\nfunc paddedAppend(size uint, dst, src []byte) []byte {\n\tfor i := 0; i < int(size)-len(src); i++ {\n\t\tdst = append(dst, 0)\n\t}\n\treturn append(dst, src...)\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/btcec/secp256k1.go",
    "content": "// Copyright (c) 2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcec\n\n// Auto-generated file (see genprecomps.go)\n// DO NOT EDIT\n\nvar secp256k1BytePoints = \"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\"\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/btcec/signature.go",
    "content": "// Copyright (c) 2013-2017 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcec\n\nimport (\n\t\"bytes\"\n\t\"crypto/ecdsa\"\n\t\"crypto/elliptic\"\n\t\"crypto/hmac\"\n\t\"crypto/sha256\"\n\t\"errors\"\n\t\"fmt\"\n\t\"hash\"\n\t\"math/big\"\n)\n\n// Errors returned by canonicalPadding.\nvar (\n\terrNegativeValue          = errors.New(\"value may be interpreted as negative\")\n\terrExcessivelyPaddedValue = errors.New(\"value is excessively padded\")\n)\n\n// Signature is a type representing an ecdsa signature.\ntype Signature struct {\n\tR *big.Int\n\tS *big.Int\n}\n\nvar (\n\t// Used in RFC6979 implementation when testing the nonce for correctness\n\tone = big.NewInt(1)\n\n\t// oneInitializer is used to fill a byte slice with byte 0x01.  It is provided\n\t// here to avoid the need to create it multiple times.\n\toneInitializer = []byte{0x01}\n)\n\n// Serialize returns the ECDSA signature in the more strict DER format.  Note\n// that the serialized bytes returned do not include the appended hash type\n// used in Bitcoin signature scripts.\n//\n// encoding/asn1 is broken so we hand roll this output:\n//\n// 0x30 <length> 0x02 <length r> r 0x02 <length s> s\nfunc (sig *Signature) Serialize() []byte {\n\t// low 'S' malleability breaker\n\tsigS := sig.S\n\tif sigS.Cmp(S256().halfOrder) == 1 {\n\t\tsigS = new(big.Int).Sub(S256().N, sigS)\n\t}\n\t// Ensure the encoded bytes for the r and s values are canonical and\n\t// thus suitable for DER encoding.\n\trb := canonicalizeInt(sig.R)\n\tsb := canonicalizeInt(sigS)\n\n\t// total length of returned signature is 1 byte for each magic and\n\t// length (6 total), plus lengths of r and s\n\tlength := 6 + len(rb) + len(sb)\n\tb := make([]byte, length)\n\n\tb[0] = 0x30\n\tb[1] = byte(length - 2)\n\tb[2] = 0x02\n\tb[3] = byte(len(rb))\n\toffset := copy(b[4:], rb) + 4\n\tb[offset] = 0x02\n\tb[offset+1] = byte(len(sb))\n\tcopy(b[offset+2:], sb)\n\treturn b\n}\n\n// Verify calls ecdsa.Verify to verify the signature of hash using the public\n// key.  It returns true if the signature is valid, false otherwise.\nfunc (sig *Signature) Verify(hash []byte, pubKey *PublicKey) bool {\n\treturn ecdsa.Verify(pubKey.ToECDSA(), hash, sig.R, sig.S)\n}\n\n// IsEqual compares this Signature instance to the one passed, returning true\n// if both Signatures are equivalent. A signature is equivalent to another, if\n// they both have the same scalar value for R and S.\nfunc (sig *Signature) IsEqual(otherSig *Signature) bool {\n\treturn sig.R.Cmp(otherSig.R) == 0 &&\n\t\tsig.S.Cmp(otherSig.S) == 0\n}\n\n// minSigLen is the minimum length of a DER encoded signature and is\n// when both R and S are 1 byte each.\n// 0x30 + <1-byte> + 0x02 + 0x01 + <byte> + 0x2 + 0x01 + <byte>\nconst minSigLen = 8\n\nfunc parseSig(sigStr []byte, curve elliptic.Curve, der bool) (*Signature, error) {\n\t// Originally this code used encoding/asn1 in order to parse the\n\t// signature, but a number of problems were found with this approach.\n\t// Despite the fact that signatures are stored as DER, the difference\n\t// between go's idea of a bignum (and that they have sign) doesn't agree\n\t// with the openssl one (where they do not). The above is true as of\n\t// Go 1.1. In the end it was simpler to rewrite the code to explicitly\n\t// understand the format which is this:\n\t// 0x30 <length of whole message> <0x02> <length of R> <R> 0x2\n\t// <length of S> <S>.\n\n\tsignature := &Signature{}\n\n\tif len(sigStr) < minSigLen {\n\t\treturn nil, errors.New(\"malformed signature: too short\")\n\t}\n\t// 0x30\n\tindex := 0\n\tif sigStr[index] != 0x30 {\n\t\treturn nil, errors.New(\"malformed signature: no header magic\")\n\t}\n\tindex++\n\t// length of remaining message\n\tsiglen := sigStr[index]\n\tindex++\n\n\t// siglen should be less than the entire message and greater than\n\t// the minimal message size.\n\tif int(siglen+2) > len(sigStr) || int(siglen+2) < minSigLen {\n\t\treturn nil, errors.New(\"malformed signature: bad length\")\n\t}\n\t// trim the slice we're working on so we only look at what matters.\n\tsigStr = sigStr[:siglen+2]\n\n\t// 0x02\n\tif sigStr[index] != 0x02 {\n\t\treturn nil,\n\t\t\terrors.New(\"malformed signature: no 1st int marker\")\n\t}\n\tindex++\n\n\t// Length of signature R.\n\trLen := int(sigStr[index])\n\t// must be positive, must be able to fit in another 0x2, <len> <s>\n\t// hence the -3. We assume that the length must be at least one byte.\n\tindex++\n\tif rLen <= 0 || rLen > len(sigStr)-index-3 {\n\t\treturn nil, errors.New(\"malformed signature: bogus R length\")\n\t}\n\n\t// Then R itself.\n\trBytes := sigStr[index : index+rLen]\n\tif der {\n\t\tswitch err := canonicalPadding(rBytes); err {\n\t\tcase errNegativeValue:\n\t\t\treturn nil, errors.New(\"signature R is negative\")\n\t\tcase errExcessivelyPaddedValue:\n\t\t\treturn nil, errors.New(\"signature R is excessively padded\")\n\t\t}\n\t}\n\tsignature.R = new(big.Int).SetBytes(rBytes)\n\tindex += rLen\n\t// 0x02. length already checked in previous if.\n\tif sigStr[index] != 0x02 {\n\t\treturn nil, errors.New(\"malformed signature: no 2nd int marker\")\n\t}\n\tindex++\n\n\t// Length of signature S.\n\tsLen := int(sigStr[index])\n\tindex++\n\t// S should be the rest of the string.\n\tif sLen <= 0 || sLen > len(sigStr)-index {\n\t\treturn nil, errors.New(\"malformed signature: bogus S length\")\n\t}\n\n\t// Then S itself.\n\tsBytes := sigStr[index : index+sLen]\n\tif der {\n\t\tswitch err := canonicalPadding(sBytes); err {\n\t\tcase errNegativeValue:\n\t\t\treturn nil, errors.New(\"signature S is negative\")\n\t\tcase errExcessivelyPaddedValue:\n\t\t\treturn nil, errors.New(\"signature S is excessively padded\")\n\t\t}\n\t}\n\tsignature.S = new(big.Int).SetBytes(sBytes)\n\tindex += sLen\n\n\t// sanity check length parsing\n\tif index != len(sigStr) {\n\t\treturn nil, fmt.Errorf(\"malformed signature: bad final length %v != %v\",\n\t\t\tindex, len(sigStr))\n\t}\n\n\t// Verify also checks this, but we can be more sure that we parsed\n\t// correctly if we verify here too.\n\t// FWIW the ecdsa spec states that R and S must be | 1, N - 1 |\n\t// but crypto/ecdsa only checks for Sign != 0. Mirror that.\n\tif signature.R.Sign() != 1 {\n\t\treturn nil, errors.New(\"signature R isn't 1 or more\")\n\t}\n\tif signature.S.Sign() != 1 {\n\t\treturn nil, errors.New(\"signature S isn't 1 or more\")\n\t}\n\tif signature.R.Cmp(curve.Params().N) >= 0 {\n\t\treturn nil, errors.New(\"signature R is >= curve.N\")\n\t}\n\tif signature.S.Cmp(curve.Params().N) >= 0 {\n\t\treturn nil, errors.New(\"signature S is >= curve.N\")\n\t}\n\n\treturn signature, nil\n}\n\n// ParseSignature parses a signature in BER format for the curve type `curve'\n// into a Signature type, perfoming some basic sanity checks.  If parsing\n// according to the more strict DER format is needed, use ParseDERSignature.\nfunc ParseSignature(sigStr []byte, curve elliptic.Curve) (*Signature, error) {\n\treturn parseSig(sigStr, curve, false)\n}\n\n// ParseDERSignature parses a signature in DER format for the curve type\n// `curve` into a Signature type.  If parsing according to the less strict\n// BER format is needed, use ParseSignature.\nfunc ParseDERSignature(sigStr []byte, curve elliptic.Curve) (*Signature, error) {\n\treturn parseSig(sigStr, curve, true)\n}\n\n// canonicalizeInt returns the bytes for the passed big integer adjusted as\n// necessary to ensure that a big-endian encoded integer can't possibly be\n// misinterpreted as a negative number.  This can happen when the most\n// significant bit is set, so it is padded by a leading zero byte in this case.\n// Also, the returned bytes will have at least a single byte when the passed\n// value is 0.  This is required for DER encoding.\nfunc canonicalizeInt(val *big.Int) []byte {\n\tb := val.Bytes()\n\tif len(b) == 0 {\n\t\tb = []byte{0x00}\n\t}\n\tif b[0]&0x80 != 0 {\n\t\tpaddedBytes := make([]byte, len(b)+1)\n\t\tcopy(paddedBytes[1:], b)\n\t\tb = paddedBytes\n\t}\n\treturn b\n}\n\n// canonicalPadding checks whether a big-endian encoded integer could\n// possibly be misinterpreted as a negative number (even though OpenSSL\n// treats all numbers as unsigned), or if there is any unnecessary\n// leading zero padding.\nfunc canonicalPadding(b []byte) error {\n\tswitch {\n\tcase b[0]&0x80 == 0x80:\n\t\treturn errNegativeValue\n\tcase len(b) > 1 && b[0] == 0x00 && b[1]&0x80 != 0x80:\n\t\treturn errExcessivelyPaddedValue\n\tdefault:\n\t\treturn nil\n\t}\n}\n\n// hashToInt converts a hash value to an integer. There is some disagreement\n// about how this is done. [NSA] suggests that this is done in the obvious\n// manner, but [SECG] truncates the hash to the bit-length of the curve order\n// first. We follow [SECG] because that's what OpenSSL does. Additionally,\n// OpenSSL right shifts excess bits from the number if the hash is too large\n// and we mirror that too.\n// This is borrowed from crypto/ecdsa.\nfunc hashToInt(hash []byte, c elliptic.Curve) *big.Int {\n\torderBits := c.Params().N.BitLen()\n\torderBytes := (orderBits + 7) / 8\n\tif len(hash) > orderBytes {\n\t\thash = hash[:orderBytes]\n\t}\n\n\tret := new(big.Int).SetBytes(hash)\n\texcess := len(hash)*8 - orderBits\n\tif excess > 0 {\n\t\tret.Rsh(ret, uint(excess))\n\t}\n\treturn ret\n}\n\n// recoverKeyFromSignature recovers a public key from the signature \"sig\" on the\n// given message hash \"msg\". Based on the algorithm found in section 5.1.5 of\n// SEC 1 Ver 2.0, page 47-48 (53 and 54 in the pdf). This performs the details\n// in the inner loop in Step 1. The counter provided is actually the j parameter\n// of the loop * 2 - on the first iteration of j we do the R case, else the -R\n// case in step 1.6. This counter is used in the bitcoin compressed signature\n// format and thus we match bitcoind's behaviour here.\nfunc recoverKeyFromSignature(curve *KoblitzCurve, sig *Signature, msg []byte,\n\titer int, doChecks bool) (*PublicKey, error) {\n\t// 1.1 x = (n * i) + r\n\tRx := new(big.Int).Mul(curve.Params().N,\n\t\tnew(big.Int).SetInt64(int64(iter/2)))\n\tRx.Add(Rx, sig.R)\n\tif Rx.Cmp(curve.Params().P) != -1 {\n\t\treturn nil, errors.New(\"calculated Rx is larger than curve P\")\n\t}\n\n\t// convert 02<Rx> to point R. (step 1.2 and 1.3). If we are on an odd\n\t// iteration then 1.6 will be done with -R, so we calculate the other\n\t// term when uncompressing the point.\n\tRy, err := decompressPoint(curve, Rx, iter%2 == 1)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// 1.4 Check n*R is point at infinity\n\tif doChecks {\n\t\tnRx, nRy := curve.ScalarMult(Rx, Ry, curve.Params().N.Bytes())\n\t\tif nRx.Sign() != 0 || nRy.Sign() != 0 {\n\t\t\treturn nil, errors.New(\"n*R does not equal the point at infinity\")\n\t\t}\n\t}\n\n\t// 1.5 calculate e from message using the same algorithm as ecdsa\n\t// signature calculation.\n\te := hashToInt(msg, curve)\n\n\t// Step 1.6.1:\n\t// We calculate the two terms sR and eG separately multiplied by the\n\t// inverse of r (from the signature). We then add them to calculate\n\t// Q = r^-1(sR-eG)\n\tinvr := new(big.Int).ModInverse(sig.R, curve.Params().N)\n\n\t// first term.\n\tinvrS := new(big.Int).Mul(invr, sig.S)\n\tinvrS.Mod(invrS, curve.Params().N)\n\tsRx, sRy := curve.ScalarMult(Rx, Ry, invrS.Bytes())\n\n\t// second term.\n\te.Neg(e)\n\te.Mod(e, curve.Params().N)\n\te.Mul(e, invr)\n\te.Mod(e, curve.Params().N)\n\tminuseGx, minuseGy := curve.ScalarBaseMult(e.Bytes())\n\n\t// TODO: this would be faster if we did a mult and add in one\n\t// step to prevent the jacobian conversion back and forth.\n\tQx, Qy := curve.Add(sRx, sRy, minuseGx, minuseGy)\n\n\treturn &PublicKey{\n\t\tCurve: curve,\n\t\tX:     Qx,\n\t\tY:     Qy,\n\t}, nil\n}\n\n// SignCompact produces a compact signature of the data in hash with the given\n// private key on the given koblitz curve. The isCompressed  parameter should\n// be used to detail if the given signature should reference a compressed\n// public key or not. If successful the bytes of the compact signature will be\n// returned in the format:\n// <(byte of 27+public key solution)+4 if compressed >< padded bytes for signature R><padded bytes for signature S>\n// where the R and S parameters are padde up to the bitlengh of the curve.\nfunc SignCompact(curve *KoblitzCurve, key *PrivateKey,\n\thash []byte, isCompressedKey bool) ([]byte, error) {\n\tsig, err := key.Sign(hash)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// bitcoind checks the bit length of R and S here. The ecdsa signature\n\t// algorithm returns R and S mod N therefore they will be the bitsize of\n\t// the curve, and thus correctly sized.\n\tfor i := 0; i < (curve.H+1)*2; i++ {\n\t\tpk, err := recoverKeyFromSignature(curve, sig, hash, i, true)\n\t\tif err == nil && pk.X.Cmp(key.X) == 0 && pk.Y.Cmp(key.Y) == 0 {\n\t\t\tresult := make([]byte, 1, 2*curve.byteSize+1)\n\t\t\tresult[0] = 27 + byte(i)\n\t\t\tif isCompressedKey {\n\t\t\t\tresult[0] += 4\n\t\t\t}\n\t\t\t// Not sure this needs rounding but safer to do so.\n\t\t\tcurvelen := (curve.BitSize + 7) / 8\n\n\t\t\t// Pad R and S to curvelen if needed.\n\t\t\tbytelen := (sig.R.BitLen() + 7) / 8\n\t\t\tif bytelen < curvelen {\n\t\t\t\tresult = append(result,\n\t\t\t\t\tmake([]byte, curvelen-bytelen)...)\n\t\t\t}\n\t\t\tresult = append(result, sig.R.Bytes()...)\n\n\t\t\tbytelen = (sig.S.BitLen() + 7) / 8\n\t\t\tif bytelen < curvelen {\n\t\t\t\tresult = append(result,\n\t\t\t\t\tmake([]byte, curvelen-bytelen)...)\n\t\t\t}\n\t\t\tresult = append(result, sig.S.Bytes()...)\n\n\t\t\treturn result, nil\n\t\t}\n\t}\n\n\treturn nil, errors.New(\"no valid solution for pubkey found\")\n}\n\n// RecoverCompact verifies the compact signature \"signature\" of \"hash\" for the\n// Koblitz curve in \"curve\". If the signature matches then the recovered public\n// key will be returned as well as a boolen if the original key was compressed\n// or not, else an error will be returned.\nfunc RecoverCompact(curve *KoblitzCurve, signature,\n\thash []byte) (*PublicKey, bool, error) {\n\tbitlen := (curve.BitSize + 7) / 8\n\tif len(signature) != 1+bitlen*2 {\n\t\treturn nil, false, errors.New(\"invalid compact signature size\")\n\t}\n\n\titeration := int((signature[0] - 27) & ^byte(4))\n\n\t// format is <header byte><bitlen R><bitlen S>\n\tsig := &Signature{\n\t\tR: new(big.Int).SetBytes(signature[1 : bitlen+1]),\n\t\tS: new(big.Int).SetBytes(signature[bitlen+1:]),\n\t}\n\t// The iteration used here was encoded\n\tkey, err := recoverKeyFromSignature(curve, sig, hash, iteration, false)\n\tif err != nil {\n\t\treturn nil, false, err\n\t}\n\n\treturn key, ((signature[0] - 27) & 4) == 4, nil\n}\n\n// signRFC6979 generates a deterministic ECDSA signature according to RFC 6979 and BIP 62.\nfunc signRFC6979(privateKey *PrivateKey, hash []byte) (*Signature, error) {\n\n\tprivkey := privateKey.ToECDSA()\n\tN := S256().N\n\thalfOrder := S256().halfOrder\n\tk := nonceRFC6979(privkey.D, hash)\n\tinv := new(big.Int).ModInverse(k, N)\n\tr, _ := privkey.Curve.ScalarBaseMult(k.Bytes())\n\tif r.Cmp(N) == 1 {\n\t\tr.Sub(r, N)\n\t}\n\n\tif r.Sign() == 0 {\n\t\treturn nil, errors.New(\"calculated R is zero\")\n\t}\n\n\te := hashToInt(hash, privkey.Curve)\n\ts := new(big.Int).Mul(privkey.D, r)\n\ts.Add(s, e)\n\ts.Mul(s, inv)\n\ts.Mod(s, N)\n\n\tif s.Cmp(halfOrder) == 1 {\n\t\ts.Sub(N, s)\n\t}\n\tif s.Sign() == 0 {\n\t\treturn nil, errors.New(\"calculated S is zero\")\n\t}\n\treturn &Signature{R: r, S: s}, nil\n}\n\n// nonceRFC6979 generates an ECDSA nonce (`k`) deterministically according to RFC 6979.\n// It takes a 32-byte hash as an input and returns 32-byte nonce to be used in ECDSA algorithm.\nfunc nonceRFC6979(privkey *big.Int, hash []byte) *big.Int {\n\n\tcurve := S256()\n\tq := curve.Params().N\n\tx := privkey\n\talg := sha256.New\n\n\tqlen := q.BitLen()\n\tholen := alg().Size()\n\trolen := (qlen + 7) >> 3\n\tbx := append(int2octets(x, rolen), bits2octets(hash, curve, rolen)...)\n\n\t// Step B\n\tv := bytes.Repeat(oneInitializer, holen)\n\n\t// Step C (Go zeroes the all allocated memory)\n\tk := make([]byte, holen)\n\n\t// Step D\n\tk = mac(alg, k, append(append(v, 0x00), bx...))\n\n\t// Step E\n\tv = mac(alg, k, v)\n\n\t// Step F\n\tk = mac(alg, k, append(append(v, 0x01), bx...))\n\n\t// Step G\n\tv = mac(alg, k, v)\n\n\t// Step H\n\tfor {\n\t\t// Step H1\n\t\tvar t []byte\n\n\t\t// Step H2\n\t\tfor len(t)*8 < qlen {\n\t\t\tv = mac(alg, k, v)\n\t\t\tt = append(t, v...)\n\t\t}\n\n\t\t// Step H3\n\t\tsecret := hashToInt(t, curve)\n\t\tif secret.Cmp(one) >= 0 && secret.Cmp(q) < 0 {\n\t\t\treturn secret\n\t\t}\n\t\tk = mac(alg, k, append(v, 0x00))\n\t\tv = mac(alg, k, v)\n\t}\n}\n\n// mac returns an HMAC of the given key and message.\nfunc mac(alg func() hash.Hash, k, m []byte) []byte {\n\th := hmac.New(alg, k)\n\th.Write(m)\n\treturn h.Sum(nil)\n}\n\n// https://tools.ietf.org/html/rfc6979#section-2.3.3\nfunc int2octets(v *big.Int, rolen int) []byte {\n\tout := v.Bytes()\n\n\t// left pad with zeros if it's too short\n\tif len(out) < rolen {\n\t\tout2 := make([]byte, rolen)\n\t\tcopy(out2[rolen-len(out):], out)\n\t\treturn out2\n\t}\n\n\t// drop most significant bytes if it's too long\n\tif len(out) > rolen {\n\t\tout2 := make([]byte, rolen)\n\t\tcopy(out2, out[len(out)-rolen:])\n\t\treturn out2\n\t}\n\n\treturn out\n}\n\n// https://tools.ietf.org/html/rfc6979#section-2.3.4\nfunc bits2octets(in []byte, curve elliptic.Curve, rolen int) []byte {\n\tz1 := hashToInt(in, curve)\n\tz2 := new(big.Int).Sub(z1, curve.Params().N)\n\tif z2.Sign() < 0 {\n\t\treturn int2octets(z1, rolen)\n\t}\n\treturn int2octets(z2, rolen)\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/btcjson/CONTRIBUTORS",
    "content": "# This is the list of people who have contributed code to the repository.\n#\n# Names should be added to this file only after verifying that the individual\n# or the individual's organization has agreed to the LICENSE.\n#\n# Names should be added to this file like so:\n# Name <email address>\n\nJohn C. Vernaleo <jcv@conformal.com>\nDave Collins <davec@conformal.com>\nOwain G. Ainsworth <oga@conformal.com>\nDavid Hill <dhill@conformal.com>\nJosh Rickmar <jrick@conformal.com>\nAndreas Metsälä <andreas.metsala@gmail.com>\nFrancis Lam <flam@alum.mit.edu>\nGeert-Johan Riemer <geertjohan.riemer@gmail.com>\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/btcjson/README.md",
    "content": "btcjson\n=======\n\n[![Build Status](https://travis-ci.org/btcsuite/btcd.png?branch=master)](https://travis-ci.org/btcsuite/btcd)\n[![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org)\n[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](http://godoc.org/github.com/btcsuite/btcd/btcjson)\n\nPackage btcjson implements concrete types for marshalling to and from the\nbitcoin JSON-RPC API.  A comprehensive suite of tests is provided to ensure\nproper functionality.\n\nAlthough this package was primarily written for the btcsuite, it has\nintentionally been designed so it can be used as a standalone package for any\nprojects needing to marshal to and from bitcoin JSON-RPC requests and responses.\n\nNote that although it's possible to use this package directly to implement an\nRPC client, it is not recommended since it is only intended as an infrastructure\npackage.  Instead, RPC clients should use the\n[btcrpcclient](https://github.com/btcsuite/btcrpcclient) package which provides\na full blown RPC client with many features such as automatic connection\nmanagement, websocket support, automatic notification re-registration on\nreconnect, and conversion from the raw underlying RPC types (strings, floats,\nints, etc) to higher-level types with many nice and useful properties.\n\n## Installation and Updating\n\n```bash\n$ go get -u github.com/btcsuite/btcd/btcjson\n```\n\n## Examples\n\n* [Marshal Command](http://godoc.org/github.com/btcsuite/btcd/btcjson#example-MarshalCmd)  \n  Demonstrates how to create and marshal a command into a JSON-RPC request.\n\n* [Unmarshal Command](http://godoc.org/github.com/btcsuite/btcd/btcjson#example-UnmarshalCmd)  \n  Demonstrates how to unmarshal a JSON-RPC request and then unmarshal the\n  concrete request into a concrete command.\n\n* [Marshal Response](http://godoc.org/github.com/btcsuite/btcd/btcjson#example-MarshalResponse)  \n  Demonstrates how to marshal a JSON-RPC response.\n\n* [Unmarshal Response](http://godoc.org/github.com/btcsuite/btcd/btcjson#example-package--UnmarshalResponse)  \n  Demonstrates how to unmarshal a JSON-RPC response and then unmarshal the\n  result field in the response to a concrete type.\n\n## GPG Verification Key\n\nAll official release tags are signed by Conformal so users can ensure the code\nhas not been tampered with and is coming from the btcsuite developers.  To\nverify the signature perform the following:\n\n- Download the public key from the Conformal website at\n  https://opensource.conformal.com/GIT-GPG-KEY-conformal.txt\n\n- Import the public key into your GPG keyring:\n  ```bash\n  gpg --import GIT-GPG-KEY-conformal.txt\n  ```\n\n- Verify the release tag with the following command where `TAG_NAME` is a\n  placeholder for the specific tag:\n  ```bash\n  git tag -v TAG_NAME\n  ```\n\n## License\n\nPackage btcjson is licensed under the [copyfree](http://copyfree.org) ISC\nLicense.\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/btcjson/btcdextcmds.go",
    "content": "// Copyright (c) 2014-2016 The btcsuite developers\n// Copyright (c) 2015-2016 The Decred developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\n// NOTE: This file is intended to house the RPC commands that are supported by\n// a chain server with btcd extensions.\n\npackage btcjson\n\n// NodeSubCmd defines the type used in the addnode JSON-RPC command for the\n// sub command field.\ntype NodeSubCmd string\n\nconst (\n\t// NConnect indicates the specified host that should be connected to.\n\tNConnect NodeSubCmd = \"connect\"\n\n\t// NRemove indicates the specified peer that should be removed as a\n\t// persistent peer.\n\tNRemove NodeSubCmd = \"remove\"\n\n\t// NDisconnect indicates the specified peer should be disonnected.\n\tNDisconnect NodeSubCmd = \"disconnect\"\n)\n\n// NodeCmd defines the dropnode JSON-RPC command.\ntype NodeCmd struct {\n\tSubCmd        NodeSubCmd `jsonrpcusage:\"\\\"connect|remove|disconnect\\\"\"`\n\tTarget        string\n\tConnectSubCmd *string `jsonrpcusage:\"\\\"perm|temp\\\"\"`\n}\n\n// NewNodeCmd returns a new instance which can be used to issue a `node`\n// JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewNodeCmd(subCmd NodeSubCmd, target string, connectSubCmd *string) *NodeCmd {\n\treturn &NodeCmd{\n\t\tSubCmd:        subCmd,\n\t\tTarget:        target,\n\t\tConnectSubCmd: connectSubCmd,\n\t}\n}\n\n// DebugLevelCmd defines the debuglevel JSON-RPC command.  This command is not a\n// standard Bitcoin command.  It is an extension for btcd.\ntype DebugLevelCmd struct {\n\tLevelSpec string\n}\n\n// NewDebugLevelCmd returns a new DebugLevelCmd which can be used to issue a\n// debuglevel JSON-RPC command.  This command is not a standard Bitcoin command.\n// It is an extension for btcd.\nfunc NewDebugLevelCmd(levelSpec string) *DebugLevelCmd {\n\treturn &DebugLevelCmd{\n\t\tLevelSpec: levelSpec,\n\t}\n}\n\n// GenerateCmd defines the generate JSON-RPC command.\ntype GenerateCmd struct {\n\tNumBlocks uint32\n}\n\n// NewGenerateCmd returns a new instance which can be used to issue a generate\n// JSON-RPC command.\nfunc NewGenerateCmd(numBlocks uint32) *GenerateCmd {\n\treturn &GenerateCmd{\n\t\tNumBlocks: numBlocks,\n\t}\n}\n\n// GetBestBlockCmd defines the getbestblock JSON-RPC command.\ntype GetBestBlockCmd struct{}\n\n// NewGetBestBlockCmd returns a new instance which can be used to issue a\n// getbestblock JSON-RPC command.\nfunc NewGetBestBlockCmd() *GetBestBlockCmd {\n\treturn &GetBestBlockCmd{}\n}\n\n// GetCurrentNetCmd defines the getcurrentnet JSON-RPC command.\ntype GetCurrentNetCmd struct{}\n\n// NewGetCurrentNetCmd returns a new instance which can be used to issue a\n// getcurrentnet JSON-RPC command.\nfunc NewGetCurrentNetCmd() *GetCurrentNetCmd {\n\treturn &GetCurrentNetCmd{}\n}\n\n// GetHeadersCmd defines the getheaders JSON-RPC command.\n//\n// NOTE: This is a btcsuite extension ported from\n// github.com/decred/dcrd/dcrjson.\ntype GetHeadersCmd struct {\n\tBlockLocators []string `json:\"blocklocators\"`\n\tHashStop      string   `json:\"hashstop\"`\n}\n\n// NewGetHeadersCmd returns a new instance which can be used to issue a\n// getheaders JSON-RPC command.\n//\n// NOTE: This is a btcsuite extension ported from\n// github.com/decred/dcrd/dcrjson.\nfunc NewGetHeadersCmd(blockLocators []string, hashStop string) *GetHeadersCmd {\n\treturn &GetHeadersCmd{\n\t\tBlockLocators: blockLocators,\n\t\tHashStop:      hashStop,\n\t}\n}\n\n// VersionCmd defines the version JSON-RPC command.\n//\n// NOTE: This is a btcsuite extension ported from\n// github.com/decred/dcrd/dcrjson.\ntype VersionCmd struct{}\n\n// NewVersionCmd returns a new instance which can be used to issue a JSON-RPC\n// version command.\n//\n// NOTE: This is a btcsuite extension ported from\n// github.com/decred/dcrd/dcrjson.\nfunc NewVersionCmd() *VersionCmd { return new(VersionCmd) }\n\nfunc init() {\n\t// No special flags for commands in this file.\n\tflags := UsageFlag(0)\n\n\tMustRegisterCmd(\"debuglevel\", (*DebugLevelCmd)(nil), flags)\n\tMustRegisterCmd(\"node\", (*NodeCmd)(nil), flags)\n\tMustRegisterCmd(\"generate\", (*GenerateCmd)(nil), flags)\n\tMustRegisterCmd(\"getbestblock\", (*GetBestBlockCmd)(nil), flags)\n\tMustRegisterCmd(\"getcurrentnet\", (*GetCurrentNetCmd)(nil), flags)\n\tMustRegisterCmd(\"getheaders\", (*GetHeadersCmd)(nil), flags)\n\tMustRegisterCmd(\"version\", (*VersionCmd)(nil), flags)\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/btcjson/btcdextresults.go",
    "content": "// Copyright (c) 2016-2017 The btcsuite developers\n// Copyright (c) 2015-2017 The Decred developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcjson\n\n// VersionResult models objects included in the version response.  In the actual\n// result, these objects are keyed by the program or API name.\n//\n// NOTE: This is a btcsuite extension ported from\n// github.com/decred/dcrd/dcrjson.\ntype VersionResult struct {\n\tVersionString string `json:\"versionstring\"`\n\tMajor         uint32 `json:\"major\"`\n\tMinor         uint32 `json:\"minor\"`\n\tPatch         uint32 `json:\"patch\"`\n\tPrerelease    string `json:\"prerelease\"`\n\tBuildMetadata string `json:\"buildmetadata\"`\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/btcjson/btcwalletextcmds.go",
    "content": "// Copyright (c) 2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\n// NOTE: This file is intended to house the RPC commands that are supported by\n// a wallet server with btcwallet extensions.\n\npackage btcjson\n\n// CreateNewAccountCmd defines the createnewaccount JSON-RPC command.\ntype CreateNewAccountCmd struct {\n\tAccount string\n}\n\n// NewCreateNewAccountCmd returns a new instance which can be used to issue a\n// createnewaccount JSON-RPC command.\nfunc NewCreateNewAccountCmd(account string) *CreateNewAccountCmd {\n\treturn &CreateNewAccountCmd{\n\t\tAccount: account,\n\t}\n}\n\n// DumpWalletCmd defines the dumpwallet JSON-RPC command.\ntype DumpWalletCmd struct {\n\tFilename string\n}\n\n// NewDumpWalletCmd returns a new instance which can be used to issue a\n// dumpwallet JSON-RPC command.\nfunc NewDumpWalletCmd(filename string) *DumpWalletCmd {\n\treturn &DumpWalletCmd{\n\t\tFilename: filename,\n\t}\n}\n\n// ImportAddressCmd defines the importaddress JSON-RPC command.\ntype ImportAddressCmd struct {\n\tAddress string\n\tRescan  *bool `jsonrpcdefault:\"true\"`\n}\n\n// NewImportAddressCmd returns a new instance which can be used to issue an\n// importaddress JSON-RPC command.\nfunc NewImportAddressCmd(address string, rescan *bool) *ImportAddressCmd {\n\treturn &ImportAddressCmd{\n\t\tAddress: address,\n\t\tRescan:  rescan,\n\t}\n}\n\n// ImportPubKeyCmd defines the importpubkey JSON-RPC command.\ntype ImportPubKeyCmd struct {\n\tPubKey string\n\tRescan *bool `jsonrpcdefault:\"true\"`\n}\n\n// NewImportPubKeyCmd returns a new instance which can be used to issue an\n// importpubkey JSON-RPC command.\nfunc NewImportPubKeyCmd(pubKey string, rescan *bool) *ImportPubKeyCmd {\n\treturn &ImportPubKeyCmd{\n\t\tPubKey: pubKey,\n\t\tRescan: rescan,\n\t}\n}\n\n// ImportWalletCmd defines the importwallet JSON-RPC command.\ntype ImportWalletCmd struct {\n\tFilename string\n}\n\n// NewImportWalletCmd returns a new instance which can be used to issue a\n// importwallet JSON-RPC command.\nfunc NewImportWalletCmd(filename string) *ImportWalletCmd {\n\treturn &ImportWalletCmd{\n\t\tFilename: filename,\n\t}\n}\n\n// RenameAccountCmd defines the renameaccount JSON-RPC command.\ntype RenameAccountCmd struct {\n\tOldAccount string\n\tNewAccount string\n}\n\n// NewRenameAccountCmd returns a new instance which can be used to issue a\n// renameaccount JSON-RPC command.\nfunc NewRenameAccountCmd(oldAccount, newAccount string) *RenameAccountCmd {\n\treturn &RenameAccountCmd{\n\t\tOldAccount: oldAccount,\n\t\tNewAccount: newAccount,\n\t}\n}\n\nfunc init() {\n\t// The commands in this file are only usable with a wallet server.\n\tflags := UFWalletOnly\n\n\tMustRegisterCmd(\"createnewaccount\", (*CreateNewAccountCmd)(nil), flags)\n\tMustRegisterCmd(\"dumpwallet\", (*DumpWalletCmd)(nil), flags)\n\tMustRegisterCmd(\"importaddress\", (*ImportAddressCmd)(nil), flags)\n\tMustRegisterCmd(\"importpubkey\", (*ImportPubKeyCmd)(nil), flags)\n\tMustRegisterCmd(\"importwallet\", (*ImportWalletCmd)(nil), flags)\n\tMustRegisterCmd(\"renameaccount\", (*RenameAccountCmd)(nil), flags)\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/btcjson/chainsvrcmds.go",
    "content": "// Copyright (c) 2014-2017 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\n// NOTE: This file is intended to house the RPC commands that are supported by\n// a chain server.\n\npackage btcjson\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/btcsuite/btcd/wire\"\n)\n\n// AddNodeSubCmd defines the type used in the addnode JSON-RPC command for the\n// sub command field.\ntype AddNodeSubCmd string\n\nconst (\n\t// ANAdd indicates the specified host should be added as a persistent\n\t// peer.\n\tANAdd AddNodeSubCmd = \"add\"\n\n\t// ANRemove indicates the specified peer should be removed.\n\tANRemove AddNodeSubCmd = \"remove\"\n\n\t// ANOneTry indicates the specified host should try to connect once,\n\t// but it should not be made persistent.\n\tANOneTry AddNodeSubCmd = \"onetry\"\n)\n\n// AddNodeCmd defines the addnode JSON-RPC command.\ntype AddNodeCmd struct {\n\tAddr   string\n\tSubCmd AddNodeSubCmd `jsonrpcusage:\"\\\"add|remove|onetry\\\"\"`\n}\n\n// NewAddNodeCmd returns a new instance which can be used to issue an addnode\n// JSON-RPC command.\nfunc NewAddNodeCmd(addr string, subCmd AddNodeSubCmd) *AddNodeCmd {\n\treturn &AddNodeCmd{\n\t\tAddr:   addr,\n\t\tSubCmd: subCmd,\n\t}\n}\n\n// TransactionInput represents the inputs to a transaction.  Specifically a\n// transaction hash and output number pair.\ntype TransactionInput struct {\n\tTxid string `json:\"txid\"`\n\tVout uint32 `json:\"vout\"`\n}\n\n// CreateRawTransactionCmd defines the createrawtransaction JSON-RPC command.\ntype CreateRawTransactionCmd struct {\n\tInputs   []TransactionInput\n\tAmounts  map[string]float64 `jsonrpcusage:\"{\\\"address\\\":amount,...}\"` // In BTC\n\tLockTime *int64\n}\n\n// NewCreateRawTransactionCmd returns a new instance which can be used to issue\n// a createrawtransaction JSON-RPC command.\n//\n// Amounts are in BTC.\nfunc NewCreateRawTransactionCmd(inputs []TransactionInput, amounts map[string]float64,\n\tlockTime *int64) *CreateRawTransactionCmd {\n\n\treturn &CreateRawTransactionCmd{\n\t\tInputs:   inputs,\n\t\tAmounts:  amounts,\n\t\tLockTime: lockTime,\n\t}\n}\n\n// DecodeRawTransactionCmd defines the decoderawtransaction JSON-RPC command.\ntype DecodeRawTransactionCmd struct {\n\tHexTx string\n}\n\n// NewDecodeRawTransactionCmd returns a new instance which can be used to issue\n// a decoderawtransaction JSON-RPC command.\nfunc NewDecodeRawTransactionCmd(hexTx string) *DecodeRawTransactionCmd {\n\treturn &DecodeRawTransactionCmd{\n\t\tHexTx: hexTx,\n\t}\n}\n\n// DecodeScriptCmd defines the decodescript JSON-RPC command.\ntype DecodeScriptCmd struct {\n\tHexScript string\n}\n\n// NewDecodeScriptCmd returns a new instance which can be used to issue a\n// decodescript JSON-RPC command.\nfunc NewDecodeScriptCmd(hexScript string) *DecodeScriptCmd {\n\treturn &DecodeScriptCmd{\n\t\tHexScript: hexScript,\n\t}\n}\n\n// GetAddedNodeInfoCmd defines the getaddednodeinfo JSON-RPC command.\ntype GetAddedNodeInfoCmd struct {\n\tDNS  bool\n\tNode *string\n}\n\n// NewGetAddedNodeInfoCmd returns a new instance which can be used to issue a\n// getaddednodeinfo JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewGetAddedNodeInfoCmd(dns bool, node *string) *GetAddedNodeInfoCmd {\n\treturn &GetAddedNodeInfoCmd{\n\t\tDNS:  dns,\n\t\tNode: node,\n\t}\n}\n\n// GetBestBlockHashCmd defines the getbestblockhash JSON-RPC command.\ntype GetBestBlockHashCmd struct{}\n\n// NewGetBestBlockHashCmd returns a new instance which can be used to issue a\n// getbestblockhash JSON-RPC command.\nfunc NewGetBestBlockHashCmd() *GetBestBlockHashCmd {\n\treturn &GetBestBlockHashCmd{}\n}\n\n// GetBlockCmd defines the getblock JSON-RPC command.\ntype GetBlockCmd struct {\n\tHash      string\n\tVerbose   *bool `jsonrpcdefault:\"true\"`\n\tVerboseTx *bool `jsonrpcdefault:\"false\"`\n}\n\n// NewGetBlockCmd returns a new instance which can be used to issue a getblock\n// JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewGetBlockCmd(hash string, verbose, verboseTx *bool) *GetBlockCmd {\n\treturn &GetBlockCmd{\n\t\tHash:      hash,\n\t\tVerbose:   verbose,\n\t\tVerboseTx: verboseTx,\n\t}\n}\n\n// GetBlockChainInfoCmd defines the getblockchaininfo JSON-RPC command.\ntype GetBlockChainInfoCmd struct{}\n\n// NewGetBlockChainInfoCmd returns a new instance which can be used to issue a\n// getblockchaininfo JSON-RPC command.\nfunc NewGetBlockChainInfoCmd() *GetBlockChainInfoCmd {\n\treturn &GetBlockChainInfoCmd{}\n}\n\n// GetBlockCountCmd defines the getblockcount JSON-RPC command.\ntype GetBlockCountCmd struct{}\n\n// NewGetBlockCountCmd returns a new instance which can be used to issue a\n// getblockcount JSON-RPC command.\nfunc NewGetBlockCountCmd() *GetBlockCountCmd {\n\treturn &GetBlockCountCmd{}\n}\n\n// GetBlockHashCmd defines the getblockhash JSON-RPC command.\ntype GetBlockHashCmd struct {\n\tIndex int64\n}\n\n// NewGetBlockHashCmd returns a new instance which can be used to issue a\n// getblockhash JSON-RPC command.\nfunc NewGetBlockHashCmd(index int64) *GetBlockHashCmd {\n\treturn &GetBlockHashCmd{\n\t\tIndex: index,\n\t}\n}\n\n// GetBlockHeaderCmd defines the getblockheader JSON-RPC command.\ntype GetBlockHeaderCmd struct {\n\tHash    string\n\tVerbose *bool `jsonrpcdefault:\"true\"`\n}\n\n// NewGetBlockHeaderCmd returns a new instance which can be used to issue a\n// getblockheader JSON-RPC command.\nfunc NewGetBlockHeaderCmd(hash string, verbose *bool) *GetBlockHeaderCmd {\n\treturn &GetBlockHeaderCmd{\n\t\tHash:    hash,\n\t\tVerbose: verbose,\n\t}\n}\n\n// TemplateRequest is a request object as defined in BIP22\n// (https://en.bitcoin.it/wiki/BIP_0022), it is optionally provided as an\n// pointer argument to GetBlockTemplateCmd.\ntype TemplateRequest struct {\n\tMode         string   `json:\"mode,omitempty\"`\n\tCapabilities []string `json:\"capabilities,omitempty\"`\n\n\t// Optional long polling.\n\tLongPollID string `json:\"longpollid,omitempty\"`\n\n\t// Optional template tweaking.  SigOpLimit and SizeLimit can be int64\n\t// or bool.\n\tSigOpLimit interface{} `json:\"sigoplimit,omitempty\"`\n\tSizeLimit  interface{} `json:\"sizelimit,omitempty\"`\n\tMaxVersion uint32      `json:\"maxversion,omitempty\"`\n\n\t// Basic pool extension from BIP 0023.\n\tTarget string `json:\"target,omitempty\"`\n\n\t// Block proposal from BIP 0023.  Data is only provided when Mode is\n\t// \"proposal\".\n\tData   string `json:\"data,omitempty\"`\n\tWorkID string `json:\"workid,omitempty\"`\n}\n\n// convertTemplateRequestField potentially converts the provided value as\n// needed.\nfunc convertTemplateRequestField(fieldName string, iface interface{}) (interface{}, error) {\n\tswitch val := iface.(type) {\n\tcase nil:\n\t\treturn nil, nil\n\tcase bool:\n\t\treturn val, nil\n\tcase float64:\n\t\tif val == float64(int64(val)) {\n\t\t\treturn int64(val), nil\n\t\t}\n\t}\n\n\tstr := fmt.Sprintf(\"the %s field must be unspecified, a boolean, or \"+\n\t\t\"a 64-bit integer\", fieldName)\n\treturn nil, makeError(ErrInvalidType, str)\n}\n\n// UnmarshalJSON provides a custom Unmarshal method for TemplateRequest.  This\n// is necessary because the SigOpLimit and SizeLimit fields can only be specific\n// types.\nfunc (t *TemplateRequest) UnmarshalJSON(data []byte) error {\n\ttype templateRequest TemplateRequest\n\n\trequest := (*templateRequest)(t)\n\tif err := json.Unmarshal(data, &request); err != nil {\n\t\treturn err\n\t}\n\n\t// The SigOpLimit field can only be nil, bool, or int64.\n\tval, err := convertTemplateRequestField(\"sigoplimit\", request.SigOpLimit)\n\tif err != nil {\n\t\treturn err\n\t}\n\trequest.SigOpLimit = val\n\n\t// The SizeLimit field can only be nil, bool, or int64.\n\tval, err = convertTemplateRequestField(\"sizelimit\", request.SizeLimit)\n\tif err != nil {\n\t\treturn err\n\t}\n\trequest.SizeLimit = val\n\n\treturn nil\n}\n\n// GetBlockTemplateCmd defines the getblocktemplate JSON-RPC command.\ntype GetBlockTemplateCmd struct {\n\tRequest *TemplateRequest\n}\n\n// NewGetBlockTemplateCmd returns a new instance which can be used to issue a\n// getblocktemplate JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewGetBlockTemplateCmd(request *TemplateRequest) *GetBlockTemplateCmd {\n\treturn &GetBlockTemplateCmd{\n\t\tRequest: request,\n\t}\n}\n\n// GetCFilterCmd defines the getcfilter JSON-RPC command.\ntype GetCFilterCmd struct {\n\tHash       string\n\tFilterType wire.FilterType\n}\n\n// NewGetCFilterCmd returns a new instance which can be used to issue a\n// getcfilter JSON-RPC command.\nfunc NewGetCFilterCmd(hash string, filterType wire.FilterType) *GetCFilterCmd {\n\treturn &GetCFilterCmd{\n\t\tHash:       hash,\n\t\tFilterType: filterType,\n\t}\n}\n\n// GetCFilterHeaderCmd defines the getcfilterheader JSON-RPC command.\ntype GetCFilterHeaderCmd struct {\n\tHash       string\n\tFilterType wire.FilterType\n}\n\n// NewGetCFilterHeaderCmd returns a new instance which can be used to issue a\n// getcfilterheader JSON-RPC command.\nfunc NewGetCFilterHeaderCmd(hash string,\n\tfilterType wire.FilterType) *GetCFilterHeaderCmd {\n\treturn &GetCFilterHeaderCmd{\n\t\tHash:       hash,\n\t\tFilterType: filterType,\n\t}\n}\n\n// GetChainTipsCmd defines the getchaintips JSON-RPC command.\ntype GetChainTipsCmd struct{}\n\n// NewGetChainTipsCmd returns a new instance which can be used to issue a\n// getchaintips JSON-RPC command.\nfunc NewGetChainTipsCmd() *GetChainTipsCmd {\n\treturn &GetChainTipsCmd{}\n}\n\n// GetConnectionCountCmd defines the getconnectioncount JSON-RPC command.\ntype GetConnectionCountCmd struct{}\n\n// NewGetConnectionCountCmd returns a new instance which can be used to issue a\n// getconnectioncount JSON-RPC command.\nfunc NewGetConnectionCountCmd() *GetConnectionCountCmd {\n\treturn &GetConnectionCountCmd{}\n}\n\n// GetDifficultyCmd defines the getdifficulty JSON-RPC command.\ntype GetDifficultyCmd struct{}\n\n// NewGetDifficultyCmd returns a new instance which can be used to issue a\n// getdifficulty JSON-RPC command.\nfunc NewGetDifficultyCmd() *GetDifficultyCmd {\n\treturn &GetDifficultyCmd{}\n}\n\n// GetGenerateCmd defines the getgenerate JSON-RPC command.\ntype GetGenerateCmd struct{}\n\n// NewGetGenerateCmd returns a new instance which can be used to issue a\n// getgenerate JSON-RPC command.\nfunc NewGetGenerateCmd() *GetGenerateCmd {\n\treturn &GetGenerateCmd{}\n}\n\n// GetHashesPerSecCmd defines the gethashespersec JSON-RPC command.\ntype GetHashesPerSecCmd struct{}\n\n// NewGetHashesPerSecCmd returns a new instance which can be used to issue a\n// gethashespersec JSON-RPC command.\nfunc NewGetHashesPerSecCmd() *GetHashesPerSecCmd {\n\treturn &GetHashesPerSecCmd{}\n}\n\n// GetInfoCmd defines the getinfo JSON-RPC command.\ntype GetInfoCmd struct{}\n\n// NewGetInfoCmd returns a new instance which can be used to issue a\n// getinfo JSON-RPC command.\nfunc NewGetInfoCmd() *GetInfoCmd {\n\treturn &GetInfoCmd{}\n}\n\n// GetMempoolEntryCmd defines the getmempoolentry JSON-RPC command.\ntype GetMempoolEntryCmd struct {\n\tTxID string\n}\n\n// NewGetMempoolEntryCmd returns a new instance which can be used to issue a\n// getmempoolentry JSON-RPC command.\nfunc NewGetMempoolEntryCmd(txHash string) *GetMempoolEntryCmd {\n\treturn &GetMempoolEntryCmd{\n\t\tTxID: txHash,\n\t}\n}\n\n// GetMempoolInfoCmd defines the getmempoolinfo JSON-RPC command.\ntype GetMempoolInfoCmd struct{}\n\n// NewGetMempoolInfoCmd returns a new instance which can be used to issue a\n// getmempool JSON-RPC command.\nfunc NewGetMempoolInfoCmd() *GetMempoolInfoCmd {\n\treturn &GetMempoolInfoCmd{}\n}\n\n// GetMiningInfoCmd defines the getmininginfo JSON-RPC command.\ntype GetMiningInfoCmd struct{}\n\n// NewGetMiningInfoCmd returns a new instance which can be used to issue a\n// getmininginfo JSON-RPC command.\nfunc NewGetMiningInfoCmd() *GetMiningInfoCmd {\n\treturn &GetMiningInfoCmd{}\n}\n\n// GetNetworkInfoCmd defines the getnetworkinfo JSON-RPC command.\ntype GetNetworkInfoCmd struct{}\n\n// NewGetNetworkInfoCmd returns a new instance which can be used to issue a\n// getnetworkinfo JSON-RPC command.\nfunc NewGetNetworkInfoCmd() *GetNetworkInfoCmd {\n\treturn &GetNetworkInfoCmd{}\n}\n\n// GetNetTotalsCmd defines the getnettotals JSON-RPC command.\ntype GetNetTotalsCmd struct{}\n\n// NewGetNetTotalsCmd returns a new instance which can be used to issue a\n// getnettotals JSON-RPC command.\nfunc NewGetNetTotalsCmd() *GetNetTotalsCmd {\n\treturn &GetNetTotalsCmd{}\n}\n\n// GetNetworkHashPSCmd defines the getnetworkhashps JSON-RPC command.\ntype GetNetworkHashPSCmd struct {\n\tBlocks *int `jsonrpcdefault:\"120\"`\n\tHeight *int `jsonrpcdefault:\"-1\"`\n}\n\n// NewGetNetworkHashPSCmd returns a new instance which can be used to issue a\n// getnetworkhashps JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewGetNetworkHashPSCmd(numBlocks, height *int) *GetNetworkHashPSCmd {\n\treturn &GetNetworkHashPSCmd{\n\t\tBlocks: numBlocks,\n\t\tHeight: height,\n\t}\n}\n\n// GetPeerInfoCmd defines the getpeerinfo JSON-RPC command.\ntype GetPeerInfoCmd struct{}\n\n// NewGetPeerInfoCmd returns a new instance which can be used to issue a getpeer\n// JSON-RPC command.\nfunc NewGetPeerInfoCmd() *GetPeerInfoCmd {\n\treturn &GetPeerInfoCmd{}\n}\n\n// GetRawMempoolCmd defines the getmempool JSON-RPC command.\ntype GetRawMempoolCmd struct {\n\tVerbose *bool `jsonrpcdefault:\"false\"`\n}\n\n// NewGetRawMempoolCmd returns a new instance which can be used to issue a\n// getrawmempool JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewGetRawMempoolCmd(verbose *bool) *GetRawMempoolCmd {\n\treturn &GetRawMempoolCmd{\n\t\tVerbose: verbose,\n\t}\n}\n\n// GetRawTransactionCmd defines the getrawtransaction JSON-RPC command.\n//\n// NOTE: This field is an int versus a bool to remain compatible with Bitcoin\n// Core even though it really should be a bool.\ntype GetRawTransactionCmd struct {\n\tTxid    string\n\tVerbose *int `jsonrpcdefault:\"0\"`\n}\n\n// NewGetRawTransactionCmd returns a new instance which can be used to issue a\n// getrawtransaction JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewGetRawTransactionCmd(txHash string, verbose *int) *GetRawTransactionCmd {\n\treturn &GetRawTransactionCmd{\n\t\tTxid:    txHash,\n\t\tVerbose: verbose,\n\t}\n}\n\n// GetTxOutCmd defines the gettxout JSON-RPC command.\ntype GetTxOutCmd struct {\n\tTxid           string\n\tVout           uint32\n\tIncludeMempool *bool `jsonrpcdefault:\"true\"`\n}\n\n// NewGetTxOutCmd returns a new instance which can be used to issue a gettxout\n// JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewGetTxOutCmd(txHash string, vout uint32, includeMempool *bool) *GetTxOutCmd {\n\treturn &GetTxOutCmd{\n\t\tTxid:           txHash,\n\t\tVout:           vout,\n\t\tIncludeMempool: includeMempool,\n\t}\n}\n\n// GetTxOutProofCmd defines the gettxoutproof JSON-RPC command.\ntype GetTxOutProofCmd struct {\n\tTxIDs     []string\n\tBlockHash *string\n}\n\n// NewGetTxOutProofCmd returns a new instance which can be used to issue a\n// gettxoutproof JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewGetTxOutProofCmd(txIDs []string, blockHash *string) *GetTxOutProofCmd {\n\treturn &GetTxOutProofCmd{\n\t\tTxIDs:     txIDs,\n\t\tBlockHash: blockHash,\n\t}\n}\n\n// GetTxOutSetInfoCmd defines the gettxoutsetinfo JSON-RPC command.\ntype GetTxOutSetInfoCmd struct{}\n\n// NewGetTxOutSetInfoCmd returns a new instance which can be used to issue a\n// gettxoutsetinfo JSON-RPC command.\nfunc NewGetTxOutSetInfoCmd() *GetTxOutSetInfoCmd {\n\treturn &GetTxOutSetInfoCmd{}\n}\n\n// GetWorkCmd defines the getwork JSON-RPC command.\ntype GetWorkCmd struct {\n\tData *string\n}\n\n// NewGetWorkCmd returns a new instance which can be used to issue a getwork\n// JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewGetWorkCmd(data *string) *GetWorkCmd {\n\treturn &GetWorkCmd{\n\t\tData: data,\n\t}\n}\n\n// HelpCmd defines the help JSON-RPC command.\ntype HelpCmd struct {\n\tCommand *string\n}\n\n// NewHelpCmd returns a new instance which can be used to issue a help JSON-RPC\n// command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewHelpCmd(command *string) *HelpCmd {\n\treturn &HelpCmd{\n\t\tCommand: command,\n\t}\n}\n\n// InvalidateBlockCmd defines the invalidateblock JSON-RPC command.\ntype InvalidateBlockCmd struct {\n\tBlockHash string\n}\n\n// NewInvalidateBlockCmd returns a new instance which can be used to issue a\n// invalidateblock JSON-RPC command.\nfunc NewInvalidateBlockCmd(blockHash string) *InvalidateBlockCmd {\n\treturn &InvalidateBlockCmd{\n\t\tBlockHash: blockHash,\n\t}\n}\n\n// PingCmd defines the ping JSON-RPC command.\ntype PingCmd struct{}\n\n// NewPingCmd returns a new instance which can be used to issue a ping JSON-RPC\n// command.\nfunc NewPingCmd() *PingCmd {\n\treturn &PingCmd{}\n}\n\n// PreciousBlockCmd defines the preciousblock JSON-RPC command.\ntype PreciousBlockCmd struct {\n\tBlockHash string\n}\n\n// NewPreciousBlockCmd returns a new instance which can be used to issue a\n// preciousblock JSON-RPC command.\nfunc NewPreciousBlockCmd(blockHash string) *PreciousBlockCmd {\n\treturn &PreciousBlockCmd{\n\t\tBlockHash: blockHash,\n\t}\n}\n\n// ReconsiderBlockCmd defines the reconsiderblock JSON-RPC command.\ntype ReconsiderBlockCmd struct {\n\tBlockHash string\n}\n\n// NewReconsiderBlockCmd returns a new instance which can be used to issue a\n// reconsiderblock JSON-RPC command.\nfunc NewReconsiderBlockCmd(blockHash string) *ReconsiderBlockCmd {\n\treturn &ReconsiderBlockCmd{\n\t\tBlockHash: blockHash,\n\t}\n}\n\n// SearchRawTransactionsCmd defines the searchrawtransactions JSON-RPC command.\ntype SearchRawTransactionsCmd struct {\n\tAddress     string\n\tVerbose     *int  `jsonrpcdefault:\"1\"`\n\tSkip        *int  `jsonrpcdefault:\"0\"`\n\tCount       *int  `jsonrpcdefault:\"100\"`\n\tVinExtra    *int  `jsonrpcdefault:\"0\"`\n\tReverse     *bool `jsonrpcdefault:\"false\"`\n\tFilterAddrs *[]string\n}\n\n// NewSearchRawTransactionsCmd returns a new instance which can be used to issue a\n// sendrawtransaction JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewSearchRawTransactionsCmd(address string, verbose, skip, count *int, vinExtra *int, reverse *bool, filterAddrs *[]string) *SearchRawTransactionsCmd {\n\treturn &SearchRawTransactionsCmd{\n\t\tAddress:     address,\n\t\tVerbose:     verbose,\n\t\tSkip:        skip,\n\t\tCount:       count,\n\t\tVinExtra:    vinExtra,\n\t\tReverse:     reverse,\n\t\tFilterAddrs: filterAddrs,\n\t}\n}\n\n// SendRawTransactionCmd defines the sendrawtransaction JSON-RPC command.\ntype SendRawTransactionCmd struct {\n\tHexTx         string\n\tAllowHighFees *bool `jsonrpcdefault:\"false\"`\n}\n\n// NewSendRawTransactionCmd returns a new instance which can be used to issue a\n// sendrawtransaction JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewSendRawTransactionCmd(hexTx string, allowHighFees *bool) *SendRawTransactionCmd {\n\treturn &SendRawTransactionCmd{\n\t\tHexTx:         hexTx,\n\t\tAllowHighFees: allowHighFees,\n\t}\n}\n\n// SetGenerateCmd defines the setgenerate JSON-RPC command.\ntype SetGenerateCmd struct {\n\tGenerate     bool\n\tGenProcLimit *int `jsonrpcdefault:\"-1\"`\n}\n\n// NewSetGenerateCmd returns a new instance which can be used to issue a\n// setgenerate JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewSetGenerateCmd(generate bool, genProcLimit *int) *SetGenerateCmd {\n\treturn &SetGenerateCmd{\n\t\tGenerate:     generate,\n\t\tGenProcLimit: genProcLimit,\n\t}\n}\n\n// StopCmd defines the stop JSON-RPC command.\ntype StopCmd struct{}\n\n// NewStopCmd returns a new instance which can be used to issue a stop JSON-RPC\n// command.\nfunc NewStopCmd() *StopCmd {\n\treturn &StopCmd{}\n}\n\n// SubmitBlockOptions represents the optional options struct provided with a\n// SubmitBlockCmd command.\ntype SubmitBlockOptions struct {\n\t// must be provided if server provided a workid with template.\n\tWorkID string `json:\"workid,omitempty\"`\n}\n\n// SubmitBlockCmd defines the submitblock JSON-RPC command.\ntype SubmitBlockCmd struct {\n\tHexBlock string\n\tOptions  *SubmitBlockOptions\n}\n\n// NewSubmitBlockCmd returns a new instance which can be used to issue a\n// submitblock JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewSubmitBlockCmd(hexBlock string, options *SubmitBlockOptions) *SubmitBlockCmd {\n\treturn &SubmitBlockCmd{\n\t\tHexBlock: hexBlock,\n\t\tOptions:  options,\n\t}\n}\n\n// UptimeCmd defines the uptime JSON-RPC command.\ntype UptimeCmd struct{}\n\n// NewUptimeCmd returns a new instance which can be used to issue an uptime JSON-RPC command.\nfunc NewUptimeCmd() *UptimeCmd {\n\treturn &UptimeCmd{}\n}\n\n// ValidateAddressCmd defines the validateaddress JSON-RPC command.\ntype ValidateAddressCmd struct {\n\tAddress string\n}\n\n// NewValidateAddressCmd returns a new instance which can be used to issue a\n// validateaddress JSON-RPC command.\nfunc NewValidateAddressCmd(address string) *ValidateAddressCmd {\n\treturn &ValidateAddressCmd{\n\t\tAddress: address,\n\t}\n}\n\n// VerifyChainCmd defines the verifychain JSON-RPC command.\ntype VerifyChainCmd struct {\n\tCheckLevel *int32 `jsonrpcdefault:\"3\"`\n\tCheckDepth *int32 `jsonrpcdefault:\"288\"` // 0 = all\n}\n\n// NewVerifyChainCmd returns a new instance which can be used to issue a\n// verifychain JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewVerifyChainCmd(checkLevel, checkDepth *int32) *VerifyChainCmd {\n\treturn &VerifyChainCmd{\n\t\tCheckLevel: checkLevel,\n\t\tCheckDepth: checkDepth,\n\t}\n}\n\n// VerifyMessageCmd defines the verifymessage JSON-RPC command.\ntype VerifyMessageCmd struct {\n\tAddress   string\n\tSignature string\n\tMessage   string\n}\n\n// NewVerifyMessageCmd returns a new instance which can be used to issue a\n// verifymessage JSON-RPC command.\nfunc NewVerifyMessageCmd(address, signature, message string) *VerifyMessageCmd {\n\treturn &VerifyMessageCmd{\n\t\tAddress:   address,\n\t\tSignature: signature,\n\t\tMessage:   message,\n\t}\n}\n\n// VerifyTxOutProofCmd defines the verifytxoutproof JSON-RPC command.\ntype VerifyTxOutProofCmd struct {\n\tProof string\n}\n\n// NewVerifyTxOutProofCmd returns a new instance which can be used to issue a\n// verifytxoutproof JSON-RPC command.\nfunc NewVerifyTxOutProofCmd(proof string) *VerifyTxOutProofCmd {\n\treturn &VerifyTxOutProofCmd{\n\t\tProof: proof,\n\t}\n}\n\nfunc init() {\n\t// No special flags for commands in this file.\n\tflags := UsageFlag(0)\n\n\tMustRegisterCmd(\"addnode\", (*AddNodeCmd)(nil), flags)\n\tMustRegisterCmd(\"createrawtransaction\", (*CreateRawTransactionCmd)(nil), flags)\n\tMustRegisterCmd(\"decoderawtransaction\", (*DecodeRawTransactionCmd)(nil), flags)\n\tMustRegisterCmd(\"decodescript\", (*DecodeScriptCmd)(nil), flags)\n\tMustRegisterCmd(\"getaddednodeinfo\", (*GetAddedNodeInfoCmd)(nil), flags)\n\tMustRegisterCmd(\"getbestblockhash\", (*GetBestBlockHashCmd)(nil), flags)\n\tMustRegisterCmd(\"getblock\", (*GetBlockCmd)(nil), flags)\n\tMustRegisterCmd(\"getblockchaininfo\", (*GetBlockChainInfoCmd)(nil), flags)\n\tMustRegisterCmd(\"getblockcount\", (*GetBlockCountCmd)(nil), flags)\n\tMustRegisterCmd(\"getblockhash\", (*GetBlockHashCmd)(nil), flags)\n\tMustRegisterCmd(\"getblockheader\", (*GetBlockHeaderCmd)(nil), flags)\n\tMustRegisterCmd(\"getblocktemplate\", (*GetBlockTemplateCmd)(nil), flags)\n\tMustRegisterCmd(\"getcfilter\", (*GetCFilterCmd)(nil), flags)\n\tMustRegisterCmd(\"getcfilterheader\", (*GetCFilterHeaderCmd)(nil), flags)\n\tMustRegisterCmd(\"getchaintips\", (*GetChainTipsCmd)(nil), flags)\n\tMustRegisterCmd(\"getconnectioncount\", (*GetConnectionCountCmd)(nil), flags)\n\tMustRegisterCmd(\"getdifficulty\", (*GetDifficultyCmd)(nil), flags)\n\tMustRegisterCmd(\"getgenerate\", (*GetGenerateCmd)(nil), flags)\n\tMustRegisterCmd(\"gethashespersec\", (*GetHashesPerSecCmd)(nil), flags)\n\tMustRegisterCmd(\"getinfo\", (*GetInfoCmd)(nil), flags)\n\tMustRegisterCmd(\"getmempoolentry\", (*GetMempoolEntryCmd)(nil), flags)\n\tMustRegisterCmd(\"getmempoolinfo\", (*GetMempoolInfoCmd)(nil), flags)\n\tMustRegisterCmd(\"getmininginfo\", (*GetMiningInfoCmd)(nil), flags)\n\tMustRegisterCmd(\"getnetworkinfo\", (*GetNetworkInfoCmd)(nil), flags)\n\tMustRegisterCmd(\"getnettotals\", (*GetNetTotalsCmd)(nil), flags)\n\tMustRegisterCmd(\"getnetworkhashps\", (*GetNetworkHashPSCmd)(nil), flags)\n\tMustRegisterCmd(\"getpeerinfo\", (*GetPeerInfoCmd)(nil), flags)\n\tMustRegisterCmd(\"getrawmempool\", (*GetRawMempoolCmd)(nil), flags)\n\tMustRegisterCmd(\"getrawtransaction\", (*GetRawTransactionCmd)(nil), flags)\n\tMustRegisterCmd(\"gettxout\", (*GetTxOutCmd)(nil), flags)\n\tMustRegisterCmd(\"gettxoutproof\", (*GetTxOutProofCmd)(nil), flags)\n\tMustRegisterCmd(\"gettxoutsetinfo\", (*GetTxOutSetInfoCmd)(nil), flags)\n\tMustRegisterCmd(\"getwork\", (*GetWorkCmd)(nil), flags)\n\tMustRegisterCmd(\"help\", (*HelpCmd)(nil), flags)\n\tMustRegisterCmd(\"invalidateblock\", (*InvalidateBlockCmd)(nil), flags)\n\tMustRegisterCmd(\"ping\", (*PingCmd)(nil), flags)\n\tMustRegisterCmd(\"preciousblock\", (*PreciousBlockCmd)(nil), flags)\n\tMustRegisterCmd(\"reconsiderblock\", (*ReconsiderBlockCmd)(nil), flags)\n\tMustRegisterCmd(\"searchrawtransactions\", (*SearchRawTransactionsCmd)(nil), flags)\n\tMustRegisterCmd(\"sendrawtransaction\", (*SendRawTransactionCmd)(nil), flags)\n\tMustRegisterCmd(\"setgenerate\", (*SetGenerateCmd)(nil), flags)\n\tMustRegisterCmd(\"stop\", (*StopCmd)(nil), flags)\n\tMustRegisterCmd(\"submitblock\", (*SubmitBlockCmd)(nil), flags)\n\tMustRegisterCmd(\"uptime\", (*UptimeCmd)(nil), flags)\n\tMustRegisterCmd(\"validateaddress\", (*ValidateAddressCmd)(nil), flags)\n\tMustRegisterCmd(\"verifychain\", (*VerifyChainCmd)(nil), flags)\n\tMustRegisterCmd(\"verifymessage\", (*VerifyMessageCmd)(nil), flags)\n\tMustRegisterCmd(\"verifytxoutproof\", (*VerifyTxOutProofCmd)(nil), flags)\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/btcjson/chainsvrresults.go",
    "content": "// Copyright (c) 2014-2017 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcjson\n\nimport \"encoding/json\"\n\n// GetBlockHeaderVerboseResult models the data from the getblockheader command when\n// the verbose flag is set.  When the verbose flag is not set, getblockheader\n// returns a hex-encoded string.\ntype GetBlockHeaderVerboseResult struct {\n\tHash          string  `json:\"hash\"`\n\tConfirmations int64   `json:\"confirmations\"`\n\tHeight        int32   `json:\"height\"`\n\tVersion       int32   `json:\"version\"`\n\tVersionHex    string  `json:\"versionHex\"`\n\tMerkleRoot    string  `json:\"merkleroot\"`\n\tTime          int64   `json:\"time\"`\n\tNonce         uint64  `json:\"nonce\"`\n\tBits          string  `json:\"bits\"`\n\tDifficulty    float64 `json:\"difficulty\"`\n\tPreviousHash  string  `json:\"previousblockhash,omitempty\"`\n\tNextHash      string  `json:\"nextblockhash,omitempty\"`\n}\n\n// GetBlockVerboseResult models the data from the getblock command when the\n// verbose flag is set.  When the verbose flag is not set, getblock returns a\n// hex-encoded string.\ntype GetBlockVerboseResult struct {\n\tHash          string        `json:\"hash\"`\n\tConfirmations int64         `json:\"confirmations\"`\n\tStrippedSize  int32         `json:\"strippedsize\"`\n\tSize          int32         `json:\"size\"`\n\tWeight        int32         `json:\"weight\"`\n\tHeight        int64         `json:\"height\"`\n\tVersion       int32         `json:\"version\"`\n\tVersionHex    string        `json:\"versionHex\"`\n\tMerkleRoot    string        `json:\"merkleroot\"`\n\tTx            []string      `json:\"tx,omitempty\"`\n\tRawTx         []TxRawResult `json:\"rawtx,omitempty\"`\n\tTime          int64         `json:\"time\"`\n\tNonce         uint32        `json:\"nonce\"`\n\tBits          string        `json:\"bits\"`\n\tDifficulty    float64       `json:\"difficulty\"`\n\tPreviousHash  string        `json:\"previousblockhash\"`\n\tNextHash      string        `json:\"nextblockhash,omitempty\"`\n}\n\n// CreateMultiSigResult models the data returned from the createmultisig\n// command.\ntype CreateMultiSigResult struct {\n\tAddress      string `json:\"address\"`\n\tRedeemScript string `json:\"redeemScript\"`\n}\n\n// DecodeScriptResult models the data returned from the decodescript command.\ntype DecodeScriptResult struct {\n\tAsm       string   `json:\"asm\"`\n\tReqSigs   int32    `json:\"reqSigs,omitempty\"`\n\tType      string   `json:\"type\"`\n\tAddresses []string `json:\"addresses,omitempty\"`\n\tP2sh      string   `json:\"p2sh,omitempty\"`\n}\n\n// GetAddedNodeInfoResultAddr models the data of the addresses portion of the\n// getaddednodeinfo command.\ntype GetAddedNodeInfoResultAddr struct {\n\tAddress   string `json:\"address\"`\n\tConnected string `json:\"connected\"`\n}\n\n// GetAddedNodeInfoResult models the data from the getaddednodeinfo command.\ntype GetAddedNodeInfoResult struct {\n\tAddedNode string                        `json:\"addednode\"`\n\tConnected *bool                         `json:\"connected,omitempty\"`\n\tAddresses *[]GetAddedNodeInfoResultAddr `json:\"addresses,omitempty\"`\n}\n\n// SoftForkDescription describes the current state of a soft-fork which was\n// deployed using a super-majority block signalling.\ntype SoftForkDescription struct {\n\tID      string `json:\"id\"`\n\tVersion uint32 `json:\"version\"`\n\tReject  struct {\n\t\tStatus bool `json:\"status\"`\n\t} `json:\"reject\"`\n}\n\n// Bip9SoftForkDescription describes the current state of a defined BIP0009\n// version bits soft-fork.\ntype Bip9SoftForkDescription struct {\n\tStatus    string `json:\"status\"`\n\tBit       uint8  `json:\"bit\"`\n\tStartTime int64  `json:\"startTime\"`\n\tTimeout   int64  `json:\"timeout\"`\n\tSince     int32  `json:\"since\"`\n}\n\n// GetBlockChainInfoResult models the data returned from the getblockchaininfo\n// command.\ntype GetBlockChainInfoResult struct {\n\tChain                string                              `json:\"chain\"`\n\tBlocks               int32                               `json:\"blocks\"`\n\tHeaders              int32                               `json:\"headers\"`\n\tBestBlockHash        string                              `json:\"bestblockhash\"`\n\tDifficulty           float64                             `json:\"difficulty\"`\n\tMedianTime           int64                               `json:\"mediantime\"`\n\tVerificationProgress float64                             `json:\"verificationprogress,omitempty\"`\n\tPruned               bool                                `json:\"pruned\"`\n\tPruneHeight          int32                               `json:\"pruneheight,omitempty\"`\n\tChainWork            string                              `json:\"chainwork,omitempty\"`\n\tSoftForks            []*SoftForkDescription              `json:\"softforks\"`\n\tBip9SoftForks        map[string]*Bip9SoftForkDescription `json:\"bip9_softforks\"`\n}\n\n// GetBlockTemplateResultTx models the transactions field of the\n// getblocktemplate command.\ntype GetBlockTemplateResultTx struct {\n\tData    string  `json:\"data\"`\n\tHash    string  `json:\"hash\"`\n\tDepends []int64 `json:\"depends\"`\n\tFee     int64   `json:\"fee\"`\n\tSigOps  int64   `json:\"sigops\"`\n\tWeight  int64   `json:\"weight\"`\n}\n\n// GetBlockTemplateResultAux models the coinbaseaux field of the\n// getblocktemplate command.\ntype GetBlockTemplateResultAux struct {\n\tFlags string `json:\"flags\"`\n}\n\n// GetBlockTemplateResult models the data returned from the getblocktemplate\n// command.\ntype GetBlockTemplateResult struct {\n\t// Base fields from BIP 0022.  CoinbaseAux is optional.  One of\n\t// CoinbaseTxn or CoinbaseValue must be specified, but not both.\n\tBits          string                     `json:\"bits\"`\n\tCurTime       int64                      `json:\"curtime\"`\n\tHeight        int64                      `json:\"height\"`\n\tPreviousHash  string                     `json:\"previousblockhash\"`\n\tSigOpLimit    int64                      `json:\"sigoplimit,omitempty\"`\n\tSizeLimit     int64                      `json:\"sizelimit,omitempty\"`\n\tWeightLimit   int64                      `json:\"weightlimit,omitempty\"`\n\tTransactions  []GetBlockTemplateResultTx `json:\"transactions\"`\n\tVersion       int32                      `json:\"version\"`\n\tCoinbaseAux   *GetBlockTemplateResultAux `json:\"coinbaseaux,omitempty\"`\n\tCoinbaseTxn   *GetBlockTemplateResultTx  `json:\"coinbasetxn,omitempty\"`\n\tCoinbaseValue *int64                     `json:\"coinbasevalue,omitempty\"`\n\tWorkID        string                     `json:\"workid,omitempty\"`\n\n\t// Witness commitment defined in BIP 0141.\n\tDefaultWitnessCommitment string `json:\"default_witness_commitment,omitempty\"`\n\n\t// Optional long polling from BIP 0022.\n\tLongPollID  string `json:\"longpollid,omitempty\"`\n\tLongPollURI string `json:\"longpolluri,omitempty\"`\n\tSubmitOld   *bool  `json:\"submitold,omitempty\"`\n\n\t// Basic pool extension from BIP 0023.\n\tTarget  string `json:\"target,omitempty\"`\n\tExpires int64  `json:\"expires,omitempty\"`\n\n\t// Mutations from BIP 0023.\n\tMaxTime    int64    `json:\"maxtime,omitempty\"`\n\tMinTime    int64    `json:\"mintime,omitempty\"`\n\tMutable    []string `json:\"mutable,omitempty\"`\n\tNonceRange string   `json:\"noncerange,omitempty\"`\n\n\t// Block proposal from BIP 0023.\n\tCapabilities  []string `json:\"capabilities,omitempty\"`\n\tRejectReasion string   `json:\"reject-reason,omitempty\"`\n}\n\n// GetMempoolEntryResult models the data returned from the getmempoolentry\n// command.\ntype GetMempoolEntryResult struct {\n\tSize             int32    `json:\"size\"`\n\tFee              float64  `json:\"fee\"`\n\tModifiedFee      float64  `json:\"modifiedfee\"`\n\tTime             int64    `json:\"time\"`\n\tHeight           int64    `json:\"height\"`\n\tStartingPriority float64  `json:\"startingpriority\"`\n\tCurrentPriority  float64  `json:\"currentpriority\"`\n\tDescendantCount  int64    `json:\"descendantcount\"`\n\tDescendantSize   int64    `json:\"descendantsize\"`\n\tDescendantFees   float64  `json:\"descendantfees\"`\n\tAncestorCount    int64    `json:\"ancestorcount\"`\n\tAncestorSize     int64    `json:\"ancestorsize\"`\n\tAncestorFees     float64  `json:\"ancestorfees\"`\n\tDepends          []string `json:\"depends\"`\n}\n\n// GetMempoolInfoResult models the data returned from the getmempoolinfo\n// command.\ntype GetMempoolInfoResult struct {\n\tSize  int64 `json:\"size\"`\n\tBytes int64 `json:\"bytes\"`\n}\n\n// NetworksResult models the networks data from the getnetworkinfo command.\ntype NetworksResult struct {\n\tName                      string `json:\"name\"`\n\tLimited                   bool   `json:\"limited\"`\n\tReachable                 bool   `json:\"reachable\"`\n\tProxy                     string `json:\"proxy\"`\n\tProxyRandomizeCredentials bool   `json:\"proxy_randomize_credentials\"`\n}\n\n// LocalAddressesResult models the localaddresses data from the getnetworkinfo\n// command.\ntype LocalAddressesResult struct {\n\tAddress string `json:\"address\"`\n\tPort    uint16 `json:\"port\"`\n\tScore   int32  `json:\"score\"`\n}\n\n// GetNetworkInfoResult models the data returned from the getnetworkinfo\n// command.\ntype GetNetworkInfoResult struct {\n\tVersion         int32                  `json:\"version\"`\n\tSubVersion      string                 `json:\"subversion\"`\n\tProtocolVersion int32                  `json:\"protocolversion\"`\n\tLocalServices   string                 `json:\"localservices\"`\n\tLocalRelay      bool                   `json:\"localrelay\"`\n\tTimeOffset      int64                  `json:\"timeoffset\"`\n\tConnections     int32                  `json:\"connections\"`\n\tNetworkActive   bool                   `json:\"networkactive\"`\n\tNetworks        []NetworksResult       `json:\"networks\"`\n\tRelayFee        float64                `json:\"relayfee\"`\n\tIncrementalFee  float64                `json:\"incrementalfee\"`\n\tLocalAddresses  []LocalAddressesResult `json:\"localaddresses\"`\n\tWarnings        string                 `json:\"warnings\"`\n}\n\n// GetPeerInfoResult models the data returned from the getpeerinfo command.\ntype GetPeerInfoResult struct {\n\tID             int32   `json:\"id\"`\n\tAddr           string  `json:\"addr\"`\n\tAddrLocal      string  `json:\"addrlocal,omitempty\"`\n\tServices       string  `json:\"services\"`\n\tRelayTxes      bool    `json:\"relaytxes\"`\n\tLastSend       int64   `json:\"lastsend\"`\n\tLastRecv       int64   `json:\"lastrecv\"`\n\tBytesSent      uint64  `json:\"bytessent\"`\n\tBytesRecv      uint64  `json:\"bytesrecv\"`\n\tConnTime       int64   `json:\"conntime\"`\n\tTimeOffset     int64   `json:\"timeoffset\"`\n\tPingTime       float64 `json:\"pingtime\"`\n\tPingWait       float64 `json:\"pingwait,omitempty\"`\n\tVersion        uint32  `json:\"version\"`\n\tSubVer         string  `json:\"subver\"`\n\tInbound        bool    `json:\"inbound\"`\n\tStartingHeight int32   `json:\"startingheight\"`\n\tCurrentHeight  int32   `json:\"currentheight,omitempty\"`\n\tBanScore       int32   `json:\"banscore\"`\n\tFeeFilter      int64   `json:\"feefilter\"`\n\tSyncNode       bool    `json:\"syncnode\"`\n}\n\n// GetRawMempoolVerboseResult models the data returned from the getrawmempool\n// command when the verbose flag is set.  When the verbose flag is not set,\n// getrawmempool returns an array of transaction hashes.\ntype GetRawMempoolVerboseResult struct {\n\tSize             int32    `json:\"size\"`\n\tVsize            int32    `json:\"vsize\"`\n\tFee              float64  `json:\"fee\"`\n\tTime             int64    `json:\"time\"`\n\tHeight           int64    `json:\"height\"`\n\tStartingPriority float64  `json:\"startingpriority\"`\n\tCurrentPriority  float64  `json:\"currentpriority\"`\n\tDepends          []string `json:\"depends\"`\n}\n\n// ScriptPubKeyResult models the scriptPubKey data of a tx script.  It is\n// defined separately since it is used by multiple commands.\ntype ScriptPubKeyResult struct {\n\tAsm       string   `json:\"asm\"`\n\tHex       string   `json:\"hex,omitempty\"`\n\tReqSigs   int32    `json:\"reqSigs,omitempty\"`\n\tType      string   `json:\"type\"`\n\tAddresses []string `json:\"addresses,omitempty\"`\n}\n\n// GetTxOutResult models the data from the gettxout command.\ntype GetTxOutResult struct {\n\tBestBlock     string             `json:\"bestblock\"`\n\tConfirmations int64              `json:\"confirmations\"`\n\tValue         float64            `json:\"value\"`\n\tScriptPubKey  ScriptPubKeyResult `json:\"scriptPubKey\"`\n\tCoinbase      bool               `json:\"coinbase\"`\n}\n\n// GetNetTotalsResult models the data returned from the getnettotals command.\ntype GetNetTotalsResult struct {\n\tTotalBytesRecv uint64 `json:\"totalbytesrecv\"`\n\tTotalBytesSent uint64 `json:\"totalbytessent\"`\n\tTimeMillis     int64  `json:\"timemillis\"`\n}\n\n// ScriptSig models a signature script.  It is defined separately since it only\n// applies to non-coinbase.  Therefore the field in the Vin structure needs\n// to be a pointer.\ntype ScriptSig struct {\n\tAsm string `json:\"asm\"`\n\tHex string `json:\"hex\"`\n}\n\n// Vin models parts of the tx data.  It is defined separately since\n// getrawtransaction, decoderawtransaction, and searchrawtransaction use the\n// same structure.\ntype Vin struct {\n\tCoinbase  string     `json:\"coinbase\"`\n\tTxid      string     `json:\"txid\"`\n\tVout      uint32     `json:\"vout\"`\n\tScriptSig *ScriptSig `json:\"scriptSig\"`\n\tSequence  uint32     `json:\"sequence\"`\n\tWitness   []string   `json:\"txinwitness\"`\n}\n\n// IsCoinBase returns a bool to show if a Vin is a Coinbase one or not.\nfunc (v *Vin) IsCoinBase() bool {\n\treturn len(v.Coinbase) > 0\n}\n\n// HasWitness returns a bool to show if a Vin has any witness data associated\n// with it or not.\nfunc (v *Vin) HasWitness() bool {\n\treturn len(v.Witness) > 0\n}\n\n// MarshalJSON provides a custom Marshal method for Vin.\nfunc (v *Vin) MarshalJSON() ([]byte, error) {\n\tif v.IsCoinBase() {\n\t\tcoinbaseStruct := struct {\n\t\t\tCoinbase string   `json:\"coinbase\"`\n\t\t\tSequence uint32   `json:\"sequence\"`\n\t\t\tWitness  []string `json:\"witness,omitempty\"`\n\t\t}{\n\t\t\tCoinbase: v.Coinbase,\n\t\t\tSequence: v.Sequence,\n\t\t\tWitness:  v.Witness,\n\t\t}\n\t\treturn json.Marshal(coinbaseStruct)\n\t}\n\n\tif v.HasWitness() {\n\t\ttxStruct := struct {\n\t\t\tTxid      string     `json:\"txid\"`\n\t\t\tVout      uint32     `json:\"vout\"`\n\t\t\tScriptSig *ScriptSig `json:\"scriptSig\"`\n\t\t\tWitness   []string   `json:\"txinwitness\"`\n\t\t\tSequence  uint32     `json:\"sequence\"`\n\t\t}{\n\t\t\tTxid:      v.Txid,\n\t\t\tVout:      v.Vout,\n\t\t\tScriptSig: v.ScriptSig,\n\t\t\tWitness:   v.Witness,\n\t\t\tSequence:  v.Sequence,\n\t\t}\n\t\treturn json.Marshal(txStruct)\n\t}\n\n\ttxStruct := struct {\n\t\tTxid      string     `json:\"txid\"`\n\t\tVout      uint32     `json:\"vout\"`\n\t\tScriptSig *ScriptSig `json:\"scriptSig\"`\n\t\tSequence  uint32     `json:\"sequence\"`\n\t}{\n\t\tTxid:      v.Txid,\n\t\tVout:      v.Vout,\n\t\tScriptSig: v.ScriptSig,\n\t\tSequence:  v.Sequence,\n\t}\n\treturn json.Marshal(txStruct)\n}\n\n// PrevOut represents previous output for an input Vin.\ntype PrevOut struct {\n\tAddresses []string `json:\"addresses,omitempty\"`\n\tValue     float64  `json:\"value\"`\n}\n\n// VinPrevOut is like Vin except it includes PrevOut.  It is used by searchrawtransaction\ntype VinPrevOut struct {\n\tCoinbase  string     `json:\"coinbase\"`\n\tTxid      string     `json:\"txid\"`\n\tVout      uint32     `json:\"vout\"`\n\tScriptSig *ScriptSig `json:\"scriptSig\"`\n\tWitness   []string   `json:\"txinwitness\"`\n\tPrevOut   *PrevOut   `json:\"prevOut\"`\n\tSequence  uint32     `json:\"sequence\"`\n}\n\n// IsCoinBase returns a bool to show if a Vin is a Coinbase one or not.\nfunc (v *VinPrevOut) IsCoinBase() bool {\n\treturn len(v.Coinbase) > 0\n}\n\n// HasWitness returns a bool to show if a Vin has any witness data associated\n// with it or not.\nfunc (v *VinPrevOut) HasWitness() bool {\n\treturn len(v.Witness) > 0\n}\n\n// MarshalJSON provides a custom Marshal method for VinPrevOut.\nfunc (v *VinPrevOut) MarshalJSON() ([]byte, error) {\n\tif v.IsCoinBase() {\n\t\tcoinbaseStruct := struct {\n\t\t\tCoinbase string `json:\"coinbase\"`\n\t\t\tSequence uint32 `json:\"sequence\"`\n\t\t}{\n\t\t\tCoinbase: v.Coinbase,\n\t\t\tSequence: v.Sequence,\n\t\t}\n\t\treturn json.Marshal(coinbaseStruct)\n\t}\n\n\tif v.HasWitness() {\n\t\ttxStruct := struct {\n\t\t\tTxid      string     `json:\"txid\"`\n\t\t\tVout      uint32     `json:\"vout\"`\n\t\t\tScriptSig *ScriptSig `json:\"scriptSig\"`\n\t\t\tWitness   []string   `json:\"txinwitness\"`\n\t\t\tPrevOut   *PrevOut   `json:\"prevOut,omitempty\"`\n\t\t\tSequence  uint32     `json:\"sequence\"`\n\t\t}{\n\t\t\tTxid:      v.Txid,\n\t\t\tVout:      v.Vout,\n\t\t\tScriptSig: v.ScriptSig,\n\t\t\tWitness:   v.Witness,\n\t\t\tPrevOut:   v.PrevOut,\n\t\t\tSequence:  v.Sequence,\n\t\t}\n\t\treturn json.Marshal(txStruct)\n\t}\n\n\ttxStruct := struct {\n\t\tTxid      string     `json:\"txid\"`\n\t\tVout      uint32     `json:\"vout\"`\n\t\tScriptSig *ScriptSig `json:\"scriptSig\"`\n\t\tPrevOut   *PrevOut   `json:\"prevOut,omitempty\"`\n\t\tSequence  uint32     `json:\"sequence\"`\n\t}{\n\t\tTxid:      v.Txid,\n\t\tVout:      v.Vout,\n\t\tScriptSig: v.ScriptSig,\n\t\tPrevOut:   v.PrevOut,\n\t\tSequence:  v.Sequence,\n\t}\n\treturn json.Marshal(txStruct)\n}\n\n// Vout models parts of the tx data.  It is defined separately since both\n// getrawtransaction and decoderawtransaction use the same structure.\ntype Vout struct {\n\tValue        float64            `json:\"value\"`\n\tN            uint32             `json:\"n\"`\n\tScriptPubKey ScriptPubKeyResult `json:\"scriptPubKey\"`\n}\n\n// GetMiningInfoResult models the data from the getmininginfo command.\ntype GetMiningInfoResult struct {\n\tBlocks             int64   `json:\"blocks\"`\n\tCurrentBlockSize   uint64  `json:\"currentblocksize\"`\n\tCurrentBlockWeight uint64  `json:\"currentblockweight\"`\n\tCurrentBlockTx     uint64  `json:\"currentblocktx\"`\n\tDifficulty         float64 `json:\"difficulty\"`\n\tErrors             string  `json:\"errors\"`\n\tGenerate           bool    `json:\"generate\"`\n\tGenProcLimit       int32   `json:\"genproclimit\"`\n\tHashesPerSec       int64   `json:\"hashespersec\"`\n\tNetworkHashPS      int64   `json:\"networkhashps\"`\n\tPooledTx           uint64  `json:\"pooledtx\"`\n\tTestNet            bool    `json:\"testnet\"`\n}\n\n// GetWorkResult models the data from the getwork command.\ntype GetWorkResult struct {\n\tData     string `json:\"data\"`\n\tHash1    string `json:\"hash1\"`\n\tMidstate string `json:\"midstate\"`\n\tTarget   string `json:\"target\"`\n}\n\n// InfoChainResult models the data returned by the chain server getinfo command.\ntype InfoChainResult struct {\n\tVersion         int32   `json:\"version\"`\n\tProtocolVersion int32   `json:\"protocolversion\"`\n\tBlocks          int32   `json:\"blocks\"`\n\tTimeOffset      int64   `json:\"timeoffset\"`\n\tConnections     int32   `json:\"connections\"`\n\tProxy           string  `json:\"proxy\"`\n\tDifficulty      float64 `json:\"difficulty\"`\n\tTestNet         bool    `json:\"testnet\"`\n\tRelayFee        float64 `json:\"relayfee\"`\n\tErrors          string  `json:\"errors\"`\n}\n\n// TxRawResult models the data from the getrawtransaction command.\ntype TxRawResult struct {\n\tHex           string `json:\"hex\"`\n\tTxid          string `json:\"txid\"`\n\tHash          string `json:\"hash,omitempty\"`\n\tSize          int32  `json:\"size,omitempty\"`\n\tVsize         int32  `json:\"vsize,omitempty\"`\n\tVersion       int32  `json:\"version\"`\n\tLockTime      uint32 `json:\"locktime\"`\n\tVin           []Vin  `json:\"vin\"`\n\tVout          []Vout `json:\"vout\"`\n\tBlockHash     string `json:\"blockhash,omitempty\"`\n\tConfirmations uint64 `json:\"confirmations,omitempty\"`\n\tTime          int64  `json:\"time,omitempty\"`\n\tBlocktime     int64  `json:\"blocktime,omitempty\"`\n}\n\n// SearchRawTransactionsResult models the data from the searchrawtransaction\n// command.\ntype SearchRawTransactionsResult struct {\n\tHex           string       `json:\"hex,omitempty\"`\n\tTxid          string       `json:\"txid\"`\n\tHash          string       `json:\"hash\"`\n\tSize          string       `json:\"size\"`\n\tVsize         string       `json:\"vsize\"`\n\tVersion       int32        `json:\"version\"`\n\tLockTime      uint32       `json:\"locktime\"`\n\tVin           []VinPrevOut `json:\"vin\"`\n\tVout          []Vout       `json:\"vout\"`\n\tBlockHash     string       `json:\"blockhash,omitempty\"`\n\tConfirmations uint64       `json:\"confirmations,omitempty\"`\n\tTime          int64        `json:\"time,omitempty\"`\n\tBlocktime     int64        `json:\"blocktime,omitempty\"`\n}\n\n// TxRawDecodeResult models the data from the decoderawtransaction command.\ntype TxRawDecodeResult struct {\n\tTxid     string `json:\"txid\"`\n\tVersion  int32  `json:\"version\"`\n\tLocktime uint32 `json:\"locktime\"`\n\tVin      []Vin  `json:\"vin\"`\n\tVout     []Vout `json:\"vout\"`\n}\n\n// ValidateAddressChainResult models the data returned by the chain server\n// validateaddress command.\ntype ValidateAddressChainResult struct {\n\tIsValid bool   `json:\"isvalid\"`\n\tAddress string `json:\"address,omitempty\"`\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/btcjson/chainsvrwscmds.go",
    "content": "// Copyright (c) 2014-2017 The btcsuite developers\n// Copyright (c) 2015-2017 The Decred developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\n// NOTE: This file is intended to house the RPC commands that are supported by\n// a chain server, but are only available via websockets.\n\npackage btcjson\n\n// AuthenticateCmd defines the authenticate JSON-RPC command.\ntype AuthenticateCmd struct {\n\tUsername   string\n\tPassphrase string\n}\n\n// NewAuthenticateCmd returns a new instance which can be used to issue an\n// authenticate JSON-RPC command.\nfunc NewAuthenticateCmd(username, passphrase string) *AuthenticateCmd {\n\treturn &AuthenticateCmd{\n\t\tUsername:   username,\n\t\tPassphrase: passphrase,\n\t}\n}\n\n// NotifyBlocksCmd defines the notifyblocks JSON-RPC command.\ntype NotifyBlocksCmd struct{}\n\n// NewNotifyBlocksCmd returns a new instance which can be used to issue a\n// notifyblocks JSON-RPC command.\nfunc NewNotifyBlocksCmd() *NotifyBlocksCmd {\n\treturn &NotifyBlocksCmd{}\n}\n\n// StopNotifyBlocksCmd defines the stopnotifyblocks JSON-RPC command.\ntype StopNotifyBlocksCmd struct{}\n\n// NewStopNotifyBlocksCmd returns a new instance which can be used to issue a\n// stopnotifyblocks JSON-RPC command.\nfunc NewStopNotifyBlocksCmd() *StopNotifyBlocksCmd {\n\treturn &StopNotifyBlocksCmd{}\n}\n\n// NotifyNewTransactionsCmd defines the notifynewtransactions JSON-RPC command.\ntype NotifyNewTransactionsCmd struct {\n\tVerbose *bool `jsonrpcdefault:\"false\"`\n}\n\n// NewNotifyNewTransactionsCmd returns a new instance which can be used to issue\n// a notifynewtransactions JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewNotifyNewTransactionsCmd(verbose *bool) *NotifyNewTransactionsCmd {\n\treturn &NotifyNewTransactionsCmd{\n\t\tVerbose: verbose,\n\t}\n}\n\n// SessionCmd defines the session JSON-RPC command.\ntype SessionCmd struct{}\n\n// NewSessionCmd returns a new instance which can be used to issue a session\n// JSON-RPC command.\nfunc NewSessionCmd() *SessionCmd {\n\treturn &SessionCmd{}\n}\n\n// StopNotifyNewTransactionsCmd defines the stopnotifynewtransactions JSON-RPC command.\ntype StopNotifyNewTransactionsCmd struct{}\n\n// NewStopNotifyNewTransactionsCmd returns a new instance which can be used to issue\n// a stopnotifynewtransactions JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewStopNotifyNewTransactionsCmd() *StopNotifyNewTransactionsCmd {\n\treturn &StopNotifyNewTransactionsCmd{}\n}\n\n// NotifyReceivedCmd defines the notifyreceived JSON-RPC command.\n//\n// NOTE: Deprecated. Use LoadTxFilterCmd instead.\ntype NotifyReceivedCmd struct {\n\tAddresses []string\n}\n\n// NewNotifyReceivedCmd returns a new instance which can be used to issue a\n// notifyreceived JSON-RPC command.\n//\n// NOTE: Deprecated. Use NewLoadTxFilterCmd instead.\nfunc NewNotifyReceivedCmd(addresses []string) *NotifyReceivedCmd {\n\treturn &NotifyReceivedCmd{\n\t\tAddresses: addresses,\n\t}\n}\n\n// OutPoint describes a transaction outpoint that will be marshalled to and\n// from JSON.\ntype OutPoint struct {\n\tHash  string `json:\"hash\"`\n\tIndex uint32 `json:\"index\"`\n}\n\n// LoadTxFilterCmd defines the loadtxfilter request parameters to load or\n// reload a transaction filter.\n//\n// NOTE: This is a btcd extension ported from github.com/decred/dcrd/dcrjson\n// and requires a websocket connection.\ntype LoadTxFilterCmd struct {\n\tReload    bool\n\tAddresses []string\n\tOutPoints []OutPoint\n}\n\n// NewLoadTxFilterCmd returns a new instance which can be used to issue a\n// loadtxfilter JSON-RPC command.\n//\n// NOTE: This is a btcd extension ported from github.com/decred/dcrd/dcrjson\n// and requires a websocket connection.\nfunc NewLoadTxFilterCmd(reload bool, addresses []string, outPoints []OutPoint) *LoadTxFilterCmd {\n\treturn &LoadTxFilterCmd{\n\t\tReload:    reload,\n\t\tAddresses: addresses,\n\t\tOutPoints: outPoints,\n\t}\n}\n\n// NotifySpentCmd defines the notifyspent JSON-RPC command.\n//\n// NOTE: Deprecated. Use LoadTxFilterCmd instead.\ntype NotifySpentCmd struct {\n\tOutPoints []OutPoint\n}\n\n// NewNotifySpentCmd returns a new instance which can be used to issue a\n// notifyspent JSON-RPC command.\n//\n// NOTE: Deprecated. Use NewLoadTxFilterCmd instead.\nfunc NewNotifySpentCmd(outPoints []OutPoint) *NotifySpentCmd {\n\treturn &NotifySpentCmd{\n\t\tOutPoints: outPoints,\n\t}\n}\n\n// StopNotifyReceivedCmd defines the stopnotifyreceived JSON-RPC command.\n//\n// NOTE: Deprecated. Use LoadTxFilterCmd instead.\ntype StopNotifyReceivedCmd struct {\n\tAddresses []string\n}\n\n// NewStopNotifyReceivedCmd returns a new instance which can be used to issue a\n// stopnotifyreceived JSON-RPC command.\n//\n// NOTE: Deprecated. Use NewLoadTxFilterCmd instead.\nfunc NewStopNotifyReceivedCmd(addresses []string) *StopNotifyReceivedCmd {\n\treturn &StopNotifyReceivedCmd{\n\t\tAddresses: addresses,\n\t}\n}\n\n// StopNotifySpentCmd defines the stopnotifyspent JSON-RPC command.\n//\n// NOTE: Deprecated. Use LoadTxFilterCmd instead.\ntype StopNotifySpentCmd struct {\n\tOutPoints []OutPoint\n}\n\n// NewStopNotifySpentCmd returns a new instance which can be used to issue a\n// stopnotifyspent JSON-RPC command.\n//\n// NOTE: Deprecated. Use NewLoadTxFilterCmd instead.\nfunc NewStopNotifySpentCmd(outPoints []OutPoint) *StopNotifySpentCmd {\n\treturn &StopNotifySpentCmd{\n\t\tOutPoints: outPoints,\n\t}\n}\n\n// RescanCmd defines the rescan JSON-RPC command.\n//\n// NOTE: Deprecated. Use RescanBlocksCmd instead.\ntype RescanCmd struct {\n\tBeginBlock string\n\tAddresses  []string\n\tOutPoints  []OutPoint\n\tEndBlock   *string\n}\n\n// NewRescanCmd returns a new instance which can be used to issue a rescan\n// JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\n//\n// NOTE: Deprecated. Use NewRescanBlocksCmd instead.\nfunc NewRescanCmd(beginBlock string, addresses []string, outPoints []OutPoint, endBlock *string) *RescanCmd {\n\treturn &RescanCmd{\n\t\tBeginBlock: beginBlock,\n\t\tAddresses:  addresses,\n\t\tOutPoints:  outPoints,\n\t\tEndBlock:   endBlock,\n\t}\n}\n\n// RescanBlocksCmd defines the rescan JSON-RPC command.\n//\n// NOTE: This is a btcd extension ported from github.com/decred/dcrd/dcrjson\n// and requires a websocket connection.\ntype RescanBlocksCmd struct {\n\t// Block hashes as a string array.\n\tBlockHashes []string\n}\n\n// NewRescanBlocksCmd returns a new instance which can be used to issue a rescan\n// JSON-RPC command.\n//\n// NOTE: This is a btcd extension ported from github.com/decred/dcrd/dcrjson\n// and requires a websocket connection.\nfunc NewRescanBlocksCmd(blockHashes []string) *RescanBlocksCmd {\n\treturn &RescanBlocksCmd{BlockHashes: blockHashes}\n}\n\nfunc init() {\n\t// The commands in this file are only usable by websockets.\n\tflags := UFWebsocketOnly\n\n\tMustRegisterCmd(\"authenticate\", (*AuthenticateCmd)(nil), flags)\n\tMustRegisterCmd(\"loadtxfilter\", (*LoadTxFilterCmd)(nil), flags)\n\tMustRegisterCmd(\"notifyblocks\", (*NotifyBlocksCmd)(nil), flags)\n\tMustRegisterCmd(\"notifynewtransactions\", (*NotifyNewTransactionsCmd)(nil), flags)\n\tMustRegisterCmd(\"notifyreceived\", (*NotifyReceivedCmd)(nil), flags)\n\tMustRegisterCmd(\"notifyspent\", (*NotifySpentCmd)(nil), flags)\n\tMustRegisterCmd(\"session\", (*SessionCmd)(nil), flags)\n\tMustRegisterCmd(\"stopnotifyblocks\", (*StopNotifyBlocksCmd)(nil), flags)\n\tMustRegisterCmd(\"stopnotifynewtransactions\", (*StopNotifyNewTransactionsCmd)(nil), flags)\n\tMustRegisterCmd(\"stopnotifyspent\", (*StopNotifySpentCmd)(nil), flags)\n\tMustRegisterCmd(\"stopnotifyreceived\", (*StopNotifyReceivedCmd)(nil), flags)\n\tMustRegisterCmd(\"rescan\", (*RescanCmd)(nil), flags)\n\tMustRegisterCmd(\"rescanblocks\", (*RescanBlocksCmd)(nil), flags)\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/btcjson/chainsvrwsntfns.go",
    "content": "// Copyright (c) 2014-2017 The btcsuite developers\n// Copyright (c) 2015-2017 The Decred developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\n// NOTE: This file is intended to house the RPC websocket notifications that are\n// supported by a chain server.\n\npackage btcjson\n\nconst (\n\t// BlockConnectedNtfnMethod is the legacy, deprecated method used for\n\t// notifications from the chain server that a block has been connected.\n\t//\n\t// NOTE: Deprecated. Use FilteredBlockConnectedNtfnMethod instead.\n\tBlockConnectedNtfnMethod = \"blockconnected\"\n\n\t// BlockDisconnectedNtfnMethod is the legacy, deprecated method used for\n\t// notifications from the chain server that a block has been\n\t// disconnected.\n\t//\n\t// NOTE: Deprecated. Use FilteredBlockDisconnectedNtfnMethod instead.\n\tBlockDisconnectedNtfnMethod = \"blockdisconnected\"\n\n\t// FilteredBlockConnectedNtfnMethod is the new method used for\n\t// notifications from the chain server that a block has been connected.\n\tFilteredBlockConnectedNtfnMethod = \"filteredblockconnected\"\n\n\t// FilteredBlockDisconnectedNtfnMethod is the new method used for\n\t// notifications from the chain server that a block has been\n\t// disconnected.\n\tFilteredBlockDisconnectedNtfnMethod = \"filteredblockdisconnected\"\n\n\t// RecvTxNtfnMethod is the legacy, deprecated method used for\n\t// notifications from the chain server that a transaction which pays to\n\t// a registered address has been processed.\n\t//\n\t// NOTE: Deprecated. Use RelevantTxAcceptedNtfnMethod and\n\t// FilteredBlockConnectedNtfnMethod instead.\n\tRecvTxNtfnMethod = \"recvtx\"\n\n\t// RedeemingTxNtfnMethod is the legacy, deprecated method used for\n\t// notifications from the chain server that a transaction which spends a\n\t// registered outpoint has been processed.\n\t//\n\t// NOTE: Deprecated. Use RelevantTxAcceptedNtfnMethod and\n\t// FilteredBlockConnectedNtfnMethod instead.\n\tRedeemingTxNtfnMethod = \"redeemingtx\"\n\n\t// RescanFinishedNtfnMethod is the legacy, deprecated method used for\n\t// notifications from the chain server that a legacy, deprecated rescan\n\t// operation has finished.\n\t//\n\t// NOTE: Deprecated. Not used with rescanblocks command.\n\tRescanFinishedNtfnMethod = \"rescanfinished\"\n\n\t// RescanProgressNtfnMethod is the legacy, deprecated method used for\n\t// notifications from the chain server that a legacy, deprecated rescan\n\t// operation this is underway has made progress.\n\t//\n\t// NOTE: Deprecated. Not used with rescanblocks command.\n\tRescanProgressNtfnMethod = \"rescanprogress\"\n\n\t// TxAcceptedNtfnMethod is the method used for notifications from the\n\t// chain server that a transaction has been accepted into the mempool.\n\tTxAcceptedNtfnMethod = \"txaccepted\"\n\n\t// TxAcceptedVerboseNtfnMethod is the method used for notifications from\n\t// the chain server that a transaction has been accepted into the\n\t// mempool.  This differs from TxAcceptedNtfnMethod in that it provides\n\t// more details in the notification.\n\tTxAcceptedVerboseNtfnMethod = \"txacceptedverbose\"\n\n\t// RelevantTxAcceptedNtfnMethod is the new method used for notifications\n\t// from the chain server that inform a client that a transaction that\n\t// matches the loaded filter was accepted by the mempool.\n\tRelevantTxAcceptedNtfnMethod = \"relevanttxaccepted\"\n)\n\n// BlockConnectedNtfn defines the blockconnected JSON-RPC notification.\n//\n// NOTE: Deprecated. Use FilteredBlockConnectedNtfn instead.\ntype BlockConnectedNtfn struct {\n\tHash   string\n\tHeight int32\n\tTime   int64\n}\n\n// NewBlockConnectedNtfn returns a new instance which can be used to issue a\n// blockconnected JSON-RPC notification.\n//\n// NOTE: Deprecated. Use NewFilteredBlockConnectedNtfn instead.\nfunc NewBlockConnectedNtfn(hash string, height int32, time int64) *BlockConnectedNtfn {\n\treturn &BlockConnectedNtfn{\n\t\tHash:   hash,\n\t\tHeight: height,\n\t\tTime:   time,\n\t}\n}\n\n// BlockDisconnectedNtfn defines the blockdisconnected JSON-RPC notification.\n//\n// NOTE: Deprecated. Use FilteredBlockDisconnectedNtfn instead.\ntype BlockDisconnectedNtfn struct {\n\tHash   string\n\tHeight int32\n\tTime   int64\n}\n\n// NewBlockDisconnectedNtfn returns a new instance which can be used to issue a\n// blockdisconnected JSON-RPC notification.\n//\n// NOTE: Deprecated. Use NewFilteredBlockDisconnectedNtfn instead.\nfunc NewBlockDisconnectedNtfn(hash string, height int32, time int64) *BlockDisconnectedNtfn {\n\treturn &BlockDisconnectedNtfn{\n\t\tHash:   hash,\n\t\tHeight: height,\n\t\tTime:   time,\n\t}\n}\n\n// FilteredBlockConnectedNtfn defines the filteredblockconnected JSON-RPC\n// notification.\ntype FilteredBlockConnectedNtfn struct {\n\tHeight        int32\n\tHeader        string\n\tSubscribedTxs []string\n}\n\n// NewFilteredBlockConnectedNtfn returns a new instance which can be used to\n// issue a filteredblockconnected JSON-RPC notification.\nfunc NewFilteredBlockConnectedNtfn(height int32, header string, subscribedTxs []string) *FilteredBlockConnectedNtfn {\n\treturn &FilteredBlockConnectedNtfn{\n\t\tHeight:        height,\n\t\tHeader:        header,\n\t\tSubscribedTxs: subscribedTxs,\n\t}\n}\n\n// FilteredBlockDisconnectedNtfn defines the filteredblockdisconnected JSON-RPC\n// notification.\ntype FilteredBlockDisconnectedNtfn struct {\n\tHeight int32\n\tHeader string\n}\n\n// NewFilteredBlockDisconnectedNtfn returns a new instance which can be used to\n// issue a filteredblockdisconnected JSON-RPC notification.\nfunc NewFilteredBlockDisconnectedNtfn(height int32, header string) *FilteredBlockDisconnectedNtfn {\n\treturn &FilteredBlockDisconnectedNtfn{\n\t\tHeight: height,\n\t\tHeader: header,\n\t}\n}\n\n// BlockDetails describes details of a tx in a block.\ntype BlockDetails struct {\n\tHeight int32  `json:\"height\"`\n\tHash   string `json:\"hash\"`\n\tIndex  int    `json:\"index\"`\n\tTime   int64  `json:\"time\"`\n}\n\n// RecvTxNtfn defines the recvtx JSON-RPC notification.\n//\n// NOTE: Deprecated. Use RelevantTxAcceptedNtfn and FilteredBlockConnectedNtfn\n// instead.\ntype RecvTxNtfn struct {\n\tHexTx string\n\tBlock *BlockDetails\n}\n\n// NewRecvTxNtfn returns a new instance which can be used to issue a recvtx\n// JSON-RPC notification.\n//\n// NOTE: Deprecated. Use NewRelevantTxAcceptedNtfn and\n// NewFilteredBlockConnectedNtfn instead.\nfunc NewRecvTxNtfn(hexTx string, block *BlockDetails) *RecvTxNtfn {\n\treturn &RecvTxNtfn{\n\t\tHexTx: hexTx,\n\t\tBlock: block,\n\t}\n}\n\n// RedeemingTxNtfn defines the redeemingtx JSON-RPC notification.\n//\n// NOTE: Deprecated. Use RelevantTxAcceptedNtfn and FilteredBlockConnectedNtfn\n// instead.\ntype RedeemingTxNtfn struct {\n\tHexTx string\n\tBlock *BlockDetails\n}\n\n// NewRedeemingTxNtfn returns a new instance which can be used to issue a\n// redeemingtx JSON-RPC notification.\n//\n// NOTE: Deprecated. Use NewRelevantTxAcceptedNtfn and\n// NewFilteredBlockConnectedNtfn instead.\nfunc NewRedeemingTxNtfn(hexTx string, block *BlockDetails) *RedeemingTxNtfn {\n\treturn &RedeemingTxNtfn{\n\t\tHexTx: hexTx,\n\t\tBlock: block,\n\t}\n}\n\n// RescanFinishedNtfn defines the rescanfinished JSON-RPC notification.\n//\n// NOTE: Deprecated. Not used with rescanblocks command.\ntype RescanFinishedNtfn struct {\n\tHash   string\n\tHeight int32\n\tTime   int64\n}\n\n// NewRescanFinishedNtfn returns a new instance which can be used to issue a\n// rescanfinished JSON-RPC notification.\n//\n// NOTE: Deprecated. Not used with rescanblocks command.\nfunc NewRescanFinishedNtfn(hash string, height int32, time int64) *RescanFinishedNtfn {\n\treturn &RescanFinishedNtfn{\n\t\tHash:   hash,\n\t\tHeight: height,\n\t\tTime:   time,\n\t}\n}\n\n// RescanProgressNtfn defines the rescanprogress JSON-RPC notification.\n//\n// NOTE: Deprecated. Not used with rescanblocks command.\ntype RescanProgressNtfn struct {\n\tHash   string\n\tHeight int32\n\tTime   int64\n}\n\n// NewRescanProgressNtfn returns a new instance which can be used to issue a\n// rescanprogress JSON-RPC notification.\n//\n// NOTE: Deprecated. Not used with rescanblocks command.\nfunc NewRescanProgressNtfn(hash string, height int32, time int64) *RescanProgressNtfn {\n\treturn &RescanProgressNtfn{\n\t\tHash:   hash,\n\t\tHeight: height,\n\t\tTime:   time,\n\t}\n}\n\n// TxAcceptedNtfn defines the txaccepted JSON-RPC notification.\ntype TxAcceptedNtfn struct {\n\tTxID   string\n\tAmount float64\n}\n\n// NewTxAcceptedNtfn returns a new instance which can be used to issue a\n// txaccepted JSON-RPC notification.\nfunc NewTxAcceptedNtfn(txHash string, amount float64) *TxAcceptedNtfn {\n\treturn &TxAcceptedNtfn{\n\t\tTxID:   txHash,\n\t\tAmount: amount,\n\t}\n}\n\n// TxAcceptedVerboseNtfn defines the txacceptedverbose JSON-RPC notification.\ntype TxAcceptedVerboseNtfn struct {\n\tRawTx TxRawResult\n}\n\n// NewTxAcceptedVerboseNtfn returns a new instance which can be used to issue a\n// txacceptedverbose JSON-RPC notification.\nfunc NewTxAcceptedVerboseNtfn(rawTx TxRawResult) *TxAcceptedVerboseNtfn {\n\treturn &TxAcceptedVerboseNtfn{\n\t\tRawTx: rawTx,\n\t}\n}\n\n// RelevantTxAcceptedNtfn defines the parameters to the relevanttxaccepted\n// JSON-RPC notification.\ntype RelevantTxAcceptedNtfn struct {\n\tTransaction string `json:\"transaction\"`\n}\n\n// NewRelevantTxAcceptedNtfn returns a new instance which can be used to issue a\n// relevantxaccepted JSON-RPC notification.\nfunc NewRelevantTxAcceptedNtfn(txHex string) *RelevantTxAcceptedNtfn {\n\treturn &RelevantTxAcceptedNtfn{Transaction: txHex}\n}\n\nfunc init() {\n\t// The commands in this file are only usable by websockets and are\n\t// notifications.\n\tflags := UFWebsocketOnly | UFNotification\n\n\tMustRegisterCmd(BlockConnectedNtfnMethod, (*BlockConnectedNtfn)(nil), flags)\n\tMustRegisterCmd(BlockDisconnectedNtfnMethod, (*BlockDisconnectedNtfn)(nil), flags)\n\tMustRegisterCmd(FilteredBlockConnectedNtfnMethod, (*FilteredBlockConnectedNtfn)(nil), flags)\n\tMustRegisterCmd(FilteredBlockDisconnectedNtfnMethod, (*FilteredBlockDisconnectedNtfn)(nil), flags)\n\tMustRegisterCmd(RecvTxNtfnMethod, (*RecvTxNtfn)(nil), flags)\n\tMustRegisterCmd(RedeemingTxNtfnMethod, (*RedeemingTxNtfn)(nil), flags)\n\tMustRegisterCmd(RescanFinishedNtfnMethod, (*RescanFinishedNtfn)(nil), flags)\n\tMustRegisterCmd(RescanProgressNtfnMethod, (*RescanProgressNtfn)(nil), flags)\n\tMustRegisterCmd(TxAcceptedNtfnMethod, (*TxAcceptedNtfn)(nil), flags)\n\tMustRegisterCmd(TxAcceptedVerboseNtfnMethod, (*TxAcceptedVerboseNtfn)(nil), flags)\n\tMustRegisterCmd(RelevantTxAcceptedNtfnMethod, (*RelevantTxAcceptedNtfn)(nil), flags)\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/btcjson/chainsvrwsresults.go",
    "content": "// Copyright (c) 2015-2017 The btcsuite developers\n// Copyright (c) 2015-2017 The Decred developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcjson\n\n// SessionResult models the data from the session command.\ntype SessionResult struct {\n\tSessionID uint64 `json:\"sessionid\"`\n}\n\n// RescannedBlock contains the hash and all discovered transactions of a single\n// rescanned block.\n//\n// NOTE: This is a btcsuite extension ported from\n// github.com/decred/dcrd/dcrjson.\ntype RescannedBlock struct {\n\tHash         string   `json:\"hash\"`\n\tTransactions []string `json:\"transactions\"`\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/btcjson/cmdinfo.go",
    "content": "// Copyright (c) 2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcjson\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n)\n\n// CmdMethod returns the method for the passed command.  The provided command\n// type must be a registered type.  All commands provided by this package are\n// registered by default.\nfunc CmdMethod(cmd interface{}) (string, error) {\n\t// Look up the cmd type and error out if not registered.\n\trt := reflect.TypeOf(cmd)\n\tregisterLock.RLock()\n\tmethod, ok := concreteTypeToMethod[rt]\n\tregisterLock.RUnlock()\n\tif !ok {\n\t\tstr := fmt.Sprintf(\"%q is not registered\", method)\n\t\treturn \"\", makeError(ErrUnregisteredMethod, str)\n\t}\n\n\treturn method, nil\n}\n\n// MethodUsageFlags returns the usage flags for the passed command method.  The\n// provided method must be associated with a registered type.  All commands\n// provided by this package are registered by default.\nfunc MethodUsageFlags(method string) (UsageFlag, error) {\n\t// Look up details about the provided method and error out if not\n\t// registered.\n\tregisterLock.RLock()\n\tinfo, ok := methodToInfo[method]\n\tregisterLock.RUnlock()\n\tif !ok {\n\t\tstr := fmt.Sprintf(\"%q is not registered\", method)\n\t\treturn 0, makeError(ErrUnregisteredMethod, str)\n\t}\n\n\treturn info.flags, nil\n}\n\n// subStructUsage returns a string for use in the one-line usage for the given\n// sub struct.  Note that this is specifically for fields which consist of\n// structs (or an array/slice of structs) as opposed to the top-level command\n// struct.\n//\n// Any fields that include a jsonrpcusage struct tag will use that instead of\n// being automatically generated.\nfunc subStructUsage(structType reflect.Type) string {\n\tnumFields := structType.NumField()\n\tfieldUsages := make([]string, 0, numFields)\n\tfor i := 0; i < structType.NumField(); i++ {\n\t\trtf := structType.Field(i)\n\n\t\t// When the field has a jsonrpcusage struct tag specified use\n\t\t// that instead of automatically generating it.\n\t\tif tag := rtf.Tag.Get(\"jsonrpcusage\"); tag != \"\" {\n\t\t\tfieldUsages = append(fieldUsages, tag)\n\t\t\tcontinue\n\t\t}\n\n\t\t// Create the name/value entry for the field while considering\n\t\t// the type of the field.  Not all possible types are covered\n\t\t// here and when one of the types not specifically covered is\n\t\t// encountered, the field name is simply reused for the value.\n\t\tfieldName := strings.ToLower(rtf.Name)\n\t\tfieldValue := fieldName\n\t\tfieldKind := rtf.Type.Kind()\n\t\tswitch {\n\t\tcase isNumeric(fieldKind):\n\t\t\tif fieldKind == reflect.Float32 || fieldKind == reflect.Float64 {\n\t\t\t\tfieldValue = \"n.nnn\"\n\t\t\t} else {\n\t\t\t\tfieldValue = \"n\"\n\t\t\t}\n\t\tcase fieldKind == reflect.String:\n\t\t\tfieldValue = `\"value\"`\n\n\t\tcase fieldKind == reflect.Struct:\n\t\t\tfieldValue = subStructUsage(rtf.Type)\n\n\t\tcase fieldKind == reflect.Array || fieldKind == reflect.Slice:\n\t\t\tfieldValue = subArrayUsage(rtf.Type, fieldName)\n\t\t}\n\n\t\tusage := fmt.Sprintf(\"%q:%s\", fieldName, fieldValue)\n\t\tfieldUsages = append(fieldUsages, usage)\n\t}\n\n\treturn fmt.Sprintf(\"{%s}\", strings.Join(fieldUsages, \",\"))\n}\n\n// subArrayUsage returns a string for use in the one-line usage for the given\n// array or slice.  It also contains logic to convert plural field names to\n// singular so the generated usage string reads better.\nfunc subArrayUsage(arrayType reflect.Type, fieldName string) string {\n\t// Convert plural field names to singular.  Only works for English.\n\tsingularFieldName := fieldName\n\tif strings.HasSuffix(fieldName, \"ies\") {\n\t\tsingularFieldName = strings.TrimSuffix(fieldName, \"ies\")\n\t\tsingularFieldName = singularFieldName + \"y\"\n\t} else if strings.HasSuffix(fieldName, \"es\") {\n\t\tsingularFieldName = strings.TrimSuffix(fieldName, \"es\")\n\t} else if strings.HasSuffix(fieldName, \"s\") {\n\t\tsingularFieldName = strings.TrimSuffix(fieldName, \"s\")\n\t}\n\n\telemType := arrayType.Elem()\n\tswitch elemType.Kind() {\n\tcase reflect.String:\n\t\treturn fmt.Sprintf(\"[%q,...]\", singularFieldName)\n\n\tcase reflect.Struct:\n\t\treturn fmt.Sprintf(\"[%s,...]\", subStructUsage(elemType))\n\t}\n\n\t// Fall back to simply showing the field name in array syntax.\n\treturn fmt.Sprintf(`[%s,...]`, singularFieldName)\n}\n\n// fieldUsage returns a string for use in the one-line usage for the struct\n// field of a command.\n//\n// Any fields that include a jsonrpcusage struct tag will use that instead of\n// being automatically generated.\nfunc fieldUsage(structField reflect.StructField, defaultVal *reflect.Value) string {\n\t// When the field has a jsonrpcusage struct tag specified use that\n\t// instead of automatically generating it.\n\tif tag := structField.Tag.Get(\"jsonrpcusage\"); tag != \"\" {\n\t\treturn tag\n\t}\n\n\t// Indirect the pointer if needed.\n\tfieldType := structField.Type\n\tif fieldType.Kind() == reflect.Ptr {\n\t\tfieldType = fieldType.Elem()\n\t}\n\n\t// When there is a default value, it must also be a pointer due to the\n\t// rules enforced by RegisterCmd.\n\tif defaultVal != nil {\n\t\tindirect := defaultVal.Elem()\n\t\tdefaultVal = &indirect\n\t}\n\n\t// Handle certain types uniquely to provide nicer usage.\n\tfieldName := strings.ToLower(structField.Name)\n\tswitch fieldType.Kind() {\n\tcase reflect.String:\n\t\tif defaultVal != nil {\n\t\t\treturn fmt.Sprintf(\"%s=%q\", fieldName,\n\t\t\t\tdefaultVal.Interface())\n\t\t}\n\n\t\treturn fmt.Sprintf(\"%q\", fieldName)\n\n\tcase reflect.Array, reflect.Slice:\n\t\treturn subArrayUsage(fieldType, fieldName)\n\n\tcase reflect.Struct:\n\t\treturn subStructUsage(fieldType)\n\t}\n\n\t// Simply return the field name when none of the above special cases\n\t// apply.\n\tif defaultVal != nil {\n\t\treturn fmt.Sprintf(\"%s=%v\", fieldName, defaultVal.Interface())\n\t}\n\treturn fieldName\n}\n\n// methodUsageText returns a one-line usage string for the provided command and\n// method info.  This is the main work horse for the exported MethodUsageText\n// function.\nfunc methodUsageText(rtp reflect.Type, defaults map[int]reflect.Value, method string) string {\n\t// Generate the individual usage for each field in the command.  Several\n\t// simplifying assumptions are made here because the RegisterCmd\n\t// function has already rigorously enforced the layout.\n\trt := rtp.Elem()\n\tnumFields := rt.NumField()\n\treqFieldUsages := make([]string, 0, numFields)\n\toptFieldUsages := make([]string, 0, numFields)\n\tfor i := 0; i < numFields; i++ {\n\t\trtf := rt.Field(i)\n\t\tvar isOptional bool\n\t\tif kind := rtf.Type.Kind(); kind == reflect.Ptr {\n\t\t\tisOptional = true\n\t\t}\n\n\t\tvar defaultVal *reflect.Value\n\t\tif defVal, ok := defaults[i]; ok {\n\t\t\tdefaultVal = &defVal\n\t\t}\n\n\t\t// Add human-readable usage to the appropriate slice that is\n\t\t// later used to generate the one-line usage.\n\t\tusage := fieldUsage(rtf, defaultVal)\n\t\tif isOptional {\n\t\t\toptFieldUsages = append(optFieldUsages, usage)\n\t\t} else {\n\t\t\treqFieldUsages = append(reqFieldUsages, usage)\n\t\t}\n\t}\n\n\t// Generate and return the one-line usage string.\n\tusageStr := method\n\tif len(reqFieldUsages) > 0 {\n\t\tusageStr += \" \" + strings.Join(reqFieldUsages, \" \")\n\t}\n\tif len(optFieldUsages) > 0 {\n\t\tusageStr += fmt.Sprintf(\" (%s)\", strings.Join(optFieldUsages, \" \"))\n\t}\n\treturn usageStr\n}\n\n// MethodUsageText returns a one-line usage string for the provided method.  The\n// provided method must be associated with a registered type.  All commands\n// provided by this package are registered by default.\nfunc MethodUsageText(method string) (string, error) {\n\t// Look up details about the provided method and error out if not\n\t// registered.\n\tregisterLock.RLock()\n\trtp, ok := methodToConcreteType[method]\n\tinfo := methodToInfo[method]\n\tregisterLock.RUnlock()\n\tif !ok {\n\t\tstr := fmt.Sprintf(\"%q is not registered\", method)\n\t\treturn \"\", makeError(ErrUnregisteredMethod, str)\n\t}\n\n\t// When the usage for this method has already been generated, simply\n\t// return it.\n\tif info.usage != \"\" {\n\t\treturn info.usage, nil\n\t}\n\n\t// Generate and store the usage string for future calls and return it.\n\tusage := methodUsageText(rtp, info.defaults, method)\n\tregisterLock.Lock()\n\tinfo.usage = usage\n\tmethodToInfo[method] = info\n\tregisterLock.Unlock()\n\treturn usage, nil\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/btcjson/cmdparse.go",
    "content": "// Copyright (c) 2014 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcjson\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// makeParams creates a slice of interface values for the given struct.\nfunc makeParams(rt reflect.Type, rv reflect.Value) []interface{} {\n\tnumFields := rt.NumField()\n\tparams := make([]interface{}, 0, numFields)\n\tfor i := 0; i < numFields; i++ {\n\t\trtf := rt.Field(i)\n\t\trvf := rv.Field(i)\n\t\tif rtf.Type.Kind() == reflect.Ptr {\n\t\t\tif rvf.IsNil() {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\trvf.Elem()\n\t\t}\n\t\tparams = append(params, rvf.Interface())\n\t}\n\n\treturn params\n}\n\n// MarshalCmd marshals the passed command to a JSON-RPC request byte slice that\n// is suitable for transmission to an RPC server.  The provided command type\n// must be a registered type.  All commands provided by this package are\n// registered by default.\nfunc MarshalCmd(id interface{}, cmd interface{}) ([]byte, error) {\n\t// Look up the cmd type and error out if not registered.\n\trt := reflect.TypeOf(cmd)\n\tregisterLock.RLock()\n\tmethod, ok := concreteTypeToMethod[rt]\n\tregisterLock.RUnlock()\n\tif !ok {\n\t\tstr := fmt.Sprintf(\"%q is not registered\", method)\n\t\treturn nil, makeError(ErrUnregisteredMethod, str)\n\t}\n\n\t// The provided command must not be nil.\n\trv := reflect.ValueOf(cmd)\n\tif rv.IsNil() {\n\t\tstr := \"the specified command is nil\"\n\t\treturn nil, makeError(ErrInvalidType, str)\n\t}\n\n\t// Create a slice of interface values in the order of the struct fields\n\t// while respecting pointer fields as optional params and only adding\n\t// them if they are non-nil.\n\tparams := makeParams(rt.Elem(), rv.Elem())\n\n\t// Generate and marshal the final JSON-RPC request.\n\trawCmd, err := NewRequest(id, method, params)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn json.Marshal(rawCmd)\n}\n\n// checkNumParams ensures the supplied number of params is at least the minimum\n// required number for the command and less than the maximum allowed.\nfunc checkNumParams(numParams int, info *methodInfo) error {\n\tif numParams < info.numReqParams || numParams > info.maxParams {\n\t\tif info.numReqParams == info.maxParams {\n\t\t\tstr := fmt.Sprintf(\"wrong number of params (expected \"+\n\t\t\t\t\"%d, received %d)\", info.numReqParams,\n\t\t\t\tnumParams)\n\t\t\treturn makeError(ErrNumParams, str)\n\t\t}\n\n\t\tstr := fmt.Sprintf(\"wrong number of params (expected \"+\n\t\t\t\"between %d and %d, received %d)\", info.numReqParams,\n\t\t\tinfo.maxParams, numParams)\n\t\treturn makeError(ErrNumParams, str)\n\t}\n\n\treturn nil\n}\n\n// populateDefaults populates default values into any remaining optional struct\n// fields that did not have parameters explicitly provided.  The caller should\n// have previously checked that the number of parameters being passed is at\n// least the required number of parameters to avoid unnecessary work in this\n// function, but since required fields never have default values, it will work\n// properly even without the check.\nfunc populateDefaults(numParams int, info *methodInfo, rv reflect.Value) {\n\t// When there are no more parameters left in the supplied parameters,\n\t// any remaining struct fields must be optional.  Thus, populate them\n\t// with their associated default value as needed.\n\tfor i := numParams; i < info.maxParams; i++ {\n\t\trvf := rv.Field(i)\n\t\tif defaultVal, ok := info.defaults[i]; ok {\n\t\t\trvf.Set(defaultVal)\n\t\t}\n\t}\n}\n\n// UnmarshalCmd unmarshals a JSON-RPC request into a suitable concrete command\n// so long as the method type contained within the marshalled request is\n// registered.\nfunc UnmarshalCmd(r *Request) (interface{}, error) {\n\tregisterLock.RLock()\n\trtp, ok := methodToConcreteType[r.Method]\n\tinfo := methodToInfo[r.Method]\n\tregisterLock.RUnlock()\n\tif !ok {\n\t\tstr := fmt.Sprintf(\"%q is not registered\", r.Method)\n\t\treturn nil, makeError(ErrUnregisteredMethod, str)\n\t}\n\trt := rtp.Elem()\n\trvp := reflect.New(rt)\n\trv := rvp.Elem()\n\n\t// Ensure the number of parameters are correct.\n\tnumParams := len(r.Params)\n\tif err := checkNumParams(numParams, &info); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Loop through each of the struct fields and unmarshal the associated\n\t// parameter into them.\n\tfor i := 0; i < numParams; i++ {\n\t\trvf := rv.Field(i)\n\t\t// Unmarshal the parameter into the struct field.\n\t\tconcreteVal := rvf.Addr().Interface()\n\t\tif err := json.Unmarshal(r.Params[i], &concreteVal); err != nil {\n\t\t\t// The most common error is the wrong type, so\n\t\t\t// explicitly detect that error and make it nicer.\n\t\t\tfieldName := strings.ToLower(rt.Field(i).Name)\n\t\t\tif jerr, ok := err.(*json.UnmarshalTypeError); ok {\n\t\t\t\tstr := fmt.Sprintf(\"parameter #%d '%s' must \"+\n\t\t\t\t\t\"be type %v (got %v)\", i+1, fieldName,\n\t\t\t\t\tjerr.Type, jerr.Value)\n\t\t\t\treturn nil, makeError(ErrInvalidType, str)\n\t\t\t}\n\n\t\t\t// Fallback to showing the underlying error.\n\t\t\tstr := fmt.Sprintf(\"parameter #%d '%s' failed to \"+\n\t\t\t\t\"unmarshal: %v\", i+1, fieldName, err)\n\t\t\treturn nil, makeError(ErrInvalidType, str)\n\t\t}\n\t}\n\n\t// When there are less supplied parameters than the total number of\n\t// params, any remaining struct fields must be optional.  Thus, populate\n\t// them with their associated default value as needed.\n\tif numParams < info.maxParams {\n\t\tpopulateDefaults(numParams, &info, rv)\n\t}\n\n\treturn rvp.Interface(), nil\n}\n\n// isNumeric returns whether the passed reflect kind is a signed or unsigned\n// integer of any magnitude or a float of any magnitude.\nfunc isNumeric(kind reflect.Kind) bool {\n\tswitch kind {\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64,\n\t\treflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32,\n\t\treflect.Uint64, reflect.Float32, reflect.Float64:\n\n\t\treturn true\n\t}\n\n\treturn false\n}\n\n// typesMaybeCompatible returns whether the source type can possibly be\n// assigned to the destination type.  This is intended as a relatively quick\n// check to weed out obviously invalid conversions.\nfunc typesMaybeCompatible(dest reflect.Type, src reflect.Type) bool {\n\t// The same types are obviously compatible.\n\tif dest == src {\n\t\treturn true\n\t}\n\n\t// When both types are numeric, they are potentially compatible.\n\tsrcKind := src.Kind()\n\tdestKind := dest.Kind()\n\tif isNumeric(destKind) && isNumeric(srcKind) {\n\t\treturn true\n\t}\n\n\tif srcKind == reflect.String {\n\t\t// Strings can potentially be converted to numeric types.\n\t\tif isNumeric(destKind) {\n\t\t\treturn true\n\t\t}\n\n\t\tswitch destKind {\n\t\t// Strings can potentially be converted to bools by\n\t\t// strconv.ParseBool.\n\t\tcase reflect.Bool:\n\t\t\treturn true\n\n\t\t// Strings can be converted to any other type which has as\n\t\t// underlying type of string.\n\t\tcase reflect.String:\n\t\t\treturn true\n\n\t\t// Strings can potentially be converted to arrays, slice,\n\t\t// structs, and maps via json.Unmarshal.\n\t\tcase reflect.Array, reflect.Slice, reflect.Struct, reflect.Map:\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}\n\n// baseType returns the type of the argument after indirecting through all\n// pointers along with how many indirections were necessary.\nfunc baseType(arg reflect.Type) (reflect.Type, int) {\n\tvar numIndirects int\n\tfor arg.Kind() == reflect.Ptr {\n\t\targ = arg.Elem()\n\t\tnumIndirects++\n\t}\n\treturn arg, numIndirects\n}\n\n// assignField is the main workhorse for the NewCmd function which handles\n// assigning the provided source value to the destination field.  It supports\n// direct type assignments, indirection, conversion of numeric types, and\n// unmarshaling of strings into arrays, slices, structs, and maps via\n// json.Unmarshal.\nfunc assignField(paramNum int, fieldName string, dest reflect.Value, src reflect.Value) error {\n\t// Just error now when the types have no chance of being compatible.\n\tdestBaseType, destIndirects := baseType(dest.Type())\n\tsrcBaseType, srcIndirects := baseType(src.Type())\n\tif !typesMaybeCompatible(destBaseType, srcBaseType) {\n\t\tstr := fmt.Sprintf(\"parameter #%d '%s' must be type %v (got \"+\n\t\t\t\"%v)\", paramNum, fieldName, destBaseType, srcBaseType)\n\t\treturn makeError(ErrInvalidType, str)\n\t}\n\n\t// Check if it's possible to simply set the dest to the provided source.\n\t// This is the case when the base types are the same or they are both\n\t// pointers that can be indirected to be the same without needing to\n\t// create pointers for the destination field.\n\tif destBaseType == srcBaseType && srcIndirects >= destIndirects {\n\t\tfor i := 0; i < srcIndirects-destIndirects; i++ {\n\t\t\tsrc = src.Elem()\n\t\t}\n\t\tdest.Set(src)\n\t\treturn nil\n\t}\n\n\t// When the destination has more indirects than the source, the extra\n\t// pointers have to be created.  Only create enough pointers to reach\n\t// the same level of indirection as the source so the dest can simply be\n\t// set to the provided source when the types are the same.\n\tdestIndirectsRemaining := destIndirects\n\tif destIndirects > srcIndirects {\n\t\tindirectDiff := destIndirects - srcIndirects\n\t\tfor i := 0; i < indirectDiff; i++ {\n\t\t\tdest.Set(reflect.New(dest.Type().Elem()))\n\t\t\tdest = dest.Elem()\n\t\t\tdestIndirectsRemaining--\n\t\t}\n\t}\n\n\tif destBaseType == srcBaseType {\n\t\tdest.Set(src)\n\t\treturn nil\n\t}\n\n\t// Make any remaining pointers needed to get to the base dest type since\n\t// the above direct assign was not possible and conversions are done\n\t// against the base types.\n\tfor i := 0; i < destIndirectsRemaining; i++ {\n\t\tdest.Set(reflect.New(dest.Type().Elem()))\n\t\tdest = dest.Elem()\n\t}\n\n\t// Indirect through to the base source value.\n\tfor src.Kind() == reflect.Ptr {\n\t\tsrc = src.Elem()\n\t}\n\n\t// Perform supported type conversions.\n\tswitch src.Kind() {\n\t// Source value is a signed integer of various magnitude.\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32,\n\t\treflect.Int64:\n\n\t\tswitch dest.Kind() {\n\t\t// Destination is a signed integer of various magnitude.\n\t\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32,\n\t\t\treflect.Int64:\n\n\t\t\tsrcInt := src.Int()\n\t\t\tif dest.OverflowInt(srcInt) {\n\t\t\t\tstr := fmt.Sprintf(\"parameter #%d '%s' \"+\n\t\t\t\t\t\"overflows destination type %v\",\n\t\t\t\t\tparamNum, fieldName, destBaseType)\n\t\t\t\treturn makeError(ErrInvalidType, str)\n\t\t\t}\n\n\t\t\tdest.SetInt(srcInt)\n\n\t\t// Destination is an unsigned integer of various magnitude.\n\t\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32,\n\t\t\treflect.Uint64:\n\n\t\t\tsrcInt := src.Int()\n\t\t\tif srcInt < 0 || dest.OverflowUint(uint64(srcInt)) {\n\t\t\t\tstr := fmt.Sprintf(\"parameter #%d '%s' \"+\n\t\t\t\t\t\"overflows destination type %v\",\n\t\t\t\t\tparamNum, fieldName, destBaseType)\n\t\t\t\treturn makeError(ErrInvalidType, str)\n\t\t\t}\n\t\t\tdest.SetUint(uint64(srcInt))\n\n\t\tdefault:\n\t\t\tstr := fmt.Sprintf(\"parameter #%d '%s' must be type \"+\n\t\t\t\t\"%v (got %v)\", paramNum, fieldName, destBaseType,\n\t\t\t\tsrcBaseType)\n\t\t\treturn makeError(ErrInvalidType, str)\n\t\t}\n\n\t// Source value is an unsigned integer of various magnitude.\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32,\n\t\treflect.Uint64:\n\n\t\tswitch dest.Kind() {\n\t\t// Destination is a signed integer of various magnitude.\n\t\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32,\n\t\t\treflect.Int64:\n\n\t\t\tsrcUint := src.Uint()\n\t\t\tif srcUint > uint64(1<<63)-1 {\n\t\t\t\tstr := fmt.Sprintf(\"parameter #%d '%s' \"+\n\t\t\t\t\t\"overflows destination type %v\",\n\t\t\t\t\tparamNum, fieldName, destBaseType)\n\t\t\t\treturn makeError(ErrInvalidType, str)\n\t\t\t}\n\t\t\tif dest.OverflowInt(int64(srcUint)) {\n\t\t\t\tstr := fmt.Sprintf(\"parameter #%d '%s' \"+\n\t\t\t\t\t\"overflows destination type %v\",\n\t\t\t\t\tparamNum, fieldName, destBaseType)\n\t\t\t\treturn makeError(ErrInvalidType, str)\n\t\t\t}\n\t\t\tdest.SetInt(int64(srcUint))\n\n\t\t// Destination is an unsigned integer of various magnitude.\n\t\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32,\n\t\t\treflect.Uint64:\n\n\t\t\tsrcUint := src.Uint()\n\t\t\tif dest.OverflowUint(srcUint) {\n\t\t\t\tstr := fmt.Sprintf(\"parameter #%d '%s' \"+\n\t\t\t\t\t\"overflows destination type %v\",\n\t\t\t\t\tparamNum, fieldName, destBaseType)\n\t\t\t\treturn makeError(ErrInvalidType, str)\n\t\t\t}\n\t\t\tdest.SetUint(srcUint)\n\n\t\tdefault:\n\t\t\tstr := fmt.Sprintf(\"parameter #%d '%s' must be type \"+\n\t\t\t\t\"%v (got %v)\", paramNum, fieldName, destBaseType,\n\t\t\t\tsrcBaseType)\n\t\t\treturn makeError(ErrInvalidType, str)\n\t\t}\n\n\t// Source value is a float.\n\tcase reflect.Float32, reflect.Float64:\n\t\tdestKind := dest.Kind()\n\t\tif destKind != reflect.Float32 && destKind != reflect.Float64 {\n\t\t\tstr := fmt.Sprintf(\"parameter #%d '%s' must be type \"+\n\t\t\t\t\"%v (got %v)\", paramNum, fieldName, destBaseType,\n\t\t\t\tsrcBaseType)\n\t\t\treturn makeError(ErrInvalidType, str)\n\t\t}\n\n\t\tsrcFloat := src.Float()\n\t\tif dest.OverflowFloat(srcFloat) {\n\t\t\tstr := fmt.Sprintf(\"parameter #%d '%s' overflows \"+\n\t\t\t\t\"destination type %v\", paramNum, fieldName,\n\t\t\t\tdestBaseType)\n\t\t\treturn makeError(ErrInvalidType, str)\n\t\t}\n\t\tdest.SetFloat(srcFloat)\n\n\t// Source value is a string.\n\tcase reflect.String:\n\t\tswitch dest.Kind() {\n\t\t// String -> bool\n\t\tcase reflect.Bool:\n\t\t\tb, err := strconv.ParseBool(src.String())\n\t\t\tif err != nil {\n\t\t\t\tstr := fmt.Sprintf(\"parameter #%d '%s' must \"+\n\t\t\t\t\t\"parse to a %v\", paramNum, fieldName,\n\t\t\t\t\tdestBaseType)\n\t\t\t\treturn makeError(ErrInvalidType, str)\n\t\t\t}\n\t\t\tdest.SetBool(b)\n\n\t\t// String -> signed integer of varying size.\n\t\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32,\n\t\t\treflect.Int64:\n\n\t\t\tsrcInt, err := strconv.ParseInt(src.String(), 0, 0)\n\t\t\tif err != nil {\n\t\t\t\tstr := fmt.Sprintf(\"parameter #%d '%s' must \"+\n\t\t\t\t\t\"parse to a %v\", paramNum, fieldName,\n\t\t\t\t\tdestBaseType)\n\t\t\t\treturn makeError(ErrInvalidType, str)\n\t\t\t}\n\t\t\tif dest.OverflowInt(srcInt) {\n\t\t\t\tstr := fmt.Sprintf(\"parameter #%d '%s' \"+\n\t\t\t\t\t\"overflows destination type %v\",\n\t\t\t\t\tparamNum, fieldName, destBaseType)\n\t\t\t\treturn makeError(ErrInvalidType, str)\n\t\t\t}\n\t\t\tdest.SetInt(srcInt)\n\n\t\t// String -> unsigned integer of varying size.\n\t\tcase reflect.Uint, reflect.Uint8, reflect.Uint16,\n\t\t\treflect.Uint32, reflect.Uint64:\n\n\t\t\tsrcUint, err := strconv.ParseUint(src.String(), 0, 0)\n\t\t\tif err != nil {\n\t\t\t\tstr := fmt.Sprintf(\"parameter #%d '%s' must \"+\n\t\t\t\t\t\"parse to a %v\", paramNum, fieldName,\n\t\t\t\t\tdestBaseType)\n\t\t\t\treturn makeError(ErrInvalidType, str)\n\t\t\t}\n\t\t\tif dest.OverflowUint(srcUint) {\n\t\t\t\tstr := fmt.Sprintf(\"parameter #%d '%s' \"+\n\t\t\t\t\t\"overflows destination type %v\",\n\t\t\t\t\tparamNum, fieldName, destBaseType)\n\t\t\t\treturn makeError(ErrInvalidType, str)\n\t\t\t}\n\t\t\tdest.SetUint(srcUint)\n\n\t\t// String -> float of varying size.\n\t\tcase reflect.Float32, reflect.Float64:\n\t\t\tsrcFloat, err := strconv.ParseFloat(src.String(), 0)\n\t\t\tif err != nil {\n\t\t\t\tstr := fmt.Sprintf(\"parameter #%d '%s' must \"+\n\t\t\t\t\t\"parse to a %v\", paramNum, fieldName,\n\t\t\t\t\tdestBaseType)\n\t\t\t\treturn makeError(ErrInvalidType, str)\n\t\t\t}\n\t\t\tif dest.OverflowFloat(srcFloat) {\n\t\t\t\tstr := fmt.Sprintf(\"parameter #%d '%s' \"+\n\t\t\t\t\t\"overflows destination type %v\",\n\t\t\t\t\tparamNum, fieldName, destBaseType)\n\t\t\t\treturn makeError(ErrInvalidType, str)\n\t\t\t}\n\t\t\tdest.SetFloat(srcFloat)\n\n\t\t// String -> string (typecast).\n\t\tcase reflect.String:\n\t\t\tdest.SetString(src.String())\n\n\t\t// String -> arrays, slices, structs, and maps via\n\t\t// json.Unmarshal.\n\t\tcase reflect.Array, reflect.Slice, reflect.Struct, reflect.Map:\n\t\t\tconcreteVal := dest.Addr().Interface()\n\t\t\terr := json.Unmarshal([]byte(src.String()), &concreteVal)\n\t\t\tif err != nil {\n\t\t\t\tstr := fmt.Sprintf(\"parameter #%d '%s' must \"+\n\t\t\t\t\t\"be valid JSON which unsmarshals to a %v\",\n\t\t\t\t\tparamNum, fieldName, destBaseType)\n\t\t\t\treturn makeError(ErrInvalidType, str)\n\t\t\t}\n\t\t\tdest.Set(reflect.ValueOf(concreteVal).Elem())\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// NewCmd provides a generic mechanism to create a new command that can marshal\n// to a JSON-RPC request while respecting the requirements of the provided\n// method.  The method must have been registered with the package already along\n// with its type definition.  All methods associated with the commands exported\n// by this package are already registered by default.\n//\n// The arguments are most efficient when they are the exact same type as the\n// underlying field in the command struct associated with the the method,\n// however this function also will perform a variety of conversions to make it\n// more flexible.  This allows, for example, command line args which are strings\n// to be passed unaltered.  In particular, the following conversions are\n// supported:\n//\n//   - Conversion between any size signed or unsigned integer so long as the\n//     value does not overflow the destination type\n//   - Conversion between float32 and float64 so long as the value does not\n//     overflow the destination type\n//   - Conversion from string to boolean for everything strconv.ParseBool\n//     recognizes\n//   - Conversion from string to any size integer for everything\n//     strconv.ParseInt and strconv.ParseUint recognizes\n//   - Conversion from string to any size float for everything\n//     strconv.ParseFloat recognizes\n//   - Conversion from string to arrays, slices, structs, and maps by treating\n//     the string as marshalled JSON and calling json.Unmarshal into the\n//     destination field\nfunc NewCmd(method string, args ...interface{}) (interface{}, error) {\n\t// Look up details about the provided method.  Any methods that aren't\n\t// registered are an error.\n\tregisterLock.RLock()\n\trtp, ok := methodToConcreteType[method]\n\tinfo := methodToInfo[method]\n\tregisterLock.RUnlock()\n\tif !ok {\n\t\tstr := fmt.Sprintf(\"%q is not registered\", method)\n\t\treturn nil, makeError(ErrUnregisteredMethod, str)\n\t}\n\n\t// Ensure the number of parameters are correct.\n\tnumParams := len(args)\n\tif err := checkNumParams(numParams, &info); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Create the appropriate command type for the method.  Since all types\n\t// are enforced to be a pointer to a struct at registration time, it's\n\t// safe to indirect to the struct now.\n\trvp := reflect.New(rtp.Elem())\n\trv := rvp.Elem()\n\trt := rtp.Elem()\n\n\t// Loop through each of the struct fields and assign the associated\n\t// parameter into them after checking its type validity.\n\tfor i := 0; i < numParams; i++ {\n\t\t// Attempt to assign each of the arguments to the according\n\t\t// struct field.\n\t\trvf := rv.Field(i)\n\t\tfieldName := strings.ToLower(rt.Field(i).Name)\n\t\terr := assignField(i+1, fieldName, rvf, reflect.ValueOf(args[i]))\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn rvp.Interface(), nil\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/btcjson/doc.go",
    "content": "// Copyright (c) 2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\n/*\nPackage btcjson provides primitives for working with the bitcoin JSON-RPC API.\n\nOverview\n\nWhen communicating via the JSON-RPC protocol, all of the commands need to be\nmarshalled to and from the the wire in the appropriate format.  This package\nprovides data structures and primitives to ease this process.\n\nIn addition, it also provides some additional features such as custom command\nregistration, command categorization, and reflection-based help generation.\n\nJSON-RPC Protocol Overview\n\nThis information is not necessary in order to use this package, but it does\nprovide some intuition into what the marshalling and unmarshalling that is\ndiscussed below is doing under the hood.\n\nAs defined by the JSON-RPC spec, there are effectively two forms of messages on\nthe wire:\n\n  - Request Objects\n    {\"jsonrpc\":\"1.0\",\"id\":\"SOMEID\",\"method\":\"SOMEMETHOD\",\"params\":[SOMEPARAMS]}\n    NOTE: Notifications are the same format except the id field is null.\n\n  - Response Objects\n    {\"result\":SOMETHING,\"error\":null,\"id\":\"SOMEID\"}\n    {\"result\":null,\"error\":{\"code\":SOMEINT,\"message\":SOMESTRING},\"id\":\"SOMEID\"}\n\nFor requests, the params field can vary in what it contains depending on the\nmethod (a.k.a. command) being sent.  Each parameter can be as simple as an int\nor a complex structure containing many nested fields.  The id field is used to\nidentify a request and will be included in the associated response.\n\nWhen working with asynchronous transports, such as websockets, spontaneous\nnotifications are also possible.  As indicated, they are the same as a request\nobject, except they have the id field set to null.  Therefore, servers will\nignore requests with the id field set to null, while clients can choose to\nconsume or ignore them.\n\nUnfortunately, the original Bitcoin JSON-RPC API (and hence anything compatible\nwith it) doesn't always follow the spec and will sometimes return an error\nstring in the result field with a null error for certain commands.  However,\nfor the most part, the error field will be set as described on failure.\n\nMarshalling and Unmarshalling\n\nBased upon the discussion above, it should be easy to see how the types of this\npackage map into the required parts of the protocol\n\n  - Request Objects (type Request)\n    - Commands (type <Foo>Cmd)\n    - Notifications (type <Foo>Ntfn)\n  - Response Objects (type Response)\n    - Result (type <Foo>Result)\n\nTo simplify the marshalling of the requests and responses, the MarshalCmd and\nMarshalResponse functions are provided.  They return the raw bytes ready to be\nsent across the wire.\n\nUnmarshalling a received Request object is a two step process:\n  1) Unmarshal the raw bytes into a Request struct instance via json.Unmarshal\n  2) Use UnmarshalCmd on the Result field of the unmarshalled Request to create\n     a concrete command or notification instance with all struct fields set\n     accordingly\n\nThis approach is used since it provides the caller with access to the additional\nfields in the request that are not part of the command such as the ID.\n\nUnmarshalling a received Response object is also a two step process:\n  1) Unmarhsal the raw bytes into a Response struct instance via json.Unmarshal\n  2) Depending on the ID, unmarshal the Result field of the unmarshalled\n     Response to create a concrete type instance\n\nAs above, this approach is used since it provides the caller with access to the\nfields in the response such as the ID and Error.\n\nCommand Creation\n\nThis package provides two approaches for creating a new command.  This first,\nand preferred, method is to use one of the New<Foo>Cmd functions.  This allows\nstatic compile-time checking to help ensure the parameters stay in sync with\nthe struct definitions.\n\nThe second approach is the NewCmd function which takes a method (command) name\nand variable arguments.  The function includes full checking to ensure the\nparameters are accurate according to provided method, however these checks are,\nobviously, run-time which means any mistakes won't be found until the code is\nactually executed.  However, it is quite useful for user-supplied commands\nthat are intentionally dynamic.\n\nCustom Command Registration\n\nThe command handling of this package is built around the concept of registered\ncommands.  This is true for the wide variety of commands already provided by the\npackage, but it also means caller can easily provide custom commands with all\nof the same functionality as the built-in commands.  Use the RegisterCmd\nfunction for this purpose.\n\nA list of all registered methods can be obtained with the RegisteredCmdMethods\nfunction.\n\nCommand Inspection\n\nAll registered commands are registered with flags that identify information such\nas whether the command applies to a chain server, wallet server, or is a\nnotification along with the method name to use.  These flags can be obtained\nwith the MethodUsageFlags flags, and the method can be obtained with the\nCmdMethod function.\n\nHelp Generation\n\nTo facilitate providing consistent help to users of the RPC server, this package\nexposes the GenerateHelp and function which uses reflection on registered\ncommands or notifications, as well as the provided expected result types, to\ngenerate the final help text.\n\nIn addition, the MethodUsageText function is provided to generate consistent\none-line usage for registered commands and notifications using reflection.\n\nErrors\n\nThere are 2 distinct type of errors supported by this package:\n\n  - General errors related to marshalling or unmarshalling or improper use of\n    the package (type Error)\n  - RPC errors which are intended to be returned across the wire as a part of\n    the JSON-RPC response (type RPCError)\n\nThe first category of errors (type Error) typically indicates a programmer error\nand can be avoided by properly using the API.  Errors of this type will be\nreturned from the various functions available in this package.  They identify\nissues such as unsupported field types, attempts to register malformed commands,\nand attempting to create a new command with an improper number of parameters.\nThe specific reason for the error can be detected by type asserting it to a\n*btcjson.Error and accessing the ErrorCode field.\n\nThe second category of errors (type RPCError), on the other hand, are useful for\nreturning errors to RPC clients.  Consequently, they are used in the previously\ndescribed Response type.\n*/\npackage btcjson\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/btcjson/error.go",
    "content": "// Copyright (c) 2014 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcjson\n\nimport (\n\t\"fmt\"\n)\n\n// ErrorCode identifies a kind of error.  These error codes are NOT used for\n// JSON-RPC response errors.\ntype ErrorCode int\n\n// These constants are used to identify a specific RuleError.\nconst (\n\t// ErrDuplicateMethod indicates a command with the specified method\n\t// already exists.\n\tErrDuplicateMethod ErrorCode = iota\n\n\t// ErrInvalidUsageFlags indicates one or more unrecognized flag bits\n\t// were specified.\n\tErrInvalidUsageFlags\n\n\t// ErrInvalidType indicates a type was passed that is not the required\n\t// type.\n\tErrInvalidType\n\n\t// ErrEmbeddedType indicates the provided command struct contains an\n\t// embedded type which is not not supported.\n\tErrEmbeddedType\n\n\t// ErrUnexportedField indiciates the provided command struct contains an\n\t// unexported field which is not supported.\n\tErrUnexportedField\n\n\t// ErrUnsupportedFieldType indicates the type of a field in the provided\n\t// command struct is not one of the supported types.\n\tErrUnsupportedFieldType\n\n\t// ErrNonOptionalField indicates a non-optional field was specified\n\t// after an optional field.\n\tErrNonOptionalField\n\n\t// ErrNonOptionalDefault indicates a 'jsonrpcdefault' struct tag was\n\t// specified for a non-optional field.\n\tErrNonOptionalDefault\n\n\t// ErrMismatchedDefault indicates a 'jsonrpcdefault' struct tag contains\n\t// a value that doesn't match the type of the field.\n\tErrMismatchedDefault\n\n\t// ErrUnregisteredMethod indicates a method was specified that has not\n\t// been registered.\n\tErrUnregisteredMethod\n\n\t// ErrMissingDescription indicates a description required to generate\n\t// help is missing.\n\tErrMissingDescription\n\n\t// ErrNumParams inidcates the number of params supplied do not\n\t// match the requirements of the associated command.\n\tErrNumParams\n\n\t// numErrorCodes is the maximum error code number used in tests.\n\tnumErrorCodes\n)\n\n// Map of ErrorCode values back to their constant names for pretty printing.\nvar errorCodeStrings = map[ErrorCode]string{\n\tErrDuplicateMethod:      \"ErrDuplicateMethod\",\n\tErrInvalidUsageFlags:    \"ErrInvalidUsageFlags\",\n\tErrInvalidType:          \"ErrInvalidType\",\n\tErrEmbeddedType:         \"ErrEmbeddedType\",\n\tErrUnexportedField:      \"ErrUnexportedField\",\n\tErrUnsupportedFieldType: \"ErrUnsupportedFieldType\",\n\tErrNonOptionalField:     \"ErrNonOptionalField\",\n\tErrNonOptionalDefault:   \"ErrNonOptionalDefault\",\n\tErrMismatchedDefault:    \"ErrMismatchedDefault\",\n\tErrUnregisteredMethod:   \"ErrUnregisteredMethod\",\n\tErrMissingDescription:   \"ErrMissingDescription\",\n\tErrNumParams:            \"ErrNumParams\",\n}\n\n// String returns the ErrorCode as a human-readable name.\nfunc (e ErrorCode) String() string {\n\tif s := errorCodeStrings[e]; s != \"\" {\n\t\treturn s\n\t}\n\treturn fmt.Sprintf(\"Unknown ErrorCode (%d)\", int(e))\n}\n\n// Error identifies a general error.  This differs from an RPCError in that this\n// error typically is used more by the consumers of the package as opposed to\n// RPCErrors which are intended to be returned to the client across the wire via\n// a JSON-RPC Response.  The caller can use type assertions to determine the\n// specific error and access the ErrorCode field.\ntype Error struct {\n\tErrorCode   ErrorCode // Describes the kind of error\n\tDescription string    // Human readable description of the issue\n}\n\n// Error satisfies the error interface and prints human-readable errors.\nfunc (e Error) Error() string {\n\treturn e.Description\n}\n\n// makeError creates an Error given a set of arguments.\nfunc makeError(c ErrorCode, desc string) Error {\n\treturn Error{ErrorCode: c, Description: desc}\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/btcjson/help.go",
    "content": "// Copyright (c) 2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcjson\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n\t\"text/tabwriter\"\n)\n\n// baseHelpDescs house the various help labels, types, and example values used\n// when generating help.  The per-command synopsis, field descriptions,\n// conditions, and result descriptions are to be provided by the caller.\nvar baseHelpDescs = map[string]string{\n\t// Misc help labels and output.\n\t\"help-arguments\":      \"Arguments\",\n\t\"help-arguments-none\": \"None\",\n\t\"help-result\":         \"Result\",\n\t\"help-result-nothing\": \"Nothing\",\n\t\"help-default\":        \"default\",\n\t\"help-optional\":       \"optional\",\n\t\"help-required\":       \"required\",\n\n\t// JSON types.\n\t\"json-type-numeric\": \"numeric\",\n\t\"json-type-string\":  \"string\",\n\t\"json-type-bool\":    \"boolean\",\n\t\"json-type-array\":   \"array of \",\n\t\"json-type-object\":  \"object\",\n\t\"json-type-value\":   \"value\",\n\n\t// JSON examples.\n\t\"json-example-string\":   \"value\",\n\t\"json-example-bool\":     \"true|false\",\n\t\"json-example-map-data\": \"data\",\n\t\"json-example-unknown\":  \"unknown\",\n}\n\n// descLookupFunc is a function which is used to lookup a description given\n// a key.\ntype descLookupFunc func(string) string\n\n// reflectTypeToJSONType returns a string that represents the JSON type\n// associated with the provided Go type.\nfunc reflectTypeToJSONType(xT descLookupFunc, rt reflect.Type) string {\n\tkind := rt.Kind()\n\tif isNumeric(kind) {\n\t\treturn xT(\"json-type-numeric\")\n\t}\n\n\tswitch kind {\n\tcase reflect.String:\n\t\treturn xT(\"json-type-string\")\n\n\tcase reflect.Bool:\n\t\treturn xT(\"json-type-bool\")\n\n\tcase reflect.Array, reflect.Slice:\n\t\treturn xT(\"json-type-array\") + reflectTypeToJSONType(xT,\n\t\t\trt.Elem())\n\n\tcase reflect.Struct:\n\t\treturn xT(\"json-type-object\")\n\n\tcase reflect.Map:\n\t\treturn xT(\"json-type-object\")\n\t}\n\n\treturn xT(\"json-type-value\")\n}\n\n// resultStructHelp returns a slice of strings containing the result help output\n// for a struct.  Each line makes use of tabs to separate the relevant pieces so\n// a tabwriter can be used later to line everything up.  The descriptions are\n// pulled from the active help descriptions map based on the lowercase version\n// of the provided reflect type and json name (or the lowercase version of the\n// field name if no json tag was specified).\nfunc resultStructHelp(xT descLookupFunc, rt reflect.Type, indentLevel int) []string {\n\tindent := strings.Repeat(\" \", indentLevel)\n\ttypeName := strings.ToLower(rt.Name())\n\n\t// Generate the help for each of the fields in the result struct.\n\tnumField := rt.NumField()\n\tresults := make([]string, 0, numField)\n\tfor i := 0; i < numField; i++ {\n\t\trtf := rt.Field(i)\n\n\t\t// The field name to display is the json name when it's\n\t\t// available, otherwise use the lowercase field name.\n\t\tvar fieldName string\n\t\tif tag := rtf.Tag.Get(\"json\"); tag != \"\" {\n\t\t\tfieldName = strings.Split(tag, \",\")[0]\n\t\t} else {\n\t\t\tfieldName = strings.ToLower(rtf.Name)\n\t\t}\n\n\t\t// Deference pointer if needed.\n\t\trtfType := rtf.Type\n\t\tif rtfType.Kind() == reflect.Ptr {\n\t\t\trtfType = rtf.Type.Elem()\n\t\t}\n\n\t\t// Generate the JSON example for the result type of this struct\n\t\t// field.  When it is a complex type, examine the type and\n\t\t// adjust the opening bracket and brace combination accordingly.\n\t\tfieldType := reflectTypeToJSONType(xT, rtfType)\n\t\tfieldDescKey := typeName + \"-\" + fieldName\n\t\tfieldExamples, isComplex := reflectTypeToJSONExample(xT,\n\t\t\trtfType, indentLevel, fieldDescKey)\n\t\tif isComplex {\n\t\t\tvar brace string\n\t\t\tkind := rtfType.Kind()\n\t\t\tif kind == reflect.Array || kind == reflect.Slice {\n\t\t\t\tbrace = \"[{\"\n\t\t\t} else {\n\t\t\t\tbrace = \"{\"\n\t\t\t}\n\t\t\tresult := fmt.Sprintf(\"%s\\\"%s\\\": %s\\t(%s)\\t%s\", indent,\n\t\t\t\tfieldName, brace, fieldType, xT(fieldDescKey))\n\t\t\tresults = append(results, result)\n\t\t\tresults = append(results, fieldExamples...)\n\t\t} else {\n\t\t\tresult := fmt.Sprintf(\"%s\\\"%s\\\": %s,\\t(%s)\\t%s\", indent,\n\t\t\t\tfieldName, fieldExamples[0], fieldType,\n\t\t\t\txT(fieldDescKey))\n\t\t\tresults = append(results, result)\n\t\t}\n\t}\n\n\treturn results\n}\n\n// reflectTypeToJSONExample generates example usage in the format used by the\n// help output.  It handles arrays, slices and structs recursively.  The output\n// is returned as a slice of lines so the final help can be nicely aligned via\n// a tab writer.  A bool is also returned which specifies whether or not the\n// type results in a complex JSON object since they need to be handled\n// differently.\nfunc reflectTypeToJSONExample(xT descLookupFunc, rt reflect.Type, indentLevel int, fieldDescKey string) ([]string, bool) {\n\t// Indirect pointer if needed.\n\tif rt.Kind() == reflect.Ptr {\n\t\trt = rt.Elem()\n\t}\n\tkind := rt.Kind()\n\tif isNumeric(kind) {\n\t\tif kind == reflect.Float32 || kind == reflect.Float64 {\n\t\t\treturn []string{\"n.nnn\"}, false\n\t\t}\n\n\t\treturn []string{\"n\"}, false\n\t}\n\n\tswitch kind {\n\tcase reflect.String:\n\t\treturn []string{`\"` + xT(\"json-example-string\") + `\"`}, false\n\n\tcase reflect.Bool:\n\t\treturn []string{xT(\"json-example-bool\")}, false\n\n\tcase reflect.Struct:\n\t\tindent := strings.Repeat(\" \", indentLevel)\n\t\tresults := resultStructHelp(xT, rt, indentLevel+1)\n\n\t\t// An opening brace is needed for the first indent level.  For\n\t\t// all others, it will be included as a part of the previous\n\t\t// field.\n\t\tif indentLevel == 0 {\n\t\t\tnewResults := make([]string, len(results)+1)\n\t\t\tnewResults[0] = \"{\"\n\t\t\tcopy(newResults[1:], results)\n\t\t\tresults = newResults\n\t\t}\n\n\t\t// The closing brace has a comma after it except for the first\n\t\t// indent level.  The final tabs are necessary so the tab writer\n\t\t// lines things up properly.\n\t\tclosingBrace := indent + \"}\"\n\t\tif indentLevel > 0 {\n\t\t\tclosingBrace += \",\"\n\t\t}\n\t\tresults = append(results, closingBrace+\"\\t\\t\")\n\t\treturn results, true\n\n\tcase reflect.Array, reflect.Slice:\n\t\tresults, isComplex := reflectTypeToJSONExample(xT, rt.Elem(),\n\t\t\tindentLevel, fieldDescKey)\n\n\t\t// When the result is complex, it is because this is an array of\n\t\t// objects.\n\t\tif isComplex {\n\t\t\t// When this is at indent level zero, there is no\n\t\t\t// previous field to house the opening array bracket, so\n\t\t\t// replace the opening object brace with the array\n\t\t\t// syntax.  Also, replace the final closing object brace\n\t\t\t// with the variadiac array closing syntax.\n\t\t\tindent := strings.Repeat(\" \", indentLevel)\n\t\t\tif indentLevel == 0 {\n\t\t\t\tresults[0] = indent + \"[{\"\n\t\t\t\tresults[len(results)-1] = indent + \"},...]\"\n\t\t\t\treturn results, true\n\t\t\t}\n\n\t\t\t// At this point, the indent level is greater than 0, so\n\t\t\t// the opening array bracket and object brace are\n\t\t\t// already a part of the previous field.  However, the\n\t\t\t// closing entry is a simple object brace, so replace it\n\t\t\t// with the variadiac array closing syntax.  The final\n\t\t\t// tabs are necessary so the tab writer lines things up\n\t\t\t// properly.\n\t\t\tresults[len(results)-1] = indent + \"},...],\\t\\t\"\n\t\t\treturn results, true\n\t\t}\n\n\t\t// It's an array of primitives, so return the formatted text\n\t\t// accordingly.\n\t\treturn []string{fmt.Sprintf(\"[%s,...]\", results[0])}, false\n\n\tcase reflect.Map:\n\t\tindent := strings.Repeat(\" \", indentLevel)\n\t\tresults := make([]string, 0, 3)\n\n\t\t// An opening brace is needed for the first indent level.  For\n\t\t// all others, it will be included as a part of the previous\n\t\t// field.\n\t\tif indentLevel == 0 {\n\t\t\tresults = append(results, indent+\"{\")\n\t\t}\n\n\t\t// Maps are a bit special in that they need to have the key,\n\t\t// value, and description of the object entry specifically\n\t\t// called out.\n\t\tinnerIndent := strings.Repeat(\" \", indentLevel+1)\n\t\tresult := fmt.Sprintf(\"%s%q: %s, (%s) %s\", innerIndent,\n\t\t\txT(fieldDescKey+\"--key\"), xT(fieldDescKey+\"--value\"),\n\t\t\treflectTypeToJSONType(xT, rt), xT(fieldDescKey+\"--desc\"))\n\t\tresults = append(results, result)\n\t\tresults = append(results, innerIndent+\"...\")\n\n\t\tresults = append(results, indent+\"}\")\n\t\treturn results, true\n\t}\n\n\treturn []string{xT(\"json-example-unknown\")}, false\n}\n\n// resultTypeHelp generates and returns formatted help for the provided result\n// type.\nfunc resultTypeHelp(xT descLookupFunc, rt reflect.Type, fieldDescKey string) string {\n\t// Generate the JSON example for the result type.\n\tresults, isComplex := reflectTypeToJSONExample(xT, rt, 0, fieldDescKey)\n\n\t// When this is a primitive type, add the associated JSON type and\n\t// result description into the final string, format it accordingly,\n\t// and return it.\n\tif !isComplex {\n\t\treturn fmt.Sprintf(\"%s (%s) %s\", results[0],\n\t\t\treflectTypeToJSONType(xT, rt), xT(fieldDescKey))\n\t}\n\n\t// At this point, this is a complex type that already has the JSON types\n\t// and descriptions in the results.  Thus, use a tab writer to nicely\n\t// align the help text.\n\tvar formatted bytes.Buffer\n\tw := new(tabwriter.Writer)\n\tw.Init(&formatted, 0, 4, 1, ' ', 0)\n\tfor i, text := range results {\n\t\tif i == len(results)-1 {\n\t\t\tfmt.Fprintf(w, text)\n\t\t} else {\n\t\t\tfmt.Fprintln(w, text)\n\t\t}\n\t}\n\tw.Flush()\n\treturn formatted.String()\n}\n\n// argTypeHelp returns the type of provided command argument as a string in the\n// format used by the help output.  In particular, it includes the JSON type\n// (boolean, numeric, string, array, object) along with optional and the default\n// value if applicable.\nfunc argTypeHelp(xT descLookupFunc, structField reflect.StructField, defaultVal *reflect.Value) string {\n\t// Indirect the pointer if needed and track if it's an optional field.\n\tfieldType := structField.Type\n\tvar isOptional bool\n\tif fieldType.Kind() == reflect.Ptr {\n\t\tfieldType = fieldType.Elem()\n\t\tisOptional = true\n\t}\n\n\t// When there is a default value, it must also be a pointer due to the\n\t// rules enforced by RegisterCmd.\n\tif defaultVal != nil {\n\t\tindirect := defaultVal.Elem()\n\t\tdefaultVal = &indirect\n\t}\n\n\t// Convert the field type to a JSON type.\n\tdetails := make([]string, 0, 3)\n\tdetails = append(details, reflectTypeToJSONType(xT, fieldType))\n\n\t// Add optional and default value to the details if needed.\n\tif isOptional {\n\t\tdetails = append(details, xT(\"help-optional\"))\n\n\t\t// Add the default value if there is one.  This is only checked\n\t\t// when the field is optional since a non-optional field can't\n\t\t// have a default value.\n\t\tif defaultVal != nil {\n\t\t\tval := defaultVal.Interface()\n\t\t\tif defaultVal.Kind() == reflect.String {\n\t\t\t\tval = fmt.Sprintf(`\"%s\"`, val)\n\t\t\t}\n\t\t\tstr := fmt.Sprintf(\"%s=%v\", xT(\"help-default\"), val)\n\t\t\tdetails = append(details, str)\n\t\t}\n\t} else {\n\t\tdetails = append(details, xT(\"help-required\"))\n\t}\n\n\treturn strings.Join(details, \", \")\n}\n\n// argHelp generates and returns formatted help for the provided command.\nfunc argHelp(xT descLookupFunc, rtp reflect.Type, defaults map[int]reflect.Value, method string) string {\n\t// Return now if the command has no arguments.\n\trt := rtp.Elem()\n\tnumFields := rt.NumField()\n\tif numFields == 0 {\n\t\treturn \"\"\n\t}\n\n\t// Generate the help for each argument in the command.  Several\n\t// simplifying assumptions are made here because the RegisterCmd\n\t// function has already rigorously enforced the layout.\n\targs := make([]string, 0, numFields)\n\tfor i := 0; i < numFields; i++ {\n\t\trtf := rt.Field(i)\n\t\tvar defaultVal *reflect.Value\n\t\tif defVal, ok := defaults[i]; ok {\n\t\t\tdefaultVal = &defVal\n\t\t}\n\n\t\tfieldName := strings.ToLower(rtf.Name)\n\t\thelpText := fmt.Sprintf(\"%d.\\t%s\\t(%s)\\t%s\", i+1, fieldName,\n\t\t\targTypeHelp(xT, rtf, defaultVal),\n\t\t\txT(method+\"-\"+fieldName))\n\t\targs = append(args, helpText)\n\n\t\t// For types which require a JSON object, or an array of JSON\n\t\t// objects, generate the full syntax for the argument.\n\t\tfieldType := rtf.Type\n\t\tif fieldType.Kind() == reflect.Ptr {\n\t\t\tfieldType = fieldType.Elem()\n\t\t}\n\t\tkind := fieldType.Kind()\n\t\tswitch kind {\n\t\tcase reflect.Struct:\n\t\t\tfieldDescKey := fmt.Sprintf(\"%s-%s\", method, fieldName)\n\t\t\tresultText := resultTypeHelp(xT, fieldType, fieldDescKey)\n\t\t\targs = append(args, resultText)\n\n\t\tcase reflect.Map:\n\t\t\tfieldDescKey := fmt.Sprintf(\"%s-%s\", method, fieldName)\n\t\t\tresultText := resultTypeHelp(xT, fieldType, fieldDescKey)\n\t\t\targs = append(args, resultText)\n\n\t\tcase reflect.Array, reflect.Slice:\n\t\t\tfieldDescKey := fmt.Sprintf(\"%s-%s\", method, fieldName)\n\t\t\tif rtf.Type.Elem().Kind() == reflect.Struct {\n\t\t\t\tresultText := resultTypeHelp(xT, fieldType,\n\t\t\t\t\tfieldDescKey)\n\t\t\t\targs = append(args, resultText)\n\t\t\t}\n\t\t}\n\t}\n\n\t// Add argument names, types, and descriptions if there are any.  Use a\n\t// tab writer to nicely align the help text.\n\tvar formatted bytes.Buffer\n\tw := new(tabwriter.Writer)\n\tw.Init(&formatted, 0, 4, 1, ' ', 0)\n\tfor _, text := range args {\n\t\tfmt.Fprintln(w, text)\n\t}\n\tw.Flush()\n\treturn formatted.String()\n}\n\n// methodHelp generates and returns the help output for the provided command\n// and method info.  This is the main work horse for the exported MethodHelp\n// function.\nfunc methodHelp(xT descLookupFunc, rtp reflect.Type, defaults map[int]reflect.Value, method string, resultTypes []interface{}) string {\n\t// Start off with the method usage and help synopsis.\n\thelp := fmt.Sprintf(\"%s\\n\\n%s\\n\", methodUsageText(rtp, defaults, method),\n\t\txT(method+\"--synopsis\"))\n\n\t// Generate the help for each argument in the command.\n\tif argText := argHelp(xT, rtp, defaults, method); argText != \"\" {\n\t\thelp += fmt.Sprintf(\"\\n%s:\\n%s\", xT(\"help-arguments\"),\n\t\t\targText)\n\t} else {\n\t\thelp += fmt.Sprintf(\"\\n%s:\\n%s\\n\", xT(\"help-arguments\"),\n\t\t\txT(\"help-arguments-none\"))\n\t}\n\n\t// Generate the help text for each result type.\n\tresultTexts := make([]string, 0, len(resultTypes))\n\tfor i := range resultTypes {\n\t\trtp := reflect.TypeOf(resultTypes[i])\n\t\tfieldDescKey := fmt.Sprintf(\"%s--result%d\", method, i)\n\t\tif resultTypes[i] == nil {\n\t\t\tresultText := xT(\"help-result-nothing\")\n\t\t\tresultTexts = append(resultTexts, resultText)\n\t\t\tcontinue\n\t\t}\n\n\t\tresultText := resultTypeHelp(xT, rtp.Elem(), fieldDescKey)\n\t\tresultTexts = append(resultTexts, resultText)\n\t}\n\n\t// Add result types and descriptions.  When there is more than one\n\t// result type, also add the condition which triggers it.\n\tif len(resultTexts) > 1 {\n\t\tfor i, resultText := range resultTexts {\n\t\t\tcondKey := fmt.Sprintf(\"%s--condition%d\", method, i)\n\t\t\thelp += fmt.Sprintf(\"\\n%s (%s):\\n%s\\n\",\n\t\t\t\txT(\"help-result\"), xT(condKey), resultText)\n\t\t}\n\t} else if len(resultTexts) > 0 {\n\t\thelp += fmt.Sprintf(\"\\n%s:\\n%s\\n\", xT(\"help-result\"),\n\t\t\tresultTexts[0])\n\t} else {\n\t\thelp += fmt.Sprintf(\"\\n%s:\\n%s\\n\", xT(\"help-result\"),\n\t\t\txT(\"help-result-nothing\"))\n\t}\n\treturn help\n}\n\n// isValidResultType returns whether the passed reflect kind is one of the\n// acceptable types for results.\nfunc isValidResultType(kind reflect.Kind) bool {\n\tif isNumeric(kind) {\n\t\treturn true\n\t}\n\n\tswitch kind {\n\tcase reflect.String, reflect.Struct, reflect.Array, reflect.Slice,\n\t\treflect.Bool, reflect.Map:\n\n\t\treturn true\n\t}\n\n\treturn false\n}\n\n// GenerateHelp generates and returns help output for the provided method and\n// result types given a map to provide the appropriate keys for the method\n// synopsis, field descriptions, conditions, and result descriptions.  The\n// method must be associated with a registered type.  All commands provided by\n// this package are registered by default.\n//\n// The resultTypes must be pointer-to-types which represent the specific types\n// of values the command returns.  For example, if the command only returns a\n// boolean value, there should only be a single entry of (*bool)(nil).  Note\n// that each type must be a single pointer to the type.  Therefore, it is\n// recommended to simply pass a nil pointer cast to the appropriate type as\n// previously shown.\n//\n// The provided descriptions map must contain all of the keys or an error will\n// be returned which includes the missing key, or the final missing key when\n// there is more than one key missing.  The generated help in the case of such\n// an error will use the key in place of the description.\n//\n// The following outlines the required keys:\n//   \"<method>--synopsis\"             Synopsis for the command\n//   \"<method>-<lowerfieldname>\"      Description for each command argument\n//   \"<typename>-<lowerfieldname>\"    Description for each object field\n//   \"<method>--condition<#>\"         Description for each result condition\n//   \"<method>--result<#>\"            Description for each primitive result num\n//\n// Notice that the \"special\" keys synopsis, condition<#>, and result<#> are\n// preceded by a double dash to ensure they don't conflict with field names.\n//\n// The condition keys are only required when there is more than on result type,\n// and the result key for a given result type is only required if it's not an\n// object.\n//\n// For example, consider the 'help' command itself.  There are two possible\n// returns depending on the provided parameters.  So, the help would be\n// generated by calling the function as follows:\n//   GenerateHelp(\"help\", descs, (*string)(nil), (*string)(nil)).\n//\n// The following keys would then be required in the provided descriptions map:\n//\n//   \"help--synopsis\":   \"Returns a list of all commands or help for ....\"\n//   \"help-command\":     \"The command to retrieve help for\",\n//   \"help--condition0\": \"no command provided\"\n//   \"help--condition1\": \"command specified\"\n//   \"help--result0\":    \"List of commands\"\n//   \"help--result1\":    \"Help for specified command\"\nfunc GenerateHelp(method string, descs map[string]string, resultTypes ...interface{}) (string, error) {\n\t// Look up details about the provided method and error out if not\n\t// registered.\n\tregisterLock.RLock()\n\trtp, ok := methodToConcreteType[method]\n\tinfo := methodToInfo[method]\n\tregisterLock.RUnlock()\n\tif !ok {\n\t\tstr := fmt.Sprintf(\"%q is not registered\", method)\n\t\treturn \"\", makeError(ErrUnregisteredMethod, str)\n\t}\n\n\t// Validate each result type is a pointer to a supported type (or nil).\n\tfor i, resultType := range resultTypes {\n\t\tif resultType == nil {\n\t\t\tcontinue\n\t\t}\n\n\t\trtp := reflect.TypeOf(resultType)\n\t\tif rtp.Kind() != reflect.Ptr {\n\t\t\tstr := fmt.Sprintf(\"result #%d (%v) is not a pointer\",\n\t\t\t\ti, rtp.Kind())\n\t\t\treturn \"\", makeError(ErrInvalidType, str)\n\t\t}\n\n\t\telemKind := rtp.Elem().Kind()\n\t\tif !isValidResultType(elemKind) {\n\t\t\tstr := fmt.Sprintf(\"result #%d (%v) is not an allowed \"+\n\t\t\t\t\"type\", i, elemKind)\n\t\t\treturn \"\", makeError(ErrInvalidType, str)\n\t\t}\n\t}\n\n\t// Create a closure for the description lookup function which falls back\n\t// to the base help descriptions map for unrecognized keys and tracks\n\t// and missing keys.\n\tvar missingKey string\n\txT := func(key string) string {\n\t\tif desc, ok := descs[key]; ok {\n\t\t\treturn desc\n\t\t}\n\t\tif desc, ok := baseHelpDescs[key]; ok {\n\t\t\treturn desc\n\t\t}\n\n\t\tmissingKey = key\n\t\treturn key\n\t}\n\n\t// Generate and return the help for the method.\n\thelp := methodHelp(xT, rtp, info.defaults, method, resultTypes)\n\tif missingKey != \"\" {\n\t\treturn help, makeError(ErrMissingDescription, missingKey)\n\t}\n\treturn help, nil\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/btcjson/helpers.go",
    "content": "// Copyright (c) 2014 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcjson\n\n// Bool is a helper routine that allocates a new bool value to store v and\n// returns a pointer to it.  This is useful when assigning optional parameters.\nfunc Bool(v bool) *bool {\n\tp := new(bool)\n\t*p = v\n\treturn p\n}\n\n// Int is a helper routine that allocates a new int value to store v and\n// returns a pointer to it.  This is useful when assigning optional parameters.\nfunc Int(v int) *int {\n\tp := new(int)\n\t*p = v\n\treturn p\n}\n\n// Uint is a helper routine that allocates a new uint value to store v and\n// returns a pointer to it.  This is useful when assigning optional parameters.\nfunc Uint(v uint) *uint {\n\tp := new(uint)\n\t*p = v\n\treturn p\n}\n\n// Int32 is a helper routine that allocates a new int32 value to store v and\n// returns a pointer to it.  This is useful when assigning optional parameters.\nfunc Int32(v int32) *int32 {\n\tp := new(int32)\n\t*p = v\n\treturn p\n}\n\n// Uint32 is a helper routine that allocates a new uint32 value to store v and\n// returns a pointer to it.  This is useful when assigning optional parameters.\nfunc Uint32(v uint32) *uint32 {\n\tp := new(uint32)\n\t*p = v\n\treturn p\n}\n\n// Int64 is a helper routine that allocates a new int64 value to store v and\n// returns a pointer to it.  This is useful when assigning optional parameters.\nfunc Int64(v int64) *int64 {\n\tp := new(int64)\n\t*p = v\n\treturn p\n}\n\n// Uint64 is a helper routine that allocates a new uint64 value to store v and\n// returns a pointer to it.  This is useful when assigning optional parameters.\nfunc Uint64(v uint64) *uint64 {\n\tp := new(uint64)\n\t*p = v\n\treturn p\n}\n\n// Float64 is a helper routine that allocates a new float64 value to store v and\n// returns a pointer to it.  This is useful when assigning optional parameters.\nfunc Float64(v float64) *float64 {\n\tp := new(float64)\n\t*p = v\n\treturn p\n}\n\n// String is a helper routine that allocates a new string value to store v and\n// returns a pointer to it.  This is useful when assigning optional parameters.\nfunc String(v string) *string {\n\tp := new(string)\n\t*p = v\n\treturn p\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/btcjson/jsonrpc.go",
    "content": "// Copyright (c) 2014 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcjson\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n)\n\n// RPCErrorCode represents an error code to be used as a part of an RPCError\n// which is in turn used in a JSON-RPC Response object.\n//\n// A specific type is used to help ensure the wrong errors aren't used.\ntype RPCErrorCode int\n\n// RPCError represents an error that is used as a part of a JSON-RPC Response\n// object.\ntype RPCError struct {\n\tCode    RPCErrorCode `json:\"code,omitempty\"`\n\tMessage string       `json:\"message,omitempty\"`\n}\n\n// Guarantee RPCError satisifies the builtin error interface.\nvar _, _ error = RPCError{}, (*RPCError)(nil)\n\n// Error returns a string describing the RPC error.  This satisifies the\n// builtin error interface.\nfunc (e RPCError) Error() string {\n\treturn fmt.Sprintf(\"%d: %s\", e.Code, e.Message)\n}\n\n// NewRPCError constructs and returns a new JSON-RPC error that is suitable\n// for use in a JSON-RPC Response object.\nfunc NewRPCError(code RPCErrorCode, message string) *RPCError {\n\treturn &RPCError{\n\t\tCode:    code,\n\t\tMessage: message,\n\t}\n}\n\n// IsValidIDType checks that the ID field (which can go in any of the JSON-RPC\n// requests, responses, or notifications) is valid.  JSON-RPC 1.0 allows any\n// valid JSON type.  JSON-RPC 2.0 (which bitcoind follows for some parts) only\n// allows string, number, or null, so this function restricts the allowed types\n// to that list.  This function is only provided in case the caller is manually\n// marshalling for some reason.    The functions which accept an ID in this\n// package already call this function to ensure the provided id is valid.\nfunc IsValidIDType(id interface{}) bool {\n\tswitch id.(type) {\n\tcase int, int8, int16, int32, int64,\n\t\tuint, uint8, uint16, uint32, uint64,\n\t\tfloat32, float64,\n\t\tstring,\n\t\tnil:\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\n// Request is a type for raw JSON-RPC 1.0 requests.  The Method field identifies\n// the specific command type which in turns leads to different parameters.\n// Callers typically will not use this directly since this package provides a\n// statically typed command infrastructure which handles creation of these\n// requests, however this struct it being exported in case the caller wants to\n// construct raw requests for some reason.\ntype Request struct {\n\tJsonrpc string            `json:\"jsonrpc\"`\n\tMethod  string            `json:\"method\"`\n\tParams  []json.RawMessage `json:\"params\"`\n\tID      interface{}       `json:\"id\"`\n}\n\n// NewRequest returns a new JSON-RPC 1.0 request object given the provided id,\n// method, and parameters.  The parameters are marshalled into a json.RawMessage\n// for the Params field of the returned request object.  This function is only\n// provided in case the caller wants to construct raw requests for some reason.\n//\n// Typically callers will instead want to create a registered concrete command\n// type with the NewCmd or New<Foo>Cmd functions and call the MarshalCmd\n// function with that command to generate the marshalled JSON-RPC request.\nfunc NewRequest(id interface{}, method string, params []interface{}) (*Request, error) {\n\tif !IsValidIDType(id) {\n\t\tstr := fmt.Sprintf(\"the id of type '%T' is invalid\", id)\n\t\treturn nil, makeError(ErrInvalidType, str)\n\t}\n\n\trawParams := make([]json.RawMessage, 0, len(params))\n\tfor _, param := range params {\n\t\tmarshalledParam, err := json.Marshal(param)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\trawMessage := json.RawMessage(marshalledParam)\n\t\trawParams = append(rawParams, rawMessage)\n\t}\n\n\treturn &Request{\n\t\tJsonrpc: \"1.0\",\n\t\tID:      id,\n\t\tMethod:  method,\n\t\tParams:  rawParams,\n\t}, nil\n}\n\n// Response is the general form of a JSON-RPC response.  The type of the Result\n// field varies from one command to the next, so it is implemented as an\n// interface.  The ID field has to be a pointer for Go to put a null in it when\n// empty.\ntype Response struct {\n\tResult json.RawMessage `json:\"result\"`\n\tError  *RPCError       `json:\"error\"`\n\tID     *interface{}    `json:\"id\"`\n}\n\n// NewResponse returns a new JSON-RPC response object given the provided id,\n// marshalled result, and RPC error.  This function is only provided in case the\n// caller wants to construct raw responses for some reason.\n//\n// Typically callers will instead want to create the fully marshalled JSON-RPC\n// response to send over the wire with the MarshalResponse function.\nfunc NewResponse(id interface{}, marshalledResult []byte, rpcErr *RPCError) (*Response, error) {\n\tif !IsValidIDType(id) {\n\t\tstr := fmt.Sprintf(\"the id of type '%T' is invalid\", id)\n\t\treturn nil, makeError(ErrInvalidType, str)\n\t}\n\n\tpid := &id\n\treturn &Response{\n\t\tResult: marshalledResult,\n\t\tError:  rpcErr,\n\t\tID:     pid,\n\t}, nil\n}\n\n// MarshalResponse marshals the passed id, result, and RPCError to a JSON-RPC\n// response byte slice that is suitable for transmission to a JSON-RPC client.\nfunc MarshalResponse(id interface{}, result interface{}, rpcErr *RPCError) ([]byte, error) {\n\tmarshalledResult, err := json.Marshal(result)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tresponse, err := NewResponse(id, marshalledResult, rpcErr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn json.Marshal(&response)\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/btcjson/jsonrpcerr.go",
    "content": "// Copyright (c) 2014 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcjson\n\n// Standard JSON-RPC 2.0 errors.\nvar (\n\tErrRPCInvalidRequest = &RPCError{\n\t\tCode:    -32600,\n\t\tMessage: \"Invalid request\",\n\t}\n\tErrRPCMethodNotFound = &RPCError{\n\t\tCode:    -32601,\n\t\tMessage: \"Method not found\",\n\t}\n\tErrRPCInvalidParams = &RPCError{\n\t\tCode:    -32602,\n\t\tMessage: \"Invalid parameters\",\n\t}\n\tErrRPCInternal = &RPCError{\n\t\tCode:    -32603,\n\t\tMessage: \"Internal error\",\n\t}\n\tErrRPCParse = &RPCError{\n\t\tCode:    -32700,\n\t\tMessage: \"Parse error\",\n\t}\n)\n\n// General application defined JSON errors.\nconst (\n\tErrRPCMisc                RPCErrorCode = -1\n\tErrRPCForbiddenBySafeMode RPCErrorCode = -2\n\tErrRPCType                RPCErrorCode = -3\n\tErrRPCInvalidAddressOrKey RPCErrorCode = -5\n\tErrRPCOutOfMemory         RPCErrorCode = -7\n\tErrRPCInvalidParameter    RPCErrorCode = -8\n\tErrRPCDatabase            RPCErrorCode = -20\n\tErrRPCDeserialization     RPCErrorCode = -22\n\tErrRPCVerify              RPCErrorCode = -25\n)\n\n// Peer-to-peer client errors.\nconst (\n\tErrRPCClientNotConnected      RPCErrorCode = -9\n\tErrRPCClientInInitialDownload RPCErrorCode = -10\n\tErrRPCClientNodeNotAdded      RPCErrorCode = -24\n)\n\n// Wallet JSON errors\nconst (\n\tErrRPCWallet                    RPCErrorCode = -4\n\tErrRPCWalletInsufficientFunds   RPCErrorCode = -6\n\tErrRPCWalletInvalidAccountName  RPCErrorCode = -11\n\tErrRPCWalletKeypoolRanOut       RPCErrorCode = -12\n\tErrRPCWalletUnlockNeeded        RPCErrorCode = -13\n\tErrRPCWalletPassphraseIncorrect RPCErrorCode = -14\n\tErrRPCWalletWrongEncState       RPCErrorCode = -15\n\tErrRPCWalletEncryptionFailed    RPCErrorCode = -16\n\tErrRPCWalletAlreadyUnlocked     RPCErrorCode = -17\n)\n\n// Specific Errors related to commands.  These are the ones a user of the RPC\n// server are most likely to see.  Generally, the codes should match one of the\n// more general errors above.\nconst (\n\tErrRPCBlockNotFound     RPCErrorCode = -5\n\tErrRPCBlockCount        RPCErrorCode = -5\n\tErrRPCBestBlockHash     RPCErrorCode = -5\n\tErrRPCDifficulty        RPCErrorCode = -5\n\tErrRPCOutOfRange        RPCErrorCode = -1\n\tErrRPCNoTxInfo          RPCErrorCode = -5\n\tErrRPCNoCFIndex         RPCErrorCode = -5\n\tErrRPCNoNewestBlockInfo RPCErrorCode = -5\n\tErrRPCInvalidTxVout     RPCErrorCode = -5\n\tErrRPCRawTxString       RPCErrorCode = -32602\n\tErrRPCDecodeHexString   RPCErrorCode = -22\n)\n\n// Errors that are specific to btcd.\nconst (\n\tErrRPCNoWallet      RPCErrorCode = -1\n\tErrRPCUnimplemented RPCErrorCode = -1\n)\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/btcjson/register.go",
    "content": "// Copyright (c) 2014 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcjson\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n)\n\n// UsageFlag define flags that specify additional properties about the\n// circumstances under which a command can be used.\ntype UsageFlag uint32\n\nconst (\n\t// UFWalletOnly indicates that the command can only be used with an RPC\n\t// server that supports wallet commands.\n\tUFWalletOnly UsageFlag = 1 << iota\n\n\t// UFWebsocketOnly indicates that the command can only be used when\n\t// communicating with an RPC server over websockets.  This typically\n\t// applies to notifications and notification registration functions\n\t// since neiher makes since when using a single-shot HTTP-POST request.\n\tUFWebsocketOnly\n\n\t// UFNotification indicates that the command is actually a notification.\n\t// This means when it is marshalled, the ID must be nil.\n\tUFNotification\n\n\t// highestUsageFlagBit is the maximum usage flag bit and is used in the\n\t// stringer and tests to ensure all of the above constants have been\n\t// tested.\n\thighestUsageFlagBit\n)\n\n// Map of UsageFlag values back to their constant names for pretty printing.\nvar usageFlagStrings = map[UsageFlag]string{\n\tUFWalletOnly:    \"UFWalletOnly\",\n\tUFWebsocketOnly: \"UFWebsocketOnly\",\n\tUFNotification:  \"UFNotification\",\n}\n\n// String returns the UsageFlag in human-readable form.\nfunc (fl UsageFlag) String() string {\n\t// No flags are set.\n\tif fl == 0 {\n\t\treturn \"0x0\"\n\t}\n\n\t// Add individual bit flags.\n\ts := \"\"\n\tfor flag := UFWalletOnly; flag < highestUsageFlagBit; flag <<= 1 {\n\t\tif fl&flag == flag {\n\t\t\ts += usageFlagStrings[flag] + \"|\"\n\t\t\tfl -= flag\n\t\t}\n\t}\n\n\t// Add remaining value as raw hex.\n\ts = strings.TrimRight(s, \"|\")\n\tif fl != 0 {\n\t\ts += \"|0x\" + strconv.FormatUint(uint64(fl), 16)\n\t}\n\ts = strings.TrimLeft(s, \"|\")\n\treturn s\n}\n\n// methodInfo keeps track of information about each registered method such as\n// the parameter information.\ntype methodInfo struct {\n\tmaxParams    int\n\tnumReqParams int\n\tnumOptParams int\n\tdefaults     map[int]reflect.Value\n\tflags        UsageFlag\n\tusage        string\n}\n\nvar (\n\t// These fields are used to map the registered types to method names.\n\tregisterLock         sync.RWMutex\n\tmethodToConcreteType = make(map[string]reflect.Type)\n\tmethodToInfo         = make(map[string]methodInfo)\n\tconcreteTypeToMethod = make(map[reflect.Type]string)\n)\n\n// baseKindString returns the base kind for a given reflect.Type after\n// indirecting through all pointers.\nfunc baseKindString(rt reflect.Type) string {\n\tnumIndirects := 0\n\tfor rt.Kind() == reflect.Ptr {\n\t\tnumIndirects++\n\t\trt = rt.Elem()\n\t}\n\n\treturn fmt.Sprintf(\"%s%s\", strings.Repeat(\"*\", numIndirects), rt.Kind())\n}\n\n// isAcceptableKind returns whether or not the passed field type is a supported\n// type.  It is called after the first pointer indirection, so further pointers\n// are not supported.\nfunc isAcceptableKind(kind reflect.Kind) bool {\n\tswitch kind {\n\tcase reflect.Chan:\n\t\tfallthrough\n\tcase reflect.Complex64:\n\t\tfallthrough\n\tcase reflect.Complex128:\n\t\tfallthrough\n\tcase reflect.Func:\n\t\tfallthrough\n\tcase reflect.Ptr:\n\t\tfallthrough\n\tcase reflect.Interface:\n\t\treturn false\n\t}\n\n\treturn true\n}\n\n// RegisterCmd registers a new command that will automatically marshal to and\n// from JSON-RPC with full type checking and positional parameter support.  It\n// also accepts usage flags which identify the circumstances under which the\n// command can be used.\n//\n// This package automatically registers all of the exported commands by default\n// using this function, however it is also exported so callers can easily\n// register custom types.\n//\n// The type format is very strict since it needs to be able to automatically\n// marshal to and from JSON-RPC 1.0.  The following enumerates the requirements:\n//\n//   - The provided command must be a single pointer to a struct\n//   - All fields must be exported\n//   - The order of the positional parameters in the marshalled JSON will be in\n//     the same order as declared in the struct definition\n//   - Struct embedding is not supported\n//   - Struct fields may NOT be channels, functions, complex, or interface\n//   - A field in the provided struct with a pointer is treated as optional\n//   - Multiple indirections (i.e **int) are not supported\n//   - Once the first optional field (pointer) is encountered, the remaining\n//     fields must also be optional fields (pointers) as required by positional\n//     params\n//   - A field that has a 'jsonrpcdefault' struct tag must be an optional field\n//     (pointer)\n//\n// NOTE: This function only needs to be able to examine the structure of the\n// passed struct, so it does not need to be an actual instance.  Therefore, it\n// is recommended to simply pass a nil pointer cast to the appropriate type.\n// For example, (*FooCmd)(nil).\nfunc RegisterCmd(method string, cmd interface{}, flags UsageFlag) error {\n\tregisterLock.Lock()\n\tdefer registerLock.Unlock()\n\n\tif _, ok := methodToConcreteType[method]; ok {\n\t\tstr := fmt.Sprintf(\"method %q is already registered\", method)\n\t\treturn makeError(ErrDuplicateMethod, str)\n\t}\n\n\t// Ensure that no unrecognized flag bits were specified.\n\tif ^(highestUsageFlagBit-1)&flags != 0 {\n\t\tstr := fmt.Sprintf(\"invalid usage flags specified for method \"+\n\t\t\t\"%s: %v\", method, flags)\n\t\treturn makeError(ErrInvalidUsageFlags, str)\n\t}\n\n\trtp := reflect.TypeOf(cmd)\n\tif rtp.Kind() != reflect.Ptr {\n\t\tstr := fmt.Sprintf(\"type must be *struct not '%s (%s)'\", rtp,\n\t\t\trtp.Kind())\n\t\treturn makeError(ErrInvalidType, str)\n\t}\n\trt := rtp.Elem()\n\tif rt.Kind() != reflect.Struct {\n\t\tstr := fmt.Sprintf(\"type must be *struct not '%s (*%s)'\",\n\t\t\trtp, rt.Kind())\n\t\treturn makeError(ErrInvalidType, str)\n\t}\n\n\t// Enumerate the struct fields to validate them and gather parameter\n\t// information.\n\tnumFields := rt.NumField()\n\tnumOptFields := 0\n\tdefaults := make(map[int]reflect.Value)\n\tfor i := 0; i < numFields; i++ {\n\t\trtf := rt.Field(i)\n\t\tif rtf.Anonymous {\n\t\t\tstr := fmt.Sprintf(\"embedded fields are not supported \"+\n\t\t\t\t\"(field name: %q)\", rtf.Name)\n\t\t\treturn makeError(ErrEmbeddedType, str)\n\t\t}\n\t\tif rtf.PkgPath != \"\" {\n\t\t\tstr := fmt.Sprintf(\"unexported fields are not supported \"+\n\t\t\t\t\"(field name: %q)\", rtf.Name)\n\t\t\treturn makeError(ErrUnexportedField, str)\n\t\t}\n\n\t\t// Disallow types that can't be JSON encoded.  Also, determine\n\t\t// if the field is optional based on it being a pointer.\n\t\tvar isOptional bool\n\t\tswitch kind := rtf.Type.Kind(); kind {\n\t\tcase reflect.Ptr:\n\t\t\tisOptional = true\n\t\t\tkind = rtf.Type.Elem().Kind()\n\t\t\tfallthrough\n\t\tdefault:\n\t\t\tif !isAcceptableKind(kind) {\n\t\t\t\tstr := fmt.Sprintf(\"unsupported field type \"+\n\t\t\t\t\t\"'%s (%s)' (field name %q)\", rtf.Type,\n\t\t\t\t\tbaseKindString(rtf.Type), rtf.Name)\n\t\t\t\treturn makeError(ErrUnsupportedFieldType, str)\n\t\t\t}\n\t\t}\n\n\t\t// Count the optional fields and ensure all fields after the\n\t\t// first optional field are also optional.\n\t\tif isOptional {\n\t\t\tnumOptFields++\n\t\t} else {\n\t\t\tif numOptFields > 0 {\n\t\t\t\tstr := fmt.Sprintf(\"all fields after the first \"+\n\t\t\t\t\t\"optional field must also be optional \"+\n\t\t\t\t\t\"(field name %q)\", rtf.Name)\n\t\t\t\treturn makeError(ErrNonOptionalField, str)\n\t\t\t}\n\t\t}\n\n\t\t// Ensure the default value can be unsmarshalled into the type\n\t\t// and that defaults are only specified for optional fields.\n\t\tif tag := rtf.Tag.Get(\"jsonrpcdefault\"); tag != \"\" {\n\t\t\tif !isOptional {\n\t\t\t\tstr := fmt.Sprintf(\"required fields must not \"+\n\t\t\t\t\t\"have a default specified (field name \"+\n\t\t\t\t\t\"%q)\", rtf.Name)\n\t\t\t\treturn makeError(ErrNonOptionalDefault, str)\n\t\t\t}\n\n\t\t\trvf := reflect.New(rtf.Type.Elem())\n\t\t\terr := json.Unmarshal([]byte(tag), rvf.Interface())\n\t\t\tif err != nil {\n\t\t\t\tstr := fmt.Sprintf(\"default value of %q is \"+\n\t\t\t\t\t\"the wrong type (field name %q)\", tag,\n\t\t\t\t\trtf.Name)\n\t\t\t\treturn makeError(ErrMismatchedDefault, str)\n\t\t\t}\n\t\t\tdefaults[i] = rvf\n\t\t}\n\t}\n\n\t// Update the registration maps.\n\tmethodToConcreteType[method] = rtp\n\tmethodToInfo[method] = methodInfo{\n\t\tmaxParams:    numFields,\n\t\tnumReqParams: numFields - numOptFields,\n\t\tnumOptParams: numOptFields,\n\t\tdefaults:     defaults,\n\t\tflags:        flags,\n\t}\n\tconcreteTypeToMethod[rtp] = method\n\treturn nil\n}\n\n// MustRegisterCmd performs the same function as RegisterCmd except it panics\n// if there is an error.  This should only be called from package init\n// functions.\nfunc MustRegisterCmd(method string, cmd interface{}, flags UsageFlag) {\n\tif err := RegisterCmd(method, cmd, flags); err != nil {\n\t\tpanic(fmt.Sprintf(\"failed to register type %q: %v\\n\", method,\n\t\t\terr))\n\t}\n}\n\n// RegisteredCmdMethods returns a sorted list of methods for all registered\n// commands.\nfunc RegisteredCmdMethods() []string {\n\tregisterLock.Lock()\n\tdefer registerLock.Unlock()\n\n\tmethods := make([]string, 0, len(methodToInfo))\n\tfor k := range methodToInfo {\n\t\tmethods = append(methods, k)\n\t}\n\n\tsort.Sort(sort.StringSlice(methods))\n\treturn methods\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/btcjson/walletsvrcmds.go",
    "content": "// Copyright (c) 2014 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\n// NOTE: This file is intended to house the RPC commands that are supported by\n// a wallet server.\n\npackage btcjson\n\n// AddMultisigAddressCmd defines the addmutisigaddress JSON-RPC command.\ntype AddMultisigAddressCmd struct {\n\tNRequired int\n\tKeys      []string\n\tAccount   *string\n}\n\n// NewAddMultisigAddressCmd returns a new instance which can be used to issue a\n// addmultisigaddress JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewAddMultisigAddressCmd(nRequired int, keys []string, account *string) *AddMultisigAddressCmd {\n\treturn &AddMultisigAddressCmd{\n\t\tNRequired: nRequired,\n\t\tKeys:      keys,\n\t\tAccount:   account,\n\t}\n}\n\n// AddWitnessAddressCmd defines the addwitnessaddress JSON-RPC command.\ntype AddWitnessAddressCmd struct {\n\tAddress string\n}\n\n// NewAddWitnessAddressCmd returns a new instance which can be used to issue a\n// addwitnessaddress JSON-RPC command.\nfunc NewAddWitnessAddressCmd(address string) *AddWitnessAddressCmd {\n\treturn &AddWitnessAddressCmd{\n\t\tAddress: address,\n\t}\n}\n\n// CreateMultisigCmd defines the createmultisig JSON-RPC command.\ntype CreateMultisigCmd struct {\n\tNRequired int\n\tKeys      []string\n}\n\n// NewCreateMultisigCmd returns a new instance which can be used to issue a\n// createmultisig JSON-RPC command.\nfunc NewCreateMultisigCmd(nRequired int, keys []string) *CreateMultisigCmd {\n\treturn &CreateMultisigCmd{\n\t\tNRequired: nRequired,\n\t\tKeys:      keys,\n\t}\n}\n\n// DumpPrivKeyCmd defines the dumpprivkey JSON-RPC command.\ntype DumpPrivKeyCmd struct {\n\tAddress string\n}\n\n// NewDumpPrivKeyCmd returns a new instance which can be used to issue a\n// dumpprivkey JSON-RPC command.\nfunc NewDumpPrivKeyCmd(address string) *DumpPrivKeyCmd {\n\treturn &DumpPrivKeyCmd{\n\t\tAddress: address,\n\t}\n}\n\n// EncryptWalletCmd defines the encryptwallet JSON-RPC command.\ntype EncryptWalletCmd struct {\n\tPassphrase string\n}\n\n// NewEncryptWalletCmd returns a new instance which can be used to issue a\n// encryptwallet JSON-RPC command.\nfunc NewEncryptWalletCmd(passphrase string) *EncryptWalletCmd {\n\treturn &EncryptWalletCmd{\n\t\tPassphrase: passphrase,\n\t}\n}\n\n// EstimateFeeCmd defines the estimatefee JSON-RPC command.\ntype EstimateFeeCmd struct {\n\tNumBlocks int64\n}\n\n// NewEstimateFeeCmd returns a new instance which can be used to issue a\n// estimatefee JSON-RPC command.\nfunc NewEstimateFeeCmd(numBlocks int64) *EstimateFeeCmd {\n\treturn &EstimateFeeCmd{\n\t\tNumBlocks: numBlocks,\n\t}\n}\n\n// EstimatePriorityCmd defines the estimatepriority JSON-RPC command.\ntype EstimatePriorityCmd struct {\n\tNumBlocks int64\n}\n\n// NewEstimatePriorityCmd returns a new instance which can be used to issue a\n// estimatepriority JSON-RPC command.\nfunc NewEstimatePriorityCmd(numBlocks int64) *EstimatePriorityCmd {\n\treturn &EstimatePriorityCmd{\n\t\tNumBlocks: numBlocks,\n\t}\n}\n\n// GetAccountCmd defines the getaccount JSON-RPC command.\ntype GetAccountCmd struct {\n\tAddress string\n}\n\n// NewGetAccountCmd returns a new instance which can be used to issue a\n// getaccount JSON-RPC command.\nfunc NewGetAccountCmd(address string) *GetAccountCmd {\n\treturn &GetAccountCmd{\n\t\tAddress: address,\n\t}\n}\n\n// GetAccountAddressCmd defines the getaccountaddress JSON-RPC command.\ntype GetAccountAddressCmd struct {\n\tAccount string\n}\n\n// NewGetAccountAddressCmd returns a new instance which can be used to issue a\n// getaccountaddress JSON-RPC command.\nfunc NewGetAccountAddressCmd(account string) *GetAccountAddressCmd {\n\treturn &GetAccountAddressCmd{\n\t\tAccount: account,\n\t}\n}\n\n// GetAddressesByAccountCmd defines the getaddressesbyaccount JSON-RPC command.\ntype GetAddressesByAccountCmd struct {\n\tAccount string\n}\n\n// NewGetAddressesByAccountCmd returns a new instance which can be used to issue\n// a getaddressesbyaccount JSON-RPC command.\nfunc NewGetAddressesByAccountCmd(account string) *GetAddressesByAccountCmd {\n\treturn &GetAddressesByAccountCmd{\n\t\tAccount: account,\n\t}\n}\n\n// GetBalanceCmd defines the getbalance JSON-RPC command.\ntype GetBalanceCmd struct {\n\tAccount *string\n\tMinConf *int `jsonrpcdefault:\"1\"`\n}\n\n// NewGetBalanceCmd returns a new instance which can be used to issue a\n// getbalance JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewGetBalanceCmd(account *string, minConf *int) *GetBalanceCmd {\n\treturn &GetBalanceCmd{\n\t\tAccount: account,\n\t\tMinConf: minConf,\n\t}\n}\n\n// GetNewAddressCmd defines the getnewaddress JSON-RPC command.\ntype GetNewAddressCmd struct {\n\tAccount *string\n}\n\n// NewGetNewAddressCmd returns a new instance which can be used to issue a\n// getnewaddress JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewGetNewAddressCmd(account *string) *GetNewAddressCmd {\n\treturn &GetNewAddressCmd{\n\t\tAccount: account,\n\t}\n}\n\n// GetRawChangeAddressCmd defines the getrawchangeaddress JSON-RPC command.\ntype GetRawChangeAddressCmd struct {\n\tAccount *string\n}\n\n// NewGetRawChangeAddressCmd returns a new instance which can be used to issue a\n// getrawchangeaddress JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewGetRawChangeAddressCmd(account *string) *GetRawChangeAddressCmd {\n\treturn &GetRawChangeAddressCmd{\n\t\tAccount: account,\n\t}\n}\n\n// GetReceivedByAccountCmd defines the getreceivedbyaccount JSON-RPC command.\ntype GetReceivedByAccountCmd struct {\n\tAccount string\n\tMinConf *int `jsonrpcdefault:\"1\"`\n}\n\n// NewGetReceivedByAccountCmd returns a new instance which can be used to issue\n// a getreceivedbyaccount JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewGetReceivedByAccountCmd(account string, minConf *int) *GetReceivedByAccountCmd {\n\treturn &GetReceivedByAccountCmd{\n\t\tAccount: account,\n\t\tMinConf: minConf,\n\t}\n}\n\n// GetReceivedByAddressCmd defines the getreceivedbyaddress JSON-RPC command.\ntype GetReceivedByAddressCmd struct {\n\tAddress string\n\tMinConf *int `jsonrpcdefault:\"1\"`\n}\n\n// NewGetReceivedByAddressCmd returns a new instance which can be used to issue\n// a getreceivedbyaddress JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewGetReceivedByAddressCmd(address string, minConf *int) *GetReceivedByAddressCmd {\n\treturn &GetReceivedByAddressCmd{\n\t\tAddress: address,\n\t\tMinConf: minConf,\n\t}\n}\n\n// GetTransactionCmd defines the gettransaction JSON-RPC command.\ntype GetTransactionCmd struct {\n\tTxid             string\n\tIncludeWatchOnly *bool `jsonrpcdefault:\"false\"`\n}\n\n// NewGetTransactionCmd returns a new instance which can be used to issue a\n// gettransaction JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewGetTransactionCmd(txHash string, includeWatchOnly *bool) *GetTransactionCmd {\n\treturn &GetTransactionCmd{\n\t\tTxid:             txHash,\n\t\tIncludeWatchOnly: includeWatchOnly,\n\t}\n}\n\n// GetWalletInfoCmd defines the getwalletinfo JSON-RPC command.\ntype GetWalletInfoCmd struct{}\n\n// NewGetWalletInfoCmd returns a new instance which can be used to issue a\n// getwalletinfo JSON-RPC command.\nfunc NewGetWalletInfoCmd() *GetWalletInfoCmd {\n\treturn &GetWalletInfoCmd{}\n}\n\n// ImportPrivKeyCmd defines the importprivkey JSON-RPC command.\ntype ImportPrivKeyCmd struct {\n\tPrivKey string\n\tLabel   *string\n\tRescan  *bool `jsonrpcdefault:\"true\"`\n}\n\n// NewImportPrivKeyCmd returns a new instance which can be used to issue a\n// importprivkey JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewImportPrivKeyCmd(privKey string, label *string, rescan *bool) *ImportPrivKeyCmd {\n\treturn &ImportPrivKeyCmd{\n\t\tPrivKey: privKey,\n\t\tLabel:   label,\n\t\tRescan:  rescan,\n\t}\n}\n\n// KeyPoolRefillCmd defines the keypoolrefill JSON-RPC command.\ntype KeyPoolRefillCmd struct {\n\tNewSize *uint `jsonrpcdefault:\"100\"`\n}\n\n// NewKeyPoolRefillCmd returns a new instance which can be used to issue a\n// keypoolrefill JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewKeyPoolRefillCmd(newSize *uint) *KeyPoolRefillCmd {\n\treturn &KeyPoolRefillCmd{\n\t\tNewSize: newSize,\n\t}\n}\n\n// ListAccountsCmd defines the listaccounts JSON-RPC command.\ntype ListAccountsCmd struct {\n\tMinConf *int `jsonrpcdefault:\"1\"`\n}\n\n// NewListAccountsCmd returns a new instance which can be used to issue a\n// listaccounts JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewListAccountsCmd(minConf *int) *ListAccountsCmd {\n\treturn &ListAccountsCmd{\n\t\tMinConf: minConf,\n\t}\n}\n\n// ListAddressGroupingsCmd defines the listaddressgroupings JSON-RPC command.\ntype ListAddressGroupingsCmd struct{}\n\n// NewListAddressGroupingsCmd returns a new instance which can be used to issue\n// a listaddressgroupoings JSON-RPC command.\nfunc NewListAddressGroupingsCmd() *ListAddressGroupingsCmd {\n\treturn &ListAddressGroupingsCmd{}\n}\n\n// ListLockUnspentCmd defines the listlockunspent JSON-RPC command.\ntype ListLockUnspentCmd struct{}\n\n// NewListLockUnspentCmd returns a new instance which can be used to issue a\n// listlockunspent JSON-RPC command.\nfunc NewListLockUnspentCmd() *ListLockUnspentCmd {\n\treturn &ListLockUnspentCmd{}\n}\n\n// ListReceivedByAccountCmd defines the listreceivedbyaccount JSON-RPC command.\ntype ListReceivedByAccountCmd struct {\n\tMinConf          *int  `jsonrpcdefault:\"1\"`\n\tIncludeEmpty     *bool `jsonrpcdefault:\"false\"`\n\tIncludeWatchOnly *bool `jsonrpcdefault:\"false\"`\n}\n\n// NewListReceivedByAccountCmd returns a new instance which can be used to issue\n// a listreceivedbyaccount JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewListReceivedByAccountCmd(minConf *int, includeEmpty, includeWatchOnly *bool) *ListReceivedByAccountCmd {\n\treturn &ListReceivedByAccountCmd{\n\t\tMinConf:          minConf,\n\t\tIncludeEmpty:     includeEmpty,\n\t\tIncludeWatchOnly: includeWatchOnly,\n\t}\n}\n\n// ListReceivedByAddressCmd defines the listreceivedbyaddress JSON-RPC command.\ntype ListReceivedByAddressCmd struct {\n\tMinConf          *int  `jsonrpcdefault:\"1\"`\n\tIncludeEmpty     *bool `jsonrpcdefault:\"false\"`\n\tIncludeWatchOnly *bool `jsonrpcdefault:\"false\"`\n}\n\n// NewListReceivedByAddressCmd returns a new instance which can be used to issue\n// a listreceivedbyaddress JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewListReceivedByAddressCmd(minConf *int, includeEmpty, includeWatchOnly *bool) *ListReceivedByAddressCmd {\n\treturn &ListReceivedByAddressCmd{\n\t\tMinConf:          minConf,\n\t\tIncludeEmpty:     includeEmpty,\n\t\tIncludeWatchOnly: includeWatchOnly,\n\t}\n}\n\n// ListSinceBlockCmd defines the listsinceblock JSON-RPC command.\ntype ListSinceBlockCmd struct {\n\tBlockHash           *string\n\tTargetConfirmations *int  `jsonrpcdefault:\"1\"`\n\tIncludeWatchOnly    *bool `jsonrpcdefault:\"false\"`\n}\n\n// NewListSinceBlockCmd returns a new instance which can be used to issue a\n// listsinceblock JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewListSinceBlockCmd(blockHash *string, targetConfirms *int, includeWatchOnly *bool) *ListSinceBlockCmd {\n\treturn &ListSinceBlockCmd{\n\t\tBlockHash:           blockHash,\n\t\tTargetConfirmations: targetConfirms,\n\t\tIncludeWatchOnly:    includeWatchOnly,\n\t}\n}\n\n// ListTransactionsCmd defines the listtransactions JSON-RPC command.\ntype ListTransactionsCmd struct {\n\tAccount          *string\n\tCount            *int  `jsonrpcdefault:\"10\"`\n\tFrom             *int  `jsonrpcdefault:\"0\"`\n\tIncludeWatchOnly *bool `jsonrpcdefault:\"false\"`\n}\n\n// NewListTransactionsCmd returns a new instance which can be used to issue a\n// listtransactions JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewListTransactionsCmd(account *string, count, from *int, includeWatchOnly *bool) *ListTransactionsCmd {\n\treturn &ListTransactionsCmd{\n\t\tAccount:          account,\n\t\tCount:            count,\n\t\tFrom:             from,\n\t\tIncludeWatchOnly: includeWatchOnly,\n\t}\n}\n\n// ListUnspentCmd defines the listunspent JSON-RPC command.\ntype ListUnspentCmd struct {\n\tMinConf   *int `jsonrpcdefault:\"1\"`\n\tMaxConf   *int `jsonrpcdefault:\"9999999\"`\n\tAddresses *[]string\n}\n\n// NewListUnspentCmd returns a new instance which can be used to issue a\n// listunspent JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewListUnspentCmd(minConf, maxConf *int, addresses *[]string) *ListUnspentCmd {\n\treturn &ListUnspentCmd{\n\t\tMinConf:   minConf,\n\t\tMaxConf:   maxConf,\n\t\tAddresses: addresses,\n\t}\n}\n\n// LockUnspentCmd defines the lockunspent JSON-RPC command.\ntype LockUnspentCmd struct {\n\tUnlock       bool\n\tTransactions []TransactionInput\n}\n\n// NewLockUnspentCmd returns a new instance which can be used to issue a\n// lockunspent JSON-RPC command.\nfunc NewLockUnspentCmd(unlock bool, transactions []TransactionInput) *LockUnspentCmd {\n\treturn &LockUnspentCmd{\n\t\tUnlock:       unlock,\n\t\tTransactions: transactions,\n\t}\n}\n\n// MoveCmd defines the move JSON-RPC command.\ntype MoveCmd struct {\n\tFromAccount string\n\tToAccount   string\n\tAmount      float64 // In BTC\n\tMinConf     *int    `jsonrpcdefault:\"1\"`\n\tComment     *string\n}\n\n// NewMoveCmd returns a new instance which can be used to issue a move JSON-RPC\n// command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewMoveCmd(fromAccount, toAccount string, amount float64, minConf *int, comment *string) *MoveCmd {\n\treturn &MoveCmd{\n\t\tFromAccount: fromAccount,\n\t\tToAccount:   toAccount,\n\t\tAmount:      amount,\n\t\tMinConf:     minConf,\n\t\tComment:     comment,\n\t}\n}\n\n// SendFromCmd defines the sendfrom JSON-RPC command.\ntype SendFromCmd struct {\n\tFromAccount string\n\tToAddress   string\n\tAmount      float64 // In BTC\n\tMinConf     *int    `jsonrpcdefault:\"1\"`\n\tComment     *string\n\tCommentTo   *string\n}\n\n// NewSendFromCmd returns a new instance which can be used to issue a sendfrom\n// JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewSendFromCmd(fromAccount, toAddress string, amount float64, minConf *int, comment, commentTo *string) *SendFromCmd {\n\treturn &SendFromCmd{\n\t\tFromAccount: fromAccount,\n\t\tToAddress:   toAddress,\n\t\tAmount:      amount,\n\t\tMinConf:     minConf,\n\t\tComment:     comment,\n\t\tCommentTo:   commentTo,\n\t}\n}\n\n// SendManyCmd defines the sendmany JSON-RPC command.\ntype SendManyCmd struct {\n\tFromAccount string\n\tAmounts     map[string]float64 `jsonrpcusage:\"{\\\"address\\\":amount,...}\"` // In BTC\n\tMinConf     *int               `jsonrpcdefault:\"1\"`\n\tComment     *string\n}\n\n// NewSendManyCmd returns a new instance which can be used to issue a sendmany\n// JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewSendManyCmd(fromAccount string, amounts map[string]float64, minConf *int, comment *string) *SendManyCmd {\n\treturn &SendManyCmd{\n\t\tFromAccount: fromAccount,\n\t\tAmounts:     amounts,\n\t\tMinConf:     minConf,\n\t\tComment:     comment,\n\t}\n}\n\n// SendToAddressCmd defines the sendtoaddress JSON-RPC command.\ntype SendToAddressCmd struct {\n\tAddress   string\n\tAmount    float64\n\tComment   *string\n\tCommentTo *string\n}\n\n// NewSendToAddressCmd returns a new instance which can be used to issue a\n// sendtoaddress JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewSendToAddressCmd(address string, amount float64, comment, commentTo *string) *SendToAddressCmd {\n\treturn &SendToAddressCmd{\n\t\tAddress:   address,\n\t\tAmount:    amount,\n\t\tComment:   comment,\n\t\tCommentTo: commentTo,\n\t}\n}\n\n// SetAccountCmd defines the setaccount JSON-RPC command.\ntype SetAccountCmd struct {\n\tAddress string\n\tAccount string\n}\n\n// NewSetAccountCmd returns a new instance which can be used to issue a\n// setaccount JSON-RPC command.\nfunc NewSetAccountCmd(address, account string) *SetAccountCmd {\n\treturn &SetAccountCmd{\n\t\tAddress: address,\n\t\tAccount: account,\n\t}\n}\n\n// SetTxFeeCmd defines the settxfee JSON-RPC command.\ntype SetTxFeeCmd struct {\n\tAmount float64 // In BTC\n}\n\n// NewSetTxFeeCmd returns a new instance which can be used to issue a settxfee\n// JSON-RPC command.\nfunc NewSetTxFeeCmd(amount float64) *SetTxFeeCmd {\n\treturn &SetTxFeeCmd{\n\t\tAmount: amount,\n\t}\n}\n\n// SignMessageCmd defines the signmessage JSON-RPC command.\ntype SignMessageCmd struct {\n\tAddress string\n\tMessage string\n}\n\n// NewSignMessageCmd returns a new instance which can be used to issue a\n// signmessage JSON-RPC command.\nfunc NewSignMessageCmd(address, message string) *SignMessageCmd {\n\treturn &SignMessageCmd{\n\t\tAddress: address,\n\t\tMessage: message,\n\t}\n}\n\n// RawTxInput models the data needed for raw transaction input that is used in\n// the SignRawTransactionCmd struct.\ntype RawTxInput struct {\n\tTxid         string `json:\"txid\"`\n\tVout         uint32 `json:\"vout\"`\n\tScriptPubKey string `json:\"scriptPubKey\"`\n\tRedeemScript string `json:\"redeemScript\"`\n}\n\n// SignRawTransactionCmd defines the signrawtransaction JSON-RPC command.\ntype SignRawTransactionCmd struct {\n\tRawTx    string\n\tInputs   *[]RawTxInput\n\tPrivKeys *[]string\n\tFlags    *string `jsonrpcdefault:\"\\\"ALL\\\"\"`\n}\n\n// NewSignRawTransactionCmd returns a new instance which can be used to issue a\n// signrawtransaction JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewSignRawTransactionCmd(hexEncodedTx string, inputs *[]RawTxInput, privKeys *[]string, flags *string) *SignRawTransactionCmd {\n\treturn &SignRawTransactionCmd{\n\t\tRawTx:    hexEncodedTx,\n\t\tInputs:   inputs,\n\t\tPrivKeys: privKeys,\n\t\tFlags:    flags,\n\t}\n}\n\n// WalletLockCmd defines the walletlock JSON-RPC command.\ntype WalletLockCmd struct{}\n\n// NewWalletLockCmd returns a new instance which can be used to issue a\n// walletlock JSON-RPC command.\nfunc NewWalletLockCmd() *WalletLockCmd {\n\treturn &WalletLockCmd{}\n}\n\n// WalletPassphraseCmd defines the walletpassphrase JSON-RPC command.\ntype WalletPassphraseCmd struct {\n\tPassphrase string\n\tTimeout    int64\n}\n\n// NewWalletPassphraseCmd returns a new instance which can be used to issue a\n// walletpassphrase JSON-RPC command.\nfunc NewWalletPassphraseCmd(passphrase string, timeout int64) *WalletPassphraseCmd {\n\treturn &WalletPassphraseCmd{\n\t\tPassphrase: passphrase,\n\t\tTimeout:    timeout,\n\t}\n}\n\n// WalletPassphraseChangeCmd defines the walletpassphrase JSON-RPC command.\ntype WalletPassphraseChangeCmd struct {\n\tOldPassphrase string\n\tNewPassphrase string\n}\n\n// NewWalletPassphraseChangeCmd returns a new instance which can be used to\n// issue a walletpassphrasechange JSON-RPC command.\nfunc NewWalletPassphraseChangeCmd(oldPassphrase, newPassphrase string) *WalletPassphraseChangeCmd {\n\treturn &WalletPassphraseChangeCmd{\n\t\tOldPassphrase: oldPassphrase,\n\t\tNewPassphrase: newPassphrase,\n\t}\n}\n\nfunc init() {\n\t// The commands in this file are only usable with a wallet server.\n\tflags := UFWalletOnly\n\n\tMustRegisterCmd(\"addmultisigaddress\", (*AddMultisigAddressCmd)(nil), flags)\n\tMustRegisterCmd(\"addwitnessaddress\", (*AddWitnessAddressCmd)(nil), flags)\n\tMustRegisterCmd(\"createmultisig\", (*CreateMultisigCmd)(nil), flags)\n\tMustRegisterCmd(\"dumpprivkey\", (*DumpPrivKeyCmd)(nil), flags)\n\tMustRegisterCmd(\"encryptwallet\", (*EncryptWalletCmd)(nil), flags)\n\tMustRegisterCmd(\"estimatefee\", (*EstimateFeeCmd)(nil), flags)\n\tMustRegisterCmd(\"estimatepriority\", (*EstimatePriorityCmd)(nil), flags)\n\tMustRegisterCmd(\"getaccount\", (*GetAccountCmd)(nil), flags)\n\tMustRegisterCmd(\"getaccountaddress\", (*GetAccountAddressCmd)(nil), flags)\n\tMustRegisterCmd(\"getaddressesbyaccount\", (*GetAddressesByAccountCmd)(nil), flags)\n\tMustRegisterCmd(\"getbalance\", (*GetBalanceCmd)(nil), flags)\n\tMustRegisterCmd(\"getnewaddress\", (*GetNewAddressCmd)(nil), flags)\n\tMustRegisterCmd(\"getrawchangeaddress\", (*GetRawChangeAddressCmd)(nil), flags)\n\tMustRegisterCmd(\"getreceivedbyaccount\", (*GetReceivedByAccountCmd)(nil), flags)\n\tMustRegisterCmd(\"getreceivedbyaddress\", (*GetReceivedByAddressCmd)(nil), flags)\n\tMustRegisterCmd(\"gettransaction\", (*GetTransactionCmd)(nil), flags)\n\tMustRegisterCmd(\"getwalletinfo\", (*GetWalletInfoCmd)(nil), flags)\n\tMustRegisterCmd(\"importprivkey\", (*ImportPrivKeyCmd)(nil), flags)\n\tMustRegisterCmd(\"keypoolrefill\", (*KeyPoolRefillCmd)(nil), flags)\n\tMustRegisterCmd(\"listaccounts\", (*ListAccountsCmd)(nil), flags)\n\tMustRegisterCmd(\"listaddressgroupings\", (*ListAddressGroupingsCmd)(nil), flags)\n\tMustRegisterCmd(\"listlockunspent\", (*ListLockUnspentCmd)(nil), flags)\n\tMustRegisterCmd(\"listreceivedbyaccount\", (*ListReceivedByAccountCmd)(nil), flags)\n\tMustRegisterCmd(\"listreceivedbyaddress\", (*ListReceivedByAddressCmd)(nil), flags)\n\tMustRegisterCmd(\"listsinceblock\", (*ListSinceBlockCmd)(nil), flags)\n\tMustRegisterCmd(\"listtransactions\", (*ListTransactionsCmd)(nil), flags)\n\tMustRegisterCmd(\"listunspent\", (*ListUnspentCmd)(nil), flags)\n\tMustRegisterCmd(\"lockunspent\", (*LockUnspentCmd)(nil), flags)\n\tMustRegisterCmd(\"move\", (*MoveCmd)(nil), flags)\n\tMustRegisterCmd(\"sendfrom\", (*SendFromCmd)(nil), flags)\n\tMustRegisterCmd(\"sendmany\", (*SendManyCmd)(nil), flags)\n\tMustRegisterCmd(\"sendtoaddress\", (*SendToAddressCmd)(nil), flags)\n\tMustRegisterCmd(\"setaccount\", (*SetAccountCmd)(nil), flags)\n\tMustRegisterCmd(\"settxfee\", (*SetTxFeeCmd)(nil), flags)\n\tMustRegisterCmd(\"signmessage\", (*SignMessageCmd)(nil), flags)\n\tMustRegisterCmd(\"signrawtransaction\", (*SignRawTransactionCmd)(nil), flags)\n\tMustRegisterCmd(\"walletlock\", (*WalletLockCmd)(nil), flags)\n\tMustRegisterCmd(\"walletpassphrase\", (*WalletPassphraseCmd)(nil), flags)\n\tMustRegisterCmd(\"walletpassphrasechange\", (*WalletPassphraseChangeCmd)(nil), flags)\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/btcjson/walletsvrresults.go",
    "content": "// Copyright (c) 2014 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcjson\n\n// GetTransactionDetailsResult models the details data from the gettransaction command.\n//\n// This models the \"short\" version of the ListTransactionsResult type, which\n// excludes fields common to the transaction.  These common fields are instead\n// part of the GetTransactionResult.\ntype GetTransactionDetailsResult struct {\n\tAccount           string   `json:\"account\"`\n\tAddress           string   `json:\"address,omitempty\"`\n\tAmount            float64  `json:\"amount\"`\n\tCategory          string   `json:\"category\"`\n\tInvolvesWatchOnly bool     `json:\"involveswatchonly,omitempty\"`\n\tFee               *float64 `json:\"fee,omitempty\"`\n\tVout              uint32   `json:\"vout\"`\n}\n\n// GetTransactionResult models the data from the gettransaction command.\ntype GetTransactionResult struct {\n\tAmount          float64                       `json:\"amount\"`\n\tFee             float64                       `json:\"fee,omitempty\"`\n\tConfirmations   int64                         `json:\"confirmations\"`\n\tBlockHash       string                        `json:\"blockhash\"`\n\tBlockIndex      int64                         `json:\"blockindex\"`\n\tBlockTime       int64                         `json:\"blocktime\"`\n\tTxID            string                        `json:\"txid\"`\n\tWalletConflicts []string                      `json:\"walletconflicts\"`\n\tTime            int64                         `json:\"time\"`\n\tTimeReceived    int64                         `json:\"timereceived\"`\n\tDetails         []GetTransactionDetailsResult `json:\"details\"`\n\tHex             string                        `json:\"hex\"`\n}\n\n// InfoWalletResult models the data returned by the wallet server getinfo\n// command.\ntype InfoWalletResult struct {\n\tVersion         int32   `json:\"version\"`\n\tProtocolVersion int32   `json:\"protocolversion\"`\n\tWalletVersion   int32   `json:\"walletversion\"`\n\tBalance         float64 `json:\"balance\"`\n\tBlocks          int32   `json:\"blocks\"`\n\tTimeOffset      int64   `json:\"timeoffset\"`\n\tConnections     int32   `json:\"connections\"`\n\tProxy           string  `json:\"proxy\"`\n\tDifficulty      float64 `json:\"difficulty\"`\n\tTestNet         bool    `json:\"testnet\"`\n\tKeypoolOldest   int64   `json:\"keypoololdest\"`\n\tKeypoolSize     int32   `json:\"keypoolsize\"`\n\tUnlockedUntil   int64   `json:\"unlocked_until\"`\n\tPaytxFee        float64 `json:\"paytxfee\"`\n\tRelayFee        float64 `json:\"relayfee\"`\n\tErrors          string  `json:\"errors\"`\n}\n\n// ListTransactionsResult models the data from the listtransactions command.\ntype ListTransactionsResult struct {\n\tAbandoned         bool     `json:\"abandoned\"`\n\tAccount           string   `json:\"account\"`\n\tAddress           string   `json:\"address,omitempty\"`\n\tAmount            float64  `json:\"amount\"`\n\tBIP125Replaceable string   `json:\"bip125-replaceable,omitempty\"`\n\tBlockHash         string   `json:\"blockhash,omitempty\"`\n\tBlockIndex        *int64   `json:\"blockindex,omitempty\"`\n\tBlockTime         int64    `json:\"blocktime,omitempty\"`\n\tCategory          string   `json:\"category\"`\n\tConfirmations     int64    `json:\"confirmations\"`\n\tFee               *float64 `json:\"fee,omitempty\"`\n\tGenerated         bool     `json:\"generated,omitempty\"`\n\tInvolvesWatchOnly bool     `json:\"involveswatchonly,omitempty\"`\n\tTime              int64    `json:\"time\"`\n\tTimeReceived      int64    `json:\"timereceived\"`\n\tTrusted           bool     `json:\"trusted\"`\n\tTxID              string   `json:\"txid\"`\n\tVout              uint32   `json:\"vout\"`\n\tWalletConflicts   []string `json:\"walletconflicts\"`\n\tComment           string   `json:\"comment,omitempty\"`\n\tOtherAccount      string   `json:\"otheraccount,omitempty\"`\n}\n\n// ListReceivedByAccountResult models the data from the listreceivedbyaccount\n// command.\ntype ListReceivedByAccountResult struct {\n\tAccount       string  `json:\"account\"`\n\tAmount        float64 `json:\"amount\"`\n\tConfirmations uint64  `json:\"confirmations\"`\n}\n\n// ListReceivedByAddressResult models the data from the listreceivedbyaddress\n// command.\ntype ListReceivedByAddressResult struct {\n\tAccount           string   `json:\"account\"`\n\tAddress           string   `json:\"address\"`\n\tAmount            float64  `json:\"amount\"`\n\tConfirmations     uint64   `json:\"confirmations\"`\n\tTxIDs             []string `json:\"txids,omitempty\"`\n\tInvolvesWatchonly bool     `json:\"involvesWatchonly,omitempty\"`\n}\n\n// ListSinceBlockResult models the data from the listsinceblock command.\ntype ListSinceBlockResult struct {\n\tTransactions []ListTransactionsResult `json:\"transactions\"`\n\tLastBlock    string                   `json:\"lastblock\"`\n}\n\n// ListUnspentResult models a successful response from the listunspent request.\ntype ListUnspentResult struct {\n\tTxID          string  `json:\"txid\"`\n\tVout          uint32  `json:\"vout\"`\n\tAddress       string  `json:\"address\"`\n\tAccount       string  `json:\"account\"`\n\tScriptPubKey  string  `json:\"scriptPubKey\"`\n\tRedeemScript  string  `json:\"redeemScript,omitempty\"`\n\tAmount        float64 `json:\"amount\"`\n\tConfirmations int64   `json:\"confirmations\"`\n\tSpendable     bool    `json:\"spendable\"`\n}\n\n// SignRawTransactionError models the data that contains script verification\n// errors from the signrawtransaction request.\ntype SignRawTransactionError struct {\n\tTxID      string `json:\"txid\"`\n\tVout      uint32 `json:\"vout\"`\n\tScriptSig string `json:\"scriptSig\"`\n\tSequence  uint32 `json:\"sequence\"`\n\tError     string `json:\"error\"`\n}\n\n// SignRawTransactionResult models the data from the signrawtransaction\n// command.\ntype SignRawTransactionResult struct {\n\tHex      string                    `json:\"hex\"`\n\tComplete bool                      `json:\"complete\"`\n\tErrors   []SignRawTransactionError `json:\"errors,omitempty\"`\n}\n\n// ValidateAddressWalletResult models the data returned by the wallet server\n// validateaddress command.\ntype ValidateAddressWalletResult struct {\n\tIsValid      bool     `json:\"isvalid\"`\n\tAddress      string   `json:\"address,omitempty\"`\n\tIsMine       bool     `json:\"ismine,omitempty\"`\n\tIsWatchOnly  bool     `json:\"iswatchonly,omitempty\"`\n\tIsScript     bool     `json:\"isscript,omitempty\"`\n\tPubKey       string   `json:\"pubkey,omitempty\"`\n\tIsCompressed bool     `json:\"iscompressed,omitempty\"`\n\tAccount      string   `json:\"account,omitempty\"`\n\tAddresses    []string `json:\"addresses,omitempty\"`\n\tHex          string   `json:\"hex,omitempty\"`\n\tScript       string   `json:\"script,omitempty\"`\n\tSigsRequired int32    `json:\"sigsrequired,omitempty\"`\n}\n\n// GetBestBlockResult models the data from the getbestblock command.\ntype GetBestBlockResult struct {\n\tHash   string `json:\"hash\"`\n\tHeight int32  `json:\"height\"`\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/btcjson/walletsvrwscmds.go",
    "content": "// Copyright (c) 2014 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcjson\n\n// NOTE: This file is intended to house the RPC commands that are supported by\n// a wallet server, but are only available via websockets.\n\n// CreateEncryptedWalletCmd defines the createencryptedwallet JSON-RPC command.\ntype CreateEncryptedWalletCmd struct {\n\tPassphrase string\n}\n\n// NewCreateEncryptedWalletCmd returns a new instance which can be used to issue\n// a createencryptedwallet JSON-RPC command.\nfunc NewCreateEncryptedWalletCmd(passphrase string) *CreateEncryptedWalletCmd {\n\treturn &CreateEncryptedWalletCmd{\n\t\tPassphrase: passphrase,\n\t}\n}\n\n// ExportWatchingWalletCmd defines the exportwatchingwallet JSON-RPC command.\ntype ExportWatchingWalletCmd struct {\n\tAccount  *string\n\tDownload *bool `jsonrpcdefault:\"false\"`\n}\n\n// NewExportWatchingWalletCmd returns a new instance which can be used to issue\n// a exportwatchingwallet JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewExportWatchingWalletCmd(account *string, download *bool) *ExportWatchingWalletCmd {\n\treturn &ExportWatchingWalletCmd{\n\t\tAccount:  account,\n\t\tDownload: download,\n\t}\n}\n\n// GetUnconfirmedBalanceCmd defines the getunconfirmedbalance JSON-RPC command.\ntype GetUnconfirmedBalanceCmd struct {\n\tAccount *string\n}\n\n// NewGetUnconfirmedBalanceCmd returns a new instance which can be used to issue\n// a getunconfirmedbalance JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewGetUnconfirmedBalanceCmd(account *string) *GetUnconfirmedBalanceCmd {\n\treturn &GetUnconfirmedBalanceCmd{\n\t\tAccount: account,\n\t}\n}\n\n// ListAddressTransactionsCmd defines the listaddresstransactions JSON-RPC\n// command.\ntype ListAddressTransactionsCmd struct {\n\tAddresses []string\n\tAccount   *string\n}\n\n// NewListAddressTransactionsCmd returns a new instance which can be used to\n// issue a listaddresstransactions JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewListAddressTransactionsCmd(addresses []string, account *string) *ListAddressTransactionsCmd {\n\treturn &ListAddressTransactionsCmd{\n\t\tAddresses: addresses,\n\t\tAccount:   account,\n\t}\n}\n\n// ListAllTransactionsCmd defines the listalltransactions JSON-RPC command.\ntype ListAllTransactionsCmd struct {\n\tAccount *string\n}\n\n// NewListAllTransactionsCmd returns a new instance which can be used to issue a\n// listalltransactions JSON-RPC command.\n//\n// The parameters which are pointers indicate they are optional.  Passing nil\n// for optional parameters will use the default value.\nfunc NewListAllTransactionsCmd(account *string) *ListAllTransactionsCmd {\n\treturn &ListAllTransactionsCmd{\n\t\tAccount: account,\n\t}\n}\n\n// RecoverAddressesCmd defines the recoveraddresses JSON-RPC command.\ntype RecoverAddressesCmd struct {\n\tAccount string\n\tN       int\n}\n\n// NewRecoverAddressesCmd returns a new instance which can be used to issue a\n// recoveraddresses JSON-RPC command.\nfunc NewRecoverAddressesCmd(account string, n int) *RecoverAddressesCmd {\n\treturn &RecoverAddressesCmd{\n\t\tAccount: account,\n\t\tN:       n,\n\t}\n}\n\n// WalletIsLockedCmd defines the walletislocked JSON-RPC command.\ntype WalletIsLockedCmd struct{}\n\n// NewWalletIsLockedCmd returns a new instance which can be used to issue a\n// walletislocked JSON-RPC command.\nfunc NewWalletIsLockedCmd() *WalletIsLockedCmd {\n\treturn &WalletIsLockedCmd{}\n}\n\nfunc init() {\n\t// The commands in this file are only usable with a wallet server via\n\t// websockets.\n\tflags := UFWalletOnly | UFWebsocketOnly\n\n\tMustRegisterCmd(\"createencryptedwallet\", (*CreateEncryptedWalletCmd)(nil), flags)\n\tMustRegisterCmd(\"exportwatchingwallet\", (*ExportWatchingWalletCmd)(nil), flags)\n\tMustRegisterCmd(\"getunconfirmedbalance\", (*GetUnconfirmedBalanceCmd)(nil), flags)\n\tMustRegisterCmd(\"listaddresstransactions\", (*ListAddressTransactionsCmd)(nil), flags)\n\tMustRegisterCmd(\"listalltransactions\", (*ListAllTransactionsCmd)(nil), flags)\n\tMustRegisterCmd(\"recoveraddresses\", (*RecoverAddressesCmd)(nil), flags)\n\tMustRegisterCmd(\"walletislocked\", (*WalletIsLockedCmd)(nil), flags)\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/btcjson/walletsvrwsntfns.go",
    "content": "// Copyright (c) 2014 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\n// NOTE: This file is intended to house the RPC websocket notifications that are\n// supported by a wallet server.\n\npackage btcjson\n\nconst (\n\t// AccountBalanceNtfnMethod is the method used for account balance\n\t// notifications.\n\tAccountBalanceNtfnMethod = \"accountbalance\"\n\n\t// BtcdConnectedNtfnMethod is the method used for notifications when\n\t// a wallet server is connected to a chain server.\n\tBtcdConnectedNtfnMethod = \"btcdconnected\"\n\n\t// WalletLockStateNtfnMethod is the method used to notify the lock state\n\t// of a wallet has changed.\n\tWalletLockStateNtfnMethod = \"walletlockstate\"\n\n\t// NewTxNtfnMethod is the method used to notify that a wallet server has\n\t// added a new transaction to the transaction store.\n\tNewTxNtfnMethod = \"newtx\"\n)\n\n// AccountBalanceNtfn defines the accountbalance JSON-RPC notification.\ntype AccountBalanceNtfn struct {\n\tAccount   string\n\tBalance   float64 // In BTC\n\tConfirmed bool    // Whether Balance is confirmed or unconfirmed.\n}\n\n// NewAccountBalanceNtfn returns a new instance which can be used to issue an\n// accountbalance JSON-RPC notification.\nfunc NewAccountBalanceNtfn(account string, balance float64, confirmed bool) *AccountBalanceNtfn {\n\treturn &AccountBalanceNtfn{\n\t\tAccount:   account,\n\t\tBalance:   balance,\n\t\tConfirmed: confirmed,\n\t}\n}\n\n// BtcdConnectedNtfn defines the btcdconnected JSON-RPC notification.\ntype BtcdConnectedNtfn struct {\n\tConnected bool\n}\n\n// NewBtcdConnectedNtfn returns a new instance which can be used to issue a\n// btcdconnected JSON-RPC notification.\nfunc NewBtcdConnectedNtfn(connected bool) *BtcdConnectedNtfn {\n\treturn &BtcdConnectedNtfn{\n\t\tConnected: connected,\n\t}\n}\n\n// WalletLockStateNtfn defines the walletlockstate JSON-RPC notification.\ntype WalletLockStateNtfn struct {\n\tLocked bool\n}\n\n// NewWalletLockStateNtfn returns a new instance which can be used to issue a\n// walletlockstate JSON-RPC notification.\nfunc NewWalletLockStateNtfn(locked bool) *WalletLockStateNtfn {\n\treturn &WalletLockStateNtfn{\n\t\tLocked: locked,\n\t}\n}\n\n// NewTxNtfn defines the newtx JSON-RPC notification.\ntype NewTxNtfn struct {\n\tAccount string\n\tDetails ListTransactionsResult\n}\n\n// NewNewTxNtfn returns a new instance which can be used to issue a newtx\n// JSON-RPC notification.\nfunc NewNewTxNtfn(account string, details ListTransactionsResult) *NewTxNtfn {\n\treturn &NewTxNtfn{\n\t\tAccount: account,\n\t\tDetails: details,\n\t}\n}\n\nfunc init() {\n\t// The commands in this file are only usable with a wallet server via\n\t// websockets and are notifications.\n\tflags := UFWalletOnly | UFWebsocketOnly | UFNotification\n\n\tMustRegisterCmd(AccountBalanceNtfnMethod, (*AccountBalanceNtfn)(nil), flags)\n\tMustRegisterCmd(BtcdConnectedNtfnMethod, (*BtcdConnectedNtfn)(nil), flags)\n\tMustRegisterCmd(WalletLockStateNtfnMethod, (*WalletLockStateNtfn)(nil), flags)\n\tMustRegisterCmd(NewTxNtfnMethod, (*NewTxNtfn)(nil), flags)\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/chaincfg/README.md",
    "content": "chaincfg\n========\n\n[![Build Status](http://img.shields.io/travis/btcsuite/btcd.svg)](https://travis-ci.org/btcsuite/btcd)\n[![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org)\n[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](http://godoc.org/github.com/btcsuite/btcd/chaincfg)\n\nPackage chaincfg defines chain configuration parameters for the three standard\nBitcoin networks and provides the ability for callers to define their own custom\nBitcoin networks.\n\nAlthough this package was primarily written for btcd, it has intentionally been\ndesigned so it can be used as a standalone package for any projects needing to\nuse parameters for the standard Bitcoin networks or for projects needing to\ndefine their own network.\n\n## Sample Use\n\n```Go\npackage main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"log\"\n\n\t\"github.com/btcsuite/btcutil\"\n\t\"github.com/btcsuite/btcd/chaincfg\"\n)\n\nvar testnet = flag.Bool(\"testnet\", false, \"operate on the testnet Bitcoin network\")\n\n// By default (without -testnet), use mainnet.\nvar chainParams = &chaincfg.MainNetParams\n\nfunc main() {\n\tflag.Parse()\n\n\t// Modify active network parameters if operating on testnet.\n\tif *testnet {\n\t\tchainParams = &chaincfg.TestNet3Params\n\t}\n\n\t// later...\n\n\t// Create and print new payment address, specific to the active network.\n\tpubKeyHash := make([]byte, 20)\n\taddr, err := btcutil.NewAddressPubKeyHash(pubKeyHash, chainParams)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tfmt.Println(addr)\n}\n```\n\n## Installation and Updating\n\n```bash\n$ go get -u github.com/btcsuite/btcd/chaincfg\n```\n\n## GPG Verification Key\n\nAll official release tags are signed by Conformal so users can ensure the code\nhas not been tampered with and is coming from the btcsuite developers.  To\nverify the signature perform the following:\n\n- Download the public key from the Conformal website at\n  https://opensource.conformal.com/GIT-GPG-KEY-conformal.txt\n\n- Import the public key into your GPG keyring:\n  ```bash\n  gpg --import GIT-GPG-KEY-conformal.txt\n  ```\n\n- Verify the release tag with the following command where `TAG_NAME` is a\n  placeholder for the specific tag:\n  ```bash\n  git tag -v TAG_NAME\n  ```\n\n## License\n\nPackage chaincfg is licensed under the [copyfree](http://copyfree.org) ISC\nLicense.\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/chaincfg/chainhash/README.md",
    "content": "chainhash\n=========\n\n[![Build Status](http://img.shields.io/travis/btcsuite/btcd.svg)](https://travis-ci.org/btcsuite/btcd)\n[![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org)\n[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](http://godoc.org/github.com/btcsuite/btcd/chaincfg/chainhash)\n=======\n\nchainhash provides a generic hash type and associated functions that allows the\nspecific hash algorithm to be abstracted.\n\n## Installation and Updating\n\n```bash\n$ go get -u github.com/btcsuite/btcd/chaincfg/chainhash\n```\n\n## GPG Verification Key\n\nAll official release tags are signed by Conformal so users can ensure the code\nhas not been tampered with and is coming from the btcsuite developers.  To\nverify the signature perform the following:\n\n- Download the public key from the Conformal website at\n  https://opensource.conformal.com/GIT-GPG-KEY-conformal.txt\n\n- Import the public key into your GPG keyring:\n  ```bash\n  gpg --import GIT-GPG-KEY-conformal.txt\n  ```\n\n- Verify the release tag with the following command where `TAG_NAME` is a\n  placeholder for the specific tag:\n  ```bash\n  git tag -v TAG_NAME\n  ```\n\n## License\n\nPackage chainhash is licensed under the [copyfree](http://copyfree.org) ISC\nLicense.\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/chaincfg/chainhash/doc.go",
    "content": "// Package chainhash provides abstracted hash functionality.\n//\n// This package provides a generic hash type and associated functions that\n// allows the specific hash algorithm to be abstracted.\npackage chainhash\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/chaincfg/chainhash/hash.go",
    "content": "// Copyright (c) 2013-2016 The btcsuite developers\n// Copyright (c) 2015 The Decred developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage chainhash\n\nimport (\n\t\"encoding/hex\"\n\t\"fmt\"\n)\n\n// HashSize of array used to store hashes.  See Hash.\nconst HashSize = 32\n\n// MaxHashStringSize is the maximum length of a Hash hash string.\nconst MaxHashStringSize = HashSize * 2\n\n// ErrHashStrSize describes an error that indicates the caller specified a hash\n// string that has too many characters.\nvar ErrHashStrSize = fmt.Errorf(\"max hash string length is %v bytes\", MaxHashStringSize)\n\n// Hash is used in several of the bitcoin messages and common structures.  It\n// typically represents the double sha256 of data.\ntype Hash [HashSize]byte\n\n// String returns the Hash as the hexadecimal string of the byte-reversed\n// hash.\nfunc (hash Hash) String() string {\n\tfor i := 0; i < HashSize/2; i++ {\n\t\thash[i], hash[HashSize-1-i] = hash[HashSize-1-i], hash[i]\n\t}\n\treturn hex.EncodeToString(hash[:])\n}\n\n// CloneBytes returns a copy of the bytes which represent the hash as a byte\n// slice.\n//\n// NOTE: It is generally cheaper to just slice the hash directly thereby reusing\n// the same bytes rather than calling this method.\nfunc (hash *Hash) CloneBytes() []byte {\n\tnewHash := make([]byte, HashSize)\n\tcopy(newHash, hash[:])\n\n\treturn newHash\n}\n\n// SetBytes sets the bytes which represent the hash.  An error is returned if\n// the number of bytes passed in is not HashSize.\nfunc (hash *Hash) SetBytes(newHash []byte) error {\n\tnhlen := len(newHash)\n\tif nhlen != HashSize {\n\t\treturn fmt.Errorf(\"invalid hash length of %v, want %v\", nhlen,\n\t\t\tHashSize)\n\t}\n\tcopy(hash[:], newHash)\n\n\treturn nil\n}\n\n// IsEqual returns true if target is the same as hash.\nfunc (hash *Hash) IsEqual(target *Hash) bool {\n\tif hash == nil && target == nil {\n\t\treturn true\n\t}\n\tif hash == nil || target == nil {\n\t\treturn false\n\t}\n\treturn *hash == *target\n}\n\n// NewHash returns a new Hash from a byte slice.  An error is returned if\n// the number of bytes passed in is not HashSize.\nfunc NewHash(newHash []byte) (*Hash, error) {\n\tvar sh Hash\n\terr := sh.SetBytes(newHash)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &sh, err\n}\n\n// NewHashFromStr creates a Hash from a hash string.  The string should be\n// the hexadecimal string of a byte-reversed hash, but any missing characters\n// result in zero padding at the end of the Hash.\nfunc NewHashFromStr(hash string) (*Hash, error) {\n\tret := new(Hash)\n\terr := Decode(ret, hash)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n}\n\n// Decode decodes the byte-reversed hexadecimal string encoding of a Hash to a\n// destination.\nfunc Decode(dst *Hash, src string) error {\n\t// Return error if hash string is too long.\n\tif len(src) > MaxHashStringSize {\n\t\treturn ErrHashStrSize\n\t}\n\n\t// Hex decoder expects the hash to be a multiple of two.  When not, pad\n\t// with a leading zero.\n\tvar srcBytes []byte\n\tif len(src)%2 == 0 {\n\t\tsrcBytes = []byte(src)\n\t} else {\n\t\tsrcBytes = make([]byte, 1+len(src))\n\t\tsrcBytes[0] = '0'\n\t\tcopy(srcBytes[1:], src)\n\t}\n\n\t// Hex decode the source bytes to a temporary destination.\n\tvar reversedHash Hash\n\t_, err := hex.Decode(reversedHash[HashSize-hex.DecodedLen(len(srcBytes)):], srcBytes)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Reverse copy from the temporary hash to destination.  Because the\n\t// temporary was zeroed, the written result will be correctly padded.\n\tfor i, b := range reversedHash[:HashSize/2] {\n\t\tdst[i], dst[HashSize-1-i] = reversedHash[HashSize-1-i], b\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/chaincfg/chainhash/hashfuncs.go",
    "content": "// Copyright (c) 2015 The Decred developers\n// Copyright (c) 2016-2017 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage chainhash\n\nimport \"crypto/sha256\"\n\n// HashB calculates hash(b) and returns the resulting bytes.\nfunc HashB(b []byte) []byte {\n\thash := sha256.Sum256(b)\n\treturn hash[:]\n}\n\n// HashH calculates hash(b) and returns the resulting bytes as a Hash.\nfunc HashH(b []byte) Hash {\n\treturn Hash(sha256.Sum256(b))\n}\n\n// DoubleHashB calculates hash(hash(b)) and returns the resulting bytes.\nfunc DoubleHashB(b []byte) []byte {\n\tfirst := sha256.Sum256(b)\n\tsecond := sha256.Sum256(first[:])\n\treturn second[:]\n}\n\n// DoubleHashH calculates hash(hash(b)) and returns the resulting bytes as a\n// Hash.\nfunc DoubleHashH(b []byte) Hash {\n\tfirst := sha256.Sum256(b)\n\treturn Hash(sha256.Sum256(first[:]))\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/chaincfg/doc.go",
    "content": "// Package chaincfg defines chain configuration parameters.\n//\n// In addition to the main Bitcoin network, which is intended for the transfer\n// of monetary value, there also exists two currently active standard networks:\n// regression test and testnet (version 3).  These networks are incompatible\n// with each other (each sharing a different genesis block) and software should\n// handle errors where input intended for one network is used on an application\n// instance running on a different network.\n//\n// For library packages, chaincfg provides the ability to lookup chain\n// parameters and encoding magics when passed a *Params.  Older APIs not updated\n// to the new convention of passing a *Params may lookup the parameters for a\n// wire.BitcoinNet using ParamsForNet, but be aware that this usage is\n// deprecated and will be removed from chaincfg in the future.\n//\n// For main packages, a (typically global) var may be assigned the address of\n// one of the standard Param vars for use as the application's \"active\" network.\n// When a network parameter is needed, it may then be looked up through this\n// variable (either directly, or hidden in a library call).\n//\n//  package main\n//\n//  import (\n//          \"flag\"\n//          \"fmt\"\n//          \"log\"\n//\n//          \"github.com/btcsuite/btcutil\"\n//          \"github.com/btcsuite/btcd/chaincfg\"\n//  )\n//\n//  var testnet = flag.Bool(\"testnet\", false, \"operate on the testnet Bitcoin network\")\n//\n//  // By default (without -testnet), use mainnet.\n//  var chainParams = &chaincfg.MainNetParams\n//\n//  func main() {\n//          flag.Parse()\n//\n//          // Modify active network parameters if operating on testnet.\n//          if *testnet {\n//                  chainParams = &chaincfg.TestNet3Params\n//          }\n//\n//          // later...\n//\n//          // Create and print new payment address, specific to the active network.\n//          pubKeyHash := make([]byte, 20)\n//          addr, err := btcutil.NewAddressPubKeyHash(pubKeyHash, chainParams)\n//          if err != nil {\n//                  log.Fatal(err)\n//          }\n//          fmt.Println(addr)\n//  }\n//\n// If an application does not use one of the three standard Bitcoin networks,\n// a new Params struct may be created which defines the parameters for the\n// non-standard network.  As a general rule of thumb, all network parameters\n// should be unique to the network, but parameter collisions can still occur\n// (unfortunately, this is the case with regtest and testnet3 sharing magics).\npackage chaincfg\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/chaincfg/genesis.go",
    "content": "// Copyright (c) 2014-2016 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage chaincfg\n\nimport (\n\t\"time\"\n\n\t\"github.com/btcsuite/btcd/chaincfg/chainhash\"\n\t\"github.com/btcsuite/btcd/wire\"\n)\n\n// genesisCoinbaseTx is the coinbase transaction for the genesis blocks for\n// the main network, regression test network, and test network (version 3).\nvar genesisCoinbaseTx = wire.MsgTx{\n\tVersion: 1,\n\tTxIn: []*wire.TxIn{\n\t\t{\n\t\t\tPreviousOutPoint: wire.OutPoint{\n\t\t\t\tHash:  chainhash.Hash{},\n\t\t\t\tIndex: 0xffffffff,\n\t\t\t},\n\t\t\tSignatureScript: []byte{\n\t\t\t\t0x04, 0xff, 0xff, 0x00, 0x1d, 0x01, 0x04, 0x45, /* |.......E| */\n\t\t\t\t0x54, 0x68, 0x65, 0x20, 0x54, 0x69, 0x6d, 0x65, /* |The Time| */\n\t\t\t\t0x73, 0x20, 0x30, 0x33, 0x2f, 0x4a, 0x61, 0x6e, /* |s 03/Jan| */\n\t\t\t\t0x2f, 0x32, 0x30, 0x30, 0x39, 0x20, 0x43, 0x68, /* |/2009 Ch| */\n\t\t\t\t0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x6f, 0x72, /* |ancellor| */\n\t\t\t\t0x20, 0x6f, 0x6e, 0x20, 0x62, 0x72, 0x69, 0x6e, /* | on brin| */\n\t\t\t\t0x6b, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x65, 0x63, /* |k of sec|*/\n\t\t\t\t0x6f, 0x6e, 0x64, 0x20, 0x62, 0x61, 0x69, 0x6c, /* |ond bail| */\n\t\t\t\t0x6f, 0x75, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, /* |out for |*/\n\t\t\t\t0x62, 0x61, 0x6e, 0x6b, 0x73, /* |banks| */\n\t\t\t},\n\t\t\tSequence: 0xffffffff,\n\t\t},\n\t},\n\tTxOut: []*wire.TxOut{\n\t\t{\n\t\t\tValue: 0x12a05f200,\n\t\t\tPkScript: []byte{\n\t\t\t\t0x41, 0x04, 0x67, 0x8a, 0xfd, 0xb0, 0xfe, 0x55, /* |A.g....U| */\n\t\t\t\t0x48, 0x27, 0x19, 0x67, 0xf1, 0xa6, 0x71, 0x30, /* |H'.g..q0| */\n\t\t\t\t0xb7, 0x10, 0x5c, 0xd6, 0xa8, 0x28, 0xe0, 0x39, /* |..\\..(.9| */\n\t\t\t\t0x09, 0xa6, 0x79, 0x62, 0xe0, 0xea, 0x1f, 0x61, /* |..yb...a| */\n\t\t\t\t0xde, 0xb6, 0x49, 0xf6, 0xbc, 0x3f, 0x4c, 0xef, /* |..I..?L.| */\n\t\t\t\t0x38, 0xc4, 0xf3, 0x55, 0x04, 0xe5, 0x1e, 0xc1, /* |8..U....| */\n\t\t\t\t0x12, 0xde, 0x5c, 0x38, 0x4d, 0xf7, 0xba, 0x0b, /* |..\\8M...| */\n\t\t\t\t0x8d, 0x57, 0x8a, 0x4c, 0x70, 0x2b, 0x6b, 0xf1, /* |.W.Lp+k.| */\n\t\t\t\t0x1d, 0x5f, 0xac, /* |._.| */\n\t\t\t},\n\t\t},\n\t},\n\tLockTime: 0,\n}\n\n// genesisHash is the hash of the first block in the block chain for the main\n// network (genesis block).\nvar genesisHash = chainhash.Hash([chainhash.HashSize]byte{ // Make go vet happy.\n\t0x6f, 0xe2, 0x8c, 0x0a, 0xb6, 0xf1, 0xb3, 0x72,\n\t0xc1, 0xa6, 0xa2, 0x46, 0xae, 0x63, 0xf7, 0x4f,\n\t0x93, 0x1e, 0x83, 0x65, 0xe1, 0x5a, 0x08, 0x9c,\n\t0x68, 0xd6, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00,\n})\n\n// genesisMerkleRoot is the hash of the first transaction in the genesis block\n// for the main network.\nvar genesisMerkleRoot = chainhash.Hash([chainhash.HashSize]byte{ // Make go vet happy.\n\t0x3b, 0xa3, 0xed, 0xfd, 0x7a, 0x7b, 0x12, 0xb2,\n\t0x7a, 0xc7, 0x2c, 0x3e, 0x67, 0x76, 0x8f, 0x61,\n\t0x7f, 0xc8, 0x1b, 0xc3, 0x88, 0x8a, 0x51, 0x32,\n\t0x3a, 0x9f, 0xb8, 0xaa, 0x4b, 0x1e, 0x5e, 0x4a,\n})\n\n// genesisBlock defines the genesis block of the block chain which serves as the\n// public transaction ledger for the main network.\nvar genesisBlock = wire.MsgBlock{\n\tHeader: wire.BlockHeader{\n\t\tVersion:    1,\n\t\tPrevBlock:  chainhash.Hash{},         // 0000000000000000000000000000000000000000000000000000000000000000\n\t\tMerkleRoot: genesisMerkleRoot,        // 4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b\n\t\tTimestamp:  time.Unix(0x495fab29, 0), // 2009-01-03 18:15:05 +0000 UTC\n\t\tBits:       0x1d00ffff,               // 486604799 [00000000ffff0000000000000000000000000000000000000000000000000000]\n\t\tNonce:      0x7c2bac1d,               // 2083236893\n\t},\n\tTransactions: []*wire.MsgTx{&genesisCoinbaseTx},\n}\n\n// regTestGenesisHash is the hash of the first block in the block chain for the\n// regression test network (genesis block).\nvar regTestGenesisHash = chainhash.Hash([chainhash.HashSize]byte{ // Make go vet happy.\n\t0x06, 0x22, 0x6e, 0x46, 0x11, 0x1a, 0x0b, 0x59,\n\t0xca, 0xaf, 0x12, 0x60, 0x43, 0xeb, 0x5b, 0xbf,\n\t0x28, 0xc3, 0x4f, 0x3a, 0x5e, 0x33, 0x2a, 0x1f,\n\t0xc7, 0xb2, 0xb7, 0x3c, 0xf1, 0x88, 0x91, 0x0f,\n})\n\n// regTestGenesisMerkleRoot is the hash of the first transaction in the genesis\n// block for the regression test network.  It is the same as the merkle root for\n// the main network.\nvar regTestGenesisMerkleRoot = genesisMerkleRoot\n\n// regTestGenesisBlock defines the genesis block of the block chain which serves\n// as the public transaction ledger for the regression test network.\nvar regTestGenesisBlock = wire.MsgBlock{\n\tHeader: wire.BlockHeader{\n\t\tVersion:    1,\n\t\tPrevBlock:  chainhash.Hash{},         // 0000000000000000000000000000000000000000000000000000000000000000\n\t\tMerkleRoot: regTestGenesisMerkleRoot, // 4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b\n\t\tTimestamp:  time.Unix(1296688602, 0), // 2011-02-02 23:16:42 +0000 UTC\n\t\tBits:       0x207fffff,               // 545259519 [7fffff0000000000000000000000000000000000000000000000000000000000]\n\t\tNonce:      2,\n\t},\n\tTransactions: []*wire.MsgTx{&genesisCoinbaseTx},\n}\n\n// testNet3GenesisHash is the hash of the first block in the block chain for the\n// test network (version 3).\nvar testNet3GenesisHash = chainhash.Hash([chainhash.HashSize]byte{ // Make go vet happy.\n\t0x43, 0x49, 0x7f, 0xd7, 0xf8, 0x26, 0x95, 0x71,\n\t0x08, 0xf4, 0xa3, 0x0f, 0xd9, 0xce, 0xc3, 0xae,\n\t0xba, 0x79, 0x97, 0x20, 0x84, 0xe9, 0x0e, 0xad,\n\t0x01, 0xea, 0x33, 0x09, 0x00, 0x00, 0x00, 0x00,\n})\n\n// testNet3GenesisMerkleRoot is the hash of the first transaction in the genesis\n// block for the test network (version 3).  It is the same as the merkle root\n// for the main network.\nvar testNet3GenesisMerkleRoot = genesisMerkleRoot\n\n// testNet3GenesisBlock defines the genesis block of the block chain which\n// serves as the public transaction ledger for the test network (version 3).\nvar testNet3GenesisBlock = wire.MsgBlock{\n\tHeader: wire.BlockHeader{\n\t\tVersion:    1,\n\t\tPrevBlock:  chainhash.Hash{},          // 0000000000000000000000000000000000000000000000000000000000000000\n\t\tMerkleRoot: testNet3GenesisMerkleRoot, // 4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b\n\t\tTimestamp:  time.Unix(1296688602, 0),  // 2011-02-02 23:16:42 +0000 UTC\n\t\tBits:       0x1d00ffff,                // 486604799 [00000000ffff0000000000000000000000000000000000000000000000000000]\n\t\tNonce:      0x18aea41a,                // 414098458\n\t},\n\tTransactions: []*wire.MsgTx{&genesisCoinbaseTx},\n}\n\n// simNetGenesisHash is the hash of the first block in the block chain for the\n// simulation test network.\nvar simNetGenesisHash = chainhash.Hash([chainhash.HashSize]byte{ // Make go vet happy.\n\t0xf6, 0x7a, 0xd7, 0x69, 0x5d, 0x9b, 0x66, 0x2a,\n\t0x72, 0xff, 0x3d, 0x8e, 0xdb, 0xbb, 0x2d, 0xe0,\n\t0xbf, 0xa6, 0x7b, 0x13, 0x97, 0x4b, 0xb9, 0x91,\n\t0x0d, 0x11, 0x6d, 0x5c, 0xbd, 0x86, 0x3e, 0x68,\n})\n\n// simNetGenesisMerkleRoot is the hash of the first transaction in the genesis\n// block for the simulation test network.  It is the same as the merkle root for\n// the main network.\nvar simNetGenesisMerkleRoot = genesisMerkleRoot\n\n// simNetGenesisBlock defines the genesis block of the block chain which serves\n// as the public transaction ledger for the simulation test network.\nvar simNetGenesisBlock = wire.MsgBlock{\n\tHeader: wire.BlockHeader{\n\t\tVersion:    1,\n\t\tPrevBlock:  chainhash.Hash{},         // 0000000000000000000000000000000000000000000000000000000000000000\n\t\tMerkleRoot: simNetGenesisMerkleRoot,  // 4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b\n\t\tTimestamp:  time.Unix(1401292357, 0), // 2014-05-28 15:52:37 +0000 UTC\n\t\tBits:       0x207fffff,               // 545259519 [7fffff0000000000000000000000000000000000000000000000000000000000]\n\t\tNonce:      2,\n\t},\n\tTransactions: []*wire.MsgTx{&genesisCoinbaseTx},\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/chaincfg/params.go",
    "content": "// Copyright (c) 2014-2016 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage chaincfg\n\nimport (\n\t\"errors\"\n\t\"math\"\n\t\"math/big\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/btcsuite/btcd/chaincfg/chainhash\"\n\t\"github.com/btcsuite/btcd/wire\"\n)\n\n// These variables are the chain proof-of-work limit parameters for each default\n// network.\nvar (\n\t// bigOne is 1 represented as a big.Int.  It is defined here to avoid\n\t// the overhead of creating it multiple times.\n\tbigOne = big.NewInt(1)\n\n\t// mainPowLimit is the highest proof of work value a Bitcoin block can\n\t// have for the main network.  It is the value 2^224 - 1.\n\tmainPowLimit = new(big.Int).Sub(new(big.Int).Lsh(bigOne, 224), bigOne)\n\n\t// regressionPowLimit is the highest proof of work value a Bitcoin block\n\t// can have for the regression test network.  It is the value 2^255 - 1.\n\tregressionPowLimit = new(big.Int).Sub(new(big.Int).Lsh(bigOne, 255), bigOne)\n\n\t// testNet3PowLimit is the highest proof of work value a Bitcoin block\n\t// can have for the test network (version 3).  It is the value\n\t// 2^224 - 1.\n\ttestNet3PowLimit = new(big.Int).Sub(new(big.Int).Lsh(bigOne, 224), bigOne)\n\n\t// simNetPowLimit is the highest proof of work value a Bitcoin block\n\t// can have for the simulation test network.  It is the value 2^255 - 1.\n\tsimNetPowLimit = new(big.Int).Sub(new(big.Int).Lsh(bigOne, 255), bigOne)\n)\n\n// Checkpoint identifies a known good point in the block chain.  Using\n// checkpoints allows a few optimizations for old blocks during initial download\n// and also prevents forks from old blocks.\n//\n// Each checkpoint is selected based upon several factors.  See the\n// documentation for blockchain.IsCheckpointCandidate for details on the\n// selection criteria.\ntype Checkpoint struct {\n\tHeight int32\n\tHash   *chainhash.Hash\n}\n\n// DNSSeed identifies a DNS seed.\ntype DNSSeed struct {\n\t// Host defines the hostname of the seed.\n\tHost string\n\n\t// HasFiltering defines whether the seed supports filtering\n\t// by service flags (wire.ServiceFlag).\n\tHasFiltering bool\n}\n\n// ConsensusDeployment defines details related to a specific consensus rule\n// change that is voted in.  This is part of BIP0009.\ntype ConsensusDeployment struct {\n\t// BitNumber defines the specific bit number within the block version\n\t// this particular soft-fork deployment refers to.\n\tBitNumber uint8\n\n\t// StartTime is the median block time after which voting on the\n\t// deployment starts.\n\tStartTime uint64\n\n\t// ExpireTime is the median block time after which the attempted\n\t// deployment expires.\n\tExpireTime uint64\n}\n\n// Constants that define the deployment offset in the deployments field of the\n// parameters for each deployment.  This is useful to be able to get the details\n// of a specific deployment by name.\nconst (\n\t// DeploymentTestDummy defines the rule change deployment ID for testing\n\t// purposes.\n\tDeploymentTestDummy = iota\n\n\t// DeploymentCSV defines the rule change deployment ID for the CSV\n\t// soft-fork package. The CSV package includes the deployment of BIPS\n\t// 68, 112, and 113.\n\tDeploymentCSV\n\n\t// DeploymentSegwit defines the rule change deployment ID for the\n\t// Segregated Witness (segwit) soft-fork package. The segwit package\n\t// includes the deployment of BIPS 141, 142, 144, 145, 147 and 173.\n\tDeploymentSegwit\n\n\t// NOTE: DefinedDeployments must always come last since it is used to\n\t// determine how many defined deployments there currently are.\n\n\t// DefinedDeployments is the number of currently defined deployments.\n\tDefinedDeployments\n)\n\n// Params defines a Bitcoin network by its parameters.  These parameters may be\n// used by Bitcoin applications to differentiate networks as well as addresses\n// and keys for one network from those intended for use on another network.\ntype Params struct {\n\t// Name defines a human-readable identifier for the network.\n\tName string\n\n\t// Net defines the magic bytes used to identify the network.\n\tNet wire.BitcoinNet\n\n\t// DefaultPort defines the default peer-to-peer port for the network.\n\tDefaultPort string\n\n\t// DNSSeeds defines a list of DNS seeds for the network that are used\n\t// as one method to discover peers.\n\tDNSSeeds []DNSSeed\n\n\t// GenesisBlock defines the first block of the chain.\n\tGenesisBlock *wire.MsgBlock\n\n\t// GenesisHash is the starting block hash.\n\tGenesisHash *chainhash.Hash\n\n\t// PowLimit defines the highest allowed proof of work value for a block\n\t// as a uint256.\n\tPowLimit *big.Int\n\n\t// PowLimitBits defines the highest allowed proof of work value for a\n\t// block in compact form.\n\tPowLimitBits uint32\n\n\t// These fields define the block heights at which the specified softfork\n\t// BIP became active.\n\tBIP0034Height int32\n\tBIP0065Height int32\n\tBIP0066Height int32\n\n\t// CoinbaseMaturity is the number of blocks required before newly mined\n\t// coins (coinbase transactions) can be spent.\n\tCoinbaseMaturity uint16\n\n\t// SubsidyReductionInterval is the interval of blocks before the subsidy\n\t// is reduced.\n\tSubsidyReductionInterval int32\n\n\t// TargetTimespan is the desired amount of time that should elapse\n\t// before the block difficulty requirement is examined to determine how\n\t// it should be changed in order to maintain the desired block\n\t// generation rate.\n\tTargetTimespan time.Duration\n\n\t// TargetTimePerBlock is the desired amount of time to generate each\n\t// block.\n\tTargetTimePerBlock time.Duration\n\n\t// RetargetAdjustmentFactor is the adjustment factor used to limit\n\t// the minimum and maximum amount of adjustment that can occur between\n\t// difficulty retargets.\n\tRetargetAdjustmentFactor int64\n\n\t// ReduceMinDifficulty defines whether the network should reduce the\n\t// minimum required difficulty after a long enough period of time has\n\t// passed without finding a block.  This is really only useful for test\n\t// networks and should not be set on a main network.\n\tReduceMinDifficulty bool\n\n\t// MinDiffReductionTime is the amount of time after which the minimum\n\t// required difficulty should be reduced when a block hasn't been found.\n\t//\n\t// NOTE: This only applies if ReduceMinDifficulty is true.\n\tMinDiffReductionTime time.Duration\n\n\t// GenerateSupported specifies whether or not CPU mining is allowed.\n\tGenerateSupported bool\n\n\t// Checkpoints ordered from oldest to newest.\n\tCheckpoints []Checkpoint\n\n\t// These fields are related to voting on consensus rule changes as\n\t// defined by BIP0009.\n\t//\n\t// RuleChangeActivationThreshold is the number of blocks in a threshold\n\t// state retarget window for which a positive vote for a rule change\n\t// must be cast in order to lock in a rule change. It should typically\n\t// be 95% for the main network and 75% for test networks.\n\t//\n\t// MinerConfirmationWindow is the number of blocks in each threshold\n\t// state retarget window.\n\t//\n\t// Deployments define the specific consensus rule changes to be voted\n\t// on.\n\tRuleChangeActivationThreshold uint32\n\tMinerConfirmationWindow       uint32\n\tDeployments                   [DefinedDeployments]ConsensusDeployment\n\n\t// Mempool parameters\n\tRelayNonStdTxs bool\n\n\t// Human-readable part for Bech32 encoded segwit addresses, as defined\n\t// in BIP 173.\n\tBech32HRPSegwit string\n\n\t// Address encoding magics\n\tPubKeyHashAddrID        byte // First byte of a P2PKH address\n\tScriptHashAddrID        byte // First byte of a P2SH address\n\tPrivateKeyID            byte // First byte of a WIF private key\n\tWitnessPubKeyHashAddrID byte // First byte of a P2WPKH address\n\tWitnessScriptHashAddrID byte // First byte of a P2WSH address\n\n\t// BIP32 hierarchical deterministic extended key magics\n\tHDPrivateKeyID [4]byte\n\tHDPublicKeyID  [4]byte\n\n\t// BIP44 coin type used in the hierarchical deterministic path for\n\t// address generation.\n\tHDCoinType uint32\n}\n\n// MainNetParams defines the network parameters for the main Bitcoin network.\nvar MainNetParams = Params{\n\tName:        \"mainnet\",\n\tNet:         wire.MainNet,\n\tDefaultPort: \"8333\",\n\tDNSSeeds: []DNSSeed{\n\t\t{\"seed.bitcoin.sipa.be\", true},\n\t\t{\"dnsseed.bluematt.me\", true},\n\t\t{\"dnsseed.bitcoin.dashjr.org\", false},\n\t\t{\"seed.bitcoinstats.com\", true},\n\t\t{\"seed.bitnodes.io\", false},\n\t\t{\"seed.bitcoin.jonasschnelli.ch\", true},\n\t},\n\n\t// Chain parameters\n\tGenesisBlock:             &genesisBlock,\n\tGenesisHash:              &genesisHash,\n\tPowLimit:                 mainPowLimit,\n\tPowLimitBits:             0x1d00ffff,\n\tBIP0034Height:            227931, // 000000000000024b89b42a942fe0d9fea3bb44ab7bd1b19115dd6a759c0808b8\n\tBIP0065Height:            388381, // 000000000000000004c2b624ed5d7756c508d90fd0da2c7c679febfa6c4735f0\n\tBIP0066Height:            363725, // 00000000000000000379eaa19dce8c9b722d46ae6a57c2f1a988119488b50931\n\tCoinbaseMaturity:         100,\n\tSubsidyReductionInterval: 210000,\n\tTargetTimespan:           time.Hour * 24 * 14, // 14 days\n\tTargetTimePerBlock:       time.Minute * 10,    // 10 minutes\n\tRetargetAdjustmentFactor: 4,                   // 25% less, 400% more\n\tReduceMinDifficulty:      false,\n\tMinDiffReductionTime:     0,\n\tGenerateSupported:        false,\n\n\t// Checkpoints ordered from oldest to newest.\n\tCheckpoints: []Checkpoint{\n\t\t{11111, newHashFromStr(\"0000000069e244f73d78e8fd29ba2fd2ed618bd6fa2ee92559f542fdb26e7c1d\")},\n\t\t{33333, newHashFromStr(\"000000002dd5588a74784eaa7ab0507a18ad16a236e7b1ce69f00d7ddfb5d0a6\")},\n\t\t{74000, newHashFromStr(\"0000000000573993a3c9e41ce34471c079dcf5f52a0e824a81e7f953b8661a20\")},\n\t\t{105000, newHashFromStr(\"00000000000291ce28027faea320c8d2b054b2e0fe44a773f3eefb151d6bdc97\")},\n\t\t{134444, newHashFromStr(\"00000000000005b12ffd4cd315cd34ffd4a594f430ac814c91184a0d42d2b0fe\")},\n\t\t{168000, newHashFromStr(\"000000000000099e61ea72015e79632f216fe6cb33d7899acb35b75c8303b763\")},\n\t\t{193000, newHashFromStr(\"000000000000059f452a5f7340de6682a977387c17010ff6e6c3bd83ca8b1317\")},\n\t\t{210000, newHashFromStr(\"000000000000048b95347e83192f69cf0366076336c639f9b7228e9ba171342e\")},\n\t\t{216116, newHashFromStr(\"00000000000001b4f4b433e81ee46494af945cf96014816a4e2370f11b23df4e\")},\n\t\t{225430, newHashFromStr(\"00000000000001c108384350f74090433e7fcf79a606b8e797f065b130575932\")},\n\t\t{250000, newHashFromStr(\"000000000000003887df1f29024b06fc2200b55f8af8f35453d7be294df2d214\")},\n\t\t{267300, newHashFromStr(\"000000000000000a83fbd660e918f218bf37edd92b748ad940483c7c116179ac\")},\n\t\t{279000, newHashFromStr(\"0000000000000001ae8c72a0b0c301f67e3afca10e819efa9041e458e9bd7e40\")},\n\t\t{300255, newHashFromStr(\"0000000000000000162804527c6e9b9f0563a280525f9d08c12041def0a0f3b2\")},\n\t\t{319400, newHashFromStr(\"000000000000000021c6052e9becade189495d1c539aa37c58917305fd15f13b\")},\n\t\t{343185, newHashFromStr(\"0000000000000000072b8bf361d01a6ba7d445dd024203fafc78768ed4368554\")},\n\t\t{352940, newHashFromStr(\"000000000000000010755df42dba556bb72be6a32f3ce0b6941ce4430152c9ff\")},\n\t\t{382320, newHashFromStr(\"00000000000000000a8dc6ed5b133d0eb2fd6af56203e4159789b092defd8ab2\")},\n\t},\n\n\t// Consensus rule change deployments.\n\t//\n\t// The miner confirmation window is defined as:\n\t//   target proof of work timespan / target proof of work spacing\n\tRuleChangeActivationThreshold: 1916, // 95% of MinerConfirmationWindow\n\tMinerConfirmationWindow:       2016, //\n\tDeployments: [DefinedDeployments]ConsensusDeployment{\n\t\tDeploymentTestDummy: {\n\t\t\tBitNumber:  28,\n\t\t\tStartTime:  1199145601, // January 1, 2008 UTC\n\t\t\tExpireTime: 1230767999, // December 31, 2008 UTC\n\t\t},\n\t\tDeploymentCSV: {\n\t\t\tBitNumber:  0,\n\t\t\tStartTime:  1462060800, // May 1st, 2016\n\t\t\tExpireTime: 1493596800, // May 1st, 2017\n\t\t},\n\t\tDeploymentSegwit: {\n\t\t\tBitNumber:  1,\n\t\t\tStartTime:  1479168000, // November 15, 2016 UTC\n\t\t\tExpireTime: 1510704000, // November 15, 2017 UTC.\n\t\t},\n\t},\n\n\t// Mempool parameters\n\tRelayNonStdTxs: false,\n\n\t// Human-readable part for Bech32 encoded segwit addresses, as defined in\n\t// BIP 173.\n\tBech32HRPSegwit: \"bc\", // always bc for main net\n\n\t// Address encoding magics\n\tPubKeyHashAddrID:        0x00, // starts with 1\n\tScriptHashAddrID:        0x05, // starts with 3\n\tPrivateKeyID:            0x80, // starts with 5 (uncompressed) or K (compressed)\n\tWitnessPubKeyHashAddrID: 0x06, // starts with p2\n\tWitnessScriptHashAddrID: 0x0A, // starts with 7Xh\n\n\t// BIP32 hierarchical deterministic extended key magics\n\tHDPrivateKeyID: [4]byte{0x04, 0x88, 0xad, 0xe4}, // starts with xprv\n\tHDPublicKeyID:  [4]byte{0x04, 0x88, 0xb2, 0x1e}, // starts with xpub\n\n\t// BIP44 coin type used in the hierarchical deterministic path for\n\t// address generation.\n\tHDCoinType: 0,\n}\n\n// RegressionNetParams defines the network parameters for the regression test\n// Bitcoin network.  Not to be confused with the test Bitcoin network (version\n// 3), this network is sometimes simply called \"testnet\".\nvar RegressionNetParams = Params{\n\tName:        \"regtest\",\n\tNet:         wire.TestNet,\n\tDefaultPort: \"18444\",\n\tDNSSeeds:    []DNSSeed{},\n\n\t// Chain parameters\n\tGenesisBlock:             &regTestGenesisBlock,\n\tGenesisHash:              &regTestGenesisHash,\n\tPowLimit:                 regressionPowLimit,\n\tPowLimitBits:             0x207fffff,\n\tCoinbaseMaturity:         100,\n\tBIP0034Height:            100000000, // Not active - Permit ver 1 blocks\n\tBIP0065Height:            1351,      // Used by regression tests\n\tBIP0066Height:            1251,      // Used by regression tests\n\tSubsidyReductionInterval: 150,\n\tTargetTimespan:           time.Hour * 24 * 14, // 14 days\n\tTargetTimePerBlock:       time.Minute * 10,    // 10 minutes\n\tRetargetAdjustmentFactor: 4,                   // 25% less, 400% more\n\tReduceMinDifficulty:      true,\n\tMinDiffReductionTime:     time.Minute * 20, // TargetTimePerBlock * 2\n\tGenerateSupported:        true,\n\n\t// Checkpoints ordered from oldest to newest.\n\tCheckpoints: nil,\n\n\t// Consensus rule change deployments.\n\t//\n\t// The miner confirmation window is defined as:\n\t//   target proof of work timespan / target proof of work spacing\n\tRuleChangeActivationThreshold: 108, // 75%  of MinerConfirmationWindow\n\tMinerConfirmationWindow:       144,\n\tDeployments: [DefinedDeployments]ConsensusDeployment{\n\t\tDeploymentTestDummy: {\n\t\t\tBitNumber:  28,\n\t\t\tStartTime:  0,             // Always available for vote\n\t\t\tExpireTime: math.MaxInt64, // Never expires\n\t\t},\n\t\tDeploymentCSV: {\n\t\t\tBitNumber:  0,\n\t\t\tStartTime:  0,             // Always available for vote\n\t\t\tExpireTime: math.MaxInt64, // Never expires\n\t\t},\n\t\tDeploymentSegwit: {\n\t\t\tBitNumber:  1,\n\t\t\tStartTime:  0,             // Always available for vote\n\t\t\tExpireTime: math.MaxInt64, // Never expires.\n\t\t},\n\t},\n\n\t// Mempool parameters\n\tRelayNonStdTxs: true,\n\n\t// Human-readable part for Bech32 encoded segwit addresses, as defined in\n\t// BIP 173.\n\tBech32HRPSegwit: \"bcrt\", // always bcrt for reg test net\n\n\t// Address encoding magics\n\tPubKeyHashAddrID: 0x6f, // starts with m or n\n\tScriptHashAddrID: 0xc4, // starts with 2\n\tPrivateKeyID:     0xef, // starts with 9 (uncompressed) or c (compressed)\n\n\t// BIP32 hierarchical deterministic extended key magics\n\tHDPrivateKeyID: [4]byte{0x04, 0x35, 0x83, 0x94}, // starts with tprv\n\tHDPublicKeyID:  [4]byte{0x04, 0x35, 0x87, 0xcf}, // starts with tpub\n\n\t// BIP44 coin type used in the hierarchical deterministic path for\n\t// address generation.\n\tHDCoinType: 1,\n}\n\n// TestNet3Params defines the network parameters for the test Bitcoin network\n// (version 3).  Not to be confused with the regression test network, this\n// network is sometimes simply called \"testnet\".\nvar TestNet3Params = Params{\n\tName:        \"testnet3\",\n\tNet:         wire.TestNet3,\n\tDefaultPort: \"18333\",\n\tDNSSeeds: []DNSSeed{\n\t\t{\"testnet-seed.bitcoin.jonasschnelli.ch\", true},\n\t\t{\"testnet-seed.bitcoin.schildbach.de\", false},\n\t\t{\"seed.tbtc.petertodd.org\", true},\n\t\t{\"testnet-seed.bluematt.me\", false},\n\t},\n\n\t// Chain parameters\n\tGenesisBlock:             &testNet3GenesisBlock,\n\tGenesisHash:              &testNet3GenesisHash,\n\tPowLimit:                 testNet3PowLimit,\n\tPowLimitBits:             0x1d00ffff,\n\tBIP0034Height:            21111,  // 0000000023b3a96d3484e5abb3755c413e7d41500f8e2a5c3f0dd01299cd8ef8\n\tBIP0065Height:            581885, // 00000000007f6655f22f98e72ed80d8b06dc761d5da09df0fa1dc4be4f861eb6\n\tBIP0066Height:            330776, // 000000002104c8c45e99a8853285a3b592602a3ccde2b832481da85e9e4ba182\n\tCoinbaseMaturity:         100,\n\tSubsidyReductionInterval: 210000,\n\tTargetTimespan:           time.Hour * 24 * 14, // 14 days\n\tTargetTimePerBlock:       time.Minute * 10,    // 10 minutes\n\tRetargetAdjustmentFactor: 4,                   // 25% less, 400% more\n\tReduceMinDifficulty:      true,\n\tMinDiffReductionTime:     time.Minute * 20, // TargetTimePerBlock * 2\n\tGenerateSupported:        false,\n\n\t// Checkpoints ordered from oldest to newest.\n\tCheckpoints: []Checkpoint{\n\t\t{546, newHashFromStr(\"000000002a936ca763904c3c35fce2f3556c559c0214345d31b1bcebf76acb70\")},\n\t\t{100000, newHashFromStr(\"00000000009e2958c15ff9290d571bf9459e93b19765c6801ddeccadbb160a1e\")},\n\t\t{200000, newHashFromStr(\"0000000000287bffd321963ef05feab753ebe274e1d78b2fd4e2bfe9ad3aa6f2\")},\n\t\t{300001, newHashFromStr(\"0000000000004829474748f3d1bc8fcf893c88be255e6d7f571c548aff57abf4\")},\n\t\t{400002, newHashFromStr(\"0000000005e2c73b8ecb82ae2dbc2e8274614ebad7172b53528aba7501f5a089\")},\n\t\t{500011, newHashFromStr(\"00000000000929f63977fbac92ff570a9bd9e7715401ee96f2848f7b07750b02\")},\n\t\t{600002, newHashFromStr(\"000000000001f471389afd6ee94dcace5ccc44adc18e8bff402443f034b07240\")},\n\t\t{700000, newHashFromStr(\"000000000000406178b12a4dea3b27e13b3c4fe4510994fd667d7c1e6a3f4dc1\")},\n\t\t{800010, newHashFromStr(\"000000000017ed35296433190b6829db01e657d80631d43f5983fa403bfdb4c1\")},\n\t\t{900000, newHashFromStr(\"0000000000356f8d8924556e765b7a94aaebc6b5c8685dcfa2b1ee8b41acd89b\")},\n\t\t{1000007, newHashFromStr(\"00000000001ccb893d8a1f25b70ad173ce955e5f50124261bbbc50379a612ddf\")},\n\t},\n\n\t// Consensus rule change deployments.\n\t//\n\t// The miner confirmation window is defined as:\n\t//   target proof of work timespan / target proof of work spacing\n\tRuleChangeActivationThreshold: 1512, // 75% of MinerConfirmationWindow\n\tMinerConfirmationWindow:       2016,\n\tDeployments: [DefinedDeployments]ConsensusDeployment{\n\t\tDeploymentTestDummy: {\n\t\t\tBitNumber:  28,\n\t\t\tStartTime:  1199145601, // January 1, 2008 UTC\n\t\t\tExpireTime: 1230767999, // December 31, 2008 UTC\n\t\t},\n\t\tDeploymentCSV: {\n\t\t\tBitNumber:  0,\n\t\t\tStartTime:  1456790400, // March 1st, 2016\n\t\t\tExpireTime: 1493596800, // May 1st, 2017\n\t\t},\n\t\tDeploymentSegwit: {\n\t\t\tBitNumber:  1,\n\t\t\tStartTime:  1462060800, // May 1, 2016 UTC\n\t\t\tExpireTime: 1493596800, // May 1, 2017 UTC.\n\t\t},\n\t},\n\n\t// Mempool parameters\n\tRelayNonStdTxs: true,\n\n\t// Human-readable part for Bech32 encoded segwit addresses, as defined in\n\t// BIP 173.\n\tBech32HRPSegwit: \"tb\", // always tb for test net\n\n\t// Address encoding magics\n\tPubKeyHashAddrID:        0x6f, // starts with m or n\n\tScriptHashAddrID:        0xc4, // starts with 2\n\tWitnessPubKeyHashAddrID: 0x03, // starts with QW\n\tWitnessScriptHashAddrID: 0x28, // starts with T7n\n\tPrivateKeyID:            0xef, // starts with 9 (uncompressed) or c (compressed)\n\n\t// BIP32 hierarchical deterministic extended key magics\n\tHDPrivateKeyID: [4]byte{0x04, 0x35, 0x83, 0x94}, // starts with tprv\n\tHDPublicKeyID:  [4]byte{0x04, 0x35, 0x87, 0xcf}, // starts with tpub\n\n\t// BIP44 coin type used in the hierarchical deterministic path for\n\t// address generation.\n\tHDCoinType: 1,\n}\n\n// SimNetParams defines the network parameters for the simulation test Bitcoin\n// network.  This network is similar to the normal test network except it is\n// intended for private use within a group of individuals doing simulation\n// testing.  The functionality is intended to differ in that the only nodes\n// which are specifically specified are used to create the network rather than\n// following normal discovery rules.  This is important as otherwise it would\n// just turn into another public testnet.\nvar SimNetParams = Params{\n\tName:        \"simnet\",\n\tNet:         wire.SimNet,\n\tDefaultPort: \"18555\",\n\tDNSSeeds:    []DNSSeed{}, // NOTE: There must NOT be any seeds.\n\n\t// Chain parameters\n\tGenesisBlock:             &simNetGenesisBlock,\n\tGenesisHash:              &simNetGenesisHash,\n\tPowLimit:                 simNetPowLimit,\n\tPowLimitBits:             0x207fffff,\n\tBIP0034Height:            0, // Always active on simnet\n\tBIP0065Height:            0, // Always active on simnet\n\tBIP0066Height:            0, // Always active on simnet\n\tCoinbaseMaturity:         100,\n\tSubsidyReductionInterval: 210000,\n\tTargetTimespan:           time.Hour * 24 * 14, // 14 days\n\tTargetTimePerBlock:       time.Minute * 10,    // 10 minutes\n\tRetargetAdjustmentFactor: 4,                   // 25% less, 400% more\n\tReduceMinDifficulty:      true,\n\tMinDiffReductionTime:     time.Minute * 20, // TargetTimePerBlock * 2\n\tGenerateSupported:        true,\n\n\t// Checkpoints ordered from oldest to newest.\n\tCheckpoints: nil,\n\n\t// Consensus rule change deployments.\n\t//\n\t// The miner confirmation window is defined as:\n\t//   target proof of work timespan / target proof of work spacing\n\tRuleChangeActivationThreshold: 75, // 75% of MinerConfirmationWindow\n\tMinerConfirmationWindow:       100,\n\tDeployments: [DefinedDeployments]ConsensusDeployment{\n\t\tDeploymentTestDummy: {\n\t\t\tBitNumber:  28,\n\t\t\tStartTime:  0,             // Always available for vote\n\t\t\tExpireTime: math.MaxInt64, // Never expires\n\t\t},\n\t\tDeploymentCSV: {\n\t\t\tBitNumber:  0,\n\t\t\tStartTime:  0,             // Always available for vote\n\t\t\tExpireTime: math.MaxInt64, // Never expires\n\t\t},\n\t\tDeploymentSegwit: {\n\t\t\tBitNumber:  1,\n\t\t\tStartTime:  0,             // Always available for vote\n\t\t\tExpireTime: math.MaxInt64, // Never expires.\n\t\t},\n\t},\n\n\t// Mempool parameters\n\tRelayNonStdTxs: true,\n\n\t// Human-readable part for Bech32 encoded segwit addresses, as defined in\n\t// BIP 173.\n\tBech32HRPSegwit: \"sb\", // always sb for sim net\n\n\t// Address encoding magics\n\tPubKeyHashAddrID:        0x3f, // starts with S\n\tScriptHashAddrID:        0x7b, // starts with s\n\tPrivateKeyID:            0x64, // starts with 4 (uncompressed) or F (compressed)\n\tWitnessPubKeyHashAddrID: 0x19, // starts with Gg\n\tWitnessScriptHashAddrID: 0x28, // starts with ?\n\n\t// BIP32 hierarchical deterministic extended key magics\n\tHDPrivateKeyID: [4]byte{0x04, 0x20, 0xb9, 0x00}, // starts with sprv\n\tHDPublicKeyID:  [4]byte{0x04, 0x20, 0xbd, 0x3a}, // starts with spub\n\n\t// BIP44 coin type used in the hierarchical deterministic path for\n\t// address generation.\n\tHDCoinType: 115, // ASCII for s\n}\n\nvar (\n\t// ErrDuplicateNet describes an error where the parameters for a Bitcoin\n\t// network could not be set due to the network already being a standard\n\t// network or previously-registered into this package.\n\tErrDuplicateNet = errors.New(\"duplicate Bitcoin network\")\n\n\t// ErrUnknownHDKeyID describes an error where the provided id which\n\t// is intended to identify the network for a hierarchical deterministic\n\t// private extended key is not registered.\n\tErrUnknownHDKeyID = errors.New(\"unknown hd private extended key bytes\")\n)\n\nvar (\n\tregisteredNets       = make(map[wire.BitcoinNet]struct{})\n\tpubKeyHashAddrIDs    = make(map[byte]struct{})\n\tscriptHashAddrIDs    = make(map[byte]struct{})\n\tbech32SegwitPrefixes = make(map[string]struct{})\n\thdPrivToPubKeyIDs    = make(map[[4]byte][]byte)\n)\n\n// String returns the hostname of the DNS seed in human-readable form.\nfunc (d DNSSeed) String() string {\n\treturn d.Host\n}\n\n// Register registers the network parameters for a Bitcoin network.  This may\n// error with ErrDuplicateNet if the network is already registered (either\n// due to a previous Register call, or the network being one of the default\n// networks).\n//\n// Network parameters should be registered into this package by a main package\n// as early as possible.  Then, library packages may lookup networks or network\n// parameters based on inputs and work regardless of the network being standard\n// or not.\nfunc Register(params *Params) error {\n\tif _, ok := registeredNets[params.Net]; ok {\n\t\treturn ErrDuplicateNet\n\t}\n\tregisteredNets[params.Net] = struct{}{}\n\tpubKeyHashAddrIDs[params.PubKeyHashAddrID] = struct{}{}\n\tscriptHashAddrIDs[params.ScriptHashAddrID] = struct{}{}\n\thdPrivToPubKeyIDs[params.HDPrivateKeyID] = params.HDPublicKeyID[:]\n\n\t// A valid Bech32 encoded segwit address always has as prefix the\n\t// human-readable part for the given net followed by '1'.\n\tbech32SegwitPrefixes[params.Bech32HRPSegwit+\"1\"] = struct{}{}\n\treturn nil\n}\n\n// mustRegister performs the same function as Register except it panics if there\n// is an error.  This should only be called from package init functions.\nfunc mustRegister(params *Params) {\n\tif err := Register(params); err != nil {\n\t\tpanic(\"failed to register network: \" + err.Error())\n\t}\n}\n\n// IsPubKeyHashAddrID returns whether the id is an identifier known to prefix a\n// pay-to-pubkey-hash address on any default or registered network.  This is\n// used when decoding an address string into a specific address type.  It is up\n// to the caller to check both this and IsScriptHashAddrID and decide whether an\n// address is a pubkey hash address, script hash address, neither, or\n// undeterminable (if both return true).\nfunc IsPubKeyHashAddrID(id byte) bool {\n\t_, ok := pubKeyHashAddrIDs[id]\n\treturn ok\n}\n\n// IsScriptHashAddrID returns whether the id is an identifier known to prefix a\n// pay-to-script-hash address on any default or registered network.  This is\n// used when decoding an address string into a specific address type.  It is up\n// to the caller to check both this and IsPubKeyHashAddrID and decide whether an\n// address is a pubkey hash address, script hash address, neither, or\n// undeterminable (if both return true).\nfunc IsScriptHashAddrID(id byte) bool {\n\t_, ok := scriptHashAddrIDs[id]\n\treturn ok\n}\n\n// IsBech32SegwitPrefix returns whether the prefix is a known prefix for segwit\n// addresses on any default or registered network.  This is used when decoding\n// an address string into a specific address type.\nfunc IsBech32SegwitPrefix(prefix string) bool {\n\tprefix = strings.ToLower(prefix)\n\t_, ok := bech32SegwitPrefixes[prefix]\n\treturn ok\n}\n\n// HDPrivateKeyToPublicKeyID accepts a private hierarchical deterministic\n// extended key id and returns the associated public key id.  When the provided\n// id is not registered, the ErrUnknownHDKeyID error will be returned.\nfunc HDPrivateKeyToPublicKeyID(id []byte) ([]byte, error) {\n\tif len(id) != 4 {\n\t\treturn nil, ErrUnknownHDKeyID\n\t}\n\n\tvar key [4]byte\n\tcopy(key[:], id)\n\tpubBytes, ok := hdPrivToPubKeyIDs[key]\n\tif !ok {\n\t\treturn nil, ErrUnknownHDKeyID\n\t}\n\n\treturn pubBytes, nil\n}\n\n// newHashFromStr converts the passed big-endian hex string into a\n// chainhash.Hash.  It only differs from the one available in chainhash in that\n// it panics on an error since it will only (and must only) be called with\n// hard-coded, and therefore known good, hashes.\nfunc newHashFromStr(hexStr string) *chainhash.Hash {\n\thash, err := chainhash.NewHashFromStr(hexStr)\n\tif err != nil {\n\t\t// Ordinarily I don't like panics in library code since it\n\t\t// can take applications down without them having a chance to\n\t\t// recover which is extremely annoying, however an exception is\n\t\t// being made in this case because the only way this can panic\n\t\t// is if there is an error in the hard-coded hashes.  Thus it\n\t\t// will only ever potentially panic on init and therefore is\n\t\t// 100% predictable.\n\t\tpanic(err)\n\t}\n\treturn hash\n}\n\nfunc init() {\n\t// Register all default networks when the package is initialized.\n\tmustRegister(&MainNetParams)\n\tmustRegister(&TestNet3Params)\n\tmustRegister(&RegressionNetParams)\n\tmustRegister(&SimNetParams)\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/rpcclient/CONTRIBUTORS",
    "content": "# This is the list of people who have contributed code to the repository.\n#\n# Names should be added to this file only after verifying that the individual\n# or the individual's organization has agreed to the LICENSE.\n#\n# Names should be added to this file like so:\n# Name <email address>\n\nDave Collins <davec@conformal.com>\nGeert-Johan Riemer <geertjohan.riemer@gmail.com>\nJosh Rickmar <jrick@conformal.com>\nMichalis Kargakis <michaliskargakis@gmail.com>\nRuben de Vries <ruben@rubensayshi.com\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/rpcclient/README.md",
    "content": "rpcclient\n=========\n\n[![Build Status](http://img.shields.io/travis/btcsuite/btcd.svg)](https://travis-ci.org/btcsuite/btcd)\n[![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org)\n[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](http://godoc.org/github.com/btcsuite/btcd/rpcclient)\n\nrpcclient implements a Websocket-enabled Bitcoin JSON-RPC client package written\nin [Go](http://golang.org/).  It provides a robust and easy to use client for\ninterfacing with a Bitcoin RPC server that uses a btcd/bitcoin core compatible\nBitcoin JSON-RPC API.\n\n## Status\n\nThis package is currently under active development.  It is already stable and\nthe infrastructure is complete.  However, there are still several RPCs left to\nimplement and the API is not stable yet.\n\n## Documentation\n\n* [API Reference](http://godoc.org/github.com/btcsuite/btcd/rpcclient)\n* [btcd Websockets Example](https://github.com/btcsuite/btcd/tree/master/rpcclient/examples/btcdwebsockets)\n  Connects to a btcd RPC server using TLS-secured websockets, registers for\n  block connected and block disconnected notifications, and gets the current\n  block count\n* [btcwallet Websockets Example](https://github.com/btcsuite/btcd/tree/master/rpcclient/examples/btcwalletwebsockets)\n  Connects to a btcwallet RPC server using TLS-secured websockets, registers for\n  notifications about changes to account balances, and gets a list of unspent\n  transaction outputs (utxos) the wallet can sign\n* [Bitcoin Core HTTP POST Example](https://github.com/btcsuite/btcd/tree/master/rpcclient/examples/bitcoincorehttp)\n  Connects to a bitcoin core RPC server using HTTP POST mode with TLS disabled\n  and gets the current block count\n\n## Major Features\n\n* Supports Websockets (btcd/btcwallet) and HTTP POST mode (bitcoin core)\n* Provides callback and registration functions for btcd/btcwallet notifications\n* Supports btcd extensions\n* Translates to and from higher-level and easier to use Go types\n* Offers a synchronous (blocking) and asynchronous API\n* When running in Websockets mode (the default):\n  * Automatic reconnect handling (can be disabled)\n  * Outstanding commands are automatically reissued\n  * Registered notifications are automatically reregistered\n  * Back-off support on reconnect attempts\n\n## Installation\n\n```bash\n$ go get -u github.com/btcsuite/btcd/rpcclient\n```\n\n## License\n\nPackage rpcclient is licensed under the [copyfree](http://copyfree.org) ISC\nLicense.\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/rpcclient/chain.go",
    "content": "// Copyright (c) 2014-2017 The btcsuite developers\n// Copyright (c) 2015-2017 The Decred developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage rpcclient\n\nimport (\n\t\"bytes\"\n\t\"encoding/hex\"\n\t\"encoding/json\"\n\n\t\"github.com/btcsuite/btcd/btcjson\"\n\t\"github.com/btcsuite/btcd/chaincfg/chainhash\"\n\t\"github.com/btcsuite/btcd/wire\"\n)\n\n// FutureGetBestBlockHashResult is a future promise to deliver the result of a\n// GetBestBlockAsync RPC invocation (or an applicable error).\ntype FutureGetBestBlockHashResult chan *response\n\n// Receive waits for the response promised by the future and returns the hash of\n// the best block in the longest block chain.\nfunc (r FutureGetBestBlockHashResult) Receive() (*chainhash.Hash, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal result as a string.\n\tvar txHashStr string\n\terr = json.Unmarshal(res, &txHashStr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn chainhash.NewHashFromStr(txHashStr)\n}\n\n// GetBestBlockHashAsync returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See GetBestBlockHash for the blocking version and more details.\nfunc (c *Client) GetBestBlockHashAsync() FutureGetBestBlockHashResult {\n\tcmd := btcjson.NewGetBestBlockHashCmd()\n\treturn c.sendCmd(cmd)\n}\n\n// GetBestBlockHash returns the hash of the best block in the longest block\n// chain.\nfunc (c *Client) GetBestBlockHash() (*chainhash.Hash, error) {\n\treturn c.GetBestBlockHashAsync().Receive()\n}\n\n// FutureGetBlockResult is a future promise to deliver the result of a\n// GetBlockAsync RPC invocation (or an applicable error).\ntype FutureGetBlockResult chan *response\n\n// Receive waits for the response promised by the future and returns the raw\n// block requested from the server given its hash.\nfunc (r FutureGetBlockResult) Receive() (*wire.MsgBlock, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal result as a string.\n\tvar blockHex string\n\terr = json.Unmarshal(res, &blockHex)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Decode the serialized block hex to raw bytes.\n\tserializedBlock, err := hex.DecodeString(blockHex)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Deserialize the block and return it.\n\tvar msgBlock wire.MsgBlock\n\terr = msgBlock.Deserialize(bytes.NewReader(serializedBlock))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &msgBlock, nil\n}\n\n// GetBlockAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See GetBlock for the blocking version and more details.\nfunc (c *Client) GetBlockAsync(blockHash *chainhash.Hash) FutureGetBlockResult {\n\thash := \"\"\n\tif blockHash != nil {\n\t\thash = blockHash.String()\n\t}\n\n\tcmd := btcjson.NewGetBlockCmd(hash, btcjson.Bool(false), nil)\n\treturn c.sendCmd(cmd)\n}\n\n// GetBlock returns a raw block from the server given its hash.\n//\n// See GetBlockVerbose to retrieve a data structure with information about the\n// block instead.\nfunc (c *Client) GetBlock(blockHash *chainhash.Hash) (*wire.MsgBlock, error) {\n\treturn c.GetBlockAsync(blockHash).Receive()\n}\n\n// FutureGetBlockVerboseResult is a future promise to deliver the result of a\n// GetBlockVerboseAsync RPC invocation (or an applicable error).\ntype FutureGetBlockVerboseResult chan *response\n\n// Receive waits for the response promised by the future and returns the data\n// structure from the server with information about the requested block.\nfunc (r FutureGetBlockVerboseResult) Receive() (*btcjson.GetBlockVerboseResult, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal the raw result into a BlockResult.\n\tvar blockResult btcjson.GetBlockVerboseResult\n\terr = json.Unmarshal(res, &blockResult)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &blockResult, nil\n}\n\n// GetBlockVerboseAsync returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See GetBlockVerbose for the blocking version and more details.\nfunc (c *Client) GetBlockVerboseAsync(blockHash *chainhash.Hash) FutureGetBlockVerboseResult {\n\thash := \"\"\n\tif blockHash != nil {\n\t\thash = blockHash.String()\n\t}\n\n\tcmd := btcjson.NewGetBlockCmd(hash, btcjson.Bool(true), nil)\n\treturn c.sendCmd(cmd)\n}\n\n// GetBlockVerbose returns a data structure from the server with information\n// about a block given its hash.\n//\n// See GetBlockVerboseTx to retrieve transaction data structures as well.\n// See GetBlock to retrieve a raw block instead.\nfunc (c *Client) GetBlockVerbose(blockHash *chainhash.Hash) (*btcjson.GetBlockVerboseResult, error) {\n\treturn c.GetBlockVerboseAsync(blockHash).Receive()\n}\n\n// GetBlockVerboseTxAsync returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See GetBlockVerboseTx or the blocking version and more details.\nfunc (c *Client) GetBlockVerboseTxAsync(blockHash *chainhash.Hash) FutureGetBlockVerboseResult {\n\thash := \"\"\n\tif blockHash != nil {\n\t\thash = blockHash.String()\n\t}\n\n\tcmd := btcjson.NewGetBlockCmd(hash, btcjson.Bool(true), btcjson.Bool(true))\n\treturn c.sendCmd(cmd)\n}\n\n// GetBlockVerboseTx returns a data structure from the server with information\n// about a block and its transactions given its hash.\n//\n// See GetBlockVerbose if only transaction hashes are preferred.\n// See GetBlock to retrieve a raw block instead.\nfunc (c *Client) GetBlockVerboseTx(blockHash *chainhash.Hash) (*btcjson.GetBlockVerboseResult, error) {\n\treturn c.GetBlockVerboseTxAsync(blockHash).Receive()\n}\n\n// FutureGetBlockCountResult is a future promise to deliver the result of a\n// GetBlockCountAsync RPC invocation (or an applicable error).\ntype FutureGetBlockCountResult chan *response\n\n// Receive waits for the response promised by the future and returns the number\n// of blocks in the longest block chain.\nfunc (r FutureGetBlockCountResult) Receive() (int64, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\t// Unmarshal the result as an int64.\n\tvar count int64\n\terr = json.Unmarshal(res, &count)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn count, nil\n}\n\n// GetBlockCountAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See GetBlockCount for the blocking version and more details.\nfunc (c *Client) GetBlockCountAsync() FutureGetBlockCountResult {\n\tcmd := btcjson.NewGetBlockCountCmd()\n\treturn c.sendCmd(cmd)\n}\n\n// GetBlockCount returns the number of blocks in the longest block chain.\nfunc (c *Client) GetBlockCount() (int64, error) {\n\treturn c.GetBlockCountAsync().Receive()\n}\n\n// FutureGetDifficultyResult is a future promise to deliver the result of a\n// GetDifficultyAsync RPC invocation (or an applicable error).\ntype FutureGetDifficultyResult chan *response\n\n// Receive waits for the response promised by the future and returns the\n// proof-of-work difficulty as a multiple of the minimum difficulty.\nfunc (r FutureGetDifficultyResult) Receive() (float64, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\t// Unmarshal the result as a float64.\n\tvar difficulty float64\n\terr = json.Unmarshal(res, &difficulty)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn difficulty, nil\n}\n\n// GetDifficultyAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See GetDifficulty for the blocking version and more details.\nfunc (c *Client) GetDifficultyAsync() FutureGetDifficultyResult {\n\tcmd := btcjson.NewGetDifficultyCmd()\n\treturn c.sendCmd(cmd)\n}\n\n// GetDifficulty returns the proof-of-work difficulty as a multiple of the\n// minimum difficulty.\nfunc (c *Client) GetDifficulty() (float64, error) {\n\treturn c.GetDifficultyAsync().Receive()\n}\n\n// FutureGetBlockChainInfoResult is a promise to deliver the result of a\n// GetBlockChainInfoAsync RPC invocation (or an applicable error).\ntype FutureGetBlockChainInfoResult chan *response\n\n// Receive waits for the response promised by the future and returns chain info\n// result provided by the server.\nfunc (r FutureGetBlockChainInfoResult) Receive() (*btcjson.GetBlockChainInfoResult, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar chainInfo btcjson.GetBlockChainInfoResult\n\tif err := json.Unmarshal(res, &chainInfo); err != nil {\n\t\treturn nil, err\n\t}\n\treturn &chainInfo, nil\n}\n\n// GetBlockChainInfoAsync returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function\n// on the returned instance.\n//\n// See GetBlockChainInfo for the blocking version and more details.\nfunc (c *Client) GetBlockChainInfoAsync() FutureGetBlockChainInfoResult {\n\tcmd := btcjson.NewGetBlockChainInfoCmd()\n\treturn c.sendCmd(cmd)\n}\n\n// GetBlockChainInfo returns information related to the processing state of\n// various chain-specific details such as the current difficulty from the tip\n// of the main chain.\nfunc (c *Client) GetBlockChainInfo() (*btcjson.GetBlockChainInfoResult, error) {\n\treturn c.GetBlockChainInfoAsync().Receive()\n}\n\n// FutureGetBlockHashResult is a future promise to deliver the result of a\n// GetBlockHashAsync RPC invocation (or an applicable error).\ntype FutureGetBlockHashResult chan *response\n\n// Receive waits for the response promised by the future and returns the hash of\n// the block in the best block chain at the given height.\nfunc (r FutureGetBlockHashResult) Receive() (*chainhash.Hash, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal the result as a string-encoded sha.\n\tvar txHashStr string\n\terr = json.Unmarshal(res, &txHashStr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn chainhash.NewHashFromStr(txHashStr)\n}\n\n// GetBlockHashAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See GetBlockHash for the blocking version and more details.\nfunc (c *Client) GetBlockHashAsync(blockHeight int64) FutureGetBlockHashResult {\n\tcmd := btcjson.NewGetBlockHashCmd(blockHeight)\n\treturn c.sendCmd(cmd)\n}\n\n// GetBlockHash returns the hash of the block in the best block chain at the\n// given height.\nfunc (c *Client) GetBlockHash(blockHeight int64) (*chainhash.Hash, error) {\n\treturn c.GetBlockHashAsync(blockHeight).Receive()\n}\n\n// FutureGetBlockHeaderResult is a future promise to deliver the result of a\n// GetBlockHeaderAsync RPC invocation (or an applicable error).\ntype FutureGetBlockHeaderResult chan *response\n\n// Receive waits for the response promised by the future and returns the\n// blockheader requested from the server given its hash.\nfunc (r FutureGetBlockHeaderResult) Receive() (*wire.BlockHeader, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal result as a string.\n\tvar bhHex string\n\terr = json.Unmarshal(res, &bhHex)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tserializedBH, err := hex.DecodeString(bhHex)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Deserialize the blockheader and return it.\n\tvar bh wire.BlockHeader\n\terr = bh.Deserialize(bytes.NewReader(serializedBH))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &bh, err\n}\n\n// GetBlockHeaderAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See GetBlockHeader for the blocking version and more details.\nfunc (c *Client) GetBlockHeaderAsync(blockHash *chainhash.Hash) FutureGetBlockHeaderResult {\n\thash := \"\"\n\tif blockHash != nil {\n\t\thash = blockHash.String()\n\t}\n\n\tcmd := btcjson.NewGetBlockHeaderCmd(hash, btcjson.Bool(false))\n\treturn c.sendCmd(cmd)\n}\n\n// GetBlockHeader returns the blockheader from the server given its hash.\n//\n// See GetBlockHeaderVerbose to retrieve a data structure with information about the\n// block instead.\nfunc (c *Client) GetBlockHeader(blockHash *chainhash.Hash) (*wire.BlockHeader, error) {\n\treturn c.GetBlockHeaderAsync(blockHash).Receive()\n}\n\n// FutureGetBlockHeaderVerboseResult is a future promise to deliver the result of a\n// GetBlockAsync RPC invocation (or an applicable error).\ntype FutureGetBlockHeaderVerboseResult chan *response\n\n// Receive waits for the response promised by the future and returns the\n// data structure of the blockheader requested from the server given its hash.\nfunc (r FutureGetBlockHeaderVerboseResult) Receive() (*btcjson.GetBlockHeaderVerboseResult, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal result as a string.\n\tvar bh btcjson.GetBlockHeaderVerboseResult\n\terr = json.Unmarshal(res, &bh)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &bh, nil\n}\n\n// GetBlockHeaderVerboseAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See GetBlockHeader for the blocking version and more details.\nfunc (c *Client) GetBlockHeaderVerboseAsync(blockHash *chainhash.Hash) FutureGetBlockHeaderVerboseResult {\n\thash := \"\"\n\tif blockHash != nil {\n\t\thash = blockHash.String()\n\t}\n\n\tcmd := btcjson.NewGetBlockHeaderCmd(hash, btcjson.Bool(true))\n\treturn c.sendCmd(cmd)\n}\n\n// GetBlockHeaderVerbose returns a data structure with information about the\n// blockheader from the server given its hash.\n//\n// See GetBlockHeader to retrieve a blockheader instead.\nfunc (c *Client) GetBlockHeaderVerbose(blockHash *chainhash.Hash) (*btcjson.GetBlockHeaderVerboseResult, error) {\n\treturn c.GetBlockHeaderVerboseAsync(blockHash).Receive()\n}\n\n// FutureGetMempoolEntryResult is a future promise to deliver the result of a\n// GetMempoolEntryAsync RPC invocation (or an applicable error).\ntype FutureGetMempoolEntryResult chan *response\n\n// Receive waits for the response promised by the future and returns a data\n// structure with information about the transaction in the memory pool given\n// its hash.\nfunc (r FutureGetMempoolEntryResult) Receive() (*btcjson.GetMempoolEntryResult, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal the result as an array of strings.\n\tvar mempoolEntryResult btcjson.GetMempoolEntryResult\n\terr = json.Unmarshal(res, &mempoolEntryResult)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &mempoolEntryResult, nil\n}\n\n// GetMempoolEntryAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See GetMempoolEntry for the blocking version and more details.\nfunc (c *Client) GetMempoolEntryAsync(txHash string) FutureGetMempoolEntryResult {\n\tcmd := btcjson.NewGetMempoolEntryCmd(txHash)\n\treturn c.sendCmd(cmd)\n}\n\n// GetMempoolEntry returns a data structure with information about the\n// transaction in the memory pool given its hash.\nfunc (c *Client) GetMempoolEntry(txHash string) (*btcjson.GetMempoolEntryResult, error) {\n\treturn c.GetMempoolEntryAsync(txHash).Receive()\n}\n\n// FutureGetRawMempoolResult is a future promise to deliver the result of a\n// GetRawMempoolAsync RPC invocation (or an applicable error).\ntype FutureGetRawMempoolResult chan *response\n\n// Receive waits for the response promised by the future and returns the hashes\n// of all transactions in the memory pool.\nfunc (r FutureGetRawMempoolResult) Receive() ([]*chainhash.Hash, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal the result as an array of strings.\n\tvar txHashStrs []string\n\terr = json.Unmarshal(res, &txHashStrs)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Create a slice of ShaHash arrays from the string slice.\n\ttxHashes := make([]*chainhash.Hash, 0, len(txHashStrs))\n\tfor _, hashStr := range txHashStrs {\n\t\ttxHash, err := chainhash.NewHashFromStr(hashStr)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ttxHashes = append(txHashes, txHash)\n\t}\n\n\treturn txHashes, nil\n}\n\n// GetRawMempoolAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See GetRawMempool for the blocking version and more details.\nfunc (c *Client) GetRawMempoolAsync() FutureGetRawMempoolResult {\n\tcmd := btcjson.NewGetRawMempoolCmd(btcjson.Bool(false))\n\treturn c.sendCmd(cmd)\n}\n\n// GetRawMempool returns the hashes of all transactions in the memory pool.\n//\n// See GetRawMempoolVerbose to retrieve data structures with information about\n// the transactions instead.\nfunc (c *Client) GetRawMempool() ([]*chainhash.Hash, error) {\n\treturn c.GetRawMempoolAsync().Receive()\n}\n\n// FutureGetRawMempoolVerboseResult is a future promise to deliver the result of\n// a GetRawMempoolVerboseAsync RPC invocation (or an applicable error).\ntype FutureGetRawMempoolVerboseResult chan *response\n\n// Receive waits for the response promised by the future and returns a map of\n// transaction hashes to an associated data structure with information about the\n// transaction for all transactions in the memory pool.\nfunc (r FutureGetRawMempoolVerboseResult) Receive() (map[string]btcjson.GetRawMempoolVerboseResult, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal the result as a map of strings (tx shas) to their detailed\n\t// results.\n\tvar mempoolItems map[string]btcjson.GetRawMempoolVerboseResult\n\terr = json.Unmarshal(res, &mempoolItems)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn mempoolItems, nil\n}\n\n// GetRawMempoolVerboseAsync returns an instance of a type that can be used to\n// get the result of the RPC at some future time by invoking the Receive\n// function on the returned instance.\n//\n// See GetRawMempoolVerbose for the blocking version and more details.\nfunc (c *Client) GetRawMempoolVerboseAsync() FutureGetRawMempoolVerboseResult {\n\tcmd := btcjson.NewGetRawMempoolCmd(btcjson.Bool(true))\n\treturn c.sendCmd(cmd)\n}\n\n// GetRawMempoolVerbose returns a map of transaction hashes to an associated\n// data structure with information about the transaction for all transactions in\n// the memory pool.\n//\n// See GetRawMempool to retrieve only the transaction hashes instead.\nfunc (c *Client) GetRawMempoolVerbose() (map[string]btcjson.GetRawMempoolVerboseResult, error) {\n\treturn c.GetRawMempoolVerboseAsync().Receive()\n}\n\n// FutureEstimateFeeResult is a future promise to deliver the result of a\n// EstimateFeeAsync RPC invocation (or an applicable error).\ntype FutureEstimateFeeResult chan *response\n\n// Receive waits for the response promised by the future and returns the info\n// provided by the server.\nfunc (r FutureEstimateFeeResult) Receive() (float64, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\n\t// Unmarshal result as a getinfo result object.\n\tvar fee float64\n\terr = json.Unmarshal(res, &fee)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\n\treturn fee, nil\n}\n\n// EstimateFeeAsync returns an instance of a type that can be used to get the result\n// of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See EstimateFee for the blocking version and more details.\nfunc (c *Client) EstimateFeeAsync(numBlocks int64) FutureEstimateFeeResult {\n\tcmd := btcjson.NewEstimateFeeCmd(numBlocks)\n\treturn c.sendCmd(cmd)\n}\n\n// EstimateFee provides an estimated fee  in bitcoins per kilobyte.\nfunc (c *Client) EstimateFee(numBlocks int64) (float64, error) {\n\treturn c.EstimateFeeAsync(numBlocks).Receive()\n}\n\n// FutureVerifyChainResult is a future promise to deliver the result of a\n// VerifyChainAsync, VerifyChainLevelAsyncRPC, or VerifyChainBlocksAsync\n// invocation (or an applicable error).\ntype FutureVerifyChainResult chan *response\n\n// Receive waits for the response promised by the future and returns whether\n// or not the chain verified based on the check level and number of blocks\n// to verify specified in the original call.\nfunc (r FutureVerifyChainResult) Receive() (bool, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\n\t// Unmarshal the result as a boolean.\n\tvar verified bool\n\terr = json.Unmarshal(res, &verified)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\treturn verified, nil\n}\n\n// VerifyChainAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See VerifyChain for the blocking version and more details.\nfunc (c *Client) VerifyChainAsync() FutureVerifyChainResult {\n\tcmd := btcjson.NewVerifyChainCmd(nil, nil)\n\treturn c.sendCmd(cmd)\n}\n\n// VerifyChain requests the server to verify the block chain database using\n// the default check level and number of blocks to verify.\n//\n// See VerifyChainLevel and VerifyChainBlocks to override the defaults.\nfunc (c *Client) VerifyChain() (bool, error) {\n\treturn c.VerifyChainAsync().Receive()\n}\n\n// VerifyChainLevelAsync returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See VerifyChainLevel for the blocking version and more details.\nfunc (c *Client) VerifyChainLevelAsync(checkLevel int32) FutureVerifyChainResult {\n\tcmd := btcjson.NewVerifyChainCmd(&checkLevel, nil)\n\treturn c.sendCmd(cmd)\n}\n\n// VerifyChainLevel requests the server to verify the block chain database using\n// the passed check level and default number of blocks to verify.\n//\n// The check level controls how thorough the verification is with higher numbers\n// increasing the amount of checks done as consequently how long the\n// verification takes.\n//\n// See VerifyChain to use the default check level and VerifyChainBlocks to\n// override the number of blocks to verify.\nfunc (c *Client) VerifyChainLevel(checkLevel int32) (bool, error) {\n\treturn c.VerifyChainLevelAsync(checkLevel).Receive()\n}\n\n// VerifyChainBlocksAsync returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See VerifyChainBlocks for the blocking version and more details.\nfunc (c *Client) VerifyChainBlocksAsync(checkLevel, numBlocks int32) FutureVerifyChainResult {\n\tcmd := btcjson.NewVerifyChainCmd(&checkLevel, &numBlocks)\n\treturn c.sendCmd(cmd)\n}\n\n// VerifyChainBlocks requests the server to verify the block chain database\n// using the passed check level and number of blocks to verify.\n//\n// The check level controls how thorough the verification is with higher numbers\n// increasing the amount of checks done as consequently how long the\n// verification takes.\n//\n// The number of blocks refers to the number of blocks from the end of the\n// current longest chain.\n//\n// See VerifyChain and VerifyChainLevel to use defaults.\nfunc (c *Client) VerifyChainBlocks(checkLevel, numBlocks int32) (bool, error) {\n\treturn c.VerifyChainBlocksAsync(checkLevel, numBlocks).Receive()\n}\n\n// FutureGetTxOutResult is a future promise to deliver the result of a\n// GetTxOutAsync RPC invocation (or an applicable error).\ntype FutureGetTxOutResult chan *response\n\n// Receive waits for the response promised by the future and returns a\n// transaction given its hash.\nfunc (r FutureGetTxOutResult) Receive() (*btcjson.GetTxOutResult, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// take care of the special case where the output has been spent already\n\t// it should return the string \"null\"\n\tif string(res) == \"null\" {\n\t\treturn nil, nil\n\t}\n\n\t// Unmarshal result as an gettxout result object.\n\tvar txOutInfo *btcjson.GetTxOutResult\n\terr = json.Unmarshal(res, &txOutInfo)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn txOutInfo, nil\n}\n\n// GetTxOutAsync returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See GetTxOut for the blocking version and more details.\nfunc (c *Client) GetTxOutAsync(txHash *chainhash.Hash, index uint32, mempool bool) FutureGetTxOutResult {\n\thash := \"\"\n\tif txHash != nil {\n\t\thash = txHash.String()\n\t}\n\n\tcmd := btcjson.NewGetTxOutCmd(hash, index, &mempool)\n\treturn c.sendCmd(cmd)\n}\n\n// GetTxOut returns the transaction output info if it's unspent and\n// nil, otherwise.\nfunc (c *Client) GetTxOut(txHash *chainhash.Hash, index uint32, mempool bool) (*btcjson.GetTxOutResult, error) {\n\treturn c.GetTxOutAsync(txHash, index, mempool).Receive()\n}\n\n// FutureRescanBlocksResult is a future promise to deliver the result of a\n// RescanBlocksAsync RPC invocation (or an applicable error).\n//\n// NOTE: This is a btcsuite extension ported from\n// github.com/decred/dcrrpcclient.\ntype FutureRescanBlocksResult chan *response\n\n// Receive waits for the response promised by the future and returns the\n// discovered rescanblocks data.\n//\n// NOTE: This is a btcsuite extension ported from\n// github.com/decred/dcrrpcclient.\nfunc (r FutureRescanBlocksResult) Receive() ([]btcjson.RescannedBlock, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar rescanBlocksResult []btcjson.RescannedBlock\n\terr = json.Unmarshal(res, &rescanBlocksResult)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn rescanBlocksResult, nil\n}\n\n// RescanBlocksAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See RescanBlocks for the blocking version and more details.\n//\n// NOTE: This is a btcsuite extension ported from\n// github.com/decred/dcrrpcclient.\nfunc (c *Client) RescanBlocksAsync(blockHashes []chainhash.Hash) FutureRescanBlocksResult {\n\tstrBlockHashes := make([]string, len(blockHashes))\n\tfor i := range blockHashes {\n\t\tstrBlockHashes[i] = blockHashes[i].String()\n\t}\n\n\tcmd := btcjson.NewRescanBlocksCmd(strBlockHashes)\n\treturn c.sendCmd(cmd)\n}\n\n// RescanBlocks rescans the blocks identified by blockHashes, in order, using\n// the client's loaded transaction filter.  The blocks do not need to be on the\n// main chain, but they do need to be adjacent to each other.\n//\n// NOTE: This is a btcsuite extension ported from\n// github.com/decred/dcrrpcclient.\nfunc (c *Client) RescanBlocks(blockHashes []chainhash.Hash) ([]btcjson.RescannedBlock, error) {\n\treturn c.RescanBlocksAsync(blockHashes).Receive()\n}\n\n// FutureInvalidateBlockResult is a future promise to deliver the result of a\n// InvalidateBlockAsync RPC invocation (or an applicable error).\ntype FutureInvalidateBlockResult chan *response\n\n// Receive waits for the response promised by the future and returns the raw\n// block requested from the server given its hash.\nfunc (r FutureInvalidateBlockResult) Receive() error {\n\t_, err := receiveFuture(r)\n\n\treturn err\n}\n\n// InvalidateBlockAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See InvalidateBlock for the blocking version and more details.\nfunc (c *Client) InvalidateBlockAsync(blockHash *chainhash.Hash) FutureInvalidateBlockResult {\n\thash := \"\"\n\tif blockHash != nil {\n\t\thash = blockHash.String()\n\t}\n\n\tcmd := btcjson.NewInvalidateBlockCmd(hash)\n\treturn c.sendCmd(cmd)\n}\n\n// InvalidateBlock invalidates a specific block.\nfunc (c *Client) InvalidateBlock(blockHash *chainhash.Hash) error {\n\treturn c.InvalidateBlockAsync(blockHash).Receive()\n}\n\n// FutureGetCFilterResult is a future promise to deliver the result of a\n// GetCFilterAsync RPC invocation (or an applicable error).\ntype FutureGetCFilterResult chan *response\n\n// Receive waits for the response promised by the future and returns the raw\n// filter requested from the server given its block hash.\nfunc (r FutureGetCFilterResult) Receive() (*wire.MsgCFilter, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal result as a string.\n\tvar filterHex string\n\terr = json.Unmarshal(res, &filterHex)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Decode the serialized cf hex to raw bytes.\n\tserializedFilter, err := hex.DecodeString(filterHex)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Assign the filter bytes to the correct field of the wire message.\n\t// We aren't going to set the block hash or extended flag, since we\n\t// don't actually get that back in the RPC response.\n\tvar msgCFilter wire.MsgCFilter\n\tmsgCFilter.Data = serializedFilter\n\treturn &msgCFilter, nil\n}\n\n// GetCFilterAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See GetCFilter for the blocking version and more details.\nfunc (c *Client) GetCFilterAsync(blockHash *chainhash.Hash,\n\tfilterType wire.FilterType) FutureGetCFilterResult {\n\thash := \"\"\n\tif blockHash != nil {\n\t\thash = blockHash.String()\n\t}\n\n\tcmd := btcjson.NewGetCFilterCmd(hash, filterType)\n\treturn c.sendCmd(cmd)\n}\n\n// GetCFilter returns a raw filter from the server given its block hash.\nfunc (c *Client) GetCFilter(blockHash *chainhash.Hash,\n\tfilterType wire.FilterType) (*wire.MsgCFilter, error) {\n\treturn c.GetCFilterAsync(blockHash, filterType).Receive()\n}\n\n// FutureGetCFilterHeaderResult is a future promise to deliver the result of a\n// GetCFilterHeaderAsync RPC invocation (or an applicable error).\ntype FutureGetCFilterHeaderResult chan *response\n\n// Receive waits for the response promised by the future and returns the raw\n// filter header requested from the server given its block hash.\nfunc (r FutureGetCFilterHeaderResult) Receive() (*wire.MsgCFHeaders, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal result as a string.\n\tvar headerHex string\n\terr = json.Unmarshal(res, &headerHex)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Assign the decoded header into a hash\n\theaderHash, err := chainhash.NewHashFromStr(headerHex)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Assign the hash to a headers message and return it.\n\tmsgCFHeaders := wire.MsgCFHeaders{PrevFilterHeader: *headerHash}\n\treturn &msgCFHeaders, nil\n\n}\n\n// GetCFilterHeaderAsync returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function\n// on the returned instance.\n//\n// See GetCFilterHeader for the blocking version and more details.\nfunc (c *Client) GetCFilterHeaderAsync(blockHash *chainhash.Hash,\n\tfilterType wire.FilterType) FutureGetCFilterHeaderResult {\n\thash := \"\"\n\tif blockHash != nil {\n\t\thash = blockHash.String()\n\t}\n\n\tcmd := btcjson.NewGetCFilterHeaderCmd(hash, filterType)\n\treturn c.sendCmd(cmd)\n}\n\n// GetCFilterHeader returns a raw filter header from the server given its block\n// hash.\nfunc (c *Client) GetCFilterHeader(blockHash *chainhash.Hash,\n\tfilterType wire.FilterType) (*wire.MsgCFHeaders, error) {\n\treturn c.GetCFilterHeaderAsync(blockHash, filterType).Receive()\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/rpcclient/doc.go",
    "content": "// Copyright (c) 2014-2017 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\n/*\nPackage rpcclient implements a websocket-enabled Bitcoin JSON-RPC client.\n\nOverview\n\nThis client provides a robust and easy to use client for interfacing with a\nBitcoin RPC server that uses a btcd/bitcoin core compatible Bitcoin JSON-RPC\nAPI.  This client has been tested with btcd (https://github.com/btcsuite/btcd),\nbtcwallet (https://github.com/btcsuite/btcwallet), and\nbitcoin core (https://github.com/bitcoin).\n\nIn addition to the compatible standard HTTP POST JSON-RPC API, btcd and\nbtcwallet provide a websocket interface that is more efficient than the standard\nHTTP POST method of accessing RPC.  The section below discusses the differences\nbetween HTTP POST and websockets.\n\nBy default, this client assumes the RPC server supports websockets and has\nTLS enabled.  In practice, this currently means it assumes you are talking to\nbtcd or btcwallet by default.  However, configuration options are provided to\nfall back to HTTP POST and disable TLS to support talking with inferior bitcoin\ncore style RPC servers.\n\nWebsockets vs HTTP POST\n\nIn HTTP POST-based JSON-RPC, every request creates a new HTTP connection,\nissues the call, waits for the response, and closes the connection.  This adds\nquite a bit of overhead to every call and lacks flexibility for features such as\nnotifications.\n\nIn contrast, the websocket-based JSON-RPC interface provided by btcd and\nbtcwallet only uses a single connection that remains open and allows\nasynchronous bi-directional communication.\n\nThe websocket interface supports all of the same commands as HTTP POST, but they\ncan be invoked without having to go through a connect/disconnect cycle for every\ncall.  In addition, the websocket interface provides other nice features such as\nthe ability to register for asynchronous notifications of various events.\n\nSynchronous vs Asynchronous API\n\nThe client provides both a synchronous (blocking) and asynchronous API.\n\nThe synchronous (blocking) API is typically sufficient for most use cases.  It\nworks by issuing the RPC and blocking until the response is received.  This\nallows  straightforward code where you have the response as soon as the function\nreturns.\n\nThe asynchronous API works on the concept of futures.  When you invoke the async\nversion of a command, it will quickly return an instance of a type that promises\nto provide the result of the RPC at some future time.  In the background, the\nRPC call is issued and the result is stored in the returned instance.  Invoking\nthe Receive method on the returned instance will either return the result\nimmediately if it has already arrived, or block until it has.  This is useful\nsince it provides the caller with greater control over concurrency.\n\nNotifications\n\nThe first important part of notifications is to realize that they will only\nwork when connected via websockets.  This should intuitively make sense\nbecause HTTP POST mode does not keep a connection open!\n\nAll notifications provided by btcd require registration to opt-in.  For example,\nif you want to be notified when funds are received by a set of addresses, you\nregister the addresses via the NotifyReceived (or NotifyReceivedAsync) function.\n\nNotification Handlers\n\nNotifications are exposed by the client through the use of callback handlers\nwhich are setup via a NotificationHandlers instance that is specified by the\ncaller when creating the client.\n\nIt is important that these notification handlers complete quickly since they\nare intentionally in the main read loop and will block further reads until\nthey complete.  This provides the caller with the flexibility to decide what to\ndo when notifications are coming in faster than they are being handled.\n\nIn particular this means issuing a blocking RPC call from a callback handler\nwill cause a deadlock as more server responses won't be read until the callback\nreturns, but the callback would be waiting for a response.   Thus, any\nadditional RPCs must be issued an a completely decoupled manner.\n\nAutomatic Reconnection\n\nBy default, when running in websockets mode, this client will automatically\nkeep trying to reconnect to the RPC server should the connection be lost.  There\nis a back-off in between each connection attempt until it reaches one try per\nminute.  Once a connection is re-established, all previously registered\nnotifications are automatically re-registered and any in-flight commands are\nre-issued.  This means from the caller's perspective, the request simply takes\nlonger to complete.\n\nThe caller may invoke the Shutdown method on the client to force the client\nto cease reconnect attempts and return ErrClientShutdown for all outstanding\ncommands.\n\nThe automatic reconnection can be disabled by setting the DisableAutoReconnect\nflag to true in the connection config when creating the client.\n\nMinor RPC Server Differences and Chain/Wallet Separation\n\nSome of the commands are extensions specific to a particular RPC server.  For\nexample, the DebugLevel call is an extension only provided by btcd (and\nbtcwallet passthrough).  Therefore if you call one of these commands against\nan RPC server that doesn't provide them, you will get an unimplemented error\nfrom the server.  An effort has been made to call out which commmands are\nextensions in their documentation.\n\nAlso, it is important to realize that btcd intentionally separates the wallet\nfunctionality into a separate process named btcwallet.  This means if you are\nconnected to the btcd RPC server directly, only the RPCs which are related to\nchain services will be available.  Depending on your application, you might only\nneed chain-related RPCs.  In contrast, btcwallet provides pass through treatment\nfor chain-related RPCs, so it supports them in addition to wallet-related RPCs.\n\nErrors\n\nThere are 3 categories of errors that will be returned throughout this package:\n\n  - Errors related to the client connection such as authentication, endpoint,\n    disconnect, and shutdown\n  - Errors that occur before communicating with the remote RPC server such as\n    command creation and marshaling errors or issues talking to the remote\n    server\n  - Errors returned from the remote RPC server like unimplemented commands,\n    nonexistent requested blocks and transactions, malformed data, and incorrect\n    networks\n\nThe first category of errors are typically one of ErrInvalidAuth,\nErrInvalidEndpoint, ErrClientDisconnect, or ErrClientShutdown.\n\nNOTE: The ErrClientDisconnect will not be returned unless the\nDisableAutoReconnect flag is set since the client automatically handles\nreconnect by default as previously described.\n\nThe second category of errors typically indicates a programmer error and as such\nthe type can vary, but usually will be best handled by simply showing/logging\nit.\n\nThe third category of errors, that is errors returned by the server, can be\ndetected by type asserting the error in a *btcjson.RPCError.  For example, to\ndetect if a command is unimplemented by the remote RPC server:\n\n  amount, err := client.GetBalance(\"\")\n  if err != nil {\n  \tif jerr, ok := err.(*btcjson.RPCError); ok {\n  \t\tswitch jerr.Code {\n  \t\tcase btcjson.ErrRPCUnimplemented:\n  \t\t\t// Handle not implemented error\n\n  \t\t// Handle other specific errors you care about\n\t\t}\n  \t}\n\n  \t// Log or otherwise handle the error knowing it was not one returned\n  \t// from the remote RPC server.\n  }\n\nExample Usage\n\nThe following full-blown client examples are in the examples directory:\n\n - bitcoincorehttp\n   Connects to a bitcoin core RPC server using HTTP POST mode with TLS disabled\n   and gets the current block count\n - btcdwebsockets\n   Connects to a btcd RPC server using TLS-secured websockets, registers for\n   block connected and block disconnected notifications, and gets the current\n   block count\n - btcwalletwebsockets\n   Connects to a btcwallet RPC server using TLS-secured websockets, registers\n   for notifications about changes to account balances, and gets a list of\n   unspent transaction outputs (utxos) the wallet can sign\n*/\npackage rpcclient\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/rpcclient/extensions.go",
    "content": "// Copyright (c) 2014-2017 The btcsuite developers\n// Copyright (c) 2015-2017 The Decred developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage rpcclient\n\nimport (\n\t\"bytes\"\n\t\"encoding/base64\"\n\t\"encoding/hex\"\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/btcsuite/btcd/btcjson\"\n\t\"github.com/btcsuite/btcd/chaincfg/chainhash\"\n\t\"github.com/btcsuite/btcd/wire\"\n\t\"github.com/btcsuite/btcutil\"\n)\n\n// FutureDebugLevelResult is a future promise to deliver the result of a\n// DebugLevelAsync RPC invocation (or an applicable error).\ntype FutureDebugLevelResult chan *response\n\n// Receive waits for the response promised by the future and returns the result\n// of setting the debug logging level to the passed level specification or the\n// list of of the available subsystems for the special keyword 'show'.\nfunc (r FutureDebugLevelResult) Receive() (string, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\t// Unmashal the result as a string.\n\tvar result string\n\terr = json.Unmarshal(res, &result)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn result, nil\n}\n\n// DebugLevelAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See DebugLevel for the blocking version and more details.\n//\n// NOTE: This is a btcd extension.\nfunc (c *Client) DebugLevelAsync(levelSpec string) FutureDebugLevelResult {\n\tcmd := btcjson.NewDebugLevelCmd(levelSpec)\n\treturn c.sendCmd(cmd)\n}\n\n// DebugLevel dynamically sets the debug logging level to the passed level\n// specification.\n//\n// The levelspec can be either a debug level or of the form:\n// \t<subsystem>=<level>,<subsystem2>=<level2>,...\n//\n// Additionally, the special keyword 'show' can be used to get a list of the\n// available subsystems.\n//\n// NOTE: This is a btcd extension.\nfunc (c *Client) DebugLevel(levelSpec string) (string, error) {\n\treturn c.DebugLevelAsync(levelSpec).Receive()\n}\n\n// FutureCreateEncryptedWalletResult is a future promise to deliver the error\n// result of a CreateEncryptedWalletAsync RPC invocation.\ntype FutureCreateEncryptedWalletResult chan *response\n\n// Receive waits for and returns the error response promised by the future.\nfunc (r FutureCreateEncryptedWalletResult) Receive() error {\n\t_, err := receiveFuture(r)\n\treturn err\n}\n\n// CreateEncryptedWalletAsync returns an instance of a type that can be used to\n// get the result of the RPC at some future time by invoking the Receive\n// function on the returned instance.\n//\n// See CreateEncryptedWallet for the blocking version and more details.\n//\n// NOTE: This is a btcwallet extension.\nfunc (c *Client) CreateEncryptedWalletAsync(passphrase string) FutureCreateEncryptedWalletResult {\n\tcmd := btcjson.NewCreateEncryptedWalletCmd(passphrase)\n\treturn c.sendCmd(cmd)\n}\n\n// CreateEncryptedWallet requests the creation of an encrypted wallet.  Wallets\n// managed by btcwallet are only written to disk with encrypted private keys,\n// and generating wallets on the fly is impossible as it requires user input for\n// the encryption passphrase.  This RPC specifies the passphrase and instructs\n// the wallet creation.  This may error if a wallet is already opened, or the\n// new wallet cannot be written to disk.\n//\n// NOTE: This is a btcwallet extension.\nfunc (c *Client) CreateEncryptedWallet(passphrase string) error {\n\treturn c.CreateEncryptedWalletAsync(passphrase).Receive()\n}\n\n// FutureListAddressTransactionsResult is a future promise to deliver the result\n// of a ListAddressTransactionsAsync RPC invocation (or an applicable error).\ntype FutureListAddressTransactionsResult chan *response\n\n// Receive waits for the response promised by the future and returns information\n// about all transactions associated with the provided addresses.\nfunc (r FutureListAddressTransactionsResult) Receive() ([]btcjson.ListTransactionsResult, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal the result as an array of listtransactions objects.\n\tvar transactions []btcjson.ListTransactionsResult\n\terr = json.Unmarshal(res, &transactions)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn transactions, nil\n}\n\n// ListAddressTransactionsAsync returns an instance of a type that can be used\n// to get the result of the RPC at some future time by invoking the Receive\n// function on the returned instance.\n//\n// See ListAddressTransactions for the blocking version and more details.\n//\n// NOTE: This is a btcd extension.\nfunc (c *Client) ListAddressTransactionsAsync(addresses []btcutil.Address, account string) FutureListAddressTransactionsResult {\n\t// Convert addresses to strings.\n\taddrs := make([]string, 0, len(addresses))\n\tfor _, addr := range addresses {\n\t\taddrs = append(addrs, addr.EncodeAddress())\n\t}\n\tcmd := btcjson.NewListAddressTransactionsCmd(addrs, &account)\n\treturn c.sendCmd(cmd)\n}\n\n// ListAddressTransactions returns information about all transactions associated\n// with the provided addresses.\n//\n// NOTE: This is a btcwallet extension.\nfunc (c *Client) ListAddressTransactions(addresses []btcutil.Address, account string) ([]btcjson.ListTransactionsResult, error) {\n\treturn c.ListAddressTransactionsAsync(addresses, account).Receive()\n}\n\n// FutureGetBestBlockResult is a future promise to deliver the result of a\n// GetBestBlockAsync RPC invocation (or an applicable error).\ntype FutureGetBestBlockResult chan *response\n\n// Receive waits for the response promised by the future and returns the hash\n// and height of the block in the longest (best) chain.\nfunc (r FutureGetBestBlockResult) Receive() (*chainhash.Hash, int32, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, 0, err\n\t}\n\n\t// Unmarshal result as a getbestblock result object.\n\tvar bestBlock btcjson.GetBestBlockResult\n\terr = json.Unmarshal(res, &bestBlock)\n\tif err != nil {\n\t\treturn nil, 0, err\n\t}\n\n\t// Convert to hash from string.\n\thash, err := chainhash.NewHashFromStr(bestBlock.Hash)\n\tif err != nil {\n\t\treturn nil, 0, err\n\t}\n\n\treturn hash, bestBlock.Height, nil\n}\n\n// GetBestBlockAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See GetBestBlock for the blocking version and more details.\n//\n// NOTE: This is a btcd extension.\nfunc (c *Client) GetBestBlockAsync() FutureGetBestBlockResult {\n\tcmd := btcjson.NewGetBestBlockCmd()\n\treturn c.sendCmd(cmd)\n}\n\n// GetBestBlock returns the hash and height of the block in the longest (best)\n// chain.\n//\n// NOTE: This is a btcd extension.\nfunc (c *Client) GetBestBlock() (*chainhash.Hash, int32, error) {\n\treturn c.GetBestBlockAsync().Receive()\n}\n\n// FutureGetCurrentNetResult is a future promise to deliver the result of a\n// GetCurrentNetAsync RPC invocation (or an applicable error).\ntype FutureGetCurrentNetResult chan *response\n\n// Receive waits for the response promised by the future and returns the network\n// the server is running on.\nfunc (r FutureGetCurrentNetResult) Receive() (wire.BitcoinNet, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\t// Unmarshal result as an int64.\n\tvar net int64\n\terr = json.Unmarshal(res, &net)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn wire.BitcoinNet(net), nil\n}\n\n// GetCurrentNetAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See GetCurrentNet for the blocking version and more details.\n//\n// NOTE: This is a btcd extension.\nfunc (c *Client) GetCurrentNetAsync() FutureGetCurrentNetResult {\n\tcmd := btcjson.NewGetCurrentNetCmd()\n\treturn c.sendCmd(cmd)\n}\n\n// GetCurrentNet returns the network the server is running on.\n//\n// NOTE: This is a btcd extension.\nfunc (c *Client) GetCurrentNet() (wire.BitcoinNet, error) {\n\treturn c.GetCurrentNetAsync().Receive()\n}\n\n// FutureGetHeadersResult is a future promise to deliver the result of a\n// getheaders RPC invocation (or an applicable error).\n//\n// NOTE: This is a btcsuite extension ported from\n// github.com/decred/dcrrpcclient.\ntype FutureGetHeadersResult chan *response\n\n// Receive waits for the response promised by the future and returns the\n// getheaders result.\n//\n// NOTE: This is a btcsuite extension ported from\n// github.com/decred/dcrrpcclient.\nfunc (r FutureGetHeadersResult) Receive() ([]wire.BlockHeader, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal result as a slice of strings.\n\tvar result []string\n\terr = json.Unmarshal(res, &result)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Deserialize the []string into []wire.BlockHeader.\n\theaders := make([]wire.BlockHeader, len(result))\n\tfor i, headerHex := range result {\n\t\tserialized, err := hex.DecodeString(headerHex)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\terr = headers[i].Deserialize(bytes.NewReader(serialized))\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\treturn headers, nil\n}\n\n// GetHeadersAsync returns an instance of a type that can be used to get the result\n// of the RPC at some future time by invoking the Receive function on the returned instance.\n//\n// See GetHeaders for the blocking version and more details.\n//\n// NOTE: This is a btcsuite extension ported from\n// github.com/decred/dcrrpcclient.\nfunc (c *Client) GetHeadersAsync(blockLocators []chainhash.Hash, hashStop *chainhash.Hash) FutureGetHeadersResult {\n\tlocators := make([]string, len(blockLocators))\n\tfor i := range blockLocators {\n\t\tlocators[i] = blockLocators[i].String()\n\t}\n\thash := \"\"\n\tif hashStop != nil {\n\t\thash = hashStop.String()\n\t}\n\tcmd := btcjson.NewGetHeadersCmd(locators, hash)\n\treturn c.sendCmd(cmd)\n}\n\n// GetHeaders mimics the wire protocol getheaders and headers messages by\n// returning all headers on the main chain after the first known block in the\n// locators, up until a block hash matches hashStop.\n//\n// NOTE: This is a btcsuite extension ported from\n// github.com/decred/dcrrpcclient.\nfunc (c *Client) GetHeaders(blockLocators []chainhash.Hash, hashStop *chainhash.Hash) ([]wire.BlockHeader, error) {\n\treturn c.GetHeadersAsync(blockLocators, hashStop).Receive()\n}\n\n// FutureExportWatchingWalletResult is a future promise to deliver the result of\n// an ExportWatchingWalletAsync RPC invocation (or an applicable error).\ntype FutureExportWatchingWalletResult chan *response\n\n// Receive waits for the response promised by the future and returns the\n// exported wallet.\nfunc (r FutureExportWatchingWalletResult) Receive() ([]byte, []byte, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\t// Unmarshal result as a JSON object.\n\tvar obj map[string]interface{}\n\terr = json.Unmarshal(res, &obj)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\t// Check for the wallet and tx string fields in the object.\n\tbase64Wallet, ok := obj[\"wallet\"].(string)\n\tif !ok {\n\t\treturn nil, nil, fmt.Errorf(\"unexpected response type for \"+\n\t\t\t\"exportwatchingwallet 'wallet' field: %T\\n\",\n\t\t\tobj[\"wallet\"])\n\t}\n\tbase64TxStore, ok := obj[\"tx\"].(string)\n\tif !ok {\n\t\treturn nil, nil, fmt.Errorf(\"unexpected response type for \"+\n\t\t\t\"exportwatchingwallet 'tx' field: %T\\n\",\n\t\t\tobj[\"tx\"])\n\t}\n\n\twalletBytes, err := base64.StdEncoding.DecodeString(base64Wallet)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\ttxStoreBytes, err := base64.StdEncoding.DecodeString(base64TxStore)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\treturn walletBytes, txStoreBytes, nil\n\n}\n\n// ExportWatchingWalletAsync returns an instance of a type that can be used to\n// get the result of the RPC at some future time by invoking the Receive\n// function on the returned instance.\n//\n// See ExportWatchingWallet for the blocking version and more details.\n//\n// NOTE: This is a btcwallet extension.\nfunc (c *Client) ExportWatchingWalletAsync(account string) FutureExportWatchingWalletResult {\n\tcmd := btcjson.NewExportWatchingWalletCmd(&account, btcjson.Bool(true))\n\treturn c.sendCmd(cmd)\n}\n\n// ExportWatchingWallet returns the raw bytes for a watching-only version of\n// wallet.bin and tx.bin, respectively, for the specified account that can be\n// used by btcwallet to enable a wallet which does not have the private keys\n// necessary to spend funds.\n//\n// NOTE: This is a btcwallet extension.\nfunc (c *Client) ExportWatchingWallet(account string) ([]byte, []byte, error) {\n\treturn c.ExportWatchingWalletAsync(account).Receive()\n}\n\n// FutureSessionResult is a future promise to deliver the result of a\n// SessionAsync RPC invocation (or an applicable error).\ntype FutureSessionResult chan *response\n\n// Receive waits for the response promised by the future and returns the\n// session result.\nfunc (r FutureSessionResult) Receive() (*btcjson.SessionResult, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal result as a session result object.\n\tvar session btcjson.SessionResult\n\terr = json.Unmarshal(res, &session)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &session, nil\n}\n\n// SessionAsync returns an instance of a type that can be used to get the result\n// of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See Session for the blocking version and more details.\n//\n// NOTE: This is a btcsuite extension.\nfunc (c *Client) SessionAsync() FutureSessionResult {\n\t// Not supported in HTTP POST mode.\n\tif c.config.HTTPPostMode {\n\t\treturn newFutureError(ErrWebsocketsRequired)\n\t}\n\n\tcmd := btcjson.NewSessionCmd()\n\treturn c.sendCmd(cmd)\n}\n\n// Session returns details regarding a websocket client's current connection.\n//\n// This RPC requires the client to be running in websocket mode.\n//\n// NOTE: This is a btcsuite extension.\nfunc (c *Client) Session() (*btcjson.SessionResult, error) {\n\treturn c.SessionAsync().Receive()\n}\n\n// FutureVersionResult is a future promise to deliver the result of a version\n// RPC invocation (or an applicable error).\n//\n// NOTE: This is a btcsuite extension ported from\n// github.com/decred/dcrrpcclient.\ntype FutureVersionResult chan *response\n\n// Receive waits for the response promised by the future and returns the version\n// result.\n//\n// NOTE: This is a btcsuite extension ported from\n// github.com/decred/dcrrpcclient.\nfunc (r FutureVersionResult) Receive() (map[string]btcjson.VersionResult,\n\terror) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal result as a version result object.\n\tvar vr map[string]btcjson.VersionResult\n\terr = json.Unmarshal(res, &vr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn vr, nil\n}\n\n// VersionAsync returns an instance of a type that can be used to get the result\n// of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See Version for the blocking version and more details.\n//\n// NOTE: This is a btcsuite extension ported from\n// github.com/decred/dcrrpcclient.\nfunc (c *Client) VersionAsync() FutureVersionResult {\n\tcmd := btcjson.NewVersionCmd()\n\treturn c.sendCmd(cmd)\n}\n\n// Version returns information about the server's JSON-RPC API versions.\n//\n// NOTE: This is a btcsuite extension ported from\n// github.com/decred/dcrrpcclient.\nfunc (c *Client) Version() (map[string]btcjson.VersionResult, error) {\n\treturn c.VersionAsync().Receive()\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/rpcclient/infrastructure.go",
    "content": "// Copyright (c) 2014-2017 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage rpcclient\n\nimport (\n\t\"bytes\"\n\t\"container/list\"\n\t\"crypto/tls\"\n\t\"crypto/x509\"\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"math\"\n\t\"net\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\t\"github.com/btcsuite/btcd/btcjson\"\n\t\"github.com/btcsuite/go-socks/socks\"\n\t\"github.com/btcsuite/websocket\"\n)\n\nvar (\n\t// ErrInvalidAuth is an error to describe the condition where the client\n\t// is either unable to authenticate or the specified endpoint is\n\t// incorrect.\n\tErrInvalidAuth = errors.New(\"authentication failure\")\n\n\t// ErrInvalidEndpoint is an error to describe the condition where the\n\t// websocket handshake failed with the specified endpoint.\n\tErrInvalidEndpoint = errors.New(\"the endpoint either does not support \" +\n\t\t\"websockets or does not exist\")\n\n\t// ErrClientNotConnected is an error to describe the condition where a\n\t// websocket client has been created, but the connection was never\n\t// established.  This condition differs from ErrClientDisconnect, which\n\t// represents an established connection that was lost.\n\tErrClientNotConnected = errors.New(\"the client was never connected\")\n\n\t// ErrClientDisconnect is an error to describe the condition where the\n\t// client has been disconnected from the RPC server.  When the\n\t// DisableAutoReconnect option is not set, any outstanding futures\n\t// when a client disconnect occurs will return this error as will\n\t// any new requests.\n\tErrClientDisconnect = errors.New(\"the client has been disconnected\")\n\n\t// ErrClientShutdown is an error to describe the condition where the\n\t// client is either already shutdown, or in the process of shutting\n\t// down.  Any outstanding futures when a client shutdown occurs will\n\t// return this error as will any new requests.\n\tErrClientShutdown = errors.New(\"the client has been shutdown\")\n\n\t// ErrNotWebsocketClient is an error to describe the condition of\n\t// calling a Client method intended for a websocket client when the\n\t// client has been configured to run in HTTP POST mode instead.\n\tErrNotWebsocketClient = errors.New(\"client is not configured for \" +\n\t\t\"websockets\")\n\n\t// ErrClientAlreadyConnected is an error to describe the condition where\n\t// a new client connection cannot be established due to a websocket\n\t// client having already connected to the RPC server.\n\tErrClientAlreadyConnected = errors.New(\"websocket client has already \" +\n\t\t\"connected\")\n)\n\nconst (\n\t// sendBufferSize is the number of elements the websocket send channel\n\t// can queue before blocking.\n\tsendBufferSize = 50\n\n\t// sendPostBufferSize is the number of elements the HTTP POST send\n\t// channel can queue before blocking.\n\tsendPostBufferSize = 100\n\n\t// connectionRetryInterval is the amount of time to wait in between\n\t// retries when automatically reconnecting to an RPC server.\n\tconnectionRetryInterval = time.Second * 5\n)\n\n// sendPostDetails houses an HTTP POST request to send to an RPC server as well\n// as the original JSON-RPC command and a channel to reply on when the server\n// responds with the result.\ntype sendPostDetails struct {\n\thttpRequest *http.Request\n\tjsonRequest *jsonRequest\n}\n\n// jsonRequest holds information about a json request that is used to properly\n// detect, interpret, and deliver a reply to it.\ntype jsonRequest struct {\n\tid             uint64\n\tmethod         string\n\tcmd            interface{}\n\tmarshalledJSON []byte\n\tresponseChan   chan *response\n}\n\n// Client represents a Bitcoin RPC client which allows easy access to the\n// various RPC methods available on a Bitcoin RPC server.  Each of the wrapper\n// functions handle the details of converting the passed and return types to and\n// from the underlying JSON types which are required for the JSON-RPC\n// invocations\n//\n// The client provides each RPC in both synchronous (blocking) and asynchronous\n// (non-blocking) forms.  The asynchronous forms are based on the concept of\n// futures where they return an instance of a type that promises to deliver the\n// result of the invocation at some future time.  Invoking the Receive method on\n// the returned future will block until the result is available if it's not\n// already.\ntype Client struct {\n\tid uint64 // atomic, so must stay 64-bit aligned\n\n\t// config holds the connection configuration assoiated with this client.\n\tconfig *ConnConfig\n\n\t// wsConn is the underlying websocket connection when not in HTTP POST\n\t// mode.\n\twsConn *websocket.Conn\n\n\t// httpClient is the underlying HTTP client to use when running in HTTP\n\t// POST mode.\n\thttpClient *http.Client\n\n\t// mtx is a mutex to protect access to connection related fields.\n\tmtx sync.Mutex\n\n\t// disconnected indicated whether or not the server is disconnected.\n\tdisconnected bool\n\n\t// retryCount holds the number of times the client has tried to\n\t// reconnect to the RPC server.\n\tretryCount int64\n\n\t// Track command and their response channels by ID.\n\trequestLock sync.Mutex\n\trequestMap  map[uint64]*list.Element\n\trequestList *list.List\n\n\t// Notifications.\n\tntfnHandlers  *NotificationHandlers\n\tntfnStateLock sync.Mutex\n\tntfnState     *notificationState\n\n\t// Networking infrastructure.\n\tsendChan        chan []byte\n\tsendPostChan    chan *sendPostDetails\n\tconnEstablished chan struct{}\n\tdisconnect      chan struct{}\n\tshutdown        chan struct{}\n\twg              sync.WaitGroup\n}\n\n// NextID returns the next id to be used when sending a JSON-RPC message.  This\n// ID allows responses to be associated with particular requests per the\n// JSON-RPC specification.  Typically the consumer of the client does not need\n// to call this function, however, if a custom request is being created and used\n// this function should be used to ensure the ID is unique amongst all requests\n// being made.\nfunc (c *Client) NextID() uint64 {\n\treturn atomic.AddUint64(&c.id, 1)\n}\n\n// addRequest associates the passed jsonRequest with its id.  This allows the\n// response from the remote server to be unmarshalled to the appropriate type\n// and sent to the specified channel when it is received.\n//\n// If the client has already begun shutting down, ErrClientShutdown is returned\n// and the request is not added.\n//\n// This function is safe for concurrent access.\nfunc (c *Client) addRequest(jReq *jsonRequest) error {\n\tc.requestLock.Lock()\n\tdefer c.requestLock.Unlock()\n\n\t// A non-blocking read of the shutdown channel with the request lock\n\t// held avoids adding the request to the client's internal data\n\t// structures if the client is in the process of shutting down (and\n\t// has not yet grabbed the request lock), or has finished shutdown\n\t// already (responding to each outstanding request with\n\t// ErrClientShutdown).\n\tselect {\n\tcase <-c.shutdown:\n\t\treturn ErrClientShutdown\n\tdefault:\n\t}\n\n\telement := c.requestList.PushBack(jReq)\n\tc.requestMap[jReq.id] = element\n\treturn nil\n}\n\n// removeRequest returns and removes the jsonRequest which contains the response\n// channel and original method associated with the passed id or nil if there is\n// no association.\n//\n// This function is safe for concurrent access.\nfunc (c *Client) removeRequest(id uint64) *jsonRequest {\n\tc.requestLock.Lock()\n\tdefer c.requestLock.Unlock()\n\n\telement := c.requestMap[id]\n\tif element != nil {\n\t\tdelete(c.requestMap, id)\n\t\trequest := c.requestList.Remove(element).(*jsonRequest)\n\t\treturn request\n\t}\n\n\treturn nil\n}\n\n// removeAllRequests removes all the jsonRequests which contain the response\n// channels for outstanding requests.\n//\n// This function MUST be called with the request lock held.\nfunc (c *Client) removeAllRequests() {\n\tc.requestMap = make(map[uint64]*list.Element)\n\tc.requestList.Init()\n}\n\n// trackRegisteredNtfns examines the passed command to see if it is one of\n// the notification commands and updates the notification state that is used\n// to automatically re-establish registered notifications on reconnects.\nfunc (c *Client) trackRegisteredNtfns(cmd interface{}) {\n\t// Nothing to do if the caller is not interested in notifications.\n\tif c.ntfnHandlers == nil {\n\t\treturn\n\t}\n\n\tc.ntfnStateLock.Lock()\n\tdefer c.ntfnStateLock.Unlock()\n\n\tswitch bcmd := cmd.(type) {\n\tcase *btcjson.NotifyBlocksCmd:\n\t\tc.ntfnState.notifyBlocks = true\n\n\tcase *btcjson.NotifyNewTransactionsCmd:\n\t\tif bcmd.Verbose != nil && *bcmd.Verbose {\n\t\t\tc.ntfnState.notifyNewTxVerbose = true\n\t\t} else {\n\t\t\tc.ntfnState.notifyNewTx = true\n\n\t\t}\n\n\tcase *btcjson.NotifySpentCmd:\n\t\tfor _, op := range bcmd.OutPoints {\n\t\t\tc.ntfnState.notifySpent[op] = struct{}{}\n\t\t}\n\n\tcase *btcjson.NotifyReceivedCmd:\n\t\tfor _, addr := range bcmd.Addresses {\n\t\t\tc.ntfnState.notifyReceived[addr] = struct{}{}\n\t\t}\n\t}\n}\n\ntype (\n\t// inMessage is the first type that an incoming message is unmarshaled\n\t// into. It supports both requests (for notification support) and\n\t// responses.  The partially-unmarshaled message is a notification if\n\t// the embedded ID (from the response) is nil.  Otherwise, it is a\n\t// response.\n\tinMessage struct {\n\t\tID *float64 `json:\"id\"`\n\t\t*rawNotification\n\t\t*rawResponse\n\t}\n\n\t// rawNotification is a partially-unmarshaled JSON-RPC notification.\n\trawNotification struct {\n\t\tMethod string            `json:\"method\"`\n\t\tParams []json.RawMessage `json:\"params\"`\n\t}\n\n\t// rawResponse is a partially-unmarshaled JSON-RPC response.  For this\n\t// to be valid (according to JSON-RPC 1.0 spec), ID may not be nil.\n\trawResponse struct {\n\t\tResult json.RawMessage   `json:\"result\"`\n\t\tError  *btcjson.RPCError `json:\"error\"`\n\t}\n)\n\n// response is the raw bytes of a JSON-RPC result, or the error if the response\n// error object was non-null.\ntype response struct {\n\tresult []byte\n\terr    error\n}\n\n// result checks whether the unmarshaled response contains a non-nil error,\n// returning an unmarshaled btcjson.RPCError (or an unmarshaling error) if so.\n// If the response is not an error, the raw bytes of the request are\n// returned for further unmashaling into specific result types.\nfunc (r rawResponse) result() (result []byte, err error) {\n\tif r.Error != nil {\n\t\treturn nil, r.Error\n\t}\n\treturn r.Result, nil\n}\n\n// handleMessage is the main handler for incoming notifications and responses.\nfunc (c *Client) handleMessage(msg []byte) {\n\t// Attempt to unmarshal the message as either a notification or\n\t// response.\n\tvar in inMessage\n\tin.rawResponse = new(rawResponse)\n\tin.rawNotification = new(rawNotification)\n\terr := json.Unmarshal(msg, &in)\n\tif err != nil {\n\t\tlog.Warnf(\"Remote server sent invalid message: %v\", err)\n\t\treturn\n\t}\n\n\t// JSON-RPC 1.0 notifications are requests with a null id.\n\tif in.ID == nil {\n\t\tntfn := in.rawNotification\n\t\tif ntfn == nil {\n\t\t\tlog.Warn(\"Malformed notification: missing \" +\n\t\t\t\t\"method and parameters\")\n\t\t\treturn\n\t\t}\n\t\tif ntfn.Method == \"\" {\n\t\t\tlog.Warn(\"Malformed notification: missing method\")\n\t\t\treturn\n\t\t}\n\t\t// params are not optional: nil isn't valid (but len == 0 is)\n\t\tif ntfn.Params == nil {\n\t\t\tlog.Warn(\"Malformed notification: missing params\")\n\t\t\treturn\n\t\t}\n\t\t// Deliver the notification.\n\t\tlog.Tracef(\"Received notification [%s]\", in.Method)\n\t\tc.handleNotification(in.rawNotification)\n\t\treturn\n\t}\n\n\t// ensure that in.ID can be converted to an integer without loss of precision\n\tif *in.ID < 0 || *in.ID != math.Trunc(*in.ID) {\n\t\tlog.Warn(\"Malformed response: invalid identifier\")\n\t\treturn\n\t}\n\n\tif in.rawResponse == nil {\n\t\tlog.Warn(\"Malformed response: missing result and error\")\n\t\treturn\n\t}\n\n\tid := uint64(*in.ID)\n\tlog.Tracef(\"Received response for id %d (result %s)\", id, in.Result)\n\trequest := c.removeRequest(id)\n\n\t// Nothing more to do if there is no request associated with this reply.\n\tif request == nil || request.responseChan == nil {\n\t\tlog.Warnf(\"Received unexpected reply: %s (id %d)\", in.Result,\n\t\t\tid)\n\t\treturn\n\t}\n\n\t// Since the command was successful, examine it to see if it's a\n\t// notification, and if is, add it to the notification state so it\n\t// can automatically be re-established on reconnect.\n\tc.trackRegisteredNtfns(request.cmd)\n\n\t// Deliver the response.\n\tresult, err := in.rawResponse.result()\n\trequest.responseChan <- &response{result: result, err: err}\n}\n\n// shouldLogReadError returns whether or not the passed error, which is expected\n// to have come from reading from the websocket connection in wsInHandler,\n// should be logged.\nfunc (c *Client) shouldLogReadError(err error) bool {\n\t// No logging when the connetion is being forcibly disconnected.\n\tselect {\n\tcase <-c.shutdown:\n\t\treturn false\n\tdefault:\n\t}\n\n\t// No logging when the connection has been disconnected.\n\tif err == io.EOF {\n\t\treturn false\n\t}\n\tif opErr, ok := err.(*net.OpError); ok && !opErr.Temporary() {\n\t\treturn false\n\t}\n\n\treturn true\n}\n\n// wsInHandler handles all incoming messages for the websocket connection\n// associated with the client.  It must be run as a goroutine.\nfunc (c *Client) wsInHandler() {\nout:\n\tfor {\n\t\t// Break out of the loop once the shutdown channel has been\n\t\t// closed.  Use a non-blocking select here so we fall through\n\t\t// otherwise.\n\t\tselect {\n\t\tcase <-c.shutdown:\n\t\t\tbreak out\n\t\tdefault:\n\t\t}\n\n\t\t_, msg, err := c.wsConn.ReadMessage()\n\t\tif err != nil {\n\t\t\t// Log the error if it's not due to disconnecting.\n\t\t\tif c.shouldLogReadError(err) {\n\t\t\t\tlog.Errorf(\"Websocket receive error from \"+\n\t\t\t\t\t\"%s: %v\", c.config.Host, err)\n\t\t\t}\n\t\t\tbreak out\n\t\t}\n\t\tc.handleMessage(msg)\n\t}\n\n\t// Ensure the connection is closed.\n\tc.Disconnect()\n\tc.wg.Done()\n\tlog.Tracef(\"RPC client input handler done for %s\", c.config.Host)\n}\n\n// disconnectChan returns a copy of the current disconnect channel.  The channel\n// is read protected by the client mutex, and is safe to call while the channel\n// is being reassigned during a reconnect.\nfunc (c *Client) disconnectChan() <-chan struct{} {\n\tc.mtx.Lock()\n\tch := c.disconnect\n\tc.mtx.Unlock()\n\treturn ch\n}\n\n// wsOutHandler handles all outgoing messages for the websocket connection.  It\n// uses a buffered channel to serialize output messages while allowing the\n// sender to continue running asynchronously.  It must be run as a goroutine.\nfunc (c *Client) wsOutHandler() {\nout:\n\tfor {\n\t\t// Send any messages ready for send until the client is\n\t\t// disconnected closed.\n\t\tselect {\n\t\tcase msg := <-c.sendChan:\n\t\t\terr := c.wsConn.WriteMessage(websocket.TextMessage, msg)\n\t\t\tif err != nil {\n\t\t\t\tc.Disconnect()\n\t\t\t\tbreak out\n\t\t\t}\n\n\t\tcase <-c.disconnectChan():\n\t\t\tbreak out\n\t\t}\n\t}\n\n\t// Drain any channels before exiting so nothing is left waiting around\n\t// to send.\ncleanup:\n\tfor {\n\t\tselect {\n\t\tcase <-c.sendChan:\n\t\tdefault:\n\t\t\tbreak cleanup\n\t\t}\n\t}\n\tc.wg.Done()\n\tlog.Tracef(\"RPC client output handler done for %s\", c.config.Host)\n}\n\n// sendMessage sends the passed JSON to the connected server using the\n// websocket connection.  It is backed by a buffered channel, so it will not\n// block until the send channel is full.\nfunc (c *Client) sendMessage(marshalledJSON []byte) {\n\t// Don't send the message if disconnected.\n\tselect {\n\tcase c.sendChan <- marshalledJSON:\n\tcase <-c.disconnectChan():\n\t\treturn\n\t}\n}\n\n// reregisterNtfns creates and sends commands needed to re-establish the current\n// notification state associated with the client.  It should only be called on\n// on reconnect by the resendRequests function.\nfunc (c *Client) reregisterNtfns() error {\n\t// Nothing to do if the caller is not interested in notifications.\n\tif c.ntfnHandlers == nil {\n\t\treturn nil\n\t}\n\n\t// In order to avoid holding the lock on the notification state for the\n\t// entire time of the potentially long running RPCs issued below, make a\n\t// copy of it and work from that.\n\t//\n\t// Also, other commands will be running concurrently which could modify\n\t// the notification state (while not under the lock of course) which\n\t// also register it with the remote RPC server, so this prevents double\n\t// registrations.\n\tc.ntfnStateLock.Lock()\n\tstateCopy := c.ntfnState.Copy()\n\tc.ntfnStateLock.Unlock()\n\n\t// Reregister notifyblocks if needed.\n\tif stateCopy.notifyBlocks {\n\t\tlog.Debugf(\"Reregistering [notifyblocks]\")\n\t\tif err := c.NotifyBlocks(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Reregister notifynewtransactions if needed.\n\tif stateCopy.notifyNewTx || stateCopy.notifyNewTxVerbose {\n\t\tlog.Debugf(\"Reregistering [notifynewtransactions] (verbose=%v)\",\n\t\t\tstateCopy.notifyNewTxVerbose)\n\t\terr := c.NotifyNewTransactions(stateCopy.notifyNewTxVerbose)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Reregister the combination of all previously registered notifyspent\n\t// outpoints in one command if needed.\n\tnslen := len(stateCopy.notifySpent)\n\tif nslen > 0 {\n\t\toutpoints := make([]btcjson.OutPoint, 0, nslen)\n\t\tfor op := range stateCopy.notifySpent {\n\t\t\toutpoints = append(outpoints, op)\n\t\t}\n\t\tlog.Debugf(\"Reregistering [notifyspent] outpoints: %v\", outpoints)\n\t\tif err := c.notifySpentInternal(outpoints).Receive(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Reregister the combination of all previously registered\n\t// notifyreceived addresses in one command if needed.\n\tnrlen := len(stateCopy.notifyReceived)\n\tif nrlen > 0 {\n\t\taddresses := make([]string, 0, nrlen)\n\t\tfor addr := range stateCopy.notifyReceived {\n\t\t\taddresses = append(addresses, addr)\n\t\t}\n\t\tlog.Debugf(\"Reregistering [notifyreceived] addresses: %v\", addresses)\n\t\tif err := c.notifyReceivedInternal(addresses).Receive(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// ignoreResends is a set of all methods for requests that are \"long running\"\n// are not be reissued by the client on reconnect.\nvar ignoreResends = map[string]struct{}{\n\t\"rescan\": {},\n}\n\n// resendRequests resends any requests that had not completed when the client\n// disconnected.  It is intended to be called once the client has reconnected as\n// a separate goroutine.\nfunc (c *Client) resendRequests() {\n\t// Set the notification state back up.  If anything goes wrong,\n\t// disconnect the client.\n\tif err := c.reregisterNtfns(); err != nil {\n\t\tlog.Warnf(\"Unable to re-establish notification state: %v\", err)\n\t\tc.Disconnect()\n\t\treturn\n\t}\n\n\t// Since it's possible to block on send and more requests might be\n\t// added by the caller while resending, make a copy of all of the\n\t// requests that need to be resent now and work from the copy.  This\n\t// also allows the lock to be released quickly.\n\tc.requestLock.Lock()\n\tresendReqs := make([]*jsonRequest, 0, c.requestList.Len())\n\tvar nextElem *list.Element\n\tfor e := c.requestList.Front(); e != nil; e = nextElem {\n\t\tnextElem = e.Next()\n\n\t\tjReq := e.Value.(*jsonRequest)\n\t\tif _, ok := ignoreResends[jReq.method]; ok {\n\t\t\t// If a request is not sent on reconnect, remove it\n\t\t\t// from the request structures, since no reply is\n\t\t\t// expected.\n\t\t\tdelete(c.requestMap, jReq.id)\n\t\t\tc.requestList.Remove(e)\n\t\t} else {\n\t\t\tresendReqs = append(resendReqs, jReq)\n\t\t}\n\t}\n\tc.requestLock.Unlock()\n\n\tfor _, jReq := range resendReqs {\n\t\t// Stop resending commands if the client disconnected again\n\t\t// since the next reconnect will handle them.\n\t\tif c.Disconnected() {\n\t\t\treturn\n\t\t}\n\n\t\tlog.Tracef(\"Sending command [%s] with id %d\", jReq.method,\n\t\t\tjReq.id)\n\t\tc.sendMessage(jReq.marshalledJSON)\n\t}\n}\n\n// wsReconnectHandler listens for client disconnects and automatically tries\n// to reconnect with retry interval that scales based on the number of retries.\n// It also resends any commands that had not completed when the client\n// disconnected so the disconnect/reconnect process is largely transparent to\n// the caller.  This function is not run when the DisableAutoReconnect config\n// options is set.\n//\n// This function must be run as a goroutine.\nfunc (c *Client) wsReconnectHandler() {\nout:\n\tfor {\n\t\tselect {\n\t\tcase <-c.disconnect:\n\t\t\t// On disconnect, fallthrough to reestablish the\n\t\t\t// connection.\n\n\t\tcase <-c.shutdown:\n\t\t\tbreak out\n\t\t}\n\n\treconnect:\n\t\tfor {\n\t\t\tselect {\n\t\t\tcase <-c.shutdown:\n\t\t\t\tbreak out\n\t\t\tdefault:\n\t\t\t}\n\n\t\t\twsConn, err := dial(c.config)\n\t\t\tif err != nil {\n\t\t\t\tc.retryCount++\n\t\t\t\tlog.Infof(\"Failed to connect to %s: %v\",\n\t\t\t\t\tc.config.Host, err)\n\n\t\t\t\t// Scale the retry interval by the number of\n\t\t\t\t// retries so there is a backoff up to a max\n\t\t\t\t// of 1 minute.\n\t\t\t\tscaledInterval := connectionRetryInterval.Nanoseconds() * c.retryCount\n\t\t\t\tscaledDuration := time.Duration(scaledInterval)\n\t\t\t\tif scaledDuration > time.Minute {\n\t\t\t\t\tscaledDuration = time.Minute\n\t\t\t\t}\n\t\t\t\tlog.Infof(\"Retrying connection to %s in \"+\n\t\t\t\t\t\"%s\", c.config.Host, scaledDuration)\n\t\t\t\ttime.Sleep(scaledDuration)\n\t\t\t\tcontinue reconnect\n\t\t\t}\n\n\t\t\tlog.Infof(\"Reestablished connection to RPC server %s\",\n\t\t\t\tc.config.Host)\n\n\t\t\t// Reset the connection state and signal the reconnect\n\t\t\t// has happened.\n\t\t\tc.wsConn = wsConn\n\t\t\tc.retryCount = 0\n\n\t\t\tc.mtx.Lock()\n\t\t\tc.disconnect = make(chan struct{})\n\t\t\tc.disconnected = false\n\t\t\tc.mtx.Unlock()\n\n\t\t\t// Start processing input and output for the\n\t\t\t// new connection.\n\t\t\tc.start()\n\n\t\t\t// Reissue pending requests in another goroutine since\n\t\t\t// the send can block.\n\t\t\tgo c.resendRequests()\n\n\t\t\t// Break out of the reconnect loop back to wait for\n\t\t\t// disconnect again.\n\t\t\tbreak reconnect\n\t\t}\n\t}\n\tc.wg.Done()\n\tlog.Tracef(\"RPC client reconnect handler done for %s\", c.config.Host)\n}\n\n// handleSendPostMessage handles performing the passed HTTP request, reading the\n// result, unmarshalling it, and delivering the unmarshalled result to the\n// provided response channel.\nfunc (c *Client) handleSendPostMessage(details *sendPostDetails) {\n\tjReq := details.jsonRequest\n\tlog.Tracef(\"Sending command [%s] with id %d\", jReq.method, jReq.id)\n\thttpResponse, err := c.httpClient.Do(details.httpRequest)\n\tif err != nil {\n\t\tjReq.responseChan <- &response{err: err}\n\t\treturn\n\t}\n\n\t// Read the raw bytes and close the response.\n\trespBytes, err := ioutil.ReadAll(httpResponse.Body)\n\thttpResponse.Body.Close()\n\tif err != nil {\n\t\terr = fmt.Errorf(\"error reading json reply: %v\", err)\n\t\tjReq.responseChan <- &response{err: err}\n\t\treturn\n\t}\n\n\t// Try to unmarshal the response as a regular JSON-RPC response.\n\tvar resp rawResponse\n\terr = json.Unmarshal(respBytes, &resp)\n\tif err != nil {\n\t\t// When the response itself isn't a valid JSON-RPC response\n\t\t// return an error which includes the HTTP status code and raw\n\t\t// response bytes.\n\t\terr = fmt.Errorf(\"status code: %d, response: %q\",\n\t\t\thttpResponse.StatusCode, string(respBytes))\n\t\tjReq.responseChan <- &response{err: err}\n\t\treturn\n\t}\n\n\tres, err := resp.result()\n\tjReq.responseChan <- &response{result: res, err: err}\n}\n\n// sendPostHandler handles all outgoing messages when the client is running\n// in HTTP POST mode.  It uses a buffered channel to serialize output messages\n// while allowing the sender to continue running asynchronously.  It must be run\n// as a goroutine.\nfunc (c *Client) sendPostHandler() {\nout:\n\tfor {\n\t\t// Send any messages ready for send until the shutdown channel\n\t\t// is closed.\n\t\tselect {\n\t\tcase details := <-c.sendPostChan:\n\t\t\tc.handleSendPostMessage(details)\n\n\t\tcase <-c.shutdown:\n\t\t\tbreak out\n\t\t}\n\t}\n\n\t// Drain any wait channels before exiting so nothing is left waiting\n\t// around to send.\ncleanup:\n\tfor {\n\t\tselect {\n\t\tcase details := <-c.sendPostChan:\n\t\t\tdetails.jsonRequest.responseChan <- &response{\n\t\t\t\tresult: nil,\n\t\t\t\terr:    ErrClientShutdown,\n\t\t\t}\n\n\t\tdefault:\n\t\t\tbreak cleanup\n\t\t}\n\t}\n\tc.wg.Done()\n\tlog.Tracef(\"RPC client send handler done for %s\", c.config.Host)\n\n}\n\n// sendPostRequest sends the passed HTTP request to the RPC server using the\n// HTTP client associated with the client.  It is backed by a buffered channel,\n// so it will not block until the send channel is full.\nfunc (c *Client) sendPostRequest(httpReq *http.Request, jReq *jsonRequest) {\n\t// Don't send the message if shutting down.\n\tselect {\n\tcase <-c.shutdown:\n\t\tjReq.responseChan <- &response{result: nil, err: ErrClientShutdown}\n\tdefault:\n\t}\n\n\tc.sendPostChan <- &sendPostDetails{\n\t\tjsonRequest: jReq,\n\t\thttpRequest: httpReq,\n\t}\n}\n\n// newFutureError returns a new future result channel that already has the\n// passed error waitin on the channel with the reply set to nil.  This is useful\n// to easily return errors from the various Async functions.\nfunc newFutureError(err error) chan *response {\n\tresponseChan := make(chan *response, 1)\n\tresponseChan <- &response{err: err}\n\treturn responseChan\n}\n\n// receiveFuture receives from the passed futureResult channel to extract a\n// reply or any errors.  The examined errors include an error in the\n// futureResult and the error in the reply from the server.  This will block\n// until the result is available on the passed channel.\nfunc receiveFuture(f chan *response) ([]byte, error) {\n\t// Wait for a response on the returned channel.\n\tr := <-f\n\treturn r.result, r.err\n}\n\n// sendPost sends the passed request to the server by issuing an HTTP POST\n// request using the provided response channel for the reply.  Typically a new\n// connection is opened and closed for each command when using this method,\n// however, the underlying HTTP client might coalesce multiple commands\n// depending on several factors including the remote server configuration.\nfunc (c *Client) sendPost(jReq *jsonRequest) {\n\t// Generate a request to the configured RPC server.\n\tprotocol := \"http\"\n\tif !c.config.DisableTLS {\n\t\tprotocol = \"https\"\n\t}\n\turl := protocol + \"://\" + c.config.Host\n\tbodyReader := bytes.NewReader(jReq.marshalledJSON)\n\thttpReq, err := http.NewRequest(\"POST\", url, bodyReader)\n\tif err != nil {\n\t\tjReq.responseChan <- &response{result: nil, err: err}\n\t\treturn\n\t}\n\thttpReq.Close = true\n\thttpReq.Header.Set(\"Content-Type\", \"application/json\")\n\n\t// Configure basic access authorization.\n\thttpReq.SetBasicAuth(c.config.User, c.config.Pass)\n\n\tlog.Tracef(\"Sending command [%s] with id %d\", jReq.method, jReq.id)\n\tc.sendPostRequest(httpReq, jReq)\n}\n\n// sendRequest sends the passed json request to the associated server using the\n// provided response channel for the reply.  It handles both websocket and HTTP\n// POST mode depending on the configuration of the client.\nfunc (c *Client) sendRequest(jReq *jsonRequest) {\n\t// Choose which marshal and send function to use depending on whether\n\t// the client running in HTTP POST mode or not.  When running in HTTP\n\t// POST mode, the command is issued via an HTTP client.  Otherwise,\n\t// the command is issued via the asynchronous websocket channels.\n\tif c.config.HTTPPostMode {\n\t\tc.sendPost(jReq)\n\t\treturn\n\t}\n\n\t// Check whether the websocket connection has never been established,\n\t// in which case the handler goroutines are not running.\n\tselect {\n\tcase <-c.connEstablished:\n\tdefault:\n\t\tjReq.responseChan <- &response{err: ErrClientNotConnected}\n\t\treturn\n\t}\n\n\t// Add the request to the internal tracking map so the response from the\n\t// remote server can be properly detected and routed to the response\n\t// channel.  Then send the marshalled request via the websocket\n\t// connection.\n\tif err := c.addRequest(jReq); err != nil {\n\t\tjReq.responseChan <- &response{err: err}\n\t\treturn\n\t}\n\tlog.Tracef(\"Sending command [%s] with id %d\", jReq.method, jReq.id)\n\tc.sendMessage(jReq.marshalledJSON)\n}\n\n// sendCmd sends the passed command to the associated server and returns a\n// response channel on which the reply will be delivered at some point in the\n// future.  It handles both websocket and HTTP POST mode depending on the\n// configuration of the client.\nfunc (c *Client) sendCmd(cmd interface{}) chan *response {\n\t// Get the method associated with the command.\n\tmethod, err := btcjson.CmdMethod(cmd)\n\tif err != nil {\n\t\treturn newFutureError(err)\n\t}\n\n\t// Marshal the command.\n\tid := c.NextID()\n\tmarshalledJSON, err := btcjson.MarshalCmd(id, cmd)\n\tif err != nil {\n\t\treturn newFutureError(err)\n\t}\n\n\t// Generate the request and send it along with a channel to respond on.\n\tresponseChan := make(chan *response, 1)\n\tjReq := &jsonRequest{\n\t\tid:             id,\n\t\tmethod:         method,\n\t\tcmd:            cmd,\n\t\tmarshalledJSON: marshalledJSON,\n\t\tresponseChan:   responseChan,\n\t}\n\tc.sendRequest(jReq)\n\n\treturn responseChan\n}\n\n// sendCmdAndWait sends the passed command to the associated server, waits\n// for the reply, and returns the result from it.  It will return the error\n// field in the reply if there is one.\nfunc (c *Client) sendCmdAndWait(cmd interface{}) (interface{}, error) {\n\t// Marshal the command to JSON-RPC, send it to the connected server, and\n\t// wait for a response on the returned channel.\n\treturn receiveFuture(c.sendCmd(cmd))\n}\n\n// Disconnected returns whether or not the server is disconnected.  If a\n// websocket client was created but never connected, this also returns false.\nfunc (c *Client) Disconnected() bool {\n\tc.mtx.Lock()\n\tdefer c.mtx.Unlock()\n\n\tselect {\n\tcase <-c.connEstablished:\n\t\treturn c.disconnected\n\tdefault:\n\t\treturn false\n\t}\n}\n\n// doDisconnect disconnects the websocket associated with the client if it\n// hasn't already been disconnected.  It will return false if the disconnect is\n// not needed or the client is running in HTTP POST mode.\n//\n// This function is safe for concurrent access.\nfunc (c *Client) doDisconnect() bool {\n\tif c.config.HTTPPostMode {\n\t\treturn false\n\t}\n\n\tc.mtx.Lock()\n\tdefer c.mtx.Unlock()\n\n\t// Nothing to do if already disconnected.\n\tif c.disconnected {\n\t\treturn false\n\t}\n\n\tlog.Tracef(\"Disconnecting RPC client %s\", c.config.Host)\n\tclose(c.disconnect)\n\tif c.wsConn != nil {\n\t\tc.wsConn.Close()\n\t}\n\tc.disconnected = true\n\treturn true\n}\n\n// doShutdown closes the shutdown channel and logs the shutdown unless shutdown\n// is already in progress.  It will return false if the shutdown is not needed.\n//\n// This function is safe for concurrent access.\nfunc (c *Client) doShutdown() bool {\n\t// Ignore the shutdown request if the client is already in the process\n\t// of shutting down or already shutdown.\n\tselect {\n\tcase <-c.shutdown:\n\t\treturn false\n\tdefault:\n\t}\n\n\tlog.Tracef(\"Shutting down RPC client %s\", c.config.Host)\n\tclose(c.shutdown)\n\treturn true\n}\n\n// Disconnect disconnects the current websocket associated with the client.  The\n// connection will automatically be re-established unless the client was\n// created with the DisableAutoReconnect flag.\n//\n// This function has no effect when the client is running in HTTP POST mode.\nfunc (c *Client) Disconnect() {\n\t// Nothing to do if already disconnected or running in HTTP POST mode.\n\tif !c.doDisconnect() {\n\t\treturn\n\t}\n\n\tc.requestLock.Lock()\n\tdefer c.requestLock.Unlock()\n\n\t// When operating without auto reconnect, send errors to any pending\n\t// requests and shutdown the client.\n\tif c.config.DisableAutoReconnect {\n\t\tfor e := c.requestList.Front(); e != nil; e = e.Next() {\n\t\t\treq := e.Value.(*jsonRequest)\n\t\t\treq.responseChan <- &response{\n\t\t\t\tresult: nil,\n\t\t\t\terr:    ErrClientDisconnect,\n\t\t\t}\n\t\t}\n\t\tc.removeAllRequests()\n\t\tc.doShutdown()\n\t}\n}\n\n// Shutdown shuts down the client by disconnecting any connections associated\n// with the client and, when automatic reconnect is enabled, preventing future\n// attempts to reconnect.  It also stops all goroutines.\nfunc (c *Client) Shutdown() {\n\t// Do the shutdown under the request lock to prevent clients from\n\t// adding new requests while the client shutdown process is initiated.\n\tc.requestLock.Lock()\n\tdefer c.requestLock.Unlock()\n\n\t// Ignore the shutdown request if the client is already in the process\n\t// of shutting down or already shutdown.\n\tif !c.doShutdown() {\n\t\treturn\n\t}\n\n\t// Send the ErrClientShutdown error to any pending requests.\n\tfor e := c.requestList.Front(); e != nil; e = e.Next() {\n\t\treq := e.Value.(*jsonRequest)\n\t\treq.responseChan <- &response{\n\t\t\tresult: nil,\n\t\t\terr:    ErrClientShutdown,\n\t\t}\n\t}\n\tc.removeAllRequests()\n\n\t// Disconnect the client if needed.\n\tc.doDisconnect()\n}\n\n// start begins processing input and output messages.\nfunc (c *Client) start() {\n\tlog.Tracef(\"Starting RPC client %s\", c.config.Host)\n\n\t// Start the I/O processing handlers depending on whether the client is\n\t// in HTTP POST mode or the default websocket mode.\n\tif c.config.HTTPPostMode {\n\t\tc.wg.Add(1)\n\t\tgo c.sendPostHandler()\n\t} else {\n\t\tc.wg.Add(3)\n\t\tgo func() {\n\t\t\tif c.ntfnHandlers != nil {\n\t\t\t\tif c.ntfnHandlers.OnClientConnected != nil {\n\t\t\t\t\tc.ntfnHandlers.OnClientConnected()\n\t\t\t\t}\n\t\t\t}\n\t\t\tc.wg.Done()\n\t\t}()\n\t\tgo c.wsInHandler()\n\t\tgo c.wsOutHandler()\n\t}\n}\n\n// WaitForShutdown blocks until the client goroutines are stopped and the\n// connection is closed.\nfunc (c *Client) WaitForShutdown() {\n\tc.wg.Wait()\n}\n\n// ConnConfig describes the connection configuration parameters for the client.\n// This\ntype ConnConfig struct {\n\t// Host is the IP address and port of the RPC server you want to connect\n\t// to.\n\tHost string\n\n\t// Endpoint is the websocket endpoint on the RPC server.  This is\n\t// typically \"ws\".\n\tEndpoint string\n\n\t// User is the username to use to authenticate to the RPC server.\n\tUser string\n\n\t// Pass is the passphrase to use to authenticate to the RPC server.\n\tPass string\n\n\t// DisableTLS specifies whether transport layer security should be\n\t// disabled.  It is recommended to always use TLS if the RPC server\n\t// supports it as otherwise your username and password is sent across\n\t// the wire in cleartext.\n\tDisableTLS bool\n\n\t// Certificates are the bytes for a PEM-encoded certificate chain used\n\t// for the TLS connection.  It has no effect if the DisableTLS parameter\n\t// is true.\n\tCertificates []byte\n\n\t// Proxy specifies to connect through a SOCKS 5 proxy server.  It may\n\t// be an empty string if a proxy is not required.\n\tProxy string\n\n\t// ProxyUser is an optional username to use for the proxy server if it\n\t// requires authentication.  It has no effect if the Proxy parameter\n\t// is not set.\n\tProxyUser string\n\n\t// ProxyPass is an optional password to use for the proxy server if it\n\t// requires authentication.  It has no effect if the Proxy parameter\n\t// is not set.\n\tProxyPass string\n\n\t// DisableAutoReconnect specifies the client should not automatically\n\t// try to reconnect to the server when it has been disconnected.\n\tDisableAutoReconnect bool\n\n\t// DisableConnectOnNew specifies that a websocket client connection\n\t// should not be tried when creating the client with New.  Instead, the\n\t// client is created and returned unconnected, and Connect must be\n\t// called manually.\n\tDisableConnectOnNew bool\n\n\t// HTTPPostMode instructs the client to run using multiple independent\n\t// connections issuing HTTP POST requests instead of using the default\n\t// of websockets.  Websockets are generally preferred as some of the\n\t// features of the client such notifications only work with websockets,\n\t// however, not all servers support the websocket extensions, so this\n\t// flag can be set to true to use basic HTTP POST requests instead.\n\tHTTPPostMode bool\n\n\t// EnableBCInfoHacks is an option provided to enable compatibility hacks\n\t// when connecting to blockchain.info RPC server\n\tEnableBCInfoHacks bool\n}\n\n// newHTTPClient returns a new http client that is configured according to the\n// proxy and TLS settings in the associated connection configuration.\nfunc newHTTPClient(config *ConnConfig) (*http.Client, error) {\n\t// Set proxy function if there is a proxy configured.\n\tvar proxyFunc func(*http.Request) (*url.URL, error)\n\tif config.Proxy != \"\" {\n\t\tproxyURL, err := url.Parse(config.Proxy)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tproxyFunc = http.ProxyURL(proxyURL)\n\t}\n\n\t// Configure TLS if needed.\n\tvar tlsConfig *tls.Config\n\tif !config.DisableTLS {\n\t\tif len(config.Certificates) > 0 {\n\t\t\tpool := x509.NewCertPool()\n\t\t\tpool.AppendCertsFromPEM(config.Certificates)\n\t\t\ttlsConfig = &tls.Config{\n\t\t\t\tRootCAs: pool,\n\t\t\t}\n\t\t}\n\t}\n\n\tclient := http.Client{\n\t\tTransport: &http.Transport{\n\t\t\tProxy:           proxyFunc,\n\t\t\tTLSClientConfig: tlsConfig,\n\t\t},\n\t}\n\n\treturn &client, nil\n}\n\n// dial opens a websocket connection using the passed connection configuration\n// details.\nfunc dial(config *ConnConfig) (*websocket.Conn, error) {\n\t// Setup TLS if not disabled.\n\tvar tlsConfig *tls.Config\n\tvar scheme = \"ws\"\n\tif !config.DisableTLS {\n\t\ttlsConfig = &tls.Config{\n\t\t\tMinVersion: tls.VersionTLS12,\n\t\t}\n\t\tif len(config.Certificates) > 0 {\n\t\t\tpool := x509.NewCertPool()\n\t\t\tpool.AppendCertsFromPEM(config.Certificates)\n\t\t\ttlsConfig.RootCAs = pool\n\t\t}\n\t\tscheme = \"wss\"\n\t}\n\n\t// Create a websocket dialer that will be used to make the connection.\n\t// It is modified by the proxy setting below as needed.\n\tdialer := websocket.Dialer{TLSClientConfig: tlsConfig}\n\n\t// Setup the proxy if one is configured.\n\tif config.Proxy != \"\" {\n\t\tproxy := &socks.Proxy{\n\t\t\tAddr:     config.Proxy,\n\t\t\tUsername: config.ProxyUser,\n\t\t\tPassword: config.ProxyPass,\n\t\t}\n\t\tdialer.NetDial = proxy.Dial\n\t}\n\n\t// The RPC server requires basic authorization, so create a custom\n\t// request header with the Authorization header set.\n\tlogin := config.User + \":\" + config.Pass\n\tauth := \"Basic \" + base64.StdEncoding.EncodeToString([]byte(login))\n\trequestHeader := make(http.Header)\n\trequestHeader.Add(\"Authorization\", auth)\n\n\t// Dial the connection.\n\turl := fmt.Sprintf(\"%s://%s/%s\", scheme, config.Host, config.Endpoint)\n\twsConn, resp, err := dialer.Dial(url, requestHeader)\n\tif err != nil {\n\t\tif err != websocket.ErrBadHandshake || resp == nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// Detect HTTP authentication error status codes.\n\t\tif resp.StatusCode == http.StatusUnauthorized ||\n\t\t\tresp.StatusCode == http.StatusForbidden {\n\t\t\treturn nil, ErrInvalidAuth\n\t\t}\n\n\t\t// The connection was authenticated and the status response was\n\t\t// ok, but the websocket handshake still failed, so the endpoint\n\t\t// is invalid in some way.\n\t\tif resp.StatusCode == http.StatusOK {\n\t\t\treturn nil, ErrInvalidEndpoint\n\t\t}\n\n\t\t// Return the status text from the server if none of the special\n\t\t// cases above apply.\n\t\treturn nil, errors.New(resp.Status)\n\t}\n\treturn wsConn, nil\n}\n\n// New creates a new RPC client based on the provided connection configuration\n// details.  The notification handlers parameter may be nil if you are not\n// interested in receiving notifications and will be ignored if the\n// configuration is set to run in HTTP POST mode.\nfunc New(config *ConnConfig, ntfnHandlers *NotificationHandlers) (*Client, error) {\n\t// Either open a websocket connection or create an HTTP client depending\n\t// on the HTTP POST mode.  Also, set the notification handlers to nil\n\t// when running in HTTP POST mode.\n\tvar wsConn *websocket.Conn\n\tvar httpClient *http.Client\n\tconnEstablished := make(chan struct{})\n\tvar start bool\n\tif config.HTTPPostMode {\n\t\tntfnHandlers = nil\n\t\tstart = true\n\n\t\tvar err error\n\t\thttpClient, err = newHTTPClient(config)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t} else {\n\t\tif !config.DisableConnectOnNew {\n\t\t\tvar err error\n\t\t\twsConn, err = dial(config)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tstart = true\n\t\t}\n\t}\n\n\tclient := &Client{\n\t\tconfig:          config,\n\t\twsConn:          wsConn,\n\t\thttpClient:      httpClient,\n\t\trequestMap:      make(map[uint64]*list.Element),\n\t\trequestList:     list.New(),\n\t\tntfnHandlers:    ntfnHandlers,\n\t\tntfnState:       newNotificationState(),\n\t\tsendChan:        make(chan []byte, sendBufferSize),\n\t\tsendPostChan:    make(chan *sendPostDetails, sendPostBufferSize),\n\t\tconnEstablished: connEstablished,\n\t\tdisconnect:      make(chan struct{}),\n\t\tshutdown:        make(chan struct{}),\n\t}\n\n\tif start {\n\t\tlog.Infof(\"Established connection to RPC server %s\",\n\t\t\tconfig.Host)\n\t\tclose(connEstablished)\n\t\tclient.start()\n\t\tif !client.config.HTTPPostMode && !client.config.DisableAutoReconnect {\n\t\t\tclient.wg.Add(1)\n\t\t\tgo client.wsReconnectHandler()\n\t\t}\n\t}\n\n\treturn client, nil\n}\n\n// Connect establishes the initial websocket connection.  This is necessary when\n// a client was created after setting the DisableConnectOnNew field of the\n// Config struct.\n//\n// Up to tries number of connections (each after an increasing backoff) will\n// be tried if the connection can not be established.  The special value of 0\n// indicates an unlimited number of connection attempts.\n//\n// This method will error if the client is not configured for websockets, if the\n// connection has already been established, or if none of the connection\n// attempts were successful.\nfunc (c *Client) Connect(tries int) error {\n\tc.mtx.Lock()\n\tdefer c.mtx.Unlock()\n\n\tif c.config.HTTPPostMode {\n\t\treturn ErrNotWebsocketClient\n\t}\n\tif c.wsConn != nil {\n\t\treturn ErrClientAlreadyConnected\n\t}\n\n\t// Begin connection attempts.  Increase the backoff after each failed\n\t// attempt, up to a maximum of one minute.\n\tvar err error\n\tvar backoff time.Duration\n\tfor i := 0; tries == 0 || i < tries; i++ {\n\t\tvar wsConn *websocket.Conn\n\t\twsConn, err = dial(c.config)\n\t\tif err != nil {\n\t\t\tbackoff = connectionRetryInterval * time.Duration(i+1)\n\t\t\tif backoff > time.Minute {\n\t\t\t\tbackoff = time.Minute\n\t\t\t}\n\t\t\ttime.Sleep(backoff)\n\t\t\tcontinue\n\t\t}\n\n\t\t// Connection was established.  Set the websocket connection\n\t\t// member of the client and start the goroutines necessary\n\t\t// to run the client.\n\t\tlog.Infof(\"Established connection to RPC server %s\",\n\t\t\tc.config.Host)\n\t\tc.wsConn = wsConn\n\t\tclose(c.connEstablished)\n\t\tc.start()\n\t\tif !c.config.DisableAutoReconnect {\n\t\t\tc.wg.Add(1)\n\t\t\tgo c.wsReconnectHandler()\n\t\t}\n\t\treturn nil\n\t}\n\n\t// All connection attempts failed, so return the last error.\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/rpcclient/log.go",
    "content": "// Copyright (c) 2014-2017 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage rpcclient\n\nimport (\n\t\"github.com/btcsuite/btclog\"\n)\n\n// log is a logger that is initialized with no output filters.  This\n// means the package will not perform any logging by default until the caller\n// requests it.\nvar log btclog.Logger\n\n// The default amount of logging is none.\nfunc init() {\n\tDisableLog()\n}\n\n// DisableLog disables all library log output.  Logging output is disabled\n// by default until UseLogger is called.\nfunc DisableLog() {\n\tlog = btclog.Disabled\n}\n\n// UseLogger uses a specified Logger to output package logging info.\nfunc UseLogger(logger btclog.Logger) {\n\tlog = logger\n}\n\n// LogClosure is a closure that can be printed with %v to be used to\n// generate expensive-to-create data for a detailed log level and avoid doing\n// the work if the data isn't printed.\ntype logClosure func() string\n\n// String invokes the log closure and returns the results string.\nfunc (c logClosure) String() string {\n\treturn c()\n}\n\n// newLogClosure returns a new closure over the passed function which allows\n// it to be used as a parameter in a logging function that is only invoked when\n// the logging level is such that the message will actually be logged.\nfunc newLogClosure(c func() string) logClosure {\n\treturn logClosure(c)\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/rpcclient/mining.go",
    "content": "// Copyright (c) 2014-2017 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage rpcclient\n\nimport (\n\t\"encoding/hex\"\n\t\"encoding/json\"\n\t\"errors\"\n\n\t\"github.com/btcsuite/btcd/btcjson\"\n\t\"github.com/btcsuite/btcd/chaincfg/chainhash\"\n\t\"github.com/btcsuite/btcutil\"\n)\n\n// FutureGenerateResult is a future promise to deliver the result of a\n// GenerateAsync RPC invocation (or an applicable error).\ntype FutureGenerateResult chan *response\n\n// Receive waits for the response promised by the future and returns a list of\n// block hashes generated by the call.\nfunc (r FutureGenerateResult) Receive() ([]*chainhash.Hash, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal result as a list of strings.\n\tvar result []string\n\terr = json.Unmarshal(res, &result)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Convert each block hash to a chainhash.Hash and store a pointer to\n\t// each.\n\tconvertedResult := make([]*chainhash.Hash, len(result))\n\tfor i, hashString := range result {\n\t\tconvertedResult[i], err = chainhash.NewHashFromStr(hashString)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn convertedResult, nil\n}\n\n// GenerateAsync returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See Generate for the blocking version and more details.\nfunc (c *Client) GenerateAsync(numBlocks uint32) FutureGenerateResult {\n\tcmd := btcjson.NewGenerateCmd(numBlocks)\n\treturn c.sendCmd(cmd)\n}\n\n// Generate generates numBlocks blocks and returns their hashes.\nfunc (c *Client) Generate(numBlocks uint32) ([]*chainhash.Hash, error) {\n\treturn c.GenerateAsync(numBlocks).Receive()\n}\n\n// FutureGetGenerateResult is a future promise to deliver the result of a\n// GetGenerateAsync RPC invocation (or an applicable error).\ntype FutureGetGenerateResult chan *response\n\n// Receive waits for the response promised by the future and returns true if the\n// server is set to mine, otherwise false.\nfunc (r FutureGetGenerateResult) Receive() (bool, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\n\t// Unmarshal result as a boolean.\n\tvar result bool\n\terr = json.Unmarshal(res, &result)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\n\treturn result, nil\n}\n\n// GetGenerateAsync returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See GetGenerate for the blocking version and more details.\nfunc (c *Client) GetGenerateAsync() FutureGetGenerateResult {\n\tcmd := btcjson.NewGetGenerateCmd()\n\treturn c.sendCmd(cmd)\n}\n\n// GetGenerate returns true if the server is set to mine, otherwise false.\nfunc (c *Client) GetGenerate() (bool, error) {\n\treturn c.GetGenerateAsync().Receive()\n}\n\n// FutureSetGenerateResult is a future promise to deliver the result of a\n// SetGenerateAsync RPC invocation (or an applicable error).\ntype FutureSetGenerateResult chan *response\n\n// Receive waits for the response promised by the future and returns an error if\n// any occurred when setting the server to generate coins (mine) or not.\nfunc (r FutureSetGenerateResult) Receive() error {\n\t_, err := receiveFuture(r)\n\treturn err\n}\n\n// SetGenerateAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See SetGenerate for the blocking version and more details.\nfunc (c *Client) SetGenerateAsync(enable bool, numCPUs int) FutureSetGenerateResult {\n\tcmd := btcjson.NewSetGenerateCmd(enable, &numCPUs)\n\treturn c.sendCmd(cmd)\n}\n\n// SetGenerate sets the server to generate coins (mine) or not.\nfunc (c *Client) SetGenerate(enable bool, numCPUs int) error {\n\treturn c.SetGenerateAsync(enable, numCPUs).Receive()\n}\n\n// FutureGetHashesPerSecResult is a future promise to deliver the result of a\n// GetHashesPerSecAsync RPC invocation (or an applicable error).\ntype FutureGetHashesPerSecResult chan *response\n\n// Receive waits for the response promised by the future and returns a recent\n// hashes per second performance measurement while generating coins (mining).\n// Zero is returned if the server is not mining.\nfunc (r FutureGetHashesPerSecResult) Receive() (int64, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\n\t// Unmarshal result as an int64.\n\tvar result int64\n\terr = json.Unmarshal(res, &result)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn result, nil\n}\n\n// GetHashesPerSecAsync returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See GetHashesPerSec for the blocking version and more details.\nfunc (c *Client) GetHashesPerSecAsync() FutureGetHashesPerSecResult {\n\tcmd := btcjson.NewGetHashesPerSecCmd()\n\treturn c.sendCmd(cmd)\n}\n\n// GetHashesPerSec returns a recent hashes per second performance measurement\n// while generating coins (mining).  Zero is returned if the server is not\n// mining.\nfunc (c *Client) GetHashesPerSec() (int64, error) {\n\treturn c.GetHashesPerSecAsync().Receive()\n}\n\n// FutureGetMiningInfoResult is a future promise to deliver the result of a\n// GetMiningInfoAsync RPC invocation (or an applicable error).\ntype FutureGetMiningInfoResult chan *response\n\n// Receive waits for the response promised by the future and returns the mining\n// information.\nfunc (r FutureGetMiningInfoResult) Receive() (*btcjson.GetMiningInfoResult, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal result as a getmininginfo result object.\n\tvar infoResult btcjson.GetMiningInfoResult\n\terr = json.Unmarshal(res, &infoResult)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &infoResult, nil\n}\n\n// GetMiningInfoAsync returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See GetMiningInfo for the blocking version and more details.\nfunc (c *Client) GetMiningInfoAsync() FutureGetMiningInfoResult {\n\tcmd := btcjson.NewGetMiningInfoCmd()\n\treturn c.sendCmd(cmd)\n}\n\n// GetMiningInfo returns mining information.\nfunc (c *Client) GetMiningInfo() (*btcjson.GetMiningInfoResult, error) {\n\treturn c.GetMiningInfoAsync().Receive()\n}\n\n// FutureGetNetworkHashPS is a future promise to deliver the result of a\n// GetNetworkHashPSAsync RPC invocation (or an applicable error).\ntype FutureGetNetworkHashPS chan *response\n\n// Receive waits for the response promised by the future and returns the\n// estimated network hashes per second for the block heights provided by the\n// parameters.\nfunc (r FutureGetNetworkHashPS) Receive() (int64, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\n\t// Unmarshal result as an int64.\n\tvar result int64\n\terr = json.Unmarshal(res, &result)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn result, nil\n}\n\n// GetNetworkHashPSAsync returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See GetNetworkHashPS for the blocking version and more details.\nfunc (c *Client) GetNetworkHashPSAsync() FutureGetNetworkHashPS {\n\tcmd := btcjson.NewGetNetworkHashPSCmd(nil, nil)\n\treturn c.sendCmd(cmd)\n}\n\n// GetNetworkHashPS returns the estimated network hashes per second using the\n// default number of blocks and the most recent block height.\n//\n// See GetNetworkHashPS2 to override the number of blocks to use and\n// GetNetworkHashPS3 to override the height at which to calculate the estimate.\nfunc (c *Client) GetNetworkHashPS() (int64, error) {\n\treturn c.GetNetworkHashPSAsync().Receive()\n}\n\n// GetNetworkHashPS2Async returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See GetNetworkHashPS2 for the blocking version and more details.\nfunc (c *Client) GetNetworkHashPS2Async(blocks int) FutureGetNetworkHashPS {\n\tcmd := btcjson.NewGetNetworkHashPSCmd(&blocks, nil)\n\treturn c.sendCmd(cmd)\n}\n\n// GetNetworkHashPS2 returns the estimated network hashes per second for the\n// specified previous number of blocks working backwards from the most recent\n// block height.  The blocks parameter can also be -1 in which case the number\n// of blocks since the last difficulty change will be used.\n//\n// See GetNetworkHashPS to use defaults and GetNetworkHashPS3 to override the\n// height at which to calculate the estimate.\nfunc (c *Client) GetNetworkHashPS2(blocks int) (int64, error) {\n\treturn c.GetNetworkHashPS2Async(blocks).Receive()\n}\n\n// GetNetworkHashPS3Async returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See GetNetworkHashPS3 for the blocking version and more details.\nfunc (c *Client) GetNetworkHashPS3Async(blocks, height int) FutureGetNetworkHashPS {\n\tcmd := btcjson.NewGetNetworkHashPSCmd(&blocks, &height)\n\treturn c.sendCmd(cmd)\n}\n\n// GetNetworkHashPS3 returns the estimated network hashes per second for the\n// specified previous number of blocks working backwards from the specified\n// block height.  The blocks parameter can also be -1 in which case the number\n// of blocks since the last difficulty change will be used.\n//\n// See GetNetworkHashPS and GetNetworkHashPS2 to use defaults.\nfunc (c *Client) GetNetworkHashPS3(blocks, height int) (int64, error) {\n\treturn c.GetNetworkHashPS3Async(blocks, height).Receive()\n}\n\n// FutureGetWork is a future promise to deliver the result of a\n// GetWorkAsync RPC invocation (or an applicable error).\ntype FutureGetWork chan *response\n\n// Receive waits for the response promised by the future and returns the hash\n// data to work on.\nfunc (r FutureGetWork) Receive() (*btcjson.GetWorkResult, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal result as a getwork result object.\n\tvar result btcjson.GetWorkResult\n\terr = json.Unmarshal(res, &result)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &result, nil\n}\n\n// GetWorkAsync returns an instance of a type that can be used to get the result\n// of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See GetWork for the blocking version and more details.\nfunc (c *Client) GetWorkAsync() FutureGetWork {\n\tcmd := btcjson.NewGetWorkCmd(nil)\n\treturn c.sendCmd(cmd)\n}\n\n// GetWork returns hash data to work on.\n//\n// See GetWorkSubmit to submit the found solution.\nfunc (c *Client) GetWork() (*btcjson.GetWorkResult, error) {\n\treturn c.GetWorkAsync().Receive()\n}\n\n// FutureGetWorkSubmit is a future promise to deliver the result of a\n// GetWorkSubmitAsync RPC invocation (or an applicable error).\ntype FutureGetWorkSubmit chan *response\n\n// Receive waits for the response promised by the future and returns whether\n// or not the submitted block header was accepted.\nfunc (r FutureGetWorkSubmit) Receive() (bool, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\n\t// Unmarshal result as a boolean.\n\tvar accepted bool\n\terr = json.Unmarshal(res, &accepted)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\n\treturn accepted, nil\n}\n\n// GetWorkSubmitAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See GetWorkSubmit for the blocking version and more details.\nfunc (c *Client) GetWorkSubmitAsync(data string) FutureGetWorkSubmit {\n\tcmd := btcjson.NewGetWorkCmd(&data)\n\treturn c.sendCmd(cmd)\n}\n\n// GetWorkSubmit submits a block header which is a solution to previously\n// requested data and returns whether or not the solution was accepted.\n//\n// See GetWork to request data to work on.\nfunc (c *Client) GetWorkSubmit(data string) (bool, error) {\n\treturn c.GetWorkSubmitAsync(data).Receive()\n}\n\n// FutureSubmitBlockResult is a future promise to deliver the result of a\n// SubmitBlockAsync RPC invocation (or an applicable error).\ntype FutureSubmitBlockResult chan *response\n\n// Receive waits for the response promised by the future and returns an error if\n// any occurred when submitting the block.\nfunc (r FutureSubmitBlockResult) Receive() error {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif string(res) != \"null\" {\n\t\tvar result string\n\t\terr = json.Unmarshal(res, &result)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\treturn errors.New(result)\n\t}\n\n\treturn nil\n\n}\n\n// SubmitBlockAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See SubmitBlock for the blocking version and more details.\nfunc (c *Client) SubmitBlockAsync(block *btcutil.Block, options *btcjson.SubmitBlockOptions) FutureSubmitBlockResult {\n\tblockHex := \"\"\n\tif block != nil {\n\t\tblockBytes, err := block.Bytes()\n\t\tif err != nil {\n\t\t\treturn newFutureError(err)\n\t\t}\n\n\t\tblockHex = hex.EncodeToString(blockBytes)\n\t}\n\n\tcmd := btcjson.NewSubmitBlockCmd(blockHex, options)\n\treturn c.sendCmd(cmd)\n}\n\n// SubmitBlock attempts to submit a new block into the bitcoin network.\nfunc (c *Client) SubmitBlock(block *btcutil.Block, options *btcjson.SubmitBlockOptions) error {\n\treturn c.SubmitBlockAsync(block, options).Receive()\n}\n\n// TODO(davec): Implement GetBlockTemplate\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/rpcclient/net.go",
    "content": "// Copyright (c) 2014-2017 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage rpcclient\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/btcsuite/btcd/btcjson\"\n)\n\n// AddNodeCommand enumerates the available commands that the AddNode function\n// accepts.\ntype AddNodeCommand string\n\n// Constants used to indicate the command for the AddNode function.\nconst (\n\t// ANAdd indicates the specified host should be added as a persistent\n\t// peer.\n\tANAdd AddNodeCommand = \"add\"\n\n\t// ANRemove indicates the specified peer should be removed.\n\tANRemove AddNodeCommand = \"remove\"\n\n\t// ANOneTry indicates the specified host should try to connect once,\n\t// but it should not be made persistent.\n\tANOneTry AddNodeCommand = \"onetry\"\n)\n\n// String returns the AddNodeCommand in human-readable form.\nfunc (cmd AddNodeCommand) String() string {\n\treturn string(cmd)\n}\n\n// FutureAddNodeResult is a future promise to deliver the result of an\n// AddNodeAsync RPC invocation (or an applicable error).\ntype FutureAddNodeResult chan *response\n\n// Receive waits for the response promised by the future and returns an error if\n// any occurred when performing the specified command.\nfunc (r FutureAddNodeResult) Receive() error {\n\t_, err := receiveFuture(r)\n\treturn err\n}\n\n// AddNodeAsync returns an instance of a type that can be used to get the result\n// of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See AddNode for the blocking version and more details.\nfunc (c *Client) AddNodeAsync(host string, command AddNodeCommand) FutureAddNodeResult {\n\tcmd := btcjson.NewAddNodeCmd(host, btcjson.AddNodeSubCmd(command))\n\treturn c.sendCmd(cmd)\n}\n\n// AddNode attempts to perform the passed command on the passed persistent peer.\n// For example, it can be used to add or a remove a persistent peer, or to do\n// a one time connection to a peer.\n//\n// It may not be used to remove non-persistent peers.\nfunc (c *Client) AddNode(host string, command AddNodeCommand) error {\n\treturn c.AddNodeAsync(host, command).Receive()\n}\n\n// FutureNodeResult is a future promise to deliver the result of a NodeAsync\n// RPC invocation (or an applicable error).\ntype FutureNodeResult chan *response\n\n// Receive waits for the response promised by the future and returns an error if\n// any occurred when performing the specified command.\nfunc (r FutureNodeResult) Receive() error {\n\t_, err := receiveFuture(r)\n\treturn err\n}\n\n// NodeAsync returns an instance of a type that can be used to get the result\n// of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See Node for the blocking version and more details.\nfunc (c *Client) NodeAsync(command btcjson.NodeSubCmd, host string,\n\tconnectSubCmd *string) FutureNodeResult {\n\tcmd := btcjson.NewNodeCmd(command, host, connectSubCmd)\n\treturn c.sendCmd(cmd)\n}\n\n// Node attempts to perform the passed node command on the host.\n// For example, it can be used to add or a remove a persistent peer, or to do\n// connect or diconnect a non-persistent one.\n//\n// The connectSubCmd should be set either \"perm\" or \"temp\", depending on\n// whether we are targetting a persistent or non-persistent peer. Passing nil\n// will cause the default value to be used, which currently is \"temp\".\nfunc (c *Client) Node(command btcjson.NodeSubCmd, host string,\n\tconnectSubCmd *string) error {\n\treturn c.NodeAsync(command, host, connectSubCmd).Receive()\n}\n\n// FutureGetAddedNodeInfoResult is a future promise to deliver the result of a\n// GetAddedNodeInfoAsync RPC invocation (or an applicable error).\ntype FutureGetAddedNodeInfoResult chan *response\n\n// Receive waits for the response promised by the future and returns information\n// about manually added (persistent) peers.\nfunc (r FutureGetAddedNodeInfoResult) Receive() ([]btcjson.GetAddedNodeInfoResult, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal as an array of getaddednodeinfo result objects.\n\tvar nodeInfo []btcjson.GetAddedNodeInfoResult\n\terr = json.Unmarshal(res, &nodeInfo)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn nodeInfo, nil\n}\n\n// GetAddedNodeInfoAsync returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See GetAddedNodeInfo for the blocking version and more details.\nfunc (c *Client) GetAddedNodeInfoAsync(peer string) FutureGetAddedNodeInfoResult {\n\tcmd := btcjson.NewGetAddedNodeInfoCmd(true, &peer)\n\treturn c.sendCmd(cmd)\n}\n\n// GetAddedNodeInfo returns information about manually added (persistent) peers.\n//\n// See GetAddedNodeInfoNoDNS to retrieve only a list of the added (persistent)\n// peers.\nfunc (c *Client) GetAddedNodeInfo(peer string) ([]btcjson.GetAddedNodeInfoResult, error) {\n\treturn c.GetAddedNodeInfoAsync(peer).Receive()\n}\n\n// FutureGetAddedNodeInfoNoDNSResult is a future promise to deliver the result\n// of a GetAddedNodeInfoNoDNSAsync RPC invocation (or an applicable error).\ntype FutureGetAddedNodeInfoNoDNSResult chan *response\n\n// Receive waits for the response promised by the future and returns a list of\n// manually added (persistent) peers.\nfunc (r FutureGetAddedNodeInfoNoDNSResult) Receive() ([]string, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal result as an array of strings.\n\tvar nodes []string\n\terr = json.Unmarshal(res, &nodes)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn nodes, nil\n}\n\n// GetAddedNodeInfoNoDNSAsync returns an instance of a type that can be used to\n// get the result of the RPC at some future time by invoking the Receive\n// function on the returned instance.\n//\n// See GetAddedNodeInfoNoDNS for the blocking version and more details.\nfunc (c *Client) GetAddedNodeInfoNoDNSAsync(peer string) FutureGetAddedNodeInfoNoDNSResult {\n\tcmd := btcjson.NewGetAddedNodeInfoCmd(false, &peer)\n\treturn c.sendCmd(cmd)\n}\n\n// GetAddedNodeInfoNoDNS returns a list of manually added (persistent) peers.\n// This works by setting the dns flag to false in the underlying RPC.\n//\n// See GetAddedNodeInfo to obtain more information about each added (persistent)\n// peer.\nfunc (c *Client) GetAddedNodeInfoNoDNS(peer string) ([]string, error) {\n\treturn c.GetAddedNodeInfoNoDNSAsync(peer).Receive()\n}\n\n// FutureGetConnectionCountResult is a future promise to deliver the result\n// of a GetConnectionCountAsync RPC invocation (or an applicable error).\ntype FutureGetConnectionCountResult chan *response\n\n// Receive waits for the response promised by the future and returns the number\n// of active connections to other peers.\nfunc (r FutureGetConnectionCountResult) Receive() (int64, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\t// Unmarshal result as an int64.\n\tvar count int64\n\terr = json.Unmarshal(res, &count)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn count, nil\n}\n\n// GetConnectionCountAsync returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See GetConnectionCount for the blocking version and more details.\nfunc (c *Client) GetConnectionCountAsync() FutureGetConnectionCountResult {\n\tcmd := btcjson.NewGetConnectionCountCmd()\n\treturn c.sendCmd(cmd)\n}\n\n// GetConnectionCount returns the number of active connections to other peers.\nfunc (c *Client) GetConnectionCount() (int64, error) {\n\treturn c.GetConnectionCountAsync().Receive()\n}\n\n// FuturePingResult is a future promise to deliver the result of a PingAsync RPC\n// invocation (or an applicable error).\ntype FuturePingResult chan *response\n\n// Receive waits for the response promised by the future and returns the result\n// of queueing a ping to be sent to each connected peer.\nfunc (r FuturePingResult) Receive() error {\n\t_, err := receiveFuture(r)\n\treturn err\n}\n\n// PingAsync returns an instance of a type that can be used to get the result of\n// the RPC at some future time by invoking the Receive function on the returned\n// instance.\n//\n// See Ping for the blocking version and more details.\nfunc (c *Client) PingAsync() FuturePingResult {\n\tcmd := btcjson.NewPingCmd()\n\treturn c.sendCmd(cmd)\n}\n\n// Ping queues a ping to be sent to each connected peer.\n//\n// Use the GetPeerInfo function and examine the PingTime and PingWait fields to\n// access the ping times.\nfunc (c *Client) Ping() error {\n\treturn c.PingAsync().Receive()\n}\n\n// FutureGetPeerInfoResult is a future promise to deliver the result of a\n// GetPeerInfoAsync RPC invocation (or an applicable error).\ntype FutureGetPeerInfoResult chan *response\n\n// Receive waits for the response promised by the future and returns  data about\n// each connected network peer.\nfunc (r FutureGetPeerInfoResult) Receive() ([]btcjson.GetPeerInfoResult, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal result as an array of getpeerinfo result objects.\n\tvar peerInfo []btcjson.GetPeerInfoResult\n\terr = json.Unmarshal(res, &peerInfo)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn peerInfo, nil\n}\n\n// GetPeerInfoAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See GetPeerInfo for the blocking version and more details.\nfunc (c *Client) GetPeerInfoAsync() FutureGetPeerInfoResult {\n\tcmd := btcjson.NewGetPeerInfoCmd()\n\treturn c.sendCmd(cmd)\n}\n\n// GetPeerInfo returns data about each connected network peer.\nfunc (c *Client) GetPeerInfo() ([]btcjson.GetPeerInfoResult, error) {\n\treturn c.GetPeerInfoAsync().Receive()\n}\n\n// FutureGetNetTotalsResult is a future promise to deliver the result of a\n// GetNetTotalsAsync RPC invocation (or an applicable error).\ntype FutureGetNetTotalsResult chan *response\n\n// Receive waits for the response promised by the future and returns network\n// traffic statistics.\nfunc (r FutureGetNetTotalsResult) Receive() (*btcjson.GetNetTotalsResult, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal result as a getnettotals result object.\n\tvar totals btcjson.GetNetTotalsResult\n\terr = json.Unmarshal(res, &totals)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &totals, nil\n}\n\n// GetNetTotalsAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See GetNetTotals for the blocking version and more details.\nfunc (c *Client) GetNetTotalsAsync() FutureGetNetTotalsResult {\n\tcmd := btcjson.NewGetNetTotalsCmd()\n\treturn c.sendCmd(cmd)\n}\n\n// GetNetTotals returns network traffic statistics.\nfunc (c *Client) GetNetTotals() (*btcjson.GetNetTotalsResult, error) {\n\treturn c.GetNetTotalsAsync().Receive()\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/rpcclient/notify.go",
    "content": "// Copyright (c) 2014-2017 The btcsuite developers\n// Copyright (c) 2015-2017 The Decred developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage rpcclient\n\nimport (\n\t\"bytes\"\n\t\"encoding/hex\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/btcsuite/btcd/btcjson\"\n\t\"github.com/btcsuite/btcd/chaincfg/chainhash\"\n\t\"github.com/btcsuite/btcd/wire\"\n\t\"github.com/btcsuite/btcutil\"\n)\n\nvar (\n\t// ErrWebsocketsRequired is an error to describe the condition where the\n\t// caller is trying to use a websocket-only feature, such as requesting\n\t// notifications or other websocket requests when the client is\n\t// configured to run in HTTP POST mode.\n\tErrWebsocketsRequired = errors.New(\"a websocket connection is required \" +\n\t\t\"to use this feature\")\n)\n\n// notificationState is used to track the current state of successfully\n// registered notification so the state can be automatically re-established on\n// reconnect.\ntype notificationState struct {\n\tnotifyBlocks       bool\n\tnotifyNewTx        bool\n\tnotifyNewTxVerbose bool\n\tnotifyReceived     map[string]struct{}\n\tnotifySpent        map[btcjson.OutPoint]struct{}\n}\n\n// Copy returns a deep copy of the receiver.\nfunc (s *notificationState) Copy() *notificationState {\n\tvar stateCopy notificationState\n\tstateCopy.notifyBlocks = s.notifyBlocks\n\tstateCopy.notifyNewTx = s.notifyNewTx\n\tstateCopy.notifyNewTxVerbose = s.notifyNewTxVerbose\n\tstateCopy.notifyReceived = make(map[string]struct{})\n\tfor addr := range s.notifyReceived {\n\t\tstateCopy.notifyReceived[addr] = struct{}{}\n\t}\n\tstateCopy.notifySpent = make(map[btcjson.OutPoint]struct{})\n\tfor op := range s.notifySpent {\n\t\tstateCopy.notifySpent[op] = struct{}{}\n\t}\n\n\treturn &stateCopy\n}\n\n// newNotificationState returns a new notification state ready to be populated.\nfunc newNotificationState() *notificationState {\n\treturn &notificationState{\n\t\tnotifyReceived: make(map[string]struct{}),\n\t\tnotifySpent:    make(map[btcjson.OutPoint]struct{}),\n\t}\n}\n\n// newNilFutureResult returns a new future result channel that already has the\n// result waiting on the channel with the reply set to nil.  This is useful\n// to ignore things such as notifications when the caller didn't specify any\n// notification handlers.\nfunc newNilFutureResult() chan *response {\n\tresponseChan := make(chan *response, 1)\n\tresponseChan <- &response{result: nil, err: nil}\n\treturn responseChan\n}\n\n// NotificationHandlers defines callback function pointers to invoke with\n// notifications.  Since all of the functions are nil by default, all\n// notifications are effectively ignored until their handlers are set to a\n// concrete callback.\n//\n// NOTE: Unless otherwise documented, these handlers must NOT directly call any\n// blocking calls on the client instance since the input reader goroutine blocks\n// until the callback has completed.  Doing so will result in a deadlock\n// situation.\ntype NotificationHandlers struct {\n\t// OnClientConnected is invoked when the client connects or reconnects\n\t// to the RPC server.  This callback is run async with the rest of the\n\t// notification handlers, and is safe for blocking client requests.\n\tOnClientConnected func()\n\n\t// OnBlockConnected is invoked when a block is connected to the longest\n\t// (best) chain.  It will only be invoked if a preceding call to\n\t// NotifyBlocks has been made to register for the notification and the\n\t// function is non-nil.\n\t//\n\t// NOTE: Deprecated. Use OnFilteredBlockConnected instead.\n\tOnBlockConnected func(hash *chainhash.Hash, height int32, t time.Time)\n\n\t// OnFilteredBlockConnected is invoked when a block is connected to the\n\t// longest (best) chain.  It will only be invoked if a preceding call to\n\t// NotifyBlocks has been made to register for the notification and the\n\t// function is non-nil.  Its parameters differ from OnBlockConnected: it\n\t// receives the block's height, header, and relevant transactions.\n\tOnFilteredBlockConnected func(height int32, header *wire.BlockHeader,\n\t\ttxs []*btcutil.Tx)\n\n\t// OnBlockDisconnected is invoked when a block is disconnected from the\n\t// longest (best) chain.  It will only be invoked if a preceding call to\n\t// NotifyBlocks has been made to register for the notification and the\n\t// function is non-nil.\n\t//\n\t// NOTE: Deprecated. Use OnFilteredBlockDisconnected instead.\n\tOnBlockDisconnected func(hash *chainhash.Hash, height int32, t time.Time)\n\n\t// OnFilteredBlockDisconnected is invoked when a block is disconnected\n\t// from the longest (best) chain.  It will only be invoked if a\n\t// preceding NotifyBlocks has been made to register for the notification\n\t// and the call to function is non-nil.  Its parameters differ from\n\t// OnBlockDisconnected: it receives the block's height and header.\n\tOnFilteredBlockDisconnected func(height int32, header *wire.BlockHeader)\n\n\t// OnRecvTx is invoked when a transaction that receives funds to a\n\t// registered address is received into the memory pool and also\n\t// connected to the longest (best) chain.  It will only be invoked if a\n\t// preceding call to NotifyReceived, Rescan, or RescanEndHeight has been\n\t// made to register for the notification and the function is non-nil.\n\t//\n\t// NOTE: Deprecated. Use OnRelevantTxAccepted instead.\n\tOnRecvTx func(transaction *btcutil.Tx, details *btcjson.BlockDetails)\n\n\t// OnRedeemingTx is invoked when a transaction that spends a registered\n\t// outpoint is received into the memory pool and also connected to the\n\t// longest (best) chain.  It will only be invoked if a preceding call to\n\t// NotifySpent, Rescan, or RescanEndHeight has been made to register for\n\t// the notification and the function is non-nil.\n\t//\n\t// NOTE: The NotifyReceived will automatically register notifications\n\t// for the outpoints that are now \"owned\" as a result of receiving\n\t// funds to the registered addresses.  This means it is possible for\n\t// this to invoked indirectly as the result of a NotifyReceived call.\n\t//\n\t// NOTE: Deprecated. Use OnRelevantTxAccepted instead.\n\tOnRedeemingTx func(transaction *btcutil.Tx, details *btcjson.BlockDetails)\n\n\t// OnRelevantTxAccepted is invoked when an unmined transaction passes\n\t// the client's transaction filter.\n\t//\n\t// NOTE: This is a btcsuite extension ported from\n\t// github.com/decred/dcrrpcclient.\n\tOnRelevantTxAccepted func(transaction []byte)\n\n\t// OnRescanFinished is invoked after a rescan finishes due to a previous\n\t// call to Rescan or RescanEndHeight.  Finished rescans should be\n\t// signaled on this notification, rather than relying on the return\n\t// result of a rescan request, due to how btcd may send various rescan\n\t// notifications after the rescan request has already returned.\n\t//\n\t// NOTE: Deprecated. Not used with RescanBlocks.\n\tOnRescanFinished func(hash *chainhash.Hash, height int32, blkTime time.Time)\n\n\t// OnRescanProgress is invoked periodically when a rescan is underway.\n\t// It will only be invoked if a preceding call to Rescan or\n\t// RescanEndHeight has been made and the function is non-nil.\n\t//\n\t// NOTE: Deprecated. Not used with RescanBlocks.\n\tOnRescanProgress func(hash *chainhash.Hash, height int32, blkTime time.Time)\n\n\t// OnTxAccepted is invoked when a transaction is accepted into the\n\t// memory pool.  It will only be invoked if a preceding call to\n\t// NotifyNewTransactions with the verbose flag set to false has been\n\t// made to register for the notification and the function is non-nil.\n\tOnTxAccepted func(hash *chainhash.Hash, amount btcutil.Amount)\n\n\t// OnTxAccepted is invoked when a transaction is accepted into the\n\t// memory pool.  It will only be invoked if a preceding call to\n\t// NotifyNewTransactions with the verbose flag set to true has been\n\t// made to register for the notification and the function is non-nil.\n\tOnTxAcceptedVerbose func(txDetails *btcjson.TxRawResult)\n\n\t// OnBtcdConnected is invoked when a wallet connects or disconnects from\n\t// btcd.\n\t//\n\t// This will only be available when client is connected to a wallet\n\t// server such as btcwallet.\n\tOnBtcdConnected func(connected bool)\n\n\t// OnAccountBalance is invoked with account balance updates.\n\t//\n\t// This will only be available when speaking to a wallet server\n\t// such as btcwallet.\n\tOnAccountBalance func(account string, balance btcutil.Amount, confirmed bool)\n\n\t// OnWalletLockState is invoked when a wallet is locked or unlocked.\n\t//\n\t// This will only be available when client is connected to a wallet\n\t// server such as btcwallet.\n\tOnWalletLockState func(locked bool)\n\n\t// OnUnknownNotification is invoked when an unrecognized notification\n\t// is received.  This typically means the notification handling code\n\t// for this package needs to be updated for a new notification type or\n\t// the caller is using a custom notification this package does not know\n\t// about.\n\tOnUnknownNotification func(method string, params []json.RawMessage)\n}\n\n// handleNotification examines the passed notification type, performs\n// conversions to get the raw notification types into higher level types and\n// delivers the notification to the appropriate On<X> handler registered with\n// the client.\nfunc (c *Client) handleNotification(ntfn *rawNotification) {\n\t// Ignore the notification if the client is not interested in any\n\t// notifications.\n\tif c.ntfnHandlers == nil {\n\t\treturn\n\t}\n\n\tswitch ntfn.Method {\n\t// OnBlockConnected\n\tcase btcjson.BlockConnectedNtfnMethod:\n\t\t// Ignore the notification if the client is not interested in\n\t\t// it.\n\t\tif c.ntfnHandlers.OnBlockConnected == nil {\n\t\t\treturn\n\t\t}\n\n\t\tblockHash, blockHeight, blockTime, err := parseChainNtfnParams(ntfn.Params)\n\t\tif err != nil {\n\t\t\tlog.Warnf(\"Received invalid block connected \"+\n\t\t\t\t\"notification: %v\", err)\n\t\t\treturn\n\t\t}\n\n\t\tc.ntfnHandlers.OnBlockConnected(blockHash, blockHeight, blockTime)\n\n\t// OnFilteredBlockConnected\n\tcase btcjson.FilteredBlockConnectedNtfnMethod:\n\t\t// Ignore the notification if the client is not interested in\n\t\t// it.\n\t\tif c.ntfnHandlers.OnFilteredBlockConnected == nil {\n\t\t\treturn\n\t\t}\n\n\t\tblockHeight, blockHeader, transactions, err :=\n\t\t\tparseFilteredBlockConnectedParams(ntfn.Params)\n\t\tif err != nil {\n\t\t\tlog.Warnf(\"Received invalid filtered block \"+\n\t\t\t\t\"connected notification: %v\", err)\n\t\t\treturn\n\t\t}\n\n\t\tc.ntfnHandlers.OnFilteredBlockConnected(blockHeight,\n\t\t\tblockHeader, transactions)\n\n\t// OnBlockDisconnected\n\tcase btcjson.BlockDisconnectedNtfnMethod:\n\t\t// Ignore the notification if the client is not interested in\n\t\t// it.\n\t\tif c.ntfnHandlers.OnBlockDisconnected == nil {\n\t\t\treturn\n\t\t}\n\n\t\tblockHash, blockHeight, blockTime, err := parseChainNtfnParams(ntfn.Params)\n\t\tif err != nil {\n\t\t\tlog.Warnf(\"Received invalid block connected \"+\n\t\t\t\t\"notification: %v\", err)\n\t\t\treturn\n\t\t}\n\n\t\tc.ntfnHandlers.OnBlockDisconnected(blockHash, blockHeight, blockTime)\n\n\t// OnFilteredBlockDisconnected\n\tcase btcjson.FilteredBlockDisconnectedNtfnMethod:\n\t\t// Ignore the notification if the client is not interested in\n\t\t// it.\n\t\tif c.ntfnHandlers.OnFilteredBlockDisconnected == nil {\n\t\t\treturn\n\t\t}\n\n\t\tblockHeight, blockHeader, err :=\n\t\t\tparseFilteredBlockDisconnectedParams(ntfn.Params)\n\t\tif err != nil {\n\t\t\tlog.Warnf(\"Received invalid filtered block \"+\n\t\t\t\t\"disconnected notification: %v\", err)\n\t\t\treturn\n\t\t}\n\n\t\tc.ntfnHandlers.OnFilteredBlockDisconnected(blockHeight,\n\t\t\tblockHeader)\n\n\t// OnRecvTx\n\tcase btcjson.RecvTxNtfnMethod:\n\t\t// Ignore the notification if the client is not interested in\n\t\t// it.\n\t\tif c.ntfnHandlers.OnRecvTx == nil {\n\t\t\treturn\n\t\t}\n\n\t\ttx, block, err := parseChainTxNtfnParams(ntfn.Params)\n\t\tif err != nil {\n\t\t\tlog.Warnf(\"Received invalid recvtx notification: %v\",\n\t\t\t\terr)\n\t\t\treturn\n\t\t}\n\n\t\tc.ntfnHandlers.OnRecvTx(tx, block)\n\n\t// OnRedeemingTx\n\tcase btcjson.RedeemingTxNtfnMethod:\n\t\t// Ignore the notification if the client is not interested in\n\t\t// it.\n\t\tif c.ntfnHandlers.OnRedeemingTx == nil {\n\t\t\treturn\n\t\t}\n\n\t\ttx, block, err := parseChainTxNtfnParams(ntfn.Params)\n\t\tif err != nil {\n\t\t\tlog.Warnf(\"Received invalid redeemingtx \"+\n\t\t\t\t\"notification: %v\", err)\n\t\t\treturn\n\t\t}\n\n\t\tc.ntfnHandlers.OnRedeemingTx(tx, block)\n\n\t// OnRelevantTxAccepted\n\tcase btcjson.RelevantTxAcceptedNtfnMethod:\n\t\t// Ignore the notification if the client is not interested in\n\t\t// it.\n\t\tif c.ntfnHandlers.OnRelevantTxAccepted == nil {\n\t\t\treturn\n\t\t}\n\n\t\ttransaction, err := parseRelevantTxAcceptedParams(ntfn.Params)\n\t\tif err != nil {\n\t\t\tlog.Warnf(\"Received invalid relevanttxaccepted \"+\n\t\t\t\t\"notification: %v\", err)\n\t\t\treturn\n\t\t}\n\n\t\tc.ntfnHandlers.OnRelevantTxAccepted(transaction)\n\n\t// OnRescanFinished\n\tcase btcjson.RescanFinishedNtfnMethod:\n\t\t// Ignore the notification if the client is not interested in\n\t\t// it.\n\t\tif c.ntfnHandlers.OnRescanFinished == nil {\n\t\t\treturn\n\t\t}\n\n\t\thash, height, blkTime, err := parseRescanProgressParams(ntfn.Params)\n\t\tif err != nil {\n\t\t\tlog.Warnf(\"Received invalid rescanfinished \"+\n\t\t\t\t\"notification: %v\", err)\n\t\t\treturn\n\t\t}\n\n\t\tc.ntfnHandlers.OnRescanFinished(hash, height, blkTime)\n\n\t// OnRescanProgress\n\tcase btcjson.RescanProgressNtfnMethod:\n\t\t// Ignore the notification if the client is not interested in\n\t\t// it.\n\t\tif c.ntfnHandlers.OnRescanProgress == nil {\n\t\t\treturn\n\t\t}\n\n\t\thash, height, blkTime, err := parseRescanProgressParams(ntfn.Params)\n\t\tif err != nil {\n\t\t\tlog.Warnf(\"Received invalid rescanprogress \"+\n\t\t\t\t\"notification: %v\", err)\n\t\t\treturn\n\t\t}\n\n\t\tc.ntfnHandlers.OnRescanProgress(hash, height, blkTime)\n\n\t// OnTxAccepted\n\tcase btcjson.TxAcceptedNtfnMethod:\n\t\t// Ignore the notification if the client is not interested in\n\t\t// it.\n\t\tif c.ntfnHandlers.OnTxAccepted == nil {\n\t\t\treturn\n\t\t}\n\n\t\thash, amt, err := parseTxAcceptedNtfnParams(ntfn.Params)\n\t\tif err != nil {\n\t\t\tlog.Warnf(\"Received invalid tx accepted \"+\n\t\t\t\t\"notification: %v\", err)\n\t\t\treturn\n\t\t}\n\n\t\tc.ntfnHandlers.OnTxAccepted(hash, amt)\n\n\t// OnTxAcceptedVerbose\n\tcase btcjson.TxAcceptedVerboseNtfnMethod:\n\t\t// Ignore the notification if the client is not interested in\n\t\t// it.\n\t\tif c.ntfnHandlers.OnTxAcceptedVerbose == nil {\n\t\t\treturn\n\t\t}\n\n\t\trawTx, err := parseTxAcceptedVerboseNtfnParams(ntfn.Params)\n\t\tif err != nil {\n\t\t\tlog.Warnf(\"Received invalid tx accepted verbose \"+\n\t\t\t\t\"notification: %v\", err)\n\t\t\treturn\n\t\t}\n\n\t\tc.ntfnHandlers.OnTxAcceptedVerbose(rawTx)\n\n\t// OnBtcdConnected\n\tcase btcjson.BtcdConnectedNtfnMethod:\n\t\t// Ignore the notification if the client is not interested in\n\t\t// it.\n\t\tif c.ntfnHandlers.OnBtcdConnected == nil {\n\t\t\treturn\n\t\t}\n\n\t\tconnected, err := parseBtcdConnectedNtfnParams(ntfn.Params)\n\t\tif err != nil {\n\t\t\tlog.Warnf(\"Received invalid btcd connected \"+\n\t\t\t\t\"notification: %v\", err)\n\t\t\treturn\n\t\t}\n\n\t\tc.ntfnHandlers.OnBtcdConnected(connected)\n\n\t// OnAccountBalance\n\tcase btcjson.AccountBalanceNtfnMethod:\n\t\t// Ignore the notification if the client is not interested in\n\t\t// it.\n\t\tif c.ntfnHandlers.OnAccountBalance == nil {\n\t\t\treturn\n\t\t}\n\n\t\taccount, bal, conf, err := parseAccountBalanceNtfnParams(ntfn.Params)\n\t\tif err != nil {\n\t\t\tlog.Warnf(\"Received invalid account balance \"+\n\t\t\t\t\"notification: %v\", err)\n\t\t\treturn\n\t\t}\n\n\t\tc.ntfnHandlers.OnAccountBalance(account, bal, conf)\n\n\t// OnWalletLockState\n\tcase btcjson.WalletLockStateNtfnMethod:\n\t\t// Ignore the notification if the client is not interested in\n\t\t// it.\n\t\tif c.ntfnHandlers.OnWalletLockState == nil {\n\t\t\treturn\n\t\t}\n\n\t\t// The account name is not notified, so the return value is\n\t\t// discarded.\n\t\t_, locked, err := parseWalletLockStateNtfnParams(ntfn.Params)\n\t\tif err != nil {\n\t\t\tlog.Warnf(\"Received invalid wallet lock state \"+\n\t\t\t\t\"notification: %v\", err)\n\t\t\treturn\n\t\t}\n\n\t\tc.ntfnHandlers.OnWalletLockState(locked)\n\n\t// OnUnknownNotification\n\tdefault:\n\t\tif c.ntfnHandlers.OnUnknownNotification == nil {\n\t\t\treturn\n\t\t}\n\n\t\tc.ntfnHandlers.OnUnknownNotification(ntfn.Method, ntfn.Params)\n\t}\n}\n\n// wrongNumParams is an error type describing an unparseable JSON-RPC\n// notificiation due to an incorrect number of parameters for the\n// expected notification type.  The value is the number of parameters\n// of the invalid notification.\ntype wrongNumParams int\n\n// Error satisifies the builtin error interface.\nfunc (e wrongNumParams) Error() string {\n\treturn fmt.Sprintf(\"wrong number of parameters (%d)\", e)\n}\n\n// parseChainNtfnParams parses out the block hash and height from the parameters\n// of blockconnected and blockdisconnected notifications.\nfunc parseChainNtfnParams(params []json.RawMessage) (*chainhash.Hash,\n\tint32, time.Time, error) {\n\n\tif len(params) != 3 {\n\t\treturn nil, 0, time.Time{}, wrongNumParams(len(params))\n\t}\n\n\t// Unmarshal first parameter as a string.\n\tvar blockHashStr string\n\terr := json.Unmarshal(params[0], &blockHashStr)\n\tif err != nil {\n\t\treturn nil, 0, time.Time{}, err\n\t}\n\n\t// Unmarshal second parameter as an integer.\n\tvar blockHeight int32\n\terr = json.Unmarshal(params[1], &blockHeight)\n\tif err != nil {\n\t\treturn nil, 0, time.Time{}, err\n\t}\n\n\t// Unmarshal third parameter as unix time.\n\tvar blockTimeUnix int64\n\terr = json.Unmarshal(params[2], &blockTimeUnix)\n\tif err != nil {\n\t\treturn nil, 0, time.Time{}, err\n\t}\n\n\t// Create hash from block hash string.\n\tblockHash, err := chainhash.NewHashFromStr(blockHashStr)\n\tif err != nil {\n\t\treturn nil, 0, time.Time{}, err\n\t}\n\n\t// Create time.Time from unix time.\n\tblockTime := time.Unix(blockTimeUnix, 0)\n\n\treturn blockHash, blockHeight, blockTime, nil\n}\n\n// parseFilteredBlockConnectedParams parses out the parameters included in a\n// filteredblockconnected notification.\n//\n// NOTE: This is a btcd extension ported from github.com/decred/dcrrpcclient\n// and requires a websocket connection.\nfunc parseFilteredBlockConnectedParams(params []json.RawMessage) (int32,\n\t*wire.BlockHeader, []*btcutil.Tx, error) {\n\n\tif len(params) < 3 {\n\t\treturn 0, nil, nil, wrongNumParams(len(params))\n\t}\n\n\t// Unmarshal first parameter as an integer.\n\tvar blockHeight int32\n\terr := json.Unmarshal(params[0], &blockHeight)\n\tif err != nil {\n\t\treturn 0, nil, nil, err\n\t}\n\n\t// Unmarshal second parameter as a slice of bytes.\n\tblockHeaderBytes, err := parseHexParam(params[1])\n\tif err != nil {\n\t\treturn 0, nil, nil, err\n\t}\n\n\t// Deserialize block header from slice of bytes.\n\tvar blockHeader wire.BlockHeader\n\terr = blockHeader.Deserialize(bytes.NewReader(blockHeaderBytes))\n\tif err != nil {\n\t\treturn 0, nil, nil, err\n\t}\n\n\t// Unmarshal third parameter as a slice of hex-encoded strings.\n\tvar hexTransactions []string\n\terr = json.Unmarshal(params[2], &hexTransactions)\n\tif err != nil {\n\t\treturn 0, nil, nil, err\n\t}\n\n\t// Create slice of transactions from slice of strings by hex-decoding.\n\ttransactions := make([]*btcutil.Tx, len(hexTransactions))\n\tfor i, hexTx := range hexTransactions {\n\t\ttransaction, err := hex.DecodeString(hexTx)\n\t\tif err != nil {\n\t\t\treturn 0, nil, nil, err\n\t\t}\n\n\t\ttransactions[i], err = btcutil.NewTxFromBytes(transaction)\n\t\tif err != nil {\n\t\t\treturn 0, nil, nil, err\n\t\t}\n\t}\n\n\treturn blockHeight, &blockHeader, transactions, nil\n}\n\n// parseFilteredBlockDisconnectedParams parses out the parameters included in a\n// filteredblockdisconnected notification.\n//\n// NOTE: This is a btcd extension ported from github.com/decred/dcrrpcclient\n// and requires a websocket connection.\nfunc parseFilteredBlockDisconnectedParams(params []json.RawMessage) (int32,\n\t*wire.BlockHeader, error) {\n\tif len(params) < 2 {\n\t\treturn 0, nil, wrongNumParams(len(params))\n\t}\n\n\t// Unmarshal first parameter as an integer.\n\tvar blockHeight int32\n\terr := json.Unmarshal(params[0], &blockHeight)\n\tif err != nil {\n\t\treturn 0, nil, err\n\t}\n\n\t// Unmarshal second parmeter as a slice of bytes.\n\tblockHeaderBytes, err := parseHexParam(params[1])\n\tif err != nil {\n\t\treturn 0, nil, err\n\t}\n\n\t// Deserialize block header from slice of bytes.\n\tvar blockHeader wire.BlockHeader\n\terr = blockHeader.Deserialize(bytes.NewReader(blockHeaderBytes))\n\tif err != nil {\n\t\treturn 0, nil, err\n\t}\n\n\treturn blockHeight, &blockHeader, nil\n}\n\nfunc parseHexParam(param json.RawMessage) ([]byte, error) {\n\tvar s string\n\terr := json.Unmarshal(param, &s)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn hex.DecodeString(s)\n}\n\n// parseRelevantTxAcceptedParams parses out the parameter included in a\n// relevanttxaccepted notification.\nfunc parseRelevantTxAcceptedParams(params []json.RawMessage) (transaction []byte, err error) {\n\tif len(params) < 1 {\n\t\treturn nil, wrongNumParams(len(params))\n\t}\n\n\treturn parseHexParam(params[0])\n}\n\n// parseChainTxNtfnParams parses out the transaction and optional details about\n// the block it's mined in from the parameters of recvtx and redeemingtx\n// notifications.\nfunc parseChainTxNtfnParams(params []json.RawMessage) (*btcutil.Tx,\n\t*btcjson.BlockDetails, error) {\n\n\tif len(params) == 0 || len(params) > 2 {\n\t\treturn nil, nil, wrongNumParams(len(params))\n\t}\n\n\t// Unmarshal first parameter as a string.\n\tvar txHex string\n\terr := json.Unmarshal(params[0], &txHex)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\t// If present, unmarshal second optional parameter as the block details\n\t// JSON object.\n\tvar block *btcjson.BlockDetails\n\tif len(params) > 1 {\n\t\terr = json.Unmarshal(params[1], &block)\n\t\tif err != nil {\n\t\t\treturn nil, nil, err\n\t\t}\n\t}\n\n\t// Hex decode and deserialize the transaction.\n\tserializedTx, err := hex.DecodeString(txHex)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tvar msgTx wire.MsgTx\n\terr = msgTx.Deserialize(bytes.NewReader(serializedTx))\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\t// TODO: Change recvtx and redeemingtx callback signatures to use\n\t// nicer types for details about the block (block hash as a\n\t// chainhash.Hash, block time as a time.Time, etc.).\n\treturn btcutil.NewTx(&msgTx), block, nil\n}\n\n// parseRescanProgressParams parses out the height of the last rescanned block\n// from the parameters of rescanfinished and rescanprogress notifications.\nfunc parseRescanProgressParams(params []json.RawMessage) (*chainhash.Hash, int32, time.Time, error) {\n\tif len(params) != 3 {\n\t\treturn nil, 0, time.Time{}, wrongNumParams(len(params))\n\t}\n\n\t// Unmarshal first parameter as an string.\n\tvar hashStr string\n\terr := json.Unmarshal(params[0], &hashStr)\n\tif err != nil {\n\t\treturn nil, 0, time.Time{}, err\n\t}\n\n\t// Unmarshal second parameter as an integer.\n\tvar height int32\n\terr = json.Unmarshal(params[1], &height)\n\tif err != nil {\n\t\treturn nil, 0, time.Time{}, err\n\t}\n\n\t// Unmarshal third parameter as an integer.\n\tvar blkTime int64\n\terr = json.Unmarshal(params[2], &blkTime)\n\tif err != nil {\n\t\treturn nil, 0, time.Time{}, err\n\t}\n\n\t// Decode string encoding of block hash.\n\thash, err := chainhash.NewHashFromStr(hashStr)\n\tif err != nil {\n\t\treturn nil, 0, time.Time{}, err\n\t}\n\n\treturn hash, height, time.Unix(blkTime, 0), nil\n}\n\n// parseTxAcceptedNtfnParams parses out the transaction hash and total amount\n// from the parameters of a txaccepted notification.\nfunc parseTxAcceptedNtfnParams(params []json.RawMessage) (*chainhash.Hash,\n\tbtcutil.Amount, error) {\n\n\tif len(params) != 2 {\n\t\treturn nil, 0, wrongNumParams(len(params))\n\t}\n\n\t// Unmarshal first parameter as a string.\n\tvar txHashStr string\n\terr := json.Unmarshal(params[0], &txHashStr)\n\tif err != nil {\n\t\treturn nil, 0, err\n\t}\n\n\t// Unmarshal second parameter as a floating point number.\n\tvar famt float64\n\terr = json.Unmarshal(params[1], &famt)\n\tif err != nil {\n\t\treturn nil, 0, err\n\t}\n\n\t// Bounds check amount.\n\tamt, err := btcutil.NewAmount(famt)\n\tif err != nil {\n\t\treturn nil, 0, err\n\t}\n\n\t// Decode string encoding of transaction sha.\n\ttxHash, err := chainhash.NewHashFromStr(txHashStr)\n\tif err != nil {\n\t\treturn nil, 0, err\n\t}\n\n\treturn txHash, amt, nil\n}\n\n// parseTxAcceptedVerboseNtfnParams parses out details about a raw transaction\n// from the parameters of a txacceptedverbose notification.\nfunc parseTxAcceptedVerboseNtfnParams(params []json.RawMessage) (*btcjson.TxRawResult,\n\terror) {\n\n\tif len(params) != 1 {\n\t\treturn nil, wrongNumParams(len(params))\n\t}\n\n\t// Unmarshal first parameter as a raw transaction result object.\n\tvar rawTx btcjson.TxRawResult\n\terr := json.Unmarshal(params[0], &rawTx)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// TODO: change txacceptedverbose notification callbacks to use nicer\n\t// types for all details about the transaction (i.e. decoding hashes\n\t// from their string encoding).\n\treturn &rawTx, nil\n}\n\n// parseBtcdConnectedNtfnParams parses out the connection status of btcd\n// and btcwallet from the parameters of a btcdconnected notification.\nfunc parseBtcdConnectedNtfnParams(params []json.RawMessage) (bool, error) {\n\tif len(params) != 1 {\n\t\treturn false, wrongNumParams(len(params))\n\t}\n\n\t// Unmarshal first parameter as a boolean.\n\tvar connected bool\n\terr := json.Unmarshal(params[0], &connected)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\n\treturn connected, nil\n}\n\n// parseAccountBalanceNtfnParams parses out the account name, total balance,\n// and whether or not the balance is confirmed or unconfirmed from the\n// parameters of an accountbalance notification.\nfunc parseAccountBalanceNtfnParams(params []json.RawMessage) (account string,\n\tbalance btcutil.Amount, confirmed bool, err error) {\n\n\tif len(params) != 3 {\n\t\treturn \"\", 0, false, wrongNumParams(len(params))\n\t}\n\n\t// Unmarshal first parameter as a string.\n\terr = json.Unmarshal(params[0], &account)\n\tif err != nil {\n\t\treturn \"\", 0, false, err\n\t}\n\n\t// Unmarshal second parameter as a floating point number.\n\tvar fbal float64\n\terr = json.Unmarshal(params[1], &fbal)\n\tif err != nil {\n\t\treturn \"\", 0, false, err\n\t}\n\n\t// Unmarshal third parameter as a boolean.\n\terr = json.Unmarshal(params[2], &confirmed)\n\tif err != nil {\n\t\treturn \"\", 0, false, err\n\t}\n\n\t// Bounds check amount.\n\tbal, err := btcutil.NewAmount(fbal)\n\tif err != nil {\n\t\treturn \"\", 0, false, err\n\t}\n\n\treturn account, bal, confirmed, nil\n}\n\n// parseWalletLockStateNtfnParams parses out the account name and locked\n// state of an account from the parameters of a walletlockstate notification.\nfunc parseWalletLockStateNtfnParams(params []json.RawMessage) (account string,\n\tlocked bool, err error) {\n\n\tif len(params) != 2 {\n\t\treturn \"\", false, wrongNumParams(len(params))\n\t}\n\n\t// Unmarshal first parameter as a string.\n\terr = json.Unmarshal(params[0], &account)\n\tif err != nil {\n\t\treturn \"\", false, err\n\t}\n\n\t// Unmarshal second parameter as a boolean.\n\terr = json.Unmarshal(params[1], &locked)\n\tif err != nil {\n\t\treturn \"\", false, err\n\t}\n\n\treturn account, locked, nil\n}\n\n// FutureNotifyBlocksResult is a future promise to deliver the result of a\n// NotifyBlocksAsync RPC invocation (or an applicable error).\ntype FutureNotifyBlocksResult chan *response\n\n// Receive waits for the response promised by the future and returns an error\n// if the registration was not successful.\nfunc (r FutureNotifyBlocksResult) Receive() error {\n\t_, err := receiveFuture(r)\n\treturn err\n}\n\n// NotifyBlocksAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See NotifyBlocks for the blocking version and more details.\n//\n// NOTE: This is a btcd extension and requires a websocket connection.\nfunc (c *Client) NotifyBlocksAsync() FutureNotifyBlocksResult {\n\t// Not supported in HTTP POST mode.\n\tif c.config.HTTPPostMode {\n\t\treturn newFutureError(ErrWebsocketsRequired)\n\t}\n\n\t// Ignore the notification if the client is not interested in\n\t// notifications.\n\tif c.ntfnHandlers == nil {\n\t\treturn newNilFutureResult()\n\t}\n\n\tcmd := btcjson.NewNotifyBlocksCmd()\n\treturn c.sendCmd(cmd)\n}\n\n// NotifyBlocks registers the client to receive notifications when blocks are\n// connected and disconnected from the main chain.  The notifications are\n// delivered to the notification handlers associated with the client.  Calling\n// this function has no effect if there are no notification handlers and will\n// result in an error if the client is configured to run in HTTP POST mode.\n//\n// The notifications delivered as a result of this call will be via one of\n// OnBlockConnected or OnBlockDisconnected.\n//\n// NOTE: This is a btcd extension and requires a websocket connection.\nfunc (c *Client) NotifyBlocks() error {\n\treturn c.NotifyBlocksAsync().Receive()\n}\n\n// FutureNotifySpentResult is a future promise to deliver the result of a\n// NotifySpentAsync RPC invocation (or an applicable error).\n//\n// NOTE: Deprecated. Use FutureLoadTxFilterResult instead.\ntype FutureNotifySpentResult chan *response\n\n// Receive waits for the response promised by the future and returns an error\n// if the registration was not successful.\nfunc (r FutureNotifySpentResult) Receive() error {\n\t_, err := receiveFuture(r)\n\treturn err\n}\n\n// notifySpentInternal is the same as notifySpentAsync except it accepts\n// the converted outpoints as a parameter so the client can more efficiently\n// recreate the previous notification state on reconnect.\nfunc (c *Client) notifySpentInternal(outpoints []btcjson.OutPoint) FutureNotifySpentResult {\n\t// Not supported in HTTP POST mode.\n\tif c.config.HTTPPostMode {\n\t\treturn newFutureError(ErrWebsocketsRequired)\n\t}\n\n\t// Ignore the notification if the client is not interested in\n\t// notifications.\n\tif c.ntfnHandlers == nil {\n\t\treturn newNilFutureResult()\n\t}\n\n\tcmd := btcjson.NewNotifySpentCmd(outpoints)\n\treturn c.sendCmd(cmd)\n}\n\n// newOutPointFromWire constructs the btcjson representation of a transaction\n// outpoint from the wire type.\nfunc newOutPointFromWire(op *wire.OutPoint) btcjson.OutPoint {\n\treturn btcjson.OutPoint{\n\t\tHash:  op.Hash.String(),\n\t\tIndex: op.Index,\n\t}\n}\n\n// NotifySpentAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See NotifySpent for the blocking version and more details.\n//\n// NOTE: This is a btcd extension and requires a websocket connection.\n//\n// NOTE: Deprecated. Use LoadTxFilterAsync instead.\nfunc (c *Client) NotifySpentAsync(outpoints []*wire.OutPoint) FutureNotifySpentResult {\n\t// Not supported in HTTP POST mode.\n\tif c.config.HTTPPostMode {\n\t\treturn newFutureError(ErrWebsocketsRequired)\n\t}\n\n\t// Ignore the notification if the client is not interested in\n\t// notifications.\n\tif c.ntfnHandlers == nil {\n\t\treturn newNilFutureResult()\n\t}\n\n\tops := make([]btcjson.OutPoint, 0, len(outpoints))\n\tfor _, outpoint := range outpoints {\n\t\tops = append(ops, newOutPointFromWire(outpoint))\n\t}\n\tcmd := btcjson.NewNotifySpentCmd(ops)\n\treturn c.sendCmd(cmd)\n}\n\n// NotifySpent registers the client to receive notifications when the passed\n// transaction outputs are spent.  The notifications are delivered to the\n// notification handlers associated with the client.  Calling this function has\n// no effect if there are no notification handlers and will result in an error\n// if the client is configured to run in HTTP POST mode.\n//\n// The notifications delivered as a result of this call will be via\n// OnRedeemingTx.\n//\n// NOTE: This is a btcd extension and requires a websocket connection.\n//\n// NOTE: Deprecated. Use LoadTxFilter instead.\nfunc (c *Client) NotifySpent(outpoints []*wire.OutPoint) error {\n\treturn c.NotifySpentAsync(outpoints).Receive()\n}\n\n// FutureNotifyNewTransactionsResult is a future promise to deliver the result\n// of a NotifyNewTransactionsAsync RPC invocation (or an applicable error).\ntype FutureNotifyNewTransactionsResult chan *response\n\n// Receive waits for the response promised by the future and returns an error\n// if the registration was not successful.\nfunc (r FutureNotifyNewTransactionsResult) Receive() error {\n\t_, err := receiveFuture(r)\n\treturn err\n}\n\n// NotifyNewTransactionsAsync returns an instance of a type that can be used to\n// get the result of the RPC at some future time by invoking the Receive\n// function on the returned instance.\n//\n// See NotifyNewTransactionsAsync for the blocking version and more details.\n//\n// NOTE: This is a btcd extension and requires a websocket connection.\nfunc (c *Client) NotifyNewTransactionsAsync(verbose bool) FutureNotifyNewTransactionsResult {\n\t// Not supported in HTTP POST mode.\n\tif c.config.HTTPPostMode {\n\t\treturn newFutureError(ErrWebsocketsRequired)\n\t}\n\n\t// Ignore the notification if the client is not interested in\n\t// notifications.\n\tif c.ntfnHandlers == nil {\n\t\treturn newNilFutureResult()\n\t}\n\n\tcmd := btcjson.NewNotifyNewTransactionsCmd(&verbose)\n\treturn c.sendCmd(cmd)\n}\n\n// NotifyNewTransactions registers the client to receive notifications every\n// time a new transaction is accepted to the memory pool.  The notifications are\n// delivered to the notification handlers associated with the client.  Calling\n// this function has no effect if there are no notification handlers and will\n// result in an error if the client is configured to run in HTTP POST mode.\n//\n// The notifications delivered as a result of this call will be via one of\n// OnTxAccepted (when verbose is false) or OnTxAcceptedVerbose (when verbose is\n// true).\n//\n// NOTE: This is a btcd extension and requires a websocket connection.\nfunc (c *Client) NotifyNewTransactions(verbose bool) error {\n\treturn c.NotifyNewTransactionsAsync(verbose).Receive()\n}\n\n// FutureNotifyReceivedResult is a future promise to deliver the result of a\n// NotifyReceivedAsync RPC invocation (or an applicable error).\n//\n// NOTE: Deprecated. Use FutureLoadTxFilterResult instead.\ntype FutureNotifyReceivedResult chan *response\n\n// Receive waits for the response promised by the future and returns an error\n// if the registration was not successful.\nfunc (r FutureNotifyReceivedResult) Receive() error {\n\t_, err := receiveFuture(r)\n\treturn err\n}\n\n// notifyReceivedInternal is the same as notifyReceivedAsync except it accepts\n// the converted addresses as a parameter so the client can more efficiently\n// recreate the previous notification state on reconnect.\nfunc (c *Client) notifyReceivedInternal(addresses []string) FutureNotifyReceivedResult {\n\t// Not supported in HTTP POST mode.\n\tif c.config.HTTPPostMode {\n\t\treturn newFutureError(ErrWebsocketsRequired)\n\t}\n\n\t// Ignore the notification if the client is not interested in\n\t// notifications.\n\tif c.ntfnHandlers == nil {\n\t\treturn newNilFutureResult()\n\t}\n\n\t// Convert addresses to strings.\n\tcmd := btcjson.NewNotifyReceivedCmd(addresses)\n\treturn c.sendCmd(cmd)\n}\n\n// NotifyReceivedAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See NotifyReceived for the blocking version and more details.\n//\n// NOTE: This is a btcd extension and requires a websocket connection.\n//\n// NOTE: Deprecated. Use LoadTxFilterAsync instead.\nfunc (c *Client) NotifyReceivedAsync(addresses []btcutil.Address) FutureNotifyReceivedResult {\n\t// Not supported in HTTP POST mode.\n\tif c.config.HTTPPostMode {\n\t\treturn newFutureError(ErrWebsocketsRequired)\n\t}\n\n\t// Ignore the notification if the client is not interested in\n\t// notifications.\n\tif c.ntfnHandlers == nil {\n\t\treturn newNilFutureResult()\n\t}\n\n\t// Convert addresses to strings.\n\taddrs := make([]string, 0, len(addresses))\n\tfor _, addr := range addresses {\n\t\taddrs = append(addrs, addr.String())\n\t}\n\tcmd := btcjson.NewNotifyReceivedCmd(addrs)\n\treturn c.sendCmd(cmd)\n}\n\n// NotifyReceived registers the client to receive notifications every time a\n// new transaction which pays to one of the passed addresses is accepted to\n// memory pool or in a block connected to the block chain.  In addition, when\n// one of these transactions is detected, the client is also automatically\n// registered for notifications when the new transaction outpoints the address\n// now has available are spent (See NotifySpent).  The notifications are\n// delivered to the notification handlers associated with the client.  Calling\n// this function has no effect if there are no notification handlers and will\n// result in an error if the client is configured to run in HTTP POST mode.\n//\n// The notifications delivered as a result of this call will be via one of\n// *OnRecvTx (for transactions that receive funds to one of the passed\n// addresses) or OnRedeemingTx (for transactions which spend from one\n// of the outpoints which are automatically registered upon receipt of funds to\n// the address).\n//\n// NOTE: This is a btcd extension and requires a websocket connection.\n//\n// NOTE: Deprecated. Use LoadTxFilter instead.\nfunc (c *Client) NotifyReceived(addresses []btcutil.Address) error {\n\treturn c.NotifyReceivedAsync(addresses).Receive()\n}\n\n// FutureRescanResult is a future promise to deliver the result of a RescanAsync\n// or RescanEndHeightAsync RPC invocation (or an applicable error).\n//\n// NOTE: Deprecated. Use FutureRescanBlocksResult instead.\ntype FutureRescanResult chan *response\n\n// Receive waits for the response promised by the future and returns an error\n// if the rescan was not successful.\nfunc (r FutureRescanResult) Receive() error {\n\t_, err := receiveFuture(r)\n\treturn err\n}\n\n// RescanAsync returns an instance of a type that can be used to get the result\n// of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See Rescan for the blocking version and more details.\n//\n// NOTE: Rescan requests are not issued on client reconnect and must be\n// performed manually (ideally with a new start height based on the last\n// rescan progress notification).  See the OnClientConnected notification\n// callback for a good callsite to reissue rescan requests on connect and\n// reconnect.\n//\n// NOTE: This is a btcd extension and requires a websocket connection.\n//\n// NOTE: Deprecated. Use RescanBlocksAsync instead.\nfunc (c *Client) RescanAsync(startBlock *chainhash.Hash,\n\taddresses []btcutil.Address,\n\toutpoints []*wire.OutPoint) FutureRescanResult {\n\n\t// Not supported in HTTP POST mode.\n\tif c.config.HTTPPostMode {\n\t\treturn newFutureError(ErrWebsocketsRequired)\n\t}\n\n\t// Ignore the notification if the client is not interested in\n\t// notifications.\n\tif c.ntfnHandlers == nil {\n\t\treturn newNilFutureResult()\n\t}\n\n\t// Convert block hashes to strings.\n\tvar startBlockHashStr string\n\tif startBlock != nil {\n\t\tstartBlockHashStr = startBlock.String()\n\t}\n\n\t// Convert addresses to strings.\n\taddrs := make([]string, 0, len(addresses))\n\tfor _, addr := range addresses {\n\t\taddrs = append(addrs, addr.String())\n\t}\n\n\t// Convert outpoints.\n\tops := make([]btcjson.OutPoint, 0, len(outpoints))\n\tfor _, op := range outpoints {\n\t\tops = append(ops, newOutPointFromWire(op))\n\t}\n\n\tcmd := btcjson.NewRescanCmd(startBlockHashStr, addrs, ops, nil)\n\treturn c.sendCmd(cmd)\n}\n\n// Rescan rescans the block chain starting from the provided starting block to\n// the end of the longest chain for transactions that pay to the passed\n// addresses and transactions which spend the passed outpoints.\n//\n// The notifications of found transactions are delivered to the notification\n// handlers associated with client and this call will not return until the\n// rescan has completed.  Calling this function has no effect if there are no\n// notification handlers and will result in an error if the client is configured\n// to run in HTTP POST mode.\n//\n// The notifications delivered as a result of this call will be via one of\n// OnRedeemingTx (for transactions which spend from the one of the\n// passed outpoints), OnRecvTx (for transactions that receive funds\n// to one of the passed addresses), and OnRescanProgress (for rescan progress\n// updates).\n//\n// See RescanEndBlock to also specify an ending block to finish the rescan\n// without continuing through the best block on the main chain.\n//\n// NOTE: Rescan requests are not issued on client reconnect and must be\n// performed manually (ideally with a new start height based on the last\n// rescan progress notification).  See the OnClientConnected notification\n// callback for a good callsite to reissue rescan requests on connect and\n// reconnect.\n//\n// NOTE: This is a btcd extension and requires a websocket connection.\n//\n// NOTE: Deprecated. Use RescanBlocks instead.\nfunc (c *Client) Rescan(startBlock *chainhash.Hash,\n\taddresses []btcutil.Address,\n\toutpoints []*wire.OutPoint) error {\n\n\treturn c.RescanAsync(startBlock, addresses, outpoints).Receive()\n}\n\n// RescanEndBlockAsync returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See RescanEndBlock for the blocking version and more details.\n//\n// NOTE: This is a btcd extension and requires a websocket connection.\n//\n// NOTE: Deprecated. Use RescanBlocksAsync instead.\nfunc (c *Client) RescanEndBlockAsync(startBlock *chainhash.Hash,\n\taddresses []btcutil.Address, outpoints []*wire.OutPoint,\n\tendBlock *chainhash.Hash) FutureRescanResult {\n\n\t// Not supported in HTTP POST mode.\n\tif c.config.HTTPPostMode {\n\t\treturn newFutureError(ErrWebsocketsRequired)\n\t}\n\n\t// Ignore the notification if the client is not interested in\n\t// notifications.\n\tif c.ntfnHandlers == nil {\n\t\treturn newNilFutureResult()\n\t}\n\n\t// Convert block hashes to strings.\n\tvar startBlockHashStr, endBlockHashStr string\n\tif startBlock != nil {\n\t\tstartBlockHashStr = startBlock.String()\n\t}\n\tif endBlock != nil {\n\t\tendBlockHashStr = endBlock.String()\n\t}\n\n\t// Convert addresses to strings.\n\taddrs := make([]string, 0, len(addresses))\n\tfor _, addr := range addresses {\n\t\taddrs = append(addrs, addr.String())\n\t}\n\n\t// Convert outpoints.\n\tops := make([]btcjson.OutPoint, 0, len(outpoints))\n\tfor _, op := range outpoints {\n\t\tops = append(ops, newOutPointFromWire(op))\n\t}\n\n\tcmd := btcjson.NewRescanCmd(startBlockHashStr, addrs, ops,\n\t\t&endBlockHashStr)\n\treturn c.sendCmd(cmd)\n}\n\n// RescanEndHeight rescans the block chain starting from the provided starting\n// block up to the provided ending block for transactions that pay to the\n// passed addresses and transactions which spend the passed outpoints.\n//\n// The notifications of found transactions are delivered to the notification\n// handlers associated with client and this call will not return until the\n// rescan has completed.  Calling this function has no effect if there are no\n// notification handlers and will result in an error if the client is configured\n// to run in HTTP POST mode.\n//\n// The notifications delivered as a result of this call will be via one of\n// OnRedeemingTx (for transactions which spend from the one of the\n// passed outpoints), OnRecvTx (for transactions that receive funds\n// to one of the passed addresses), and OnRescanProgress (for rescan progress\n// updates).\n//\n// See Rescan to also perform a rescan through current end of the longest chain.\n//\n// NOTE: This is a btcd extension and requires a websocket connection.\n//\n// NOTE: Deprecated. Use RescanBlocks instead.\nfunc (c *Client) RescanEndHeight(startBlock *chainhash.Hash,\n\taddresses []btcutil.Address, outpoints []*wire.OutPoint,\n\tendBlock *chainhash.Hash) error {\n\n\treturn c.RescanEndBlockAsync(startBlock, addresses, outpoints,\n\t\tendBlock).Receive()\n}\n\n// FutureLoadTxFilterResult is a future promise to deliver the result\n// of a LoadTxFilterAsync RPC invocation (or an applicable error).\n//\n// NOTE: This is a btcd extension ported from github.com/decred/dcrrpcclient\n// and requires a websocket connection.\ntype FutureLoadTxFilterResult chan *response\n\n// Receive waits for the response promised by the future and returns an error\n// if the registration was not successful.\n//\n// NOTE: This is a btcd extension ported from github.com/decred/dcrrpcclient\n// and requires a websocket connection.\nfunc (r FutureLoadTxFilterResult) Receive() error {\n\t_, err := receiveFuture(r)\n\treturn err\n}\n\n// LoadTxFilterAsync returns an instance of a type that can be used to\n// get the result of the RPC at some future time by invoking the Receive\n// function on the returned instance.\n//\n// See LoadTxFilter for the blocking version and more details.\n//\n// NOTE: This is a btcd extension ported from github.com/decred/dcrrpcclient\n// and requires a websocket connection.\nfunc (c *Client) LoadTxFilterAsync(reload bool, addresses []btcutil.Address,\n\toutPoints []wire.OutPoint) FutureLoadTxFilterResult {\n\n\taddrStrs := make([]string, len(addresses))\n\tfor i, a := range addresses {\n\t\taddrStrs[i] = a.EncodeAddress()\n\t}\n\toutPointObjects := make([]btcjson.OutPoint, len(outPoints))\n\tfor i := range outPoints {\n\t\toutPointObjects[i] = btcjson.OutPoint{\n\t\t\tHash:  outPoints[i].Hash.String(),\n\t\t\tIndex: outPoints[i].Index,\n\t\t}\n\t}\n\n\tcmd := btcjson.NewLoadTxFilterCmd(reload, addrStrs, outPointObjects)\n\treturn c.sendCmd(cmd)\n}\n\n// LoadTxFilter loads, reloads, or adds data to a websocket client's transaction\n// filter.  The filter is consistently updated based on inspected transactions\n// during mempool acceptance, block acceptance, and for all rescanned blocks.\n//\n// NOTE: This is a btcd extension ported from github.com/decred/dcrrpcclient\n// and requires a websocket connection.\nfunc (c *Client) LoadTxFilter(reload bool, addresses []btcutil.Address, outPoints []wire.OutPoint) error {\n\treturn c.LoadTxFilterAsync(reload, addresses, outPoints).Receive()\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/rpcclient/rawrequest.go",
    "content": "// Copyright (c) 2014-2017 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage rpcclient\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\n\t\"github.com/btcsuite/btcd/btcjson\"\n)\n\n// FutureRawResult is a future promise to deliver the result of a RawRequest RPC\n// invocation (or an applicable error).\ntype FutureRawResult chan *response\n\n// Receive waits for the response promised by the future and returns the raw\n// response, or an error if the request was unsuccessful.\nfunc (r FutureRawResult) Receive() (json.RawMessage, error) {\n\treturn receiveFuture(r)\n}\n\n// RawRequestAsync returns an instance of a type that can be used to get the\n// result of a custom RPC request at some future time by invoking the Receive\n// function on the returned instance.\n//\n// See RawRequest for the blocking version and more details.\nfunc (c *Client) RawRequestAsync(method string, params []json.RawMessage) FutureRawResult {\n\t// Method may not be empty.\n\tif method == \"\" {\n\t\treturn newFutureError(errors.New(\"no method\"))\n\t}\n\n\t// Marshal parameters as \"[]\" instead of \"null\" when no parameters\n\t// are passed.\n\tif params == nil {\n\t\tparams = []json.RawMessage{}\n\t}\n\n\t// Create a raw JSON-RPC request using the provided method and params\n\t// and marshal it.  This is done rather than using the sendCmd function\n\t// since that relies on marshalling registered btcjson commands rather\n\t// than custom commands.\n\tid := c.NextID()\n\trawRequest := &btcjson.Request{\n\t\tJsonrpc: \"1.0\",\n\t\tID:      id,\n\t\tMethod:  method,\n\t\tParams:  params,\n\t}\n\tmarshalledJSON, err := json.Marshal(rawRequest)\n\tif err != nil {\n\t\treturn newFutureError(err)\n\t}\n\n\t// Generate the request and send it along with a channel to respond on.\n\tresponseChan := make(chan *response, 1)\n\tjReq := &jsonRequest{\n\t\tid:             id,\n\t\tmethod:         method,\n\t\tcmd:            nil,\n\t\tmarshalledJSON: marshalledJSON,\n\t\tresponseChan:   responseChan,\n\t}\n\tc.sendRequest(jReq)\n\n\treturn responseChan\n}\n\n// RawRequest allows the caller to send a raw or custom request to the server.\n// This method may be used to send and receive requests and responses for\n// requests that are not handled by this client package, or to proxy partially\n// unmarshaled requests to another JSON-RPC server if a request cannot be\n// handled directly.\nfunc (c *Client) RawRequest(method string, params []json.RawMessage) (json.RawMessage, error) {\n\treturn c.RawRequestAsync(method, params).Receive()\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/rpcclient/rawtransactions.go",
    "content": "// Copyright (c) 2014-2017 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage rpcclient\n\nimport (\n\t\"bytes\"\n\t\"encoding/hex\"\n\t\"encoding/json\"\n\n\t\"github.com/btcsuite/btcd/btcjson\"\n\t\"github.com/btcsuite/btcd/chaincfg/chainhash\"\n\t\"github.com/btcsuite/btcd/wire\"\n\t\"github.com/btcsuite/btcutil\"\n)\n\n// SigHashType enumerates the available signature hashing types that the\n// SignRawTransaction function accepts.\ntype SigHashType string\n\n// Constants used to indicate the signature hash type for SignRawTransaction.\nconst (\n\t// SigHashAll indicates ALL of the outputs should be signed.\n\tSigHashAll SigHashType = \"ALL\"\n\n\t// SigHashNone indicates NONE of the outputs should be signed.  This\n\t// can be thought of as specifying the signer does not care where the\n\t// bitcoins go.\n\tSigHashNone SigHashType = \"NONE\"\n\n\t// SigHashSingle indicates that a SINGLE output should be signed.  This\n\t// can be thought of specifying the signer only cares about where ONE of\n\t// the outputs goes, but not any of the others.\n\tSigHashSingle SigHashType = \"SINGLE\"\n\n\t// SigHashAllAnyoneCanPay indicates that signer does not care where the\n\t// other inputs to the transaction come from, so it allows other people\n\t// to add inputs.  In addition, it uses the SigHashAll signing method\n\t// for outputs.\n\tSigHashAllAnyoneCanPay SigHashType = \"ALL|ANYONECANPAY\"\n\n\t// SigHashNoneAnyoneCanPay indicates that signer does not care where the\n\t// other inputs to the transaction come from, so it allows other people\n\t// to add inputs.  In addition, it uses the SigHashNone signing method\n\t// for outputs.\n\tSigHashNoneAnyoneCanPay SigHashType = \"NONE|ANYONECANPAY\"\n\n\t// SigHashSingleAnyoneCanPay indicates that signer does not care where\n\t// the other inputs to the transaction come from, so it allows other\n\t// people to add inputs.  In addition, it uses the SigHashSingle signing\n\t// method for outputs.\n\tSigHashSingleAnyoneCanPay SigHashType = \"SINGLE|ANYONECANPAY\"\n)\n\n// String returns the SighHashType in human-readable form.\nfunc (s SigHashType) String() string {\n\treturn string(s)\n}\n\n// FutureGetRawTransactionResult is a future promise to deliver the result of a\n// GetRawTransactionAsync RPC invocation (or an applicable error).\ntype FutureGetRawTransactionResult chan *response\n\n// Receive waits for the response promised by the future and returns a\n// transaction given its hash.\nfunc (r FutureGetRawTransactionResult) Receive() (*btcutil.Tx, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal result as a string.\n\tvar txHex string\n\terr = json.Unmarshal(res, &txHex)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Decode the serialized transaction hex to raw bytes.\n\tserializedTx, err := hex.DecodeString(txHex)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Deserialize the transaction and return it.\n\tvar msgTx wire.MsgTx\n\tif err := msgTx.Deserialize(bytes.NewReader(serializedTx)); err != nil {\n\t\treturn nil, err\n\t}\n\treturn btcutil.NewTx(&msgTx), nil\n}\n\n// GetRawTransactionAsync returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See GetRawTransaction for the blocking version and more details.\nfunc (c *Client) GetRawTransactionAsync(txHash *chainhash.Hash) FutureGetRawTransactionResult {\n\thash := \"\"\n\tif txHash != nil {\n\t\thash = txHash.String()\n\t}\n\n\tcmd := btcjson.NewGetRawTransactionCmd(hash, btcjson.Int(0))\n\treturn c.sendCmd(cmd)\n}\n\n// GetRawTransaction returns a transaction given its hash.\n//\n// See GetRawTransactionVerbose to obtain additional information about the\n// transaction.\nfunc (c *Client) GetRawTransaction(txHash *chainhash.Hash) (*btcutil.Tx, error) {\n\treturn c.GetRawTransactionAsync(txHash).Receive()\n}\n\n// FutureGetRawTransactionVerboseResult is a future promise to deliver the\n// result of a GetRawTransactionVerboseAsync RPC invocation (or an applicable\n// error).\ntype FutureGetRawTransactionVerboseResult chan *response\n\n// Receive waits for the response promised by the future and returns information\n// about a transaction given its hash.\nfunc (r FutureGetRawTransactionVerboseResult) Receive() (*btcjson.TxRawResult, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal result as a gettrawtransaction result object.\n\tvar rawTxResult btcjson.TxRawResult\n\terr = json.Unmarshal(res, &rawTxResult)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &rawTxResult, nil\n}\n\n// GetRawTransactionVerboseAsync returns an instance of a type that can be used\n// to get the result of the RPC at some future time by invoking the Receive\n// function on the returned instance.\n//\n// See GetRawTransactionVerbose for the blocking version and more details.\nfunc (c *Client) GetRawTransactionVerboseAsync(txHash *chainhash.Hash) FutureGetRawTransactionVerboseResult {\n\thash := \"\"\n\tif txHash != nil {\n\t\thash = txHash.String()\n\t}\n\n\tcmd := btcjson.NewGetRawTransactionCmd(hash, btcjson.Int(1))\n\treturn c.sendCmd(cmd)\n}\n\n// GetRawTransactionVerbose returns information about a transaction given\n// its hash.\n//\n// See GetRawTransaction to obtain only the transaction already deserialized.\nfunc (c *Client) GetRawTransactionVerbose(txHash *chainhash.Hash) (*btcjson.TxRawResult, error) {\n\treturn c.GetRawTransactionVerboseAsync(txHash).Receive()\n}\n\n// FutureDecodeRawTransactionResult is a future promise to deliver the result\n// of a DecodeRawTransactionAsync RPC invocation (or an applicable error).\ntype FutureDecodeRawTransactionResult chan *response\n\n// Receive waits for the response promised by the future and returns information\n// about a transaction given its serialized bytes.\nfunc (r FutureDecodeRawTransactionResult) Receive() (*btcjson.TxRawResult, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal result as a decoderawtransaction result object.\n\tvar rawTxResult btcjson.TxRawResult\n\terr = json.Unmarshal(res, &rawTxResult)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &rawTxResult, nil\n}\n\n// DecodeRawTransactionAsync returns an instance of a type that can be used to\n// get the result of the RPC at some future time by invoking the Receive\n// function on the returned instance.\n//\n// See DecodeRawTransaction for the blocking version and more details.\nfunc (c *Client) DecodeRawTransactionAsync(serializedTx []byte) FutureDecodeRawTransactionResult {\n\ttxHex := hex.EncodeToString(serializedTx)\n\tcmd := btcjson.NewDecodeRawTransactionCmd(txHex)\n\treturn c.sendCmd(cmd)\n}\n\n// DecodeRawTransaction returns information about a transaction given its\n// serialized bytes.\nfunc (c *Client) DecodeRawTransaction(serializedTx []byte) (*btcjson.TxRawResult, error) {\n\treturn c.DecodeRawTransactionAsync(serializedTx).Receive()\n}\n\n// FutureCreateRawTransactionResult is a future promise to deliver the result\n// of a CreateRawTransactionAsync RPC invocation (or an applicable error).\ntype FutureCreateRawTransactionResult chan *response\n\n// Receive waits for the response promised by the future and returns a new\n// transaction spending the provided inputs and sending to the provided\n// addresses.\nfunc (r FutureCreateRawTransactionResult) Receive() (*wire.MsgTx, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal result as a string.\n\tvar txHex string\n\terr = json.Unmarshal(res, &txHex)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Decode the serialized transaction hex to raw bytes.\n\tserializedTx, err := hex.DecodeString(txHex)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Deserialize the transaction and return it.\n\tvar msgTx wire.MsgTx\n\tif err := msgTx.Deserialize(bytes.NewReader(serializedTx)); err != nil {\n\t\treturn nil, err\n\t}\n\treturn &msgTx, nil\n}\n\n// CreateRawTransactionAsync returns an instance of a type that can be used to\n// get the result of the RPC at some future time by invoking the Receive\n// function on the returned instance.\n//\n// See CreateRawTransaction for the blocking version and more details.\nfunc (c *Client) CreateRawTransactionAsync(inputs []btcjson.TransactionInput,\n\tamounts map[btcutil.Address]btcutil.Amount, lockTime *int64) FutureCreateRawTransactionResult {\n\n\tconvertedAmts := make(map[string]float64, len(amounts))\n\tfor addr, amount := range amounts {\n\t\tconvertedAmts[addr.String()] = amount.ToBTC()\n\t}\n\tcmd := btcjson.NewCreateRawTransactionCmd(inputs, convertedAmts, lockTime)\n\treturn c.sendCmd(cmd)\n}\n\n// CreateRawTransaction returns a new transaction spending the provided inputs\n// and sending to the provided addresses.\nfunc (c *Client) CreateRawTransaction(inputs []btcjson.TransactionInput,\n\tamounts map[btcutil.Address]btcutil.Amount, lockTime *int64) (*wire.MsgTx, error) {\n\n\treturn c.CreateRawTransactionAsync(inputs, amounts, lockTime).Receive()\n}\n\n// FutureSendRawTransactionResult is a future promise to deliver the result\n// of a SendRawTransactionAsync RPC invocation (or an applicable error).\ntype FutureSendRawTransactionResult chan *response\n\n// Receive waits for the response promised by the future and returns the result\n// of submitting the encoded transaction to the server which then relays it to\n// the network.\nfunc (r FutureSendRawTransactionResult) Receive() (*chainhash.Hash, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal result as a string.\n\tvar txHashStr string\n\terr = json.Unmarshal(res, &txHashStr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn chainhash.NewHashFromStr(txHashStr)\n}\n\n// SendRawTransactionAsync returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See SendRawTransaction for the blocking version and more details.\nfunc (c *Client) SendRawTransactionAsync(tx *wire.MsgTx, allowHighFees bool) FutureSendRawTransactionResult {\n\ttxHex := \"\"\n\tif tx != nil {\n\t\t// Serialize the transaction and convert to hex string.\n\t\tbuf := bytes.NewBuffer(make([]byte, 0, tx.SerializeSize()))\n\t\tif err := tx.Serialize(buf); err != nil {\n\t\t\treturn newFutureError(err)\n\t\t}\n\t\ttxHex = hex.EncodeToString(buf.Bytes())\n\t}\n\n\tcmd := btcjson.NewSendRawTransactionCmd(txHex, &allowHighFees)\n\treturn c.sendCmd(cmd)\n}\n\n// SendRawTransaction submits the encoded transaction to the server which will\n// then relay it to the network.\nfunc (c *Client) SendRawTransaction(tx *wire.MsgTx, allowHighFees bool) (*chainhash.Hash, error) {\n\treturn c.SendRawTransactionAsync(tx, allowHighFees).Receive()\n}\n\n// FutureSignRawTransactionResult is a future promise to deliver the result\n// of one of the SignRawTransactionAsync family of RPC invocations (or an\n// applicable error).\ntype FutureSignRawTransactionResult chan *response\n\n// Receive waits for the response promised by the future and returns the\n// signed transaction as well as whether or not all inputs are now signed.\nfunc (r FutureSignRawTransactionResult) Receive() (*wire.MsgTx, bool, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, false, err\n\t}\n\n\t// Unmarshal as a signrawtransaction result.\n\tvar signRawTxResult btcjson.SignRawTransactionResult\n\terr = json.Unmarshal(res, &signRawTxResult)\n\tif err != nil {\n\t\treturn nil, false, err\n\t}\n\n\t// Decode the serialized transaction hex to raw bytes.\n\tserializedTx, err := hex.DecodeString(signRawTxResult.Hex)\n\tif err != nil {\n\t\treturn nil, false, err\n\t}\n\n\t// Deserialize the transaction and return it.\n\tvar msgTx wire.MsgTx\n\tif err := msgTx.Deserialize(bytes.NewReader(serializedTx)); err != nil {\n\t\treturn nil, false, err\n\t}\n\n\treturn &msgTx, signRawTxResult.Complete, nil\n}\n\n// SignRawTransactionAsync returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See SignRawTransaction for the blocking version and more details.\nfunc (c *Client) SignRawTransactionAsync(tx *wire.MsgTx) FutureSignRawTransactionResult {\n\ttxHex := \"\"\n\tif tx != nil {\n\t\t// Serialize the transaction and convert to hex string.\n\t\tbuf := bytes.NewBuffer(make([]byte, 0, tx.SerializeSize()))\n\t\tif err := tx.Serialize(buf); err != nil {\n\t\t\treturn newFutureError(err)\n\t\t}\n\t\ttxHex = hex.EncodeToString(buf.Bytes())\n\t}\n\n\tcmd := btcjson.NewSignRawTransactionCmd(txHex, nil, nil, nil)\n\treturn c.sendCmd(cmd)\n}\n\n// SignRawTransaction signs inputs for the passed transaction and returns the\n// signed transaction as well as whether or not all inputs are now signed.\n//\n// This function assumes the RPC server already knows the input transactions and\n// private keys for the passed transaction which needs to be signed and uses the\n// default signature hash type.  Use one of the SignRawTransaction# variants to\n// specify that information if needed.\nfunc (c *Client) SignRawTransaction(tx *wire.MsgTx) (*wire.MsgTx, bool, error) {\n\treturn c.SignRawTransactionAsync(tx).Receive()\n}\n\n// SignRawTransaction2Async returns an instance of a type that can be used to\n// get the result of the RPC at some future time by invoking the Receive\n// function on the returned instance.\n//\n// See SignRawTransaction2 for the blocking version and more details.\nfunc (c *Client) SignRawTransaction2Async(tx *wire.MsgTx, inputs []btcjson.RawTxInput) FutureSignRawTransactionResult {\n\ttxHex := \"\"\n\tif tx != nil {\n\t\t// Serialize the transaction and convert to hex string.\n\t\tbuf := bytes.NewBuffer(make([]byte, 0, tx.SerializeSize()))\n\t\tif err := tx.Serialize(buf); err != nil {\n\t\t\treturn newFutureError(err)\n\t\t}\n\t\ttxHex = hex.EncodeToString(buf.Bytes())\n\t}\n\n\tcmd := btcjson.NewSignRawTransactionCmd(txHex, &inputs, nil, nil)\n\treturn c.sendCmd(cmd)\n}\n\n// SignRawTransaction2 signs inputs for the passed transaction given the list\n// of information about the input transactions needed to perform the signing\n// process.\n//\n// This only input transactions that need to be specified are ones the\n// RPC server does not already know.  Already known input transactions will be\n// merged with the specified transactions.\n//\n// See SignRawTransaction if the RPC server already knows the input\n// transactions.\nfunc (c *Client) SignRawTransaction2(tx *wire.MsgTx, inputs []btcjson.RawTxInput) (*wire.MsgTx, bool, error) {\n\treturn c.SignRawTransaction2Async(tx, inputs).Receive()\n}\n\n// SignRawTransaction3Async returns an instance of a type that can be used to\n// get the result of the RPC at some future time by invoking the Receive\n// function on the returned instance.\n//\n// See SignRawTransaction3 for the blocking version and more details.\nfunc (c *Client) SignRawTransaction3Async(tx *wire.MsgTx,\n\tinputs []btcjson.RawTxInput,\n\tprivKeysWIF []string) FutureSignRawTransactionResult {\n\n\ttxHex := \"\"\n\tif tx != nil {\n\t\t// Serialize the transaction and convert to hex string.\n\t\tbuf := bytes.NewBuffer(make([]byte, 0, tx.SerializeSize()))\n\t\tif err := tx.Serialize(buf); err != nil {\n\t\t\treturn newFutureError(err)\n\t\t}\n\t\ttxHex = hex.EncodeToString(buf.Bytes())\n\t}\n\n\tcmd := btcjson.NewSignRawTransactionCmd(txHex, &inputs, &privKeysWIF,\n\t\tnil)\n\treturn c.sendCmd(cmd)\n}\n\n// SignRawTransaction3 signs inputs for the passed transaction given the list\n// of information about extra input transactions and a list of private keys\n// needed to perform the signing process.  The private keys must be in wallet\n// import format (WIF).\n//\n// This only input transactions that need to be specified are ones the\n// RPC server does not already know.  Already known input transactions will be\n// merged with the specified transactions.  This means the list of transaction\n// inputs can be nil if the RPC server already knows them all.\n//\n// NOTE: Unlike the merging functionality of the input transactions, ONLY the\n// specified private keys will be used, so even if the server already knows some\n// of the private keys, they will NOT be used.\n//\n// See SignRawTransaction if the RPC server already knows the input\n// transactions and private keys or SignRawTransaction2 if it already knows the\n// private keys.\nfunc (c *Client) SignRawTransaction3(tx *wire.MsgTx,\n\tinputs []btcjson.RawTxInput,\n\tprivKeysWIF []string) (*wire.MsgTx, bool, error) {\n\n\treturn c.SignRawTransaction3Async(tx, inputs, privKeysWIF).Receive()\n}\n\n// SignRawTransaction4Async returns an instance of a type that can be used to\n// get the result of the RPC at some future time by invoking the Receive\n// function on the returned instance.\n//\n// See SignRawTransaction4 for the blocking version and more details.\nfunc (c *Client) SignRawTransaction4Async(tx *wire.MsgTx,\n\tinputs []btcjson.RawTxInput, privKeysWIF []string,\n\thashType SigHashType) FutureSignRawTransactionResult {\n\n\ttxHex := \"\"\n\tif tx != nil {\n\t\t// Serialize the transaction and convert to hex string.\n\t\tbuf := bytes.NewBuffer(make([]byte, 0, tx.SerializeSize()))\n\t\tif err := tx.Serialize(buf); err != nil {\n\t\t\treturn newFutureError(err)\n\t\t}\n\t\ttxHex = hex.EncodeToString(buf.Bytes())\n\t}\n\n\tcmd := btcjson.NewSignRawTransactionCmd(txHex, &inputs, &privKeysWIF,\n\t\tbtcjson.String(string(hashType)))\n\treturn c.sendCmd(cmd)\n}\n\n// SignRawTransaction4 signs inputs for the passed transaction using the\n// the specified signature hash type given the list of information about extra\n// input transactions and a potential list of private keys needed to perform\n// the signing process.  The private keys, if specified, must be in wallet\n// import format (WIF).\n//\n// The only input transactions that need to be specified are ones the RPC server\n// does not already know.  This means the list of transaction inputs can be nil\n// if the RPC server already knows them all.\n//\n// NOTE: Unlike the merging functionality of the input transactions, ONLY the\n// specified private keys will be used, so even if the server already knows some\n// of the private keys, they will NOT be used.  The list of private keys can be\n// nil in which case any private keys the RPC server knows will be used.\n//\n// This function should only used if a non-default signature hash type is\n// desired.  Otherwise, see SignRawTransaction if the RPC server already knows\n// the input transactions and private keys, SignRawTransaction2 if it already\n// knows the private keys, or SignRawTransaction3 if it does not know both.\nfunc (c *Client) SignRawTransaction4(tx *wire.MsgTx,\n\tinputs []btcjson.RawTxInput, privKeysWIF []string,\n\thashType SigHashType) (*wire.MsgTx, bool, error) {\n\n\treturn c.SignRawTransaction4Async(tx, inputs, privKeysWIF,\n\t\thashType).Receive()\n}\n\n// FutureSearchRawTransactionsResult is a future promise to deliver the result\n// of the SearchRawTransactionsAsync RPC invocation (or an applicable error).\ntype FutureSearchRawTransactionsResult chan *response\n\n// Receive waits for the response promised by the future and returns the\n// found raw transactions.\nfunc (r FutureSearchRawTransactionsResult) Receive() ([]*wire.MsgTx, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal as an array of strings.\n\tvar searchRawTxnsResult []string\n\terr = json.Unmarshal(res, &searchRawTxnsResult)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Decode and deserialize each transaction.\n\tmsgTxns := make([]*wire.MsgTx, 0, len(searchRawTxnsResult))\n\tfor _, hexTx := range searchRawTxnsResult {\n\t\t// Decode the serialized transaction hex to raw bytes.\n\t\tserializedTx, err := hex.DecodeString(hexTx)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// Deserialize the transaction and add it to the result slice.\n\t\tvar msgTx wire.MsgTx\n\t\terr = msgTx.Deserialize(bytes.NewReader(serializedTx))\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tmsgTxns = append(msgTxns, &msgTx)\n\t}\n\n\treturn msgTxns, nil\n}\n\n// SearchRawTransactionsAsync returns an instance of a type that can be used to\n// get the result of the RPC at some future time by invoking the Receive\n// function on the returned instance.\n//\n// See SearchRawTransactions for the blocking version and more details.\nfunc (c *Client) SearchRawTransactionsAsync(address btcutil.Address, skip, count int, reverse bool, filterAddrs []string) FutureSearchRawTransactionsResult {\n\taddr := address.EncodeAddress()\n\tverbose := btcjson.Int(0)\n\tcmd := btcjson.NewSearchRawTransactionsCmd(addr, verbose, &skip, &count,\n\t\tnil, &reverse, &filterAddrs)\n\treturn c.sendCmd(cmd)\n}\n\n// SearchRawTransactions returns transactions that involve the passed address.\n//\n// NOTE: Chain servers do not typically provide this capability unless it has\n// specifically been enabled.\n//\n// See SearchRawTransactionsVerbose to retrieve a list of data structures with\n// information about the transactions instead of the transactions themselves.\nfunc (c *Client) SearchRawTransactions(address btcutil.Address, skip, count int, reverse bool, filterAddrs []string) ([]*wire.MsgTx, error) {\n\treturn c.SearchRawTransactionsAsync(address, skip, count, reverse, filterAddrs).Receive()\n}\n\n// FutureSearchRawTransactionsVerboseResult is a future promise to deliver the\n// result of the SearchRawTransactionsVerboseAsync RPC invocation (or an\n// applicable error).\ntype FutureSearchRawTransactionsVerboseResult chan *response\n\n// Receive waits for the response promised by the future and returns the\n// found raw transactions.\nfunc (r FutureSearchRawTransactionsVerboseResult) Receive() ([]*btcjson.SearchRawTransactionsResult, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal as an array of raw transaction results.\n\tvar result []*btcjson.SearchRawTransactionsResult\n\terr = json.Unmarshal(res, &result)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn result, nil\n}\n\n// SearchRawTransactionsVerboseAsync returns an instance of a type that can be\n// used to get the result of the RPC at some future time by invoking the Receive\n// function on the returned instance.\n//\n// See SearchRawTransactionsVerbose for the blocking version and more details.\nfunc (c *Client) SearchRawTransactionsVerboseAsync(address btcutil.Address, skip,\n\tcount int, includePrevOut, reverse bool, filterAddrs *[]string) FutureSearchRawTransactionsVerboseResult {\n\n\taddr := address.EncodeAddress()\n\tverbose := btcjson.Int(1)\n\tvar prevOut *int\n\tif includePrevOut {\n\t\tprevOut = btcjson.Int(1)\n\t}\n\tcmd := btcjson.NewSearchRawTransactionsCmd(addr, verbose, &skip, &count,\n\t\tprevOut, &reverse, filterAddrs)\n\treturn c.sendCmd(cmd)\n}\n\n// SearchRawTransactionsVerbose returns a list of data structures that describe\n// transactions which involve the passed address.\n//\n// NOTE: Chain servers do not typically provide this capability unless it has\n// specifically been enabled.\n//\n// See SearchRawTransactions to retrieve a list of raw transactions instead.\nfunc (c *Client) SearchRawTransactionsVerbose(address btcutil.Address, skip,\n\tcount int, includePrevOut, reverse bool, filterAddrs []string) ([]*btcjson.SearchRawTransactionsResult, error) {\n\n\treturn c.SearchRawTransactionsVerboseAsync(address, skip, count,\n\t\tincludePrevOut, reverse, &filterAddrs).Receive()\n}\n\n// FutureDecodeScriptResult is a future promise to deliver the result\n// of a DecodeScriptAsync RPC invocation (or an applicable error).\ntype FutureDecodeScriptResult chan *response\n\n// Receive waits for the response promised by the future and returns information\n// about a script given its serialized bytes.\nfunc (r FutureDecodeScriptResult) Receive() (*btcjson.DecodeScriptResult, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal result as a decodescript result object.\n\tvar decodeScriptResult btcjson.DecodeScriptResult\n\terr = json.Unmarshal(res, &decodeScriptResult)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &decodeScriptResult, nil\n}\n\n// DecodeScriptAsync returns an instance of a type that can be used to\n// get the result of the RPC at some future time by invoking the Receive\n// function on the returned instance.\n//\n// See DecodeScript for the blocking version and more details.\nfunc (c *Client) DecodeScriptAsync(serializedScript []byte) FutureDecodeScriptResult {\n\tscriptHex := hex.EncodeToString(serializedScript)\n\tcmd := btcjson.NewDecodeScriptCmd(scriptHex)\n\treturn c.sendCmd(cmd)\n}\n\n// DecodeScript returns information about a script given its serialized bytes.\nfunc (c *Client) DecodeScript(serializedScript []byte) (*btcjson.DecodeScriptResult, error) {\n\treturn c.DecodeScriptAsync(serializedScript).Receive()\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/rpcclient/wallet.go",
    "content": "// Copyright (c) 2014-2017 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage rpcclient\n\nimport (\n\t\"encoding/json\"\n\t\"strconv\"\n\n\t\"github.com/btcsuite/btcd/btcjson\"\n\t\"github.com/btcsuite/btcd/chaincfg\"\n\t\"github.com/btcsuite/btcd/chaincfg/chainhash\"\n\t\"github.com/btcsuite/btcd/wire\"\n\t\"github.com/btcsuite/btcutil\"\n)\n\n// *****************************\n// Transaction Listing Functions\n// *****************************\n\n// FutureGetTransactionResult is a future promise to deliver the result\n// of a GetTransactionAsync RPC invocation (or an applicable error).\ntype FutureGetTransactionResult chan *response\n\n// Receive waits for the response promised by the future and returns detailed\n// information about a wallet transaction.\nfunc (r FutureGetTransactionResult) Receive() (*btcjson.GetTransactionResult, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal result as a gettransaction result object\n\tvar getTx btcjson.GetTransactionResult\n\terr = json.Unmarshal(res, &getTx)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &getTx, nil\n}\n\n// GetTransactionAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See GetTransaction for the blocking version and more details.\nfunc (c *Client) GetTransactionAsync(txHash *chainhash.Hash) FutureGetTransactionResult {\n\thash := \"\"\n\tif txHash != nil {\n\t\thash = txHash.String()\n\t}\n\n\tcmd := btcjson.NewGetTransactionCmd(hash, nil)\n\treturn c.sendCmd(cmd)\n}\n\n// GetTransaction returns detailed information about a wallet transaction.\n//\n// See GetRawTransaction to return the raw transaction instead.\nfunc (c *Client) GetTransaction(txHash *chainhash.Hash) (*btcjson.GetTransactionResult, error) {\n\treturn c.GetTransactionAsync(txHash).Receive()\n}\n\n// FutureListTransactionsResult is a future promise to deliver the result of a\n// ListTransactionsAsync, ListTransactionsCountAsync, or\n// ListTransactionsCountFromAsync RPC invocation (or an applicable error).\ntype FutureListTransactionsResult chan *response\n\n// Receive waits for the response promised by the future and returns a list of\n// the most recent transactions.\nfunc (r FutureListTransactionsResult) Receive() ([]btcjson.ListTransactionsResult, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal result as an array of listtransaction result objects.\n\tvar transactions []btcjson.ListTransactionsResult\n\terr = json.Unmarshal(res, &transactions)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn transactions, nil\n}\n\n// ListTransactionsAsync returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See ListTransactions for the blocking version and more details.\nfunc (c *Client) ListTransactionsAsync(account string) FutureListTransactionsResult {\n\tcmd := btcjson.NewListTransactionsCmd(&account, nil, nil, nil)\n\treturn c.sendCmd(cmd)\n}\n\n// ListTransactions returns a list of the most recent transactions.\n//\n// See the ListTransactionsCount and ListTransactionsCountFrom to control the\n// number of transactions returned and starting point, respectively.\nfunc (c *Client) ListTransactions(account string) ([]btcjson.ListTransactionsResult, error) {\n\treturn c.ListTransactionsAsync(account).Receive()\n}\n\n// ListTransactionsCountAsync returns an instance of a type that can be used to\n// get the result of the RPC at some future time by invoking the Receive\n// function on the returned instance.\n//\n// See ListTransactionsCount for the blocking version and more details.\nfunc (c *Client) ListTransactionsCountAsync(account string, count int) FutureListTransactionsResult {\n\tcmd := btcjson.NewListTransactionsCmd(&account, &count, nil, nil)\n\treturn c.sendCmd(cmd)\n}\n\n// ListTransactionsCount returns a list of the most recent transactions up\n// to the passed count.\n//\n// See the ListTransactions and ListTransactionsCountFrom functions for\n// different options.\nfunc (c *Client) ListTransactionsCount(account string, count int) ([]btcjson.ListTransactionsResult, error) {\n\treturn c.ListTransactionsCountAsync(account, count).Receive()\n}\n\n// ListTransactionsCountFromAsync returns an instance of a type that can be used\n// to get the result of the RPC at some future time by invoking the Receive\n// function on the returned instance.\n//\n// See ListTransactionsCountFrom for the blocking version and more details.\nfunc (c *Client) ListTransactionsCountFromAsync(account string, count, from int) FutureListTransactionsResult {\n\tcmd := btcjson.NewListTransactionsCmd(&account, &count, &from, nil)\n\treturn c.sendCmd(cmd)\n}\n\n// ListTransactionsCountFrom returns a list of the most recent transactions up\n// to the passed count while skipping the first 'from' transactions.\n//\n// See the ListTransactions and ListTransactionsCount functions to use defaults.\nfunc (c *Client) ListTransactionsCountFrom(account string, count, from int) ([]btcjson.ListTransactionsResult, error) {\n\treturn c.ListTransactionsCountFromAsync(account, count, from).Receive()\n}\n\n// FutureListUnspentResult is a future promise to deliver the result of a\n// ListUnspentAsync, ListUnspentMinAsync, ListUnspentMinMaxAsync, or\n// ListUnspentMinMaxAddressesAsync RPC invocation (or an applicable error).\ntype FutureListUnspentResult chan *response\n\n// Receive waits for the response promised by the future and returns all\n// unspent wallet transaction outputs returned by the RPC call.  If the\n// future wac returned by a call to ListUnspentMinAsync, ListUnspentMinMaxAsync,\n// or ListUnspentMinMaxAddressesAsync, the range may be limited by the\n// parameters of the RPC invocation.\nfunc (r FutureListUnspentResult) Receive() ([]btcjson.ListUnspentResult, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal result as an array of listunspent results.\n\tvar unspent []btcjson.ListUnspentResult\n\terr = json.Unmarshal(res, &unspent)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn unspent, nil\n}\n\n// ListUnspentAsync returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function\n// on the returned instance.\n//\n// See ListUnspent for the blocking version and more details.\nfunc (c *Client) ListUnspentAsync() FutureListUnspentResult {\n\tcmd := btcjson.NewListUnspentCmd(nil, nil, nil)\n\treturn c.sendCmd(cmd)\n}\n\n// ListUnspentMinAsync returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function\n// on the returned instance.\n//\n// See ListUnspentMin for the blocking version and more details.\nfunc (c *Client) ListUnspentMinAsync(minConf int) FutureListUnspentResult {\n\tcmd := btcjson.NewListUnspentCmd(&minConf, nil, nil)\n\treturn c.sendCmd(cmd)\n}\n\n// ListUnspentMinMaxAsync returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function\n// on the returned instance.\n//\n// See ListUnspentMinMax for the blocking version and more details.\nfunc (c *Client) ListUnspentMinMaxAsync(minConf, maxConf int) FutureListUnspentResult {\n\tcmd := btcjson.NewListUnspentCmd(&minConf, &maxConf, nil)\n\treturn c.sendCmd(cmd)\n}\n\n// ListUnspentMinMaxAddressesAsync returns an instance of a type that can be\n// used to get the result of the RPC at some future time by invoking the Receive\n// function on the returned instance.\n//\n// See ListUnspentMinMaxAddresses for the blocking version and more details.\nfunc (c *Client) ListUnspentMinMaxAddressesAsync(minConf, maxConf int, addrs []btcutil.Address) FutureListUnspentResult {\n\taddrStrs := make([]string, 0, len(addrs))\n\tfor _, a := range addrs {\n\t\taddrStrs = append(addrStrs, a.EncodeAddress())\n\t}\n\n\tcmd := btcjson.NewListUnspentCmd(&minConf, &maxConf, &addrStrs)\n\treturn c.sendCmd(cmd)\n}\n\n// ListUnspent returns all unspent transaction outputs known to a wallet, using\n// the default number of minimum and maximum number of confirmations as a\n// filter (1 and 999999, respectively).\nfunc (c *Client) ListUnspent() ([]btcjson.ListUnspentResult, error) {\n\treturn c.ListUnspentAsync().Receive()\n}\n\n// ListUnspentMin returns all unspent transaction outputs known to a wallet,\n// using the specified number of minimum conformations and default number of\n// maximum confiramtions (999999) as a filter.\nfunc (c *Client) ListUnspentMin(minConf int) ([]btcjson.ListUnspentResult, error) {\n\treturn c.ListUnspentMinAsync(minConf).Receive()\n}\n\n// ListUnspentMinMax returns all unspent transaction outputs known to a wallet,\n// using the specified number of minimum and maximum number of confirmations as\n// a filter.\nfunc (c *Client) ListUnspentMinMax(minConf, maxConf int) ([]btcjson.ListUnspentResult, error) {\n\treturn c.ListUnspentMinMaxAsync(minConf, maxConf).Receive()\n}\n\n// ListUnspentMinMaxAddresses returns all unspent transaction outputs that pay\n// to any of specified addresses in a wallet using the specified number of\n// minimum and maximum number of confirmations as a filter.\nfunc (c *Client) ListUnspentMinMaxAddresses(minConf, maxConf int, addrs []btcutil.Address) ([]btcjson.ListUnspentResult, error) {\n\treturn c.ListUnspentMinMaxAddressesAsync(minConf, maxConf, addrs).Receive()\n}\n\n// FutureListSinceBlockResult is a future promise to deliver the result of a\n// ListSinceBlockAsync or ListSinceBlockMinConfAsync RPC invocation (or an\n// applicable error).\ntype FutureListSinceBlockResult chan *response\n\n// Receive waits for the response promised by the future and returns all\n// transactions added in blocks since the specified block hash, or all\n// transactions if it is nil.\nfunc (r FutureListSinceBlockResult) Receive() (*btcjson.ListSinceBlockResult, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal result as a listsinceblock result object.\n\tvar listResult btcjson.ListSinceBlockResult\n\terr = json.Unmarshal(res, &listResult)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &listResult, nil\n}\n\n// ListSinceBlockAsync returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See ListSinceBlock for the blocking version and more details.\nfunc (c *Client) ListSinceBlockAsync(blockHash *chainhash.Hash) FutureListSinceBlockResult {\n\tvar hash *string\n\tif blockHash != nil {\n\t\thash = btcjson.String(blockHash.String())\n\t}\n\n\tcmd := btcjson.NewListSinceBlockCmd(hash, nil, nil)\n\treturn c.sendCmd(cmd)\n}\n\n// ListSinceBlock returns all transactions added in blocks since the specified\n// block hash, or all transactions if it is nil, using the default number of\n// minimum confirmations as a filter.\n//\n// See ListSinceBlockMinConf to override the minimum number of confirmations.\nfunc (c *Client) ListSinceBlock(blockHash *chainhash.Hash) (*btcjson.ListSinceBlockResult, error) {\n\treturn c.ListSinceBlockAsync(blockHash).Receive()\n}\n\n// ListSinceBlockMinConfAsync returns an instance of a type that can be used to\n// get the result of the RPC at some future time by invoking the Receive\n// function on the returned instance.\n//\n// See ListSinceBlockMinConf for the blocking version and more details.\nfunc (c *Client) ListSinceBlockMinConfAsync(blockHash *chainhash.Hash, minConfirms int) FutureListSinceBlockResult {\n\tvar hash *string\n\tif blockHash != nil {\n\t\thash = btcjson.String(blockHash.String())\n\t}\n\n\tcmd := btcjson.NewListSinceBlockCmd(hash, &minConfirms, nil)\n\treturn c.sendCmd(cmd)\n}\n\n// ListSinceBlockMinConf returns all transactions added in blocks since the\n// specified block hash, or all transactions if it is nil, using the specified\n// number of minimum confirmations as a filter.\n//\n// See ListSinceBlock to use the default minimum number of confirmations.\nfunc (c *Client) ListSinceBlockMinConf(blockHash *chainhash.Hash, minConfirms int) (*btcjson.ListSinceBlockResult, error) {\n\treturn c.ListSinceBlockMinConfAsync(blockHash, minConfirms).Receive()\n}\n\n// **************************\n// Transaction Send Functions\n// **************************\n\n// FutureLockUnspentResult is a future promise to deliver the error result of a\n// LockUnspentAsync RPC invocation.\ntype FutureLockUnspentResult chan *response\n\n// Receive waits for the response promised by the future and returns the result\n// of locking or unlocking the unspent output(s).\nfunc (r FutureLockUnspentResult) Receive() error {\n\t_, err := receiveFuture(r)\n\treturn err\n}\n\n// LockUnspentAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See LockUnspent for the blocking version and more details.\nfunc (c *Client) LockUnspentAsync(unlock bool, ops []*wire.OutPoint) FutureLockUnspentResult {\n\toutputs := make([]btcjson.TransactionInput, len(ops))\n\tfor i, op := range ops {\n\t\toutputs[i] = btcjson.TransactionInput{\n\t\t\tTxid: op.Hash.String(),\n\t\t\tVout: op.Index,\n\t\t}\n\t}\n\tcmd := btcjson.NewLockUnspentCmd(unlock, outputs)\n\treturn c.sendCmd(cmd)\n}\n\n// LockUnspent marks outputs as locked or unlocked, depending on the value of\n// the unlock bool.  When locked, the unspent output will not be selected as\n// input for newly created, non-raw transactions, and will not be returned in\n// future ListUnspent results, until the output is marked unlocked again.\n//\n// If unlock is false, each outpoint in ops will be marked locked.  If unlocked\n// is true and specific outputs are specified in ops (len != 0), exactly those\n// outputs will be marked unlocked.  If unlocked is true and no outpoints are\n// specified, all previous locked outputs are marked unlocked.\n//\n// The locked or unlocked state of outputs are not written to disk and after\n// restarting a wallet process, this data will be reset (every output unlocked).\n//\n// NOTE: While this method would be a bit more readable if the unlock bool was\n// reversed (that is, LockUnspent(true, ...) locked the outputs), it has been\n// left as unlock to keep compatibility with the reference client API and to\n// avoid confusion for those who are already familiar with the lockunspent RPC.\nfunc (c *Client) LockUnspent(unlock bool, ops []*wire.OutPoint) error {\n\treturn c.LockUnspentAsync(unlock, ops).Receive()\n}\n\n// FutureListLockUnspentResult is a future promise to deliver the result of a\n// ListLockUnspentAsync RPC invocation (or an applicable error).\ntype FutureListLockUnspentResult chan *response\n\n// Receive waits for the response promised by the future and returns the result\n// of all currently locked unspent outputs.\nfunc (r FutureListLockUnspentResult) Receive() ([]*wire.OutPoint, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal as an array of transaction inputs.\n\tvar inputs []btcjson.TransactionInput\n\terr = json.Unmarshal(res, &inputs)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Create a slice of outpoints from the transaction input structs.\n\tops := make([]*wire.OutPoint, len(inputs))\n\tfor i, input := range inputs {\n\t\tsha, err := chainhash.NewHashFromStr(input.Txid)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tops[i] = wire.NewOutPoint(sha, input.Vout)\n\t}\n\n\treturn ops, nil\n}\n\n// ListLockUnspentAsync returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See ListLockUnspent for the blocking version and more details.\nfunc (c *Client) ListLockUnspentAsync() FutureListLockUnspentResult {\n\tcmd := btcjson.NewListLockUnspentCmd()\n\treturn c.sendCmd(cmd)\n}\n\n// ListLockUnspent returns a slice of outpoints for all unspent outputs marked\n// as locked by a wallet.  Unspent outputs may be marked locked using\n// LockOutput.\nfunc (c *Client) ListLockUnspent() ([]*wire.OutPoint, error) {\n\treturn c.ListLockUnspentAsync().Receive()\n}\n\n// FutureSetTxFeeResult is a future promise to deliver the result of a\n// SetTxFeeAsync RPC invocation (or an applicable error).\ntype FutureSetTxFeeResult chan *response\n\n// Receive waits for the response promised by the future and returns the result\n// of setting an optional transaction fee per KB that helps ensure transactions\n// are processed quickly.  Most transaction are 1KB.\nfunc (r FutureSetTxFeeResult) Receive() error {\n\t_, err := receiveFuture(r)\n\treturn err\n}\n\n// SetTxFeeAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See SetTxFee for the blocking version and more details.\nfunc (c *Client) SetTxFeeAsync(fee btcutil.Amount) FutureSetTxFeeResult {\n\tcmd := btcjson.NewSetTxFeeCmd(fee.ToBTC())\n\treturn c.sendCmd(cmd)\n}\n\n// SetTxFee sets an optional transaction fee per KB that helps ensure\n// transactions are processed quickly.  Most transaction are 1KB.\nfunc (c *Client) SetTxFee(fee btcutil.Amount) error {\n\treturn c.SetTxFeeAsync(fee).Receive()\n}\n\n// FutureSendToAddressResult is a future promise to deliver the result of a\n// SendToAddressAsync RPC invocation (or an applicable error).\ntype FutureSendToAddressResult chan *response\n\n// Receive waits for the response promised by the future and returns the hash\n// of the transaction sending the passed amount to the given address.\nfunc (r FutureSendToAddressResult) Receive() (*chainhash.Hash, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal result as a string.\n\tvar txHash string\n\terr = json.Unmarshal(res, &txHash)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn chainhash.NewHashFromStr(txHash)\n}\n\n// SendToAddressAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See SendToAddress for the blocking version and more details.\nfunc (c *Client) SendToAddressAsync(address btcutil.Address, amount btcutil.Amount) FutureSendToAddressResult {\n\taddr := address.EncodeAddress()\n\tcmd := btcjson.NewSendToAddressCmd(addr, amount.ToBTC(), nil, nil)\n\treturn c.sendCmd(cmd)\n}\n\n// SendToAddress sends the passed amount to the given address.\n//\n// See SendToAddressComment to associate comments with the transaction in the\n// wallet.  The comments are not part of the transaction and are only internal\n// to the wallet.\n//\n// NOTE: This function requires to the wallet to be unlocked.  See the\n// WalletPassphrase function for more details.\nfunc (c *Client) SendToAddress(address btcutil.Address, amount btcutil.Amount) (*chainhash.Hash, error) {\n\treturn c.SendToAddressAsync(address, amount).Receive()\n}\n\n// SendToAddressCommentAsync returns an instance of a type that can be used to\n// get the result of the RPC at some future time by invoking the Receive\n// function on the returned instance.\n//\n// See SendToAddressComment for the blocking version and more details.\nfunc (c *Client) SendToAddressCommentAsync(address btcutil.Address,\n\tamount btcutil.Amount, comment,\n\tcommentTo string) FutureSendToAddressResult {\n\n\taddr := address.EncodeAddress()\n\tcmd := btcjson.NewSendToAddressCmd(addr, amount.ToBTC(), &comment,\n\t\t&commentTo)\n\treturn c.sendCmd(cmd)\n}\n\n// SendToAddressComment sends the passed amount to the given address and stores\n// the provided comment and comment to in the wallet.  The comment parameter is\n// intended to be used for the purpose of the transaction while the commentTo\n// parameter is indended to be used for who the transaction is being sent to.\n//\n// The comments are not part of the transaction and are only internal\n// to the wallet.\n//\n// See SendToAddress to avoid using comments.\n//\n// NOTE: This function requires to the wallet to be unlocked.  See the\n// WalletPassphrase function for more details.\nfunc (c *Client) SendToAddressComment(address btcutil.Address, amount btcutil.Amount, comment, commentTo string) (*chainhash.Hash, error) {\n\treturn c.SendToAddressCommentAsync(address, amount, comment,\n\t\tcommentTo).Receive()\n}\n\n// FutureSendFromResult is a future promise to deliver the result of a\n// SendFromAsync, SendFromMinConfAsync, or SendFromCommentAsync RPC invocation\n// (or an applicable error).\ntype FutureSendFromResult chan *response\n\n// Receive waits for the response promised by the future and returns the hash\n// of the transaction sending amount to the given address using the provided\n// account as a source of funds.\nfunc (r FutureSendFromResult) Receive() (*chainhash.Hash, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal result as a string.\n\tvar txHash string\n\terr = json.Unmarshal(res, &txHash)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn chainhash.NewHashFromStr(txHash)\n}\n\n// SendFromAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See SendFrom for the blocking version and more details.\nfunc (c *Client) SendFromAsync(fromAccount string, toAddress btcutil.Address, amount btcutil.Amount) FutureSendFromResult {\n\taddr := toAddress.EncodeAddress()\n\tcmd := btcjson.NewSendFromCmd(fromAccount, addr, amount.ToBTC(), nil,\n\t\tnil, nil)\n\treturn c.sendCmd(cmd)\n}\n\n// SendFrom sends the passed amount to the given address using the provided\n// account as a source of funds.  Only funds with the default number of minimum\n// confirmations will be used.\n//\n// See SendFromMinConf and SendFromComment for different options.\n//\n// NOTE: This function requires to the wallet to be unlocked.  See the\n// WalletPassphrase function for more details.\nfunc (c *Client) SendFrom(fromAccount string, toAddress btcutil.Address, amount btcutil.Amount) (*chainhash.Hash, error) {\n\treturn c.SendFromAsync(fromAccount, toAddress, amount).Receive()\n}\n\n// SendFromMinConfAsync returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See SendFromMinConf for the blocking version and more details.\nfunc (c *Client) SendFromMinConfAsync(fromAccount string, toAddress btcutil.Address, amount btcutil.Amount, minConfirms int) FutureSendFromResult {\n\taddr := toAddress.EncodeAddress()\n\tcmd := btcjson.NewSendFromCmd(fromAccount, addr, amount.ToBTC(),\n\t\t&minConfirms, nil, nil)\n\treturn c.sendCmd(cmd)\n}\n\n// SendFromMinConf sends the passed amount to the given address using the\n// provided account as a source of funds.  Only funds with the passed number of\n// minimum confirmations will be used.\n//\n// See SendFrom to use the default number of minimum confirmations and\n// SendFromComment for additional options.\n//\n// NOTE: This function requires to the wallet to be unlocked.  See the\n// WalletPassphrase function for more details.\nfunc (c *Client) SendFromMinConf(fromAccount string, toAddress btcutil.Address, amount btcutil.Amount, minConfirms int) (*chainhash.Hash, error) {\n\treturn c.SendFromMinConfAsync(fromAccount, toAddress, amount,\n\t\tminConfirms).Receive()\n}\n\n// SendFromCommentAsync returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See SendFromComment for the blocking version and more details.\nfunc (c *Client) SendFromCommentAsync(fromAccount string,\n\ttoAddress btcutil.Address, amount btcutil.Amount, minConfirms int,\n\tcomment, commentTo string) FutureSendFromResult {\n\n\taddr := toAddress.EncodeAddress()\n\tcmd := btcjson.NewSendFromCmd(fromAccount, addr, amount.ToBTC(),\n\t\t&minConfirms, &comment, &commentTo)\n\treturn c.sendCmd(cmd)\n}\n\n// SendFromComment sends the passed amount to the given address using the\n// provided account as a source of funds and stores the provided comment and\n// comment to in the wallet.  The comment parameter is intended to be used for\n// the purpose of the transaction while the commentTo parameter is indended to\n// be used for who the transaction is being sent to.  Only funds with the passed\n// number of minimum confirmations will be used.\n//\n// See SendFrom and SendFromMinConf to use defaults.\n//\n// NOTE: This function requires to the wallet to be unlocked.  See the\n// WalletPassphrase function for more details.\nfunc (c *Client) SendFromComment(fromAccount string, toAddress btcutil.Address,\n\tamount btcutil.Amount, minConfirms int,\n\tcomment, commentTo string) (*chainhash.Hash, error) {\n\n\treturn c.SendFromCommentAsync(fromAccount, toAddress, amount,\n\t\tminConfirms, comment, commentTo).Receive()\n}\n\n// FutureSendManyResult is a future promise to deliver the result of a\n// SendManyAsync, SendManyMinConfAsync, or SendManyCommentAsync RPC invocation\n// (or an applicable error).\ntype FutureSendManyResult chan *response\n\n// Receive waits for the response promised by the future and returns the hash\n// of the transaction sending multiple amounts to multiple addresses using the\n// provided account as a source of funds.\nfunc (r FutureSendManyResult) Receive() (*chainhash.Hash, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmashal result as a string.\n\tvar txHash string\n\terr = json.Unmarshal(res, &txHash)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn chainhash.NewHashFromStr(txHash)\n}\n\n// SendManyAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See SendMany for the blocking version and more details.\nfunc (c *Client) SendManyAsync(fromAccount string, amounts map[btcutil.Address]btcutil.Amount) FutureSendManyResult {\n\tconvertedAmounts := make(map[string]float64, len(amounts))\n\tfor addr, amount := range amounts {\n\t\tconvertedAmounts[addr.EncodeAddress()] = amount.ToBTC()\n\t}\n\tcmd := btcjson.NewSendManyCmd(fromAccount, convertedAmounts, nil, nil)\n\treturn c.sendCmd(cmd)\n}\n\n// SendMany sends multiple amounts to multiple addresses using the provided\n// account as a source of funds in a single transaction.  Only funds with the\n// default number of minimum confirmations will be used.\n//\n// See SendManyMinConf and SendManyComment for different options.\n//\n// NOTE: This function requires to the wallet to be unlocked.  See the\n// WalletPassphrase function for more details.\nfunc (c *Client) SendMany(fromAccount string, amounts map[btcutil.Address]btcutil.Amount) (*chainhash.Hash, error) {\n\treturn c.SendManyAsync(fromAccount, amounts).Receive()\n}\n\n// SendManyMinConfAsync returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See SendManyMinConf for the blocking version and more details.\nfunc (c *Client) SendManyMinConfAsync(fromAccount string,\n\tamounts map[btcutil.Address]btcutil.Amount,\n\tminConfirms int) FutureSendManyResult {\n\n\tconvertedAmounts := make(map[string]float64, len(amounts))\n\tfor addr, amount := range amounts {\n\t\tconvertedAmounts[addr.EncodeAddress()] = amount.ToBTC()\n\t}\n\tcmd := btcjson.NewSendManyCmd(fromAccount, convertedAmounts,\n\t\t&minConfirms, nil)\n\treturn c.sendCmd(cmd)\n}\n\n// SendManyMinConf sends multiple amounts to multiple addresses using the\n// provided account as a source of funds in a single transaction.  Only funds\n// with the passed number of minimum confirmations will be used.\n//\n// See SendMany to use the default number of minimum confirmations and\n// SendManyComment for additional options.\n//\n// NOTE: This function requires to the wallet to be unlocked.  See the\n// WalletPassphrase function for more details.\nfunc (c *Client) SendManyMinConf(fromAccount string,\n\tamounts map[btcutil.Address]btcutil.Amount,\n\tminConfirms int) (*chainhash.Hash, error) {\n\n\treturn c.SendManyMinConfAsync(fromAccount, amounts, minConfirms).Receive()\n}\n\n// SendManyCommentAsync returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See SendManyComment for the blocking version and more details.\nfunc (c *Client) SendManyCommentAsync(fromAccount string,\n\tamounts map[btcutil.Address]btcutil.Amount, minConfirms int,\n\tcomment string) FutureSendManyResult {\n\n\tconvertedAmounts := make(map[string]float64, len(amounts))\n\tfor addr, amount := range amounts {\n\t\tconvertedAmounts[addr.EncodeAddress()] = amount.ToBTC()\n\t}\n\tcmd := btcjson.NewSendManyCmd(fromAccount, convertedAmounts,\n\t\t&minConfirms, &comment)\n\treturn c.sendCmd(cmd)\n}\n\n// SendManyComment sends multiple amounts to multiple addresses using the\n// provided account as a source of funds in a single transaction and stores the\n// provided comment in the wallet.  The comment parameter is intended to be used\n// for the purpose of the transaction   Only funds with the passed number of\n// minimum confirmations will be used.\n//\n// See SendMany and SendManyMinConf to use defaults.\n//\n// NOTE: This function requires to the wallet to be unlocked.  See the\n// WalletPassphrase function for more details.\nfunc (c *Client) SendManyComment(fromAccount string,\n\tamounts map[btcutil.Address]btcutil.Amount, minConfirms int,\n\tcomment string) (*chainhash.Hash, error) {\n\n\treturn c.SendManyCommentAsync(fromAccount, amounts, minConfirms,\n\t\tcomment).Receive()\n}\n\n// *************************\n// Address/Account Functions\n// *************************\n\n// FutureAddMultisigAddressResult is a future promise to deliver the result of a\n// AddMultisigAddressAsync RPC invocation (or an applicable error).\ntype FutureAddMultisigAddressResult chan *response\n\n// Receive waits for the response promised by the future and returns the\n// multisignature address that requires the specified number of signatures for\n// the provided addresses.\nfunc (r FutureAddMultisigAddressResult) Receive() (btcutil.Address, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal result as a string.\n\tvar addr string\n\terr = json.Unmarshal(res, &addr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn btcutil.DecodeAddress(addr, &chaincfg.MainNetParams)\n}\n\n// AddMultisigAddressAsync returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See AddMultisigAddress for the blocking version and more details.\nfunc (c *Client) AddMultisigAddressAsync(requiredSigs int, addresses []btcutil.Address, account string) FutureAddMultisigAddressResult {\n\taddrs := make([]string, 0, len(addresses))\n\tfor _, addr := range addresses {\n\t\taddrs = append(addrs, addr.String())\n\t}\n\n\tcmd := btcjson.NewAddMultisigAddressCmd(requiredSigs, addrs, &account)\n\treturn c.sendCmd(cmd)\n}\n\n// AddMultisigAddress adds a multisignature address that requires the specified\n// number of signatures for the provided addresses to the wallet.\nfunc (c *Client) AddMultisigAddress(requiredSigs int, addresses []btcutil.Address, account string) (btcutil.Address, error) {\n\treturn c.AddMultisigAddressAsync(requiredSigs, addresses,\n\t\taccount).Receive()\n}\n\n// FutureCreateMultisigResult is a future promise to deliver the result of a\n// CreateMultisigAsync RPC invocation (or an applicable error).\ntype FutureCreateMultisigResult chan *response\n\n// Receive waits for the response promised by the future and returns the\n// multisignature address and script needed to redeem it.\nfunc (r FutureCreateMultisigResult) Receive() (*btcjson.CreateMultiSigResult, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal result as a createmultisig result object.\n\tvar multisigRes btcjson.CreateMultiSigResult\n\terr = json.Unmarshal(res, &multisigRes)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &multisigRes, nil\n}\n\n// CreateMultisigAsync returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See CreateMultisig for the blocking version and more details.\nfunc (c *Client) CreateMultisigAsync(requiredSigs int, addresses []btcutil.Address) FutureCreateMultisigResult {\n\taddrs := make([]string, 0, len(addresses))\n\tfor _, addr := range addresses {\n\t\taddrs = append(addrs, addr.String())\n\t}\n\n\tcmd := btcjson.NewCreateMultisigCmd(requiredSigs, addrs)\n\treturn c.sendCmd(cmd)\n}\n\n// CreateMultisig creates a multisignature address that requires the specified\n// number of signatures for the provided addresses and returns the\n// multisignature address and script needed to redeem it.\nfunc (c *Client) CreateMultisig(requiredSigs int, addresses []btcutil.Address) (*btcjson.CreateMultiSigResult, error) {\n\treturn c.CreateMultisigAsync(requiredSigs, addresses).Receive()\n}\n\n// FutureCreateNewAccountResult is a future promise to deliver the result of a\n// CreateNewAccountAsync RPC invocation (or an applicable error).\ntype FutureCreateNewAccountResult chan *response\n\n// Receive waits for the response promised by the future and returns the\n// result of creating new account.\nfunc (r FutureCreateNewAccountResult) Receive() error {\n\t_, err := receiveFuture(r)\n\treturn err\n}\n\n// CreateNewAccountAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See CreateNewAccount for the blocking version and more details.\nfunc (c *Client) CreateNewAccountAsync(account string) FutureCreateNewAccountResult {\n\tcmd := btcjson.NewCreateNewAccountCmd(account)\n\treturn c.sendCmd(cmd)\n}\n\n// CreateNewAccount creates a new wallet account.\nfunc (c *Client) CreateNewAccount(account string) error {\n\treturn c.CreateNewAccountAsync(account).Receive()\n}\n\n// FutureGetNewAddressResult is a future promise to deliver the result of a\n// GetNewAddressAsync RPC invocation (or an applicable error).\ntype FutureGetNewAddressResult chan *response\n\n// Receive waits for the response promised by the future and returns a new\n// address.\nfunc (r FutureGetNewAddressResult) Receive() (btcutil.Address, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal result as a string.\n\tvar addr string\n\terr = json.Unmarshal(res, &addr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn btcutil.DecodeAddress(addr, &chaincfg.MainNetParams)\n}\n\n// GetNewAddressAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See GetNewAddress for the blocking version and more details.\nfunc (c *Client) GetNewAddressAsync(account string) FutureGetNewAddressResult {\n\tcmd := btcjson.NewGetNewAddressCmd(&account)\n\treturn c.sendCmd(cmd)\n}\n\n// GetNewAddress returns a new address.\nfunc (c *Client) GetNewAddress(account string) (btcutil.Address, error) {\n\treturn c.GetNewAddressAsync(account).Receive()\n}\n\n// FutureGetRawChangeAddressResult is a future promise to deliver the result of\n// a GetRawChangeAddressAsync RPC invocation (or an applicable error).\ntype FutureGetRawChangeAddressResult chan *response\n\n// Receive waits for the response promised by the future and returns a new\n// address for receiving change that will be associated with the provided\n// account.  Note that this is only for raw transactions and NOT for normal use.\nfunc (r FutureGetRawChangeAddressResult) Receive() (btcutil.Address, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal result as a string.\n\tvar addr string\n\terr = json.Unmarshal(res, &addr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn btcutil.DecodeAddress(addr, &chaincfg.MainNetParams)\n}\n\n// GetRawChangeAddressAsync returns an instance of a type that can be used to\n// get the result of the RPC at some future time by invoking the Receive\n// function on the returned instance.\n//\n// See GetRawChangeAddress for the blocking version and more details.\nfunc (c *Client) GetRawChangeAddressAsync(account string) FutureGetRawChangeAddressResult {\n\tcmd := btcjson.NewGetRawChangeAddressCmd(&account)\n\treturn c.sendCmd(cmd)\n}\n\n// GetRawChangeAddress returns a new address for receiving change that will be\n// associated with the provided account.  Note that this is only for raw\n// transactions and NOT for normal use.\nfunc (c *Client) GetRawChangeAddress(account string) (btcutil.Address, error) {\n\treturn c.GetRawChangeAddressAsync(account).Receive()\n}\n\n// FutureAddWitnessAddressResult is a future promise to deliver the result of\n// a AddWitnessAddressAsync RPC invocation (or an applicable error).\ntype FutureAddWitnessAddressResult chan *response\n\n// Receive waits for the response promised by the future and returns the new\n// address.\nfunc (r FutureAddWitnessAddressResult) Receive() (btcutil.Address, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal result as a string.\n\tvar addr string\n\terr = json.Unmarshal(res, &addr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn btcutil.DecodeAddress(addr, &chaincfg.MainNetParams)\n}\n\n// AddWitnessAddressAsync returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See AddWitnessAddress for the blocking version and more details.\nfunc (c *Client) AddWitnessAddressAsync(address string) FutureAddWitnessAddressResult {\n\tcmd := btcjson.NewAddWitnessAddressCmd(address)\n\treturn c.sendCmd(cmd)\n}\n\n// AddWitnessAddress adds a witness address for a script and returns the new\n// address (P2SH of the witness script).\nfunc (c *Client) AddWitnessAddress(address string) (btcutil.Address, error) {\n\treturn c.AddWitnessAddressAsync(address).Receive()\n}\n\n// FutureGetAccountAddressResult is a future promise to deliver the result of a\n// GetAccountAddressAsync RPC invocation (or an applicable error).\ntype FutureGetAccountAddressResult chan *response\n\n// Receive waits for the response promised by the future and returns the current\n// Bitcoin address for receiving payments to the specified account.\nfunc (r FutureGetAccountAddressResult) Receive() (btcutil.Address, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal result as a string.\n\tvar addr string\n\terr = json.Unmarshal(res, &addr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn btcutil.DecodeAddress(addr, &chaincfg.MainNetParams)\n}\n\n// GetAccountAddressAsync returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See GetAccountAddress for the blocking version and more details.\nfunc (c *Client) GetAccountAddressAsync(account string) FutureGetAccountAddressResult {\n\tcmd := btcjson.NewGetAccountAddressCmd(account)\n\treturn c.sendCmd(cmd)\n}\n\n// GetAccountAddress returns the current Bitcoin address for receiving payments\n// to the specified account.\nfunc (c *Client) GetAccountAddress(account string) (btcutil.Address, error) {\n\treturn c.GetAccountAddressAsync(account).Receive()\n}\n\n// FutureGetAccountResult is a future promise to deliver the result of a\n// GetAccountAsync RPC invocation (or an applicable error).\ntype FutureGetAccountResult chan *response\n\n// Receive waits for the response promised by the future and returns the account\n// associated with the passed address.\nfunc (r FutureGetAccountResult) Receive() (string, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\t// Unmarshal result as a string.\n\tvar account string\n\terr = json.Unmarshal(res, &account)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn account, nil\n}\n\n// GetAccountAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See GetAccount for the blocking version and more details.\nfunc (c *Client) GetAccountAsync(address btcutil.Address) FutureGetAccountResult {\n\taddr := address.EncodeAddress()\n\tcmd := btcjson.NewGetAccountCmd(addr)\n\treturn c.sendCmd(cmd)\n}\n\n// GetAccount returns the account associated with the passed address.\nfunc (c *Client) GetAccount(address btcutil.Address) (string, error) {\n\treturn c.GetAccountAsync(address).Receive()\n}\n\n// FutureSetAccountResult is a future promise to deliver the result of a\n// SetAccountAsync RPC invocation (or an applicable error).\ntype FutureSetAccountResult chan *response\n\n// Receive waits for the response promised by the future and returns the result\n// of setting the account to be associated with the passed address.\nfunc (r FutureSetAccountResult) Receive() error {\n\t_, err := receiveFuture(r)\n\treturn err\n}\n\n// SetAccountAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See SetAccount for the blocking version and more details.\nfunc (c *Client) SetAccountAsync(address btcutil.Address, account string) FutureSetAccountResult {\n\taddr := address.EncodeAddress()\n\tcmd := btcjson.NewSetAccountCmd(addr, account)\n\treturn c.sendCmd(cmd)\n}\n\n// SetAccount sets the account associated with the passed address.\nfunc (c *Client) SetAccount(address btcutil.Address, account string) error {\n\treturn c.SetAccountAsync(address, account).Receive()\n}\n\n// FutureGetAddressesByAccountResult is a future promise to deliver the result\n// of a GetAddressesByAccountAsync RPC invocation (or an applicable error).\ntype FutureGetAddressesByAccountResult chan *response\n\n// Receive waits for the response promised by the future and returns the list of\n// addresses associated with the passed account.\nfunc (r FutureGetAddressesByAccountResult) Receive() ([]btcutil.Address, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmashal result as an array of string.\n\tvar addrStrings []string\n\terr = json.Unmarshal(res, &addrStrings)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\taddrs := make([]btcutil.Address, 0, len(addrStrings))\n\tfor _, addrStr := range addrStrings {\n\t\taddr, err := btcutil.DecodeAddress(addrStr,\n\t\t\t&chaincfg.MainNetParams)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\taddrs = append(addrs, addr)\n\t}\n\n\treturn addrs, nil\n}\n\n// GetAddressesByAccountAsync returns an instance of a type that can be used to\n// get the result of the RPC at some future time by invoking the Receive\n// function on the returned instance.\n//\n// See GetAddressesByAccount for the blocking version and more details.\nfunc (c *Client) GetAddressesByAccountAsync(account string) FutureGetAddressesByAccountResult {\n\tcmd := btcjson.NewGetAddressesByAccountCmd(account)\n\treturn c.sendCmd(cmd)\n}\n\n// GetAddressesByAccount returns the list of addresses associated with the\n// passed account.\nfunc (c *Client) GetAddressesByAccount(account string) ([]btcutil.Address, error) {\n\treturn c.GetAddressesByAccountAsync(account).Receive()\n}\n\n// FutureMoveResult is a future promise to deliver the result of a MoveAsync,\n// MoveMinConfAsync, or MoveCommentAsync RPC invocation (or an applicable\n// error).\ntype FutureMoveResult chan *response\n\n// Receive waits for the response promised by the future and returns the result\n// of the move operation.\nfunc (r FutureMoveResult) Receive() (bool, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\n\t// Unmarshal result as a boolean.\n\tvar moveResult bool\n\terr = json.Unmarshal(res, &moveResult)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\n\treturn moveResult, nil\n}\n\n// MoveAsync returns an instance of a type that can be used to get the result of\n// the RPC at some future time by invoking the Receive function on the returned\n// instance.\n//\n// See Move for the blocking version and more details.\nfunc (c *Client) MoveAsync(fromAccount, toAccount string, amount btcutil.Amount) FutureMoveResult {\n\tcmd := btcjson.NewMoveCmd(fromAccount, toAccount, amount.ToBTC(), nil,\n\t\tnil)\n\treturn c.sendCmd(cmd)\n}\n\n// Move moves specified amount from one account in your wallet to another.  Only\n// funds with the default number of minimum confirmations will be used.\n//\n// See MoveMinConf and MoveComment for different options.\nfunc (c *Client) Move(fromAccount, toAccount string, amount btcutil.Amount) (bool, error) {\n\treturn c.MoveAsync(fromAccount, toAccount, amount).Receive()\n}\n\n// MoveMinConfAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See MoveMinConf for the blocking version and more details.\nfunc (c *Client) MoveMinConfAsync(fromAccount, toAccount string,\n\tamount btcutil.Amount, minConfirms int) FutureMoveResult {\n\n\tcmd := btcjson.NewMoveCmd(fromAccount, toAccount, amount.ToBTC(),\n\t\t&minConfirms, nil)\n\treturn c.sendCmd(cmd)\n}\n\n// MoveMinConf moves specified amount from one account in your wallet to\n// another.  Only funds with the passed number of minimum confirmations will be\n// used.\n//\n// See Move to use the default number of minimum confirmations and MoveComment\n// for additional options.\nfunc (c *Client) MoveMinConf(fromAccount, toAccount string, amount btcutil.Amount, minConf int) (bool, error) {\n\treturn c.MoveMinConfAsync(fromAccount, toAccount, amount, minConf).Receive()\n}\n\n// MoveCommentAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See MoveComment for the blocking version and more details.\nfunc (c *Client) MoveCommentAsync(fromAccount, toAccount string,\n\tamount btcutil.Amount, minConfirms int, comment string) FutureMoveResult {\n\n\tcmd := btcjson.NewMoveCmd(fromAccount, toAccount, amount.ToBTC(),\n\t\t&minConfirms, &comment)\n\treturn c.sendCmd(cmd)\n}\n\n// MoveComment moves specified amount from one account in your wallet to\n// another and stores the provided comment in the wallet.  The comment\n// parameter is only available in the wallet.  Only funds with the passed number\n// of minimum confirmations will be used.\n//\n// See Move and MoveMinConf to use defaults.\nfunc (c *Client) MoveComment(fromAccount, toAccount string, amount btcutil.Amount,\n\tminConf int, comment string) (bool, error) {\n\n\treturn c.MoveCommentAsync(fromAccount, toAccount, amount, minConf,\n\t\tcomment).Receive()\n}\n\n// FutureRenameAccountResult is a future promise to deliver the result of a\n// RenameAccountAsync RPC invocation (or an applicable error).\ntype FutureRenameAccountResult chan *response\n\n// Receive waits for the response promised by the future and returns the\n// result of creating new account.\nfunc (r FutureRenameAccountResult) Receive() error {\n\t_, err := receiveFuture(r)\n\treturn err\n}\n\n// RenameAccountAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See RenameAccount for the blocking version and more details.\nfunc (c *Client) RenameAccountAsync(oldAccount, newAccount string) FutureRenameAccountResult {\n\tcmd := btcjson.NewRenameAccountCmd(oldAccount, newAccount)\n\treturn c.sendCmd(cmd)\n}\n\n// RenameAccount creates a new wallet account.\nfunc (c *Client) RenameAccount(oldAccount, newAccount string) error {\n\treturn c.RenameAccountAsync(oldAccount, newAccount).Receive()\n}\n\n// FutureValidateAddressResult is a future promise to deliver the result of a\n// ValidateAddressAsync RPC invocation (or an applicable error).\ntype FutureValidateAddressResult chan *response\n\n// Receive waits for the response promised by the future and returns information\n// about the given bitcoin address.\nfunc (r FutureValidateAddressResult) Receive() (*btcjson.ValidateAddressWalletResult, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal result as a validateaddress result object.\n\tvar addrResult btcjson.ValidateAddressWalletResult\n\terr = json.Unmarshal(res, &addrResult)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &addrResult, nil\n}\n\n// ValidateAddressAsync returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See ValidateAddress for the blocking version and more details.\nfunc (c *Client) ValidateAddressAsync(address btcutil.Address) FutureValidateAddressResult {\n\taddr := address.EncodeAddress()\n\tcmd := btcjson.NewValidateAddressCmd(addr)\n\treturn c.sendCmd(cmd)\n}\n\n// ValidateAddress returns information about the given bitcoin address.\nfunc (c *Client) ValidateAddress(address btcutil.Address) (*btcjson.ValidateAddressWalletResult, error) {\n\treturn c.ValidateAddressAsync(address).Receive()\n}\n\n// FutureKeyPoolRefillResult is a future promise to deliver the result of a\n// KeyPoolRefillAsync RPC invocation (or an applicable error).\ntype FutureKeyPoolRefillResult chan *response\n\n// Receive waits for the response promised by the future and returns the result\n// of refilling the key pool.\nfunc (r FutureKeyPoolRefillResult) Receive() error {\n\t_, err := receiveFuture(r)\n\treturn err\n}\n\n// KeyPoolRefillAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See KeyPoolRefill for the blocking version and more details.\nfunc (c *Client) KeyPoolRefillAsync() FutureKeyPoolRefillResult {\n\tcmd := btcjson.NewKeyPoolRefillCmd(nil)\n\treturn c.sendCmd(cmd)\n}\n\n// KeyPoolRefill fills the key pool as necessary to reach the default size.\n//\n// See KeyPoolRefillSize to override the size of the key pool.\nfunc (c *Client) KeyPoolRefill() error {\n\treturn c.KeyPoolRefillAsync().Receive()\n}\n\n// KeyPoolRefillSizeAsync returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See KeyPoolRefillSize for the blocking version and more details.\nfunc (c *Client) KeyPoolRefillSizeAsync(newSize uint) FutureKeyPoolRefillResult {\n\tcmd := btcjson.NewKeyPoolRefillCmd(&newSize)\n\treturn c.sendCmd(cmd)\n}\n\n// KeyPoolRefillSize fills the key pool as necessary to reach the specified\n// size.\nfunc (c *Client) KeyPoolRefillSize(newSize uint) error {\n\treturn c.KeyPoolRefillSizeAsync(newSize).Receive()\n}\n\n// ************************\n// Amount/Balance Functions\n// ************************\n\n// FutureListAccountsResult is a future promise to deliver the result of a\n// ListAccountsAsync or ListAccountsMinConfAsync RPC invocation (or an\n// applicable error).\ntype FutureListAccountsResult chan *response\n\n// Receive waits for the response promised by the future and returns returns a\n// map of account names and their associated balances.\nfunc (r FutureListAccountsResult) Receive() (map[string]btcutil.Amount, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal result as a json object.\n\tvar accounts map[string]float64\n\terr = json.Unmarshal(res, &accounts)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\taccountsMap := make(map[string]btcutil.Amount)\n\tfor k, v := range accounts {\n\t\tamount, err := btcutil.NewAmount(v)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\taccountsMap[k] = amount\n\t}\n\n\treturn accountsMap, nil\n}\n\n// ListAccountsAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See ListAccounts for the blocking version and more details.\nfunc (c *Client) ListAccountsAsync() FutureListAccountsResult {\n\tcmd := btcjson.NewListAccountsCmd(nil)\n\treturn c.sendCmd(cmd)\n}\n\n// ListAccounts returns a map of account names and their associated balances\n// using the default number of minimum confirmations.\n//\n// See ListAccountsMinConf to override the minimum number of confirmations.\nfunc (c *Client) ListAccounts() (map[string]btcutil.Amount, error) {\n\treturn c.ListAccountsAsync().Receive()\n}\n\n// ListAccountsMinConfAsync returns an instance of a type that can be used to\n// get the result of the RPC at some future time by invoking the Receive\n// function on the returned instance.\n//\n// See ListAccountsMinConf for the blocking version and more details.\nfunc (c *Client) ListAccountsMinConfAsync(minConfirms int) FutureListAccountsResult {\n\tcmd := btcjson.NewListAccountsCmd(&minConfirms)\n\treturn c.sendCmd(cmd)\n}\n\n// ListAccountsMinConf returns a map of account names and their associated\n// balances using the specified number of minimum confirmations.\n//\n// See ListAccounts to use the default minimum number of confirmations.\nfunc (c *Client) ListAccountsMinConf(minConfirms int) (map[string]btcutil.Amount, error) {\n\treturn c.ListAccountsMinConfAsync(minConfirms).Receive()\n}\n\n// FutureGetBalanceResult is a future promise to deliver the result of a\n// GetBalanceAsync or GetBalanceMinConfAsync RPC invocation (or an applicable\n// error).\ntype FutureGetBalanceResult chan *response\n\n// Receive waits for the response promised by the future and returns the\n// available balance from the server for the specified account.\nfunc (r FutureGetBalanceResult) Receive() (btcutil.Amount, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\t// Unmarshal result as a floating point number.\n\tvar balance float64\n\terr = json.Unmarshal(res, &balance)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tamount, err := btcutil.NewAmount(balance)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn amount, nil\n}\n\n// FutureGetBalanceParseResult is same as FutureGetBalanceResult except\n// that the result is expected to be a string which is then parsed into\n// a float64 value\n// This is required for compatibility with servers like blockchain.info\ntype FutureGetBalanceParseResult chan *response\n\n// Receive waits for the response promised by the future and returns the\n// available balance from the server for the specified account.\nfunc (r FutureGetBalanceParseResult) Receive() (btcutil.Amount, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\t// Unmarshal result as a string\n\tvar balanceString string\n\terr = json.Unmarshal(res, &balanceString)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tbalance, err := strconv.ParseFloat(balanceString, 64)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tamount, err := btcutil.NewAmount(balance)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn amount, nil\n}\n\n// GetBalanceAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See GetBalance for the blocking version and more details.\nfunc (c *Client) GetBalanceAsync(account string) FutureGetBalanceResult {\n\tcmd := btcjson.NewGetBalanceCmd(&account, nil)\n\treturn c.sendCmd(cmd)\n}\n\n// GetBalance returns the available balance from the server for the specified\n// account using the default number of minimum confirmations.  The account may\n// be \"*\" for all accounts.\n//\n// See GetBalanceMinConf to override the minimum number of confirmations.\nfunc (c *Client) GetBalance(account string) (btcutil.Amount, error) {\n\treturn c.GetBalanceAsync(account).Receive()\n}\n\n// GetBalanceMinConfAsync returns an instance of a type that can be used to get\n// the result of the RPC at some future time by invoking the Receive function on\n// the returned instance.\n//\n// See GetBalanceMinConf for the blocking version and more details.\nfunc (c *Client) GetBalanceMinConfAsync(account string, minConfirms int) FutureGetBalanceResult {\n\tcmd := btcjson.NewGetBalanceCmd(&account, &minConfirms)\n\treturn c.sendCmd(cmd)\n}\n\n// GetBalanceMinConf returns the available balance from the server for the\n// specified account using the specified number of minimum confirmations.  The\n// account may be \"*\" for all accounts.\n//\n// See GetBalance to use the default minimum number of confirmations.\nfunc (c *Client) GetBalanceMinConf(account string, minConfirms int) (btcutil.Amount, error) {\n\tif c.config.EnableBCInfoHacks {\n\t\tresponse := c.GetBalanceMinConfAsync(account, minConfirms)\n\t\treturn FutureGetBalanceParseResult(response).Receive()\n\t}\n\treturn c.GetBalanceMinConfAsync(account, minConfirms).Receive()\n}\n\n// FutureGetReceivedByAccountResult is a future promise to deliver the result of\n// a GetReceivedByAccountAsync or GetReceivedByAccountMinConfAsync RPC\n// invocation (or an applicable error).\ntype FutureGetReceivedByAccountResult chan *response\n\n// Receive waits for the response promised by the future and returns the total\n// amount received with the specified account.\nfunc (r FutureGetReceivedByAccountResult) Receive() (btcutil.Amount, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\t// Unmarshal result as a floating point number.\n\tvar balance float64\n\terr = json.Unmarshal(res, &balance)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tamount, err := btcutil.NewAmount(balance)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn amount, nil\n}\n\n// GetReceivedByAccountAsync returns an instance of a type that can be used to\n// get the result of the RPC at some future time by invoking the Receive\n// function on the returned instance.\n//\n// See GetReceivedByAccount for the blocking version and more details.\nfunc (c *Client) GetReceivedByAccountAsync(account string) FutureGetReceivedByAccountResult {\n\tcmd := btcjson.NewGetReceivedByAccountCmd(account, nil)\n\treturn c.sendCmd(cmd)\n}\n\n// GetReceivedByAccount returns the total amount received with the specified\n// account with at least the default number of minimum confirmations.\n//\n// See GetReceivedByAccountMinConf to override the minimum number of\n// confirmations.\nfunc (c *Client) GetReceivedByAccount(account string) (btcutil.Amount, error) {\n\treturn c.GetReceivedByAccountAsync(account).Receive()\n}\n\n// GetReceivedByAccountMinConfAsync returns an instance of a type that can be\n// used to get the result of the RPC at some future time by invoking the Receive\n// function on the returned instance.\n//\n// See GetReceivedByAccountMinConf for the blocking version and more details.\nfunc (c *Client) GetReceivedByAccountMinConfAsync(account string, minConfirms int) FutureGetReceivedByAccountResult {\n\tcmd := btcjson.NewGetReceivedByAccountCmd(account, &minConfirms)\n\treturn c.sendCmd(cmd)\n}\n\n// GetReceivedByAccountMinConf returns the total amount received with the\n// specified account with at least the specified number of minimum\n// confirmations.\n//\n// See GetReceivedByAccount to use the default minimum number of confirmations.\nfunc (c *Client) GetReceivedByAccountMinConf(account string, minConfirms int) (btcutil.Amount, error) {\n\treturn c.GetReceivedByAccountMinConfAsync(account, minConfirms).Receive()\n}\n\n// FutureGetUnconfirmedBalanceResult is a future promise to deliver the result\n// of a GetUnconfirmedBalanceAsync RPC invocation (or an applicable error).\ntype FutureGetUnconfirmedBalanceResult chan *response\n\n// Receive waits for the response promised by the future and returns returns the\n// unconfirmed balance from the server for the specified account.\nfunc (r FutureGetUnconfirmedBalanceResult) Receive() (btcutil.Amount, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\t// Unmarshal result as a floating point number.\n\tvar balance float64\n\terr = json.Unmarshal(res, &balance)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tamount, err := btcutil.NewAmount(balance)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn amount, nil\n}\n\n// GetUnconfirmedBalanceAsync returns an instance of a type that can be used to\n// get the result of the RPC at some future time by invoking the Receive\n// function on the returned instance.\n//\n// See GetUnconfirmedBalance for the blocking version and more details.\nfunc (c *Client) GetUnconfirmedBalanceAsync(account string) FutureGetUnconfirmedBalanceResult {\n\tcmd := btcjson.NewGetUnconfirmedBalanceCmd(&account)\n\treturn c.sendCmd(cmd)\n}\n\n// GetUnconfirmedBalance returns the unconfirmed balance from the server for\n// the specified account.\nfunc (c *Client) GetUnconfirmedBalance(account string) (btcutil.Amount, error) {\n\treturn c.GetUnconfirmedBalanceAsync(account).Receive()\n}\n\n// FutureGetReceivedByAddressResult is a future promise to deliver the result of\n// a GetReceivedByAddressAsync or GetReceivedByAddressMinConfAsync RPC\n// invocation (or an applicable error).\ntype FutureGetReceivedByAddressResult chan *response\n\n// Receive waits for the response promised by the future and returns the total\n// amount received by the specified address.\nfunc (r FutureGetReceivedByAddressResult) Receive() (btcutil.Amount, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\t// Unmarshal result as a floating point number.\n\tvar balance float64\n\terr = json.Unmarshal(res, &balance)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tamount, err := btcutil.NewAmount(balance)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn amount, nil\n}\n\n// GetReceivedByAddressAsync returns an instance of a type that can be used to\n// get the result of the RPC at some future time by invoking the Receive\n// function on the returned instance.\n//\n// See GetReceivedByAddress for the blocking version and more details.\nfunc (c *Client) GetReceivedByAddressAsync(address btcutil.Address) FutureGetReceivedByAddressResult {\n\taddr := address.EncodeAddress()\n\tcmd := btcjson.NewGetReceivedByAddressCmd(addr, nil)\n\treturn c.sendCmd(cmd)\n\n}\n\n// GetReceivedByAddress returns the total amount received by the specified\n// address with at least the default number of minimum confirmations.\n//\n// See GetReceivedByAddressMinConf to override the minimum number of\n// confirmations.\nfunc (c *Client) GetReceivedByAddress(address btcutil.Address) (btcutil.Amount, error) {\n\treturn c.GetReceivedByAddressAsync(address).Receive()\n}\n\n// GetReceivedByAddressMinConfAsync returns an instance of a type that can be\n// used to get the result of the RPC at some future time by invoking the Receive\n// function on the returned instance.\n//\n// See GetReceivedByAddressMinConf for the blocking version and more details.\nfunc (c *Client) GetReceivedByAddressMinConfAsync(address btcutil.Address, minConfirms int) FutureGetReceivedByAddressResult {\n\taddr := address.EncodeAddress()\n\tcmd := btcjson.NewGetReceivedByAddressCmd(addr, &minConfirms)\n\treturn c.sendCmd(cmd)\n}\n\n// GetReceivedByAddressMinConf returns the total amount received by the specified\n// address with at least the specified number of minimum confirmations.\n//\n// See GetReceivedByAddress to use the default minimum number of confirmations.\nfunc (c *Client) GetReceivedByAddressMinConf(address btcutil.Address, minConfirms int) (btcutil.Amount, error) {\n\treturn c.GetReceivedByAddressMinConfAsync(address, minConfirms).Receive()\n}\n\n// FutureListReceivedByAccountResult is a future promise to deliver the result\n// of a ListReceivedByAccountAsync, ListReceivedByAccountMinConfAsync, or\n// ListReceivedByAccountIncludeEmptyAsync RPC invocation (or an applicable\n// error).\ntype FutureListReceivedByAccountResult chan *response\n\n// Receive waits for the response promised by the future and returns a list of\n// balances by account.\nfunc (r FutureListReceivedByAccountResult) Receive() ([]btcjson.ListReceivedByAccountResult, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal as an array of listreceivedbyaccount result objects.\n\tvar received []btcjson.ListReceivedByAccountResult\n\terr = json.Unmarshal(res, &received)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn received, nil\n}\n\n// ListReceivedByAccountAsync returns an instance of a type that can be used to\n// get the result of the RPC at some future time by invoking the Receive\n// function on the returned instance.\n//\n// See ListReceivedByAccount for the blocking version and more details.\nfunc (c *Client) ListReceivedByAccountAsync() FutureListReceivedByAccountResult {\n\tcmd := btcjson.NewListReceivedByAccountCmd(nil, nil, nil)\n\treturn c.sendCmd(cmd)\n}\n\n// ListReceivedByAccount lists balances by account using the default number\n// of minimum confirmations and including accounts that haven't received any\n// payments.\n//\n// See ListReceivedByAccountMinConf to override the minimum number of\n// confirmations and ListReceivedByAccountIncludeEmpty to filter accounts that\n// haven't received any payments from the results.\nfunc (c *Client) ListReceivedByAccount() ([]btcjson.ListReceivedByAccountResult, error) {\n\treturn c.ListReceivedByAccountAsync().Receive()\n}\n\n// ListReceivedByAccountMinConfAsync returns an instance of a type that can be\n// used to get the result of the RPC at some future time by invoking the Receive\n// function on the returned instance.\n//\n// See ListReceivedByAccountMinConf for the blocking version and more details.\nfunc (c *Client) ListReceivedByAccountMinConfAsync(minConfirms int) FutureListReceivedByAccountResult {\n\tcmd := btcjson.NewListReceivedByAccountCmd(&minConfirms, nil, nil)\n\treturn c.sendCmd(cmd)\n}\n\n// ListReceivedByAccountMinConf lists balances by account using the specified\n// number of minimum confirmations not including accounts that haven't received\n// any payments.\n//\n// See ListReceivedByAccount to use the default minimum number of confirmations\n// and ListReceivedByAccountIncludeEmpty to also include accounts that haven't\n// received any payments in the results.\nfunc (c *Client) ListReceivedByAccountMinConf(minConfirms int) ([]btcjson.ListReceivedByAccountResult, error) {\n\treturn c.ListReceivedByAccountMinConfAsync(minConfirms).Receive()\n}\n\n// ListReceivedByAccountIncludeEmptyAsync returns an instance of a type that can\n// be used to get the result of the RPC at some future time by invoking the\n// Receive function on the returned instance.\n//\n// See ListReceivedByAccountIncludeEmpty for the blocking version and more details.\nfunc (c *Client) ListReceivedByAccountIncludeEmptyAsync(minConfirms int, includeEmpty bool) FutureListReceivedByAccountResult {\n\tcmd := btcjson.NewListReceivedByAccountCmd(&minConfirms, &includeEmpty,\n\t\tnil)\n\treturn c.sendCmd(cmd)\n}\n\n// ListReceivedByAccountIncludeEmpty lists balances by account using the\n// specified number of minimum confirmations and including accounts that\n// haven't received any payments depending on specified flag.\n//\n// See ListReceivedByAccount and ListReceivedByAccountMinConf to use defaults.\nfunc (c *Client) ListReceivedByAccountIncludeEmpty(minConfirms int, includeEmpty bool) ([]btcjson.ListReceivedByAccountResult, error) {\n\treturn c.ListReceivedByAccountIncludeEmptyAsync(minConfirms,\n\t\tincludeEmpty).Receive()\n}\n\n// FutureListReceivedByAddressResult is a future promise to deliver the result\n// of a ListReceivedByAddressAsync, ListReceivedByAddressMinConfAsync, or\n// ListReceivedByAddressIncludeEmptyAsync RPC invocation (or an applicable\n// error).\ntype FutureListReceivedByAddressResult chan *response\n\n// Receive waits for the response promised by the future and returns a list of\n// balances by address.\nfunc (r FutureListReceivedByAddressResult) Receive() ([]btcjson.ListReceivedByAddressResult, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal as an array of listreceivedbyaddress result objects.\n\tvar received []btcjson.ListReceivedByAddressResult\n\terr = json.Unmarshal(res, &received)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn received, nil\n}\n\n// ListReceivedByAddressAsync returns an instance of a type that can be used to\n// get the result of the RPC at some future time by invoking the Receive\n// function on the returned instance.\n//\n// See ListReceivedByAddress for the blocking version and more details.\nfunc (c *Client) ListReceivedByAddressAsync() FutureListReceivedByAddressResult {\n\tcmd := btcjson.NewListReceivedByAddressCmd(nil, nil, nil)\n\treturn c.sendCmd(cmd)\n}\n\n// ListReceivedByAddress lists balances by address using the default number\n// of minimum confirmations not including addresses that haven't received any\n// payments or watching only addresses.\n//\n// See ListReceivedByAddressMinConf to override the minimum number of\n// confirmations and ListReceivedByAddressIncludeEmpty to also include addresses\n// that haven't received any payments in the results.\nfunc (c *Client) ListReceivedByAddress() ([]btcjson.ListReceivedByAddressResult, error) {\n\treturn c.ListReceivedByAddressAsync().Receive()\n}\n\n// ListReceivedByAddressMinConfAsync returns an instance of a type that can be\n// used to get the result of the RPC at some future time by invoking the Receive\n// function on the returned instance.\n//\n// See ListReceivedByAddressMinConf for the blocking version and more details.\nfunc (c *Client) ListReceivedByAddressMinConfAsync(minConfirms int) FutureListReceivedByAddressResult {\n\tcmd := btcjson.NewListReceivedByAddressCmd(&minConfirms, nil, nil)\n\treturn c.sendCmd(cmd)\n}\n\n// ListReceivedByAddressMinConf lists balances by address using the specified\n// number of minimum confirmations not including addresses that haven't received\n// any payments.\n//\n// See ListReceivedByAddress to use the default minimum number of confirmations\n// and ListReceivedByAddressIncludeEmpty to also include addresses that haven't\n// received any payments in the results.\nfunc (c *Client) ListReceivedByAddressMinConf(minConfirms int) ([]btcjson.ListReceivedByAddressResult, error) {\n\treturn c.ListReceivedByAddressMinConfAsync(minConfirms).Receive()\n}\n\n// ListReceivedByAddressIncludeEmptyAsync returns an instance of a type that can\n// be used to get the result of the RPC at some future time by invoking the\n// Receive function on the returned instance.\n//\n// See ListReceivedByAccountIncludeEmpty for the blocking version and more details.\nfunc (c *Client) ListReceivedByAddressIncludeEmptyAsync(minConfirms int, includeEmpty bool) FutureListReceivedByAddressResult {\n\tcmd := btcjson.NewListReceivedByAddressCmd(&minConfirms, &includeEmpty,\n\t\tnil)\n\treturn c.sendCmd(cmd)\n}\n\n// ListReceivedByAddressIncludeEmpty lists balances by address using the\n// specified number of minimum confirmations and including addresses that\n// haven't received any payments depending on specified flag.\n//\n// See ListReceivedByAddress and ListReceivedByAddressMinConf to use defaults.\nfunc (c *Client) ListReceivedByAddressIncludeEmpty(minConfirms int, includeEmpty bool) ([]btcjson.ListReceivedByAddressResult, error) {\n\treturn c.ListReceivedByAddressIncludeEmptyAsync(minConfirms,\n\t\tincludeEmpty).Receive()\n}\n\n// ************************\n// Wallet Locking Functions\n// ************************\n\n// FutureWalletLockResult is a future promise to deliver the result of a\n// WalletLockAsync RPC invocation (or an applicable error).\ntype FutureWalletLockResult chan *response\n\n// Receive waits for the response promised by the future and returns the result\n// of locking the wallet.\nfunc (r FutureWalletLockResult) Receive() error {\n\t_, err := receiveFuture(r)\n\treturn err\n}\n\n// WalletLockAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See WalletLock for the blocking version and more details.\nfunc (c *Client) WalletLockAsync() FutureWalletLockResult {\n\tcmd := btcjson.NewWalletLockCmd()\n\treturn c.sendCmd(cmd)\n}\n\n// WalletLock locks the wallet by removing the encryption key from memory.\n//\n// After calling this function, the WalletPassphrase function must be used to\n// unlock the wallet prior to calling any other function which requires the\n// wallet to be unlocked.\nfunc (c *Client) WalletLock() error {\n\treturn c.WalletLockAsync().Receive()\n}\n\n// WalletPassphrase unlocks the wallet by using the passphrase to derive the\n// decryption key which is then stored in memory for the specified timeout\n// (in seconds).\nfunc (c *Client) WalletPassphrase(passphrase string, timeoutSecs int64) error {\n\tcmd := btcjson.NewWalletPassphraseCmd(passphrase, timeoutSecs)\n\t_, err := c.sendCmdAndWait(cmd)\n\treturn err\n}\n\n// FutureWalletPassphraseChangeResult is a future promise to deliver the result\n// of a WalletPassphraseChangeAsync RPC invocation (or an applicable error).\ntype FutureWalletPassphraseChangeResult chan *response\n\n// Receive waits for the response promised by the future and returns the result\n// of changing the wallet passphrase.\nfunc (r FutureWalletPassphraseChangeResult) Receive() error {\n\t_, err := receiveFuture(r)\n\treturn err\n}\n\n// WalletPassphraseChangeAsync returns an instance of a type that can be used to\n// get the result of the RPC at some future time by invoking the Receive\n// function on the returned instance.\n//\n// See WalletPassphraseChange for the blocking version and more details.\nfunc (c *Client) WalletPassphraseChangeAsync(old, new string) FutureWalletPassphraseChangeResult {\n\tcmd := btcjson.NewWalletPassphraseChangeCmd(old, new)\n\treturn c.sendCmd(cmd)\n}\n\n// WalletPassphraseChange changes the wallet passphrase from the specified old\n// to new passphrase.\nfunc (c *Client) WalletPassphraseChange(old, new string) error {\n\treturn c.WalletPassphraseChangeAsync(old, new).Receive()\n}\n\n// *************************\n// Message Signing Functions\n// *************************\n\n// FutureSignMessageResult is a future promise to deliver the result of a\n// SignMessageAsync RPC invocation (or an applicable error).\ntype FutureSignMessageResult chan *response\n\n// Receive waits for the response promised by the future and returns the message\n// signed with the private key of the specified address.\nfunc (r FutureSignMessageResult) Receive() (string, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\t// Unmarshal result as a string.\n\tvar b64 string\n\terr = json.Unmarshal(res, &b64)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn b64, nil\n}\n\n// SignMessageAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See SignMessage for the blocking version and more details.\nfunc (c *Client) SignMessageAsync(address btcutil.Address, message string) FutureSignMessageResult {\n\taddr := address.EncodeAddress()\n\tcmd := btcjson.NewSignMessageCmd(addr, message)\n\treturn c.sendCmd(cmd)\n}\n\n// SignMessage signs a message with the private key of the specified address.\n//\n// NOTE: This function requires to the wallet to be unlocked.  See the\n// WalletPassphrase function for more details.\nfunc (c *Client) SignMessage(address btcutil.Address, message string) (string, error) {\n\treturn c.SignMessageAsync(address, message).Receive()\n}\n\n// FutureVerifyMessageResult is a future promise to deliver the result of a\n// VerifyMessageAsync RPC invocation (or an applicable error).\ntype FutureVerifyMessageResult chan *response\n\n// Receive waits for the response promised by the future and returns whether or\n// not the message was successfully verified.\nfunc (r FutureVerifyMessageResult) Receive() (bool, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\n\t// Unmarshal result as a boolean.\n\tvar verified bool\n\terr = json.Unmarshal(res, &verified)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\n\treturn verified, nil\n}\n\n// VerifyMessageAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See VerifyMessage for the blocking version and more details.\nfunc (c *Client) VerifyMessageAsync(address btcutil.Address, signature, message string) FutureVerifyMessageResult {\n\taddr := address.EncodeAddress()\n\tcmd := btcjson.NewVerifyMessageCmd(addr, signature, message)\n\treturn c.sendCmd(cmd)\n}\n\n// VerifyMessage verifies a signed message.\n//\n// NOTE: This function requires to the wallet to be unlocked.  See the\n// WalletPassphrase function for more details.\nfunc (c *Client) VerifyMessage(address btcutil.Address, signature, message string) (bool, error) {\n\treturn c.VerifyMessageAsync(address, signature, message).Receive()\n}\n\n// *********************\n// Dump/Import Functions\n// *********************\n\n// FutureDumpPrivKeyResult is a future promise to deliver the result of a\n// DumpPrivKeyAsync RPC invocation (or an applicable error).\ntype FutureDumpPrivKeyResult chan *response\n\n// Receive waits for the response promised by the future and returns the private\n// key corresponding to the passed address encoded in the wallet import format\n// (WIF)\nfunc (r FutureDumpPrivKeyResult) Receive() (*btcutil.WIF, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal result as a string.\n\tvar privKeyWIF string\n\terr = json.Unmarshal(res, &privKeyWIF)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn btcutil.DecodeWIF(privKeyWIF)\n}\n\n// DumpPrivKeyAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See DumpPrivKey for the blocking version and more details.\nfunc (c *Client) DumpPrivKeyAsync(address btcutil.Address) FutureDumpPrivKeyResult {\n\taddr := address.EncodeAddress()\n\tcmd := btcjson.NewDumpPrivKeyCmd(addr)\n\treturn c.sendCmd(cmd)\n}\n\n// DumpPrivKey gets the private key corresponding to the passed address encoded\n// in the wallet import format (WIF).\n//\n// NOTE: This function requires to the wallet to be unlocked.  See the\n// WalletPassphrase function for more details.\nfunc (c *Client) DumpPrivKey(address btcutil.Address) (*btcutil.WIF, error) {\n\treturn c.DumpPrivKeyAsync(address).Receive()\n}\n\n// FutureImportAddressResult is a future promise to deliver the result of an\n// ImportAddressAsync RPC invocation (or an applicable error).\ntype FutureImportAddressResult chan *response\n\n// Receive waits for the response promised by the future and returns the result\n// of importing the passed public address.\nfunc (r FutureImportAddressResult) Receive() error {\n\t_, err := receiveFuture(r)\n\treturn err\n}\n\n// ImportAddressAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See ImportAddress for the blocking version and more details.\nfunc (c *Client) ImportAddressAsync(address string) FutureImportAddressResult {\n\tcmd := btcjson.NewImportAddressCmd(address, nil)\n\treturn c.sendCmd(cmd)\n}\n\n// ImportAddress imports the passed public address.\nfunc (c *Client) ImportAddress(address string) error {\n\treturn c.ImportAddressAsync(address).Receive()\n}\n\n// ImportAddressRescanAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See ImportAddress for the blocking version and more details.\nfunc (c *Client) ImportAddressRescanAsync(address string, rescan bool) FutureImportAddressResult {\n\tcmd := btcjson.NewImportAddressCmd(address, &rescan)\n\treturn c.sendCmd(cmd)\n}\n\n// ImportAddressRescan imports the passed public address. When rescan is true,\n// the block history is scanned for transactions addressed to provided address.\nfunc (c *Client) ImportAddressRescan(address string, rescan bool) error {\n\treturn c.ImportAddressRescanAsync(address, rescan).Receive()\n}\n\n// FutureImportPrivKeyResult is a future promise to deliver the result of an\n// ImportPrivKeyAsync RPC invocation (or an applicable error).\ntype FutureImportPrivKeyResult chan *response\n\n// Receive waits for the response promised by the future and returns the result\n// of importing the passed private key which must be the wallet import format\n// (WIF).\nfunc (r FutureImportPrivKeyResult) Receive() error {\n\t_, err := receiveFuture(r)\n\treturn err\n}\n\n// ImportPrivKeyAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See ImportPrivKey for the blocking version and more details.\nfunc (c *Client) ImportPrivKeyAsync(privKeyWIF *btcutil.WIF) FutureImportPrivKeyResult {\n\twif := \"\"\n\tif privKeyWIF != nil {\n\t\twif = privKeyWIF.String()\n\t}\n\n\tcmd := btcjson.NewImportPrivKeyCmd(wif, nil, nil)\n\treturn c.sendCmd(cmd)\n}\n\n// ImportPrivKey imports the passed private key which must be the wallet import\n// format (WIF).\nfunc (c *Client) ImportPrivKey(privKeyWIF *btcutil.WIF) error {\n\treturn c.ImportPrivKeyAsync(privKeyWIF).Receive()\n}\n\n// ImportPrivKeyLabelAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See ImportPrivKey for the blocking version and more details.\nfunc (c *Client) ImportPrivKeyLabelAsync(privKeyWIF *btcutil.WIF, label string) FutureImportPrivKeyResult {\n\twif := \"\"\n\tif privKeyWIF != nil {\n\t\twif = privKeyWIF.String()\n\t}\n\n\tcmd := btcjson.NewImportPrivKeyCmd(wif, &label, nil)\n\treturn c.sendCmd(cmd)\n}\n\n// ImportPrivKeyLabel imports the passed private key which must be the wallet import\n// format (WIF). It sets the account label to the one provided.\nfunc (c *Client) ImportPrivKeyLabel(privKeyWIF *btcutil.WIF, label string) error {\n\treturn c.ImportPrivKeyLabelAsync(privKeyWIF, label).Receive()\n}\n\n// ImportPrivKeyRescanAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See ImportPrivKey for the blocking version and more details.\nfunc (c *Client) ImportPrivKeyRescanAsync(privKeyWIF *btcutil.WIF, label string, rescan bool) FutureImportPrivKeyResult {\n\twif := \"\"\n\tif privKeyWIF != nil {\n\t\twif = privKeyWIF.String()\n\t}\n\n\tcmd := btcjson.NewImportPrivKeyCmd(wif, &label, &rescan)\n\treturn c.sendCmd(cmd)\n}\n\n// ImportPrivKeyRescan imports the passed private key which must be the wallet import\n// format (WIF). It sets the account label to the one provided. When rescan is true,\n// the block history is scanned for transactions addressed to provided privKey.\nfunc (c *Client) ImportPrivKeyRescan(privKeyWIF *btcutil.WIF, label string, rescan bool) error {\n\treturn c.ImportPrivKeyRescanAsync(privKeyWIF, label, rescan).Receive()\n}\n\n// FutureImportPubKeyResult is a future promise to deliver the result of an\n// ImportPubKeyAsync RPC invocation (or an applicable error).\ntype FutureImportPubKeyResult chan *response\n\n// Receive waits for the response promised by the future and returns the result\n// of importing the passed public key.\nfunc (r FutureImportPubKeyResult) Receive() error {\n\t_, err := receiveFuture(r)\n\treturn err\n}\n\n// ImportPubKeyAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See ImportPubKey for the blocking version and more details.\nfunc (c *Client) ImportPubKeyAsync(pubKey string) FutureImportPubKeyResult {\n\tcmd := btcjson.NewImportPubKeyCmd(pubKey, nil)\n\treturn c.sendCmd(cmd)\n}\n\n// ImportPubKey imports the passed public key.\nfunc (c *Client) ImportPubKey(pubKey string) error {\n\treturn c.ImportPubKeyAsync(pubKey).Receive()\n}\n\n// ImportPubKeyRescanAsync returns an instance of a type that can be used to get the\n// result of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See ImportPubKey for the blocking version and more details.\nfunc (c *Client) ImportPubKeyRescanAsync(pubKey string, rescan bool) FutureImportPubKeyResult {\n\tcmd := btcjson.NewImportPubKeyCmd(pubKey, &rescan)\n\treturn c.sendCmd(cmd)\n}\n\n// ImportPubKeyRescan imports the passed public key. When rescan is true, the\n// block history is scanned for transactions addressed to provided pubkey.\nfunc (c *Client) ImportPubKeyRescan(pubKey string, rescan bool) error {\n\treturn c.ImportPubKeyRescanAsync(pubKey, rescan).Receive()\n}\n\n// ***********************\n// Miscellaneous Functions\n// ***********************\n\n// NOTE: While getinfo is implemented here (in wallet.go), a btcd chain server\n// will respond to getinfo requests as well, excluding any wallet information.\n\n// FutureGetInfoResult is a future promise to deliver the result of a\n// GetInfoAsync RPC invocation (or an applicable error).\ntype FutureGetInfoResult chan *response\n\n// Receive waits for the response promised by the future and returns the info\n// provided by the server.\nfunc (r FutureGetInfoResult) Receive() (*btcjson.InfoWalletResult, error) {\n\tres, err := receiveFuture(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Unmarshal result as a getinfo result object.\n\tvar infoRes btcjson.InfoWalletResult\n\terr = json.Unmarshal(res, &infoRes)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &infoRes, nil\n}\n\n// GetInfoAsync returns an instance of a type that can be used to get the result\n// of the RPC at some future time by invoking the Receive function on the\n// returned instance.\n//\n// See GetInfo for the blocking version and more details.\nfunc (c *Client) GetInfoAsync() FutureGetInfoResult {\n\tcmd := btcjson.NewGetInfoCmd()\n\treturn c.sendCmd(cmd)\n}\n\n// GetInfo returns miscellaneous info regarding the RPC server.  The returned\n// info object may be void of wallet information if the remote server does\n// not include wallet functionality.\nfunc (c *Client) GetInfo() (*btcjson.InfoWalletResult, error) {\n\treturn c.GetInfoAsync().Receive()\n}\n\n// TODO(davec): Implement\n// backupwallet (NYI in btcwallet)\n// encryptwallet (Won't be supported by btcwallet since it's always encrypted)\n// getwalletinfo (NYI in btcwallet or btcjson)\n// listaddressgroupings (NYI in btcwallet)\n// listreceivedbyaccount (NYI in btcwallet)\n\n// DUMP\n// importwallet (NYI in btcwallet)\n// dumpwallet (NYI in btcwallet)\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/txscript/README.md",
    "content": "txscript\n========\n\n[![Build Status](https://travis-ci.org/btcsuite/btcd.png?branch=master)](https://travis-ci.org/btcsuite/btcd)\n[![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org)\n[![GoDoc](https://godoc.org/github.com/btcsuite/btcd/txscript?status.png)](http://godoc.org/github.com/btcsuite/btcd/txscript)\n\nPackage txscript implements the bitcoin transaction script language.  There is\na comprehensive test suite.\n\nThis package has intentionally been designed so it can be used as a standalone\npackage for any projects needing to use or validate bitcoin transaction scripts.\n\n## Bitcoin Scripts\n\nBitcoin provides a stack-based, FORTH-like language for the scripts in\nthe bitcoin transactions.  This language is not turing complete\nalthough it is still fairly powerful.  A description of the language\ncan be found at https://en.bitcoin.it/wiki/Script\n\n## Installation and Updating\n\n```bash\n$ go get -u github.com/btcsuite/btcd/txscript\n```\n\n## Examples\n\n* [Standard Pay-to-pubkey-hash Script](http://godoc.org/github.com/btcsuite/btcd/txscript#example-PayToAddrScript)  \n  Demonstrates creating a script which pays to a bitcoin address.  It also\n  prints the created script hex and uses the DisasmString function to display\n  the disassembled script.\n\n* [Extracting Details from Standard Scripts](http://godoc.org/github.com/btcsuite/btcd/txscript#example-ExtractPkScriptAddrs)  \n  Demonstrates extracting information from a standard public key script.\n\n* [Manually Signing a Transaction Output](http://godoc.org/github.com/btcsuite/btcd/txscript#example-SignTxOutput)  \n  Demonstrates manually creating and signing a redeem transaction.\n\n## GPG Verification Key\n\nAll official release tags are signed by Conformal so users can ensure the code\nhas not been tampered with and is coming from the btcsuite developers.  To\nverify the signature perform the following:\n\n- Download the public key from the Conformal website at\n  https://opensource.conformal.com/GIT-GPG-KEY-conformal.txt\n\n- Import the public key into your GPG keyring:\n  ```bash\n  gpg --import GIT-GPG-KEY-conformal.txt\n  ```\n\n- Verify the release tag with the following command where `TAG_NAME` is a\n  placeholder for the specific tag:\n  ```bash\n  git tag -v TAG_NAME\n  ```\n\n## License\n\nPackage txscript is licensed under the [copyfree](http://copyfree.org) ISC\nLicense.\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/txscript/consensus.go",
    "content": "// Copyright (c) 2015-2016 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage txscript\n\nconst (\n\t// LockTimeThreshold is the number below which a lock time is\n\t// interpreted to be a block number.  Since an average of one block\n\t// is generated per 10 minutes, this allows blocks for about 9,512\n\t// years.\n\tLockTimeThreshold = 5e8 // Tue Nov 5 00:53:20 1985 UTC\n)\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/txscript/doc.go",
    "content": "// Copyright (c) 2013-2017 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\n/*\nPackage txscript implements the bitcoin transaction script language.\n\nA complete description of the script language used by bitcoin can be found at\nhttps://en.bitcoin.it/wiki/Script.  The following only serves as a quick\noverview to provide information on how to use the package.\n\nThis package provides data structures and functions to parse and execute\nbitcoin transaction scripts.\n\nScript Overview\n\nBitcoin transaction scripts are written in a stack-base, FORTH-like language.\n\nThe bitcoin script language consists of a number of opcodes which fall into\nseveral categories such pushing and popping data to and from the stack,\nperforming basic and bitwise arithmetic, conditional branching, comparing\nhashes, and checking cryptographic signatures.  Scripts are processed from left\nto right and intentionally do not provide loops.\n\nThe vast majority of Bitcoin scripts at the time of this writing are of several\nstandard forms which consist of a spender providing a public key and a signature\nwhich proves the spender owns the associated private key.  This information\nis used to prove the the spender is authorized to perform the transaction.\n\nOne benefit of using a scripting language is added flexibility in specifying\nwhat conditions must be met in order to spend bitcoins.\n\nErrors\n\nErrors returned by this package are of type txscript.Error.  This allows the\ncaller to programmatically determine the specific error by examining the\nErrorCode field of the type asserted txscript.Error while still providing rich\nerror messages with contextual information.  A convenience function named\nIsErrorCode is also provided to allow callers to easily check for a specific\nerror code.  See ErrorCode in the package documentation for a full list.\n*/\npackage txscript\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/txscript/engine.go",
    "content": "// Copyright (c) 2013-2018 The btcsuite developers\n// Copyright (c) 2015-2018 The Decred developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage txscript\n\nimport (\n\t\"bytes\"\n\t\"crypto/sha256\"\n\t\"fmt\"\n\t\"math/big\"\n\n\t\"github.com/btcsuite/btcd/btcec\"\n\t\"github.com/btcsuite/btcd/wire\"\n)\n\n// ScriptFlags is a bitmask defining additional operations or tests that will be\n// done when executing a script pair.\ntype ScriptFlags uint32\n\nconst (\n\t// ScriptBip16 defines whether the bip16 threshold has passed and thus\n\t// pay-to-script hash transactions will be fully validated.\n\tScriptBip16 ScriptFlags = 1 << iota\n\n\t// ScriptStrictMultiSig defines whether to verify the stack item\n\t// used by CHECKMULTISIG is zero length.\n\tScriptStrictMultiSig\n\n\t// ScriptDiscourageUpgradableNops defines whether to verify that\n\t// NOP1 through NOP10 are reserved for future soft-fork upgrades.  This\n\t// flag must not be used for consensus critical code nor applied to\n\t// blocks as this flag is only for stricter standard transaction\n\t// checks.  This flag is only applied when the above opcodes are\n\t// executed.\n\tScriptDiscourageUpgradableNops\n\n\t// ScriptVerifyCheckLockTimeVerify defines whether to verify that\n\t// a transaction output is spendable based on the locktime.\n\t// This is BIP0065.\n\tScriptVerifyCheckLockTimeVerify\n\n\t// ScriptVerifyCheckSequenceVerify defines whether to allow execution\n\t// pathways of a script to be restricted based on the age of the output\n\t// being spent.  This is BIP0112.\n\tScriptVerifyCheckSequenceVerify\n\n\t// ScriptVerifyCleanStack defines that the stack must contain only\n\t// one stack element after evaluation and that the element must be\n\t// true if interpreted as a boolean.  This is rule 6 of BIP0062.\n\t// This flag should never be used without the ScriptBip16 flag nor the\n\t// ScriptVerifyWitness flag.\n\tScriptVerifyCleanStack\n\n\t// ScriptVerifyDERSignatures defines that signatures are required\n\t// to compily with the DER format.\n\tScriptVerifyDERSignatures\n\n\t// ScriptVerifyLowS defines that signtures are required to comply with\n\t// the DER format and whose S value is <= order / 2.  This is rule 5\n\t// of BIP0062.\n\tScriptVerifyLowS\n\n\t// ScriptVerifyMinimalData defines that signatures must use the smallest\n\t// push operator. This is both rules 3 and 4 of BIP0062.\n\tScriptVerifyMinimalData\n\n\t// ScriptVerifyNullFail defines that signatures must be empty if\n\t// a CHECKSIG or CHECKMULTISIG operation fails.\n\tScriptVerifyNullFail\n\n\t// ScriptVerifySigPushOnly defines that signature scripts must contain\n\t// only pushed data.  This is rule 2 of BIP0062.\n\tScriptVerifySigPushOnly\n\n\t// ScriptVerifyStrictEncoding defines that signature scripts and\n\t// public keys must follow the strict encoding requirements.\n\tScriptVerifyStrictEncoding\n\n\t// ScriptVerifyWitness defines whether or not to verify a transaction\n\t// output using a witness program template.\n\tScriptVerifyWitness\n\n\t// ScriptVerifyDiscourageUpgradeableWitnessProgram makes witness\n\t// program with versions 2-16 non-standard.\n\tScriptVerifyDiscourageUpgradeableWitnessProgram\n\n\t// ScriptVerifyMinimalIf makes a script with an OP_IF/OP_NOTIF whose\n\t// operand is anything other than empty vector or [0x01] non-standard.\n\tScriptVerifyMinimalIf\n\n\t// ScriptVerifyWitnessPubKeyType makes a script within a check-sig\n\t// operation whose public key isn't serialized in a compressed format\n\t// non-standard.\n\tScriptVerifyWitnessPubKeyType\n)\n\nconst (\n\t// MaxStackSize is the maximum combined height of stack and alt stack\n\t// during execution.\n\tMaxStackSize = 1000\n\n\t// MaxScriptSize is the maximum allowed length of a raw script.\n\tMaxScriptSize = 10000\n\n\t// payToWitnessPubKeyHashDataSize is the size of the witness program's\n\t// data push for a pay-to-witness-pub-key-hash output.\n\tpayToWitnessPubKeyHashDataSize = 20\n\n\t// payToWitnessScriptHashDataSize is the size of the witness program's\n\t// data push for a pay-to-witness-script-hash output.\n\tpayToWitnessScriptHashDataSize = 32\n)\n\n// halforder is used to tame ECDSA malleability (see BIP0062).\nvar halfOrder = new(big.Int).Rsh(btcec.S256().N, 1)\n\n// Engine is the virtual machine that executes scripts.\ntype Engine struct {\n\tscripts         [][]parsedOpcode\n\tscriptIdx       int\n\tscriptOff       int\n\tlastCodeSep     int\n\tdstack          stack // data stack\n\tastack          stack // alt stack\n\ttx              wire.MsgTx\n\ttxIdx           int\n\tcondStack       []int\n\tnumOps          int\n\tflags           ScriptFlags\n\tsigCache        *SigCache\n\thashCache       *TxSigHashes\n\tbip16           bool     // treat execution as pay-to-script-hash\n\tsavedFirstStack [][]byte // stack from first script for bip16 scripts\n\twitnessVersion  int\n\twitnessProgram  []byte\n\tinputAmount     int64\n}\n\n// hasFlag returns whether the script engine instance has the passed flag set.\nfunc (vm *Engine) hasFlag(flag ScriptFlags) bool {\n\treturn vm.flags&flag == flag\n}\n\n// isBranchExecuting returns whether or not the current conditional branch is\n// actively executing.  For example, when the data stack has an OP_FALSE on it\n// and an OP_IF is encountered, the branch is inactive until an OP_ELSE or\n// OP_ENDIF is encountered.  It properly handles nested conditionals.\nfunc (vm *Engine) isBranchExecuting() bool {\n\tif len(vm.condStack) == 0 {\n\t\treturn true\n\t}\n\treturn vm.condStack[len(vm.condStack)-1] == OpCondTrue\n}\n\n// executeOpcode peforms execution on the passed opcode.  It takes into account\n// whether or not it is hidden by conditionals, but some rules still must be\n// tested in this case.\nfunc (vm *Engine) executeOpcode(pop *parsedOpcode) error {\n\t// Disabled opcodes are fail on program counter.\n\tif pop.isDisabled() {\n\t\tstr := fmt.Sprintf(\"attempt to execute disabled opcode %s\",\n\t\t\tpop.opcode.name)\n\t\treturn scriptError(ErrDisabledOpcode, str)\n\t}\n\n\t// Always-illegal opcodes are fail on program counter.\n\tif pop.alwaysIllegal() {\n\t\tstr := fmt.Sprintf(\"attempt to execute reserved opcode %s\",\n\t\t\tpop.opcode.name)\n\t\treturn scriptError(ErrReservedOpcode, str)\n\t}\n\n\t// Note that this includes OP_RESERVED which counts as a push operation.\n\tif pop.opcode.value > OP_16 {\n\t\tvm.numOps++\n\t\tif vm.numOps > MaxOpsPerScript {\n\t\t\tstr := fmt.Sprintf(\"exceeded max operation limit of %d\",\n\t\t\t\tMaxOpsPerScript)\n\t\t\treturn scriptError(ErrTooManyOperations, str)\n\t\t}\n\n\t} else if len(pop.data) > MaxScriptElementSize {\n\t\tstr := fmt.Sprintf(\"element size %d exceeds max allowed size %d\",\n\t\t\tlen(pop.data), MaxScriptElementSize)\n\t\treturn scriptError(ErrElementTooBig, str)\n\t}\n\n\t// Nothing left to do when this is not a conditional opcode and it is\n\t// not in an executing branch.\n\tif !vm.isBranchExecuting() && !pop.isConditional() {\n\t\treturn nil\n\t}\n\n\t// Ensure all executed data push opcodes use the minimal encoding when\n\t// the minimal data verification flag is set.\n\tif vm.dstack.verifyMinimalData && vm.isBranchExecuting() &&\n\t\tpop.opcode.value >= 0 && pop.opcode.value <= OP_PUSHDATA4 {\n\n\t\tif err := pop.checkMinimalDataPush(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn pop.opcode.opfunc(pop, vm)\n}\n\n// disasm is a helper function to produce the output for DisasmPC and\n// DisasmScript.  It produces the opcode prefixed by the program counter at the\n// provided position in the script.  It does no error checking and leaves that\n// to the caller to provide a valid offset.\nfunc (vm *Engine) disasm(scriptIdx int, scriptOff int) string {\n\treturn fmt.Sprintf(\"%02x:%04x: %s\", scriptIdx, scriptOff,\n\t\tvm.scripts[scriptIdx][scriptOff].print(false))\n}\n\n// validPC returns an error if the current script position is valid for\n// execution, nil otherwise.\nfunc (vm *Engine) validPC() error {\n\tif vm.scriptIdx >= len(vm.scripts) {\n\t\tstr := fmt.Sprintf(\"past input scripts %v:%v %v:xxxx\",\n\t\t\tvm.scriptIdx, vm.scriptOff, len(vm.scripts))\n\t\treturn scriptError(ErrInvalidProgramCounter, str)\n\t}\n\tif vm.scriptOff >= len(vm.scripts[vm.scriptIdx]) {\n\t\tstr := fmt.Sprintf(\"past input scripts %v:%v %v:%04d\",\n\t\t\tvm.scriptIdx, vm.scriptOff, vm.scriptIdx,\n\t\t\tlen(vm.scripts[vm.scriptIdx]))\n\t\treturn scriptError(ErrInvalidProgramCounter, str)\n\t}\n\treturn nil\n}\n\n// curPC returns either the current script and offset, or an error if the\n// position isn't valid.\nfunc (vm *Engine) curPC() (script int, off int, err error) {\n\terr = vm.validPC()\n\tif err != nil {\n\t\treturn 0, 0, err\n\t}\n\treturn vm.scriptIdx, vm.scriptOff, nil\n}\n\n// isWitnessVersionActive returns true if a witness program was extracted\n// during the initialization of the Engine, and the program's version matches\n// the specified version.\nfunc (vm *Engine) isWitnessVersionActive(version uint) bool {\n\treturn vm.witnessProgram != nil && uint(vm.witnessVersion) == version\n}\n\n// verifyWitnessProgram validates the stored witness program using the passed\n// witness as input.\nfunc (vm *Engine) verifyWitnessProgram(witness [][]byte) error {\n\tif vm.isWitnessVersionActive(0) {\n\t\tswitch len(vm.witnessProgram) {\n\t\tcase payToWitnessPubKeyHashDataSize: // P2WKH\n\t\t\t// The witness stack should consist of exactly two\n\t\t\t// items: the signature, and the pubkey.\n\t\t\tif len(witness) != 2 {\n\t\t\t\terr := fmt.Sprintf(\"should have exactly two \"+\n\t\t\t\t\t\"items in witness, instead have %v\", len(witness))\n\t\t\t\treturn scriptError(ErrWitnessProgramMismatch, err)\n\t\t\t}\n\n\t\t\t// Now we'll resume execution as if it were a regular\n\t\t\t// p2pkh transaction.\n\t\t\tpkScript, err := payToPubKeyHashScript(vm.witnessProgram)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tpops, err := parseScript(pkScript)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\t// Set the stack to the provided witness stack, then\n\t\t\t// append the pkScript generated above as the next\n\t\t\t// script to execute.\n\t\t\tvm.scripts = append(vm.scripts, pops)\n\t\t\tvm.SetStack(witness)\n\n\t\tcase payToWitnessScriptHashDataSize: // P2WSH\n\t\t\t// Additionally, The witness stack MUST NOT be empty at\n\t\t\t// this point.\n\t\t\tif len(witness) == 0 {\n\t\t\t\treturn scriptError(ErrWitnessProgramEmpty, \"witness \"+\n\t\t\t\t\t\"program empty passed empty witness\")\n\t\t\t}\n\n\t\t\t// Obtain the witness script which should be the last\n\t\t\t// element in the passed stack. The size of the script\n\t\t\t// MUST NOT exceed the max script size.\n\t\t\twitnessScript := witness[len(witness)-1]\n\t\t\tif len(witnessScript) > MaxScriptSize {\n\t\t\t\tstr := fmt.Sprintf(\"witnessScript size %d \"+\n\t\t\t\t\t\"is larger than max allowed size %d\",\n\t\t\t\t\tlen(witnessScript), MaxScriptSize)\n\t\t\t\treturn scriptError(ErrScriptTooBig, str)\n\t\t\t}\n\n\t\t\t// Ensure that the serialized pkScript at the end of\n\t\t\t// the witness stack matches the witness program.\n\t\t\twitnessHash := sha256.Sum256(witnessScript)\n\t\t\tif !bytes.Equal(witnessHash[:], vm.witnessProgram) {\n\t\t\t\treturn scriptError(ErrWitnessProgramMismatch,\n\t\t\t\t\t\"witness program hash mismatch\")\n\t\t\t}\n\n\t\t\t// With all the validity checks passed, parse the\n\t\t\t// script into individual op-codes so w can execute it\n\t\t\t// as the next script.\n\t\t\tpops, err := parseScript(witnessScript)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\t// The hash matched successfully, so use the witness as\n\t\t\t// the stack, and set the witnessScript to be the next\n\t\t\t// script executed.\n\t\t\tvm.scripts = append(vm.scripts, pops)\n\t\t\tvm.SetStack(witness[:len(witness)-1])\n\n\t\tdefault:\n\t\t\terrStr := fmt.Sprintf(\"length of witness program \"+\n\t\t\t\t\"must either be %v or %v bytes, instead is %v bytes\",\n\t\t\t\tpayToWitnessPubKeyHashDataSize,\n\t\t\t\tpayToWitnessScriptHashDataSize,\n\t\t\t\tlen(vm.witnessProgram))\n\t\t\treturn scriptError(ErrWitnessProgramWrongLength, errStr)\n\t\t}\n\t} else if vm.hasFlag(ScriptVerifyDiscourageUpgradeableWitnessProgram) {\n\t\terrStr := fmt.Sprintf(\"new witness program versions \"+\n\t\t\t\"invalid: %v\", vm.witnessProgram)\n\t\treturn scriptError(ErrDiscourageUpgradableWitnessProgram, errStr)\n\t} else {\n\t\t// If we encounter an unknown witness program version and we\n\t\t// aren't discouraging future unknown witness based soft-forks,\n\t\t// then we de-activate the segwit behavior within the VM for\n\t\t// the remainder of execution.\n\t\tvm.witnessProgram = nil\n\t}\n\n\tif vm.isWitnessVersionActive(0) {\n\t\t// All elements within the witness stack must not be greater\n\t\t// than the maximum bytes which are allowed to be pushed onto\n\t\t// the stack.\n\t\tfor _, witElement := range vm.GetStack() {\n\t\t\tif len(witElement) > MaxScriptElementSize {\n\t\t\t\tstr := fmt.Sprintf(\"element size %d exceeds \"+\n\t\t\t\t\t\"max allowed size %d\", len(witElement),\n\t\t\t\t\tMaxScriptElementSize)\n\t\t\t\treturn scriptError(ErrElementTooBig, str)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// DisasmPC returns the string for the disassembly of the opcode that will be\n// next to execute when Step() is called.\nfunc (vm *Engine) DisasmPC() (string, error) {\n\tscriptIdx, scriptOff, err := vm.curPC()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn vm.disasm(scriptIdx, scriptOff), nil\n}\n\n// DisasmScript returns the disassembly string for the script at the requested\n// offset index.  Index 0 is the signature script and 1 is the public key\n// script.\nfunc (vm *Engine) DisasmScript(idx int) (string, error) {\n\tif idx >= len(vm.scripts) {\n\t\tstr := fmt.Sprintf(\"script index %d >= total scripts %d\", idx,\n\t\t\tlen(vm.scripts))\n\t\treturn \"\", scriptError(ErrInvalidIndex, str)\n\t}\n\n\tvar disstr string\n\tfor i := range vm.scripts[idx] {\n\t\tdisstr = disstr + vm.disasm(idx, i) + \"\\n\"\n\t}\n\treturn disstr, nil\n}\n\n// CheckErrorCondition returns nil if the running script has ended and was\n// successful, leaving a a true boolean on the stack.  An error otherwise,\n// including if the script has not finished.\nfunc (vm *Engine) CheckErrorCondition(finalScript bool) error {\n\t// Check execution is actually done.  When pc is past the end of script\n\t// array there are no more scripts to run.\n\tif vm.scriptIdx < len(vm.scripts) {\n\t\treturn scriptError(ErrScriptUnfinished,\n\t\t\t\"error check when script unfinished\")\n\t}\n\n\t// If we're in version zero witness execution mode, and this was the\n\t// final script, then the stack MUST be clean in order to maintain\n\t// compatibility with BIP16.\n\tif finalScript && vm.isWitnessVersionActive(0) && vm.dstack.Depth() != 1 {\n\t\treturn scriptError(ErrEvalFalse, \"witness program must \"+\n\t\t\t\"have clean stack\")\n\t}\n\n\tif finalScript && vm.hasFlag(ScriptVerifyCleanStack) &&\n\t\tvm.dstack.Depth() != 1 {\n\n\t\tstr := fmt.Sprintf(\"stack contains %d unexpected items\",\n\t\t\tvm.dstack.Depth()-1)\n\t\treturn scriptError(ErrCleanStack, str)\n\t} else if vm.dstack.Depth() < 1 {\n\t\treturn scriptError(ErrEmptyStack,\n\t\t\t\"stack empty at end of script execution\")\n\t}\n\n\tv, err := vm.dstack.PopBool()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif !v {\n\t\t// Log interesting data.\n\t\tlog.Tracef(\"%v\", newLogClosure(func() string {\n\t\t\tdis0, _ := vm.DisasmScript(0)\n\t\t\tdis1, _ := vm.DisasmScript(1)\n\t\t\treturn fmt.Sprintf(\"scripts failed: script0: %s\\n\"+\n\t\t\t\t\"script1: %s\", dis0, dis1)\n\t\t}))\n\t\treturn scriptError(ErrEvalFalse,\n\t\t\t\"false stack entry at end of script execution\")\n\t}\n\treturn nil\n}\n\n// Step will execute the next instruction and move the program counter to the\n// next opcode in the script, or the next script if the current has ended.  Step\n// will return true in the case that the last opcode was successfully executed.\n//\n// The result of calling Step or any other method is undefined if an error is\n// returned.\nfunc (vm *Engine) Step() (done bool, err error) {\n\t// Verify that it is pointing to a valid script address.\n\terr = vm.validPC()\n\tif err != nil {\n\t\treturn true, err\n\t}\n\topcode := &vm.scripts[vm.scriptIdx][vm.scriptOff]\n\tvm.scriptOff++\n\n\t// Execute the opcode while taking into account several things such as\n\t// disabled opcodes, illegal opcodes, maximum allowed operations per\n\t// script, maximum script element sizes, and conditionals.\n\terr = vm.executeOpcode(opcode)\n\tif err != nil {\n\t\treturn true, err\n\t}\n\n\t// The number of elements in the combination of the data and alt stacks\n\t// must not exceed the maximum number of stack elements allowed.\n\tcombinedStackSize := vm.dstack.Depth() + vm.astack.Depth()\n\tif combinedStackSize > MaxStackSize {\n\t\tstr := fmt.Sprintf(\"combined stack size %d > max allowed %d\",\n\t\t\tcombinedStackSize, MaxStackSize)\n\t\treturn false, scriptError(ErrStackOverflow, str)\n\t}\n\n\t// Prepare for next instruction.\n\tif vm.scriptOff >= len(vm.scripts[vm.scriptIdx]) {\n\t\t// Illegal to have an `if' that straddles two scripts.\n\t\tif err == nil && len(vm.condStack) != 0 {\n\t\t\treturn false, scriptError(ErrUnbalancedConditional,\n\t\t\t\t\"end of script reached in conditional execution\")\n\t\t}\n\n\t\t// Alt stack doesn't persist.\n\t\t_ = vm.astack.DropN(vm.astack.Depth())\n\n\t\tvm.numOps = 0 // number of ops is per script.\n\t\tvm.scriptOff = 0\n\t\tif vm.scriptIdx == 0 && vm.bip16 {\n\t\t\tvm.scriptIdx++\n\t\t\tvm.savedFirstStack = vm.GetStack()\n\t\t} else if vm.scriptIdx == 1 && vm.bip16 {\n\t\t\t// Put us past the end for CheckErrorCondition()\n\t\t\tvm.scriptIdx++\n\t\t\t// Check script ran successfully and pull the script\n\t\t\t// out of the first stack and execute that.\n\t\t\terr := vm.CheckErrorCondition(false)\n\t\t\tif err != nil {\n\t\t\t\treturn false, err\n\t\t\t}\n\n\t\t\tscript := vm.savedFirstStack[len(vm.savedFirstStack)-1]\n\t\t\tpops, err := parseScript(script)\n\t\t\tif err != nil {\n\t\t\t\treturn false, err\n\t\t\t}\n\t\t\tvm.scripts = append(vm.scripts, pops)\n\n\t\t\t// Set stack to be the stack from first script minus the\n\t\t\t// script itself\n\t\t\tvm.SetStack(vm.savedFirstStack[:len(vm.savedFirstStack)-1])\n\t\t} else if (vm.scriptIdx == 1 && vm.witnessProgram != nil) ||\n\t\t\t(vm.scriptIdx == 2 && vm.witnessProgram != nil && vm.bip16) { // Nested P2SH.\n\n\t\t\tvm.scriptIdx++\n\n\t\t\twitness := vm.tx.TxIn[vm.txIdx].Witness\n\t\t\tif err := vm.verifyWitnessProgram(witness); err != nil {\n\t\t\t\treturn false, err\n\t\t\t}\n\t\t} else {\n\t\t\tvm.scriptIdx++\n\t\t}\n\t\t// there are zero length scripts in the wild\n\t\tif vm.scriptIdx < len(vm.scripts) && vm.scriptOff >= len(vm.scripts[vm.scriptIdx]) {\n\t\t\tvm.scriptIdx++\n\t\t}\n\t\tvm.lastCodeSep = 0\n\t\tif vm.scriptIdx >= len(vm.scripts) {\n\t\t\treturn true, nil\n\t\t}\n\t}\n\treturn false, nil\n}\n\n// Execute will execute all scripts in the script engine and return either nil\n// for successful validation or an error if one occurred.\nfunc (vm *Engine) Execute() (err error) {\n\tdone := false\n\tfor !done {\n\t\tlog.Tracef(\"%v\", newLogClosure(func() string {\n\t\t\tdis, err := vm.DisasmPC()\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Sprintf(\"stepping (%v)\", err)\n\t\t\t}\n\t\t\treturn fmt.Sprintf(\"stepping %v\", dis)\n\t\t}))\n\n\t\tdone, err = vm.Step()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tlog.Tracef(\"%v\", newLogClosure(func() string {\n\t\t\tvar dstr, astr string\n\n\t\t\t// if we're tracing, dump the stacks.\n\t\t\tif vm.dstack.Depth() != 0 {\n\t\t\t\tdstr = \"Stack:\\n\" + vm.dstack.String()\n\t\t\t}\n\t\t\tif vm.astack.Depth() != 0 {\n\t\t\t\tastr = \"AltStack:\\n\" + vm.astack.String()\n\t\t\t}\n\n\t\t\treturn dstr + astr\n\t\t}))\n\t}\n\n\treturn vm.CheckErrorCondition(true)\n}\n\n// subScript returns the script since the last OP_CODESEPARATOR.\nfunc (vm *Engine) subScript() []parsedOpcode {\n\treturn vm.scripts[vm.scriptIdx][vm.lastCodeSep:]\n}\n\n// checkHashTypeEncoding returns whether or not the passed hashtype adheres to\n// the strict encoding requirements if enabled.\nfunc (vm *Engine) checkHashTypeEncoding(hashType SigHashType) error {\n\tif !vm.hasFlag(ScriptVerifyStrictEncoding) {\n\t\treturn nil\n\t}\n\n\tsigHashType := hashType & ^SigHashAnyOneCanPay\n\tif sigHashType < SigHashAll || sigHashType > SigHashSingle {\n\t\tstr := fmt.Sprintf(\"invalid hash type 0x%x\", hashType)\n\t\treturn scriptError(ErrInvalidSigHashType, str)\n\t}\n\treturn nil\n}\n\n// checkPubKeyEncoding returns whether or not the passed public key adheres to\n// the strict encoding requirements if enabled.\nfunc (vm *Engine) checkPubKeyEncoding(pubKey []byte) error {\n\tif vm.hasFlag(ScriptVerifyWitnessPubKeyType) &&\n\t\tvm.isWitnessVersionActive(0) && !btcec.IsCompressedPubKey(pubKey) {\n\n\t\tstr := \"only uncompressed keys are accepted post-segwit\"\n\t\treturn scriptError(ErrWitnessPubKeyType, str)\n\t}\n\n\tif !vm.hasFlag(ScriptVerifyStrictEncoding) {\n\t\treturn nil\n\t}\n\n\tif len(pubKey) == 33 && (pubKey[0] == 0x02 || pubKey[0] == 0x03) {\n\t\t// Compressed\n\t\treturn nil\n\t}\n\tif len(pubKey) == 65 && pubKey[0] == 0x04 {\n\t\t// Uncompressed\n\t\treturn nil\n\t}\n\n\treturn scriptError(ErrPubKeyType, \"unsupported public key type\")\n}\n\n// checkSignatureEncoding returns whether or not the passed signature adheres to\n// the strict encoding requirements if enabled.\nfunc (vm *Engine) checkSignatureEncoding(sig []byte) error {\n\tif !vm.hasFlag(ScriptVerifyDERSignatures) &&\n\t\t!vm.hasFlag(ScriptVerifyLowS) &&\n\t\t!vm.hasFlag(ScriptVerifyStrictEncoding) {\n\n\t\treturn nil\n\t}\n\n\t// The format of a DER encoded signature is as follows:\n\t//\n\t// 0x30 <total length> 0x02 <length of R> <R> 0x02 <length of S> <S>\n\t//   - 0x30 is the ASN.1 identifier for a sequence\n\t//   - Total length is 1 byte and specifies length of all remaining data\n\t//   - 0x02 is the ASN.1 identifier that specifies an integer follows\n\t//   - Length of R is 1 byte and specifies how many bytes R occupies\n\t//   - R is the arbitrary length big-endian encoded number which\n\t//     represents the R value of the signature.  DER encoding dictates\n\t//     that the value must be encoded using the minimum possible number\n\t//     of bytes.  This implies the first byte can only be null if the\n\t//     highest bit of the next byte is set in order to prevent it from\n\t//     being interpreted as a negative number.\n\t//   - 0x02 is once again the ASN.1 integer identifier\n\t//   - Length of S is 1 byte and specifies how many bytes S occupies\n\t//   - S is the arbitrary length big-endian encoded number which\n\t//     represents the S value of the signature.  The encoding rules are\n\t//     identical as those for R.\n\tconst (\n\t\tasn1SequenceID = 0x30\n\t\tasn1IntegerID  = 0x02\n\n\t\t// minSigLen is the minimum length of a DER encoded signature and is\n\t\t// when both R and S are 1 byte each.\n\t\t//\n\t\t// 0x30 + <1-byte> + 0x02 + 0x01 + <byte> + 0x2 + 0x01 + <byte>\n\t\tminSigLen = 8\n\n\t\t// maxSigLen is the maximum length of a DER encoded signature and is\n\t\t// when both R and S are 33 bytes each.  It is 33 bytes because a\n\t\t// 256-bit integer requires 32 bytes and an additional leading null byte\n\t\t// might required if the high bit is set in the value.\n\t\t//\n\t\t// 0x30 + <1-byte> + 0x02 + 0x21 + <33 bytes> + 0x2 + 0x21 + <33 bytes>\n\t\tmaxSigLen = 72\n\n\t\t// sequenceOffset is the byte offset within the signature of the\n\t\t// expected ASN.1 sequence identifier.\n\t\tsequenceOffset = 0\n\n\t\t// dataLenOffset is the byte offset within the signature of the expected\n\t\t// total length of all remaining data in the signature.\n\t\tdataLenOffset = 1\n\n\t\t// rTypeOffset is the byte offset within the signature of the ASN.1\n\t\t// identifier for R and is expected to indicate an ASN.1 integer.\n\t\trTypeOffset = 2\n\n\t\t// rLenOffset is the byte offset within the signature of the length of\n\t\t// R.\n\t\trLenOffset = 3\n\n\t\t// rOffset is the byte offset within the signature of R.\n\t\trOffset = 4\n\t)\n\n\t// The signature must adhere to the minimum and maximum allowed length.\n\tsigLen := len(sig)\n\tif sigLen < minSigLen {\n\t\tstr := fmt.Sprintf(\"malformed signature: too short: %d < %d\", sigLen,\n\t\t\tminSigLen)\n\t\treturn scriptError(ErrSigTooShort, str)\n\t}\n\tif sigLen > maxSigLen {\n\t\tstr := fmt.Sprintf(\"malformed signature: too long: %d > %d\", sigLen,\n\t\t\tmaxSigLen)\n\t\treturn scriptError(ErrSigTooLong, str)\n\t}\n\n\t// The signature must start with the ASN.1 sequence identifier.\n\tif sig[sequenceOffset] != asn1SequenceID {\n\t\tstr := fmt.Sprintf(\"malformed signature: format has wrong type: %#x\",\n\t\t\tsig[sequenceOffset])\n\t\treturn scriptError(ErrSigInvalidSeqID, str)\n\t}\n\n\t// The signature must indicate the correct amount of data for all elements\n\t// related to R and S.\n\tif int(sig[dataLenOffset]) != sigLen-2 {\n\t\tstr := fmt.Sprintf(\"malformed signature: bad length: %d != %d\",\n\t\t\tsig[dataLenOffset], sigLen-2)\n\t\treturn scriptError(ErrSigInvalidDataLen, str)\n\t}\n\n\t// Calculate the offsets of the elements related to S and ensure S is inside\n\t// the signature.\n\t//\n\t// rLen specifies the length of the big-endian encoded number which\n\t// represents the R value of the signature.\n\t//\n\t// sTypeOffset is the offset of the ASN.1 identifier for S and, like its R\n\t// counterpart, is expected to indicate an ASN.1 integer.\n\t//\n\t// sLenOffset and sOffset are the byte offsets within the signature of the\n\t// length of S and S itself, respectively.\n\trLen := int(sig[rLenOffset])\n\tsTypeOffset := rOffset + rLen\n\tsLenOffset := sTypeOffset + 1\n\tif sTypeOffset >= sigLen {\n\t\tstr := \"malformed signature: S type indicator missing\"\n\t\treturn scriptError(ErrSigMissingSTypeID, str)\n\t}\n\tif sLenOffset >= sigLen {\n\t\tstr := \"malformed signature: S length missing\"\n\t\treturn scriptError(ErrSigMissingSLen, str)\n\t}\n\n\t// The lengths of R and S must match the overall length of the signature.\n\t//\n\t// sLen specifies the length of the big-endian encoded number which\n\t// represents the S value of the signature.\n\tsOffset := sLenOffset + 1\n\tsLen := int(sig[sLenOffset])\n\tif sOffset+sLen != sigLen {\n\t\tstr := \"malformed signature: invalid S length\"\n\t\treturn scriptError(ErrSigInvalidSLen, str)\n\t}\n\n\t// R elements must be ASN.1 integers.\n\tif sig[rTypeOffset] != asn1IntegerID {\n\t\tstr := fmt.Sprintf(\"malformed signature: R integer marker: %#x != %#x\",\n\t\t\tsig[rTypeOffset], asn1IntegerID)\n\t\treturn scriptError(ErrSigInvalidRIntID, str)\n\t}\n\n\t// Zero-length integers are not allowed for R.\n\tif rLen == 0 {\n\t\tstr := \"malformed signature: R length is zero\"\n\t\treturn scriptError(ErrSigZeroRLen, str)\n\t}\n\n\t// R must not be negative.\n\tif sig[rOffset]&0x80 != 0 {\n\t\tstr := \"malformed signature: R is negative\"\n\t\treturn scriptError(ErrSigNegativeR, str)\n\t}\n\n\t// Null bytes at the start of R are not allowed, unless R would otherwise be\n\t// interpreted as a negative number.\n\tif rLen > 1 && sig[rOffset] == 0x00 && sig[rOffset+1]&0x80 == 0 {\n\t\tstr := \"malformed signature: R value has too much padding\"\n\t\treturn scriptError(ErrSigTooMuchRPadding, str)\n\t}\n\n\t// S elements must be ASN.1 integers.\n\tif sig[sTypeOffset] != asn1IntegerID {\n\t\tstr := fmt.Sprintf(\"malformed signature: S integer marker: %#x != %#x\",\n\t\t\tsig[sTypeOffset], asn1IntegerID)\n\t\treturn scriptError(ErrSigInvalidSIntID, str)\n\t}\n\n\t// Zero-length integers are not allowed for S.\n\tif sLen == 0 {\n\t\tstr := \"malformed signature: S length is zero\"\n\t\treturn scriptError(ErrSigZeroSLen, str)\n\t}\n\n\t// S must not be negative.\n\tif sig[sOffset]&0x80 != 0 {\n\t\tstr := \"malformed signature: S is negative\"\n\t\treturn scriptError(ErrSigNegativeS, str)\n\t}\n\n\t// Null bytes at the start of S are not allowed, unless S would otherwise be\n\t// interpreted as a negative number.\n\tif sLen > 1 && sig[sOffset] == 0x00 && sig[sOffset+1]&0x80 == 0 {\n\t\tstr := \"malformed signature: S value has too much padding\"\n\t\treturn scriptError(ErrSigTooMuchSPadding, str)\n\t}\n\n\t// Verify the S value is <= half the order of the curve.  This check is done\n\t// because when it is higher, the complement modulo the order can be used\n\t// instead which is a shorter encoding by 1 byte.  Further, without\n\t// enforcing this, it is possible to replace a signature in a valid\n\t// transaction with the complement while still being a valid signature that\n\t// verifies.  This would result in changing the transaction hash and thus is\n\t// a source of malleability.\n\tif vm.hasFlag(ScriptVerifyLowS) {\n\t\tsValue := new(big.Int).SetBytes(sig[sOffset : sOffset+sLen])\n\t\tif sValue.Cmp(halfOrder) > 0 {\n\t\t\treturn scriptError(ErrSigHighS, \"signature is not canonical due \"+\n\t\t\t\t\"to unnecessarily high S value\")\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// getStack returns the contents of stack as a byte array bottom up\nfunc getStack(stack *stack) [][]byte {\n\tarray := make([][]byte, stack.Depth())\n\tfor i := range array {\n\t\t// PeekByteArry can't fail due to overflow, already checked\n\t\tarray[len(array)-i-1], _ = stack.PeekByteArray(int32(i))\n\t}\n\treturn array\n}\n\n// setStack sets the stack to the contents of the array where the last item in\n// the array is the top item in the stack.\nfunc setStack(stack *stack, data [][]byte) {\n\t// This can not error. Only errors are for invalid arguments.\n\t_ = stack.DropN(stack.Depth())\n\n\tfor i := range data {\n\t\tstack.PushByteArray(data[i])\n\t}\n}\n\n// GetStack returns the contents of the primary stack as an array. where the\n// last item in the array is the top of the stack.\nfunc (vm *Engine) GetStack() [][]byte {\n\treturn getStack(&vm.dstack)\n}\n\n// SetStack sets the contents of the primary stack to the contents of the\n// provided array where the last item in the array will be the top of the stack.\nfunc (vm *Engine) SetStack(data [][]byte) {\n\tsetStack(&vm.dstack, data)\n}\n\n// GetAltStack returns the contents of the alternate stack as an array where the\n// last item in the array is the top of the stack.\nfunc (vm *Engine) GetAltStack() [][]byte {\n\treturn getStack(&vm.astack)\n}\n\n// SetAltStack sets the contents of the alternate stack to the contents of the\n// provided array where the last item in the array will be the top of the stack.\nfunc (vm *Engine) SetAltStack(data [][]byte) {\n\tsetStack(&vm.astack, data)\n}\n\n// NewEngine returns a new script engine for the provided public key script,\n// transaction, and input index.  The flags modify the behavior of the script\n// engine according to the description provided by each flag.\nfunc NewEngine(scriptPubKey []byte, tx *wire.MsgTx, txIdx int, flags ScriptFlags,\n\tsigCache *SigCache, hashCache *TxSigHashes, inputAmount int64) (*Engine, error) {\n\n\t// The provided transaction input index must refer to a valid input.\n\tif txIdx < 0 || txIdx >= len(tx.TxIn) {\n\t\tstr := fmt.Sprintf(\"transaction input index %d is negative or \"+\n\t\t\t\">= %d\", txIdx, len(tx.TxIn))\n\t\treturn nil, scriptError(ErrInvalidIndex, str)\n\t}\n\tscriptSig := tx.TxIn[txIdx].SignatureScript\n\n\t// When both the signature script and public key script are empty the\n\t// result is necessarily an error since the stack would end up being\n\t// empty which is equivalent to a false top element.  Thus, just return\n\t// the relevant error now as an optimization.\n\tif len(scriptSig) == 0 && len(scriptPubKey) == 0 {\n\t\treturn nil, scriptError(ErrEvalFalse,\n\t\t\t\"false stack entry at end of script execution\")\n\t}\n\n\t// The clean stack flag (ScriptVerifyCleanStack) is not allowed without\n\t// either the pay-to-script-hash (P2SH) evaluation (ScriptBip16)\n\t// flag or the Segregated Witness (ScriptVerifyWitness) flag.\n\t//\n\t// Recall that evaluating a P2SH script without the flag set results in\n\t// non-P2SH evaluation which leaves the P2SH inputs on the stack.\n\t// Thus, allowing the clean stack flag without the P2SH flag would make\n\t// it possible to have a situation where P2SH would not be a soft fork\n\t// when it should be. The same goes for segwit which will pull in\n\t// additional scripts for execution from the witness stack.\n\tvm := Engine{flags: flags, sigCache: sigCache, hashCache: hashCache,\n\t\tinputAmount: inputAmount}\n\tif vm.hasFlag(ScriptVerifyCleanStack) && (!vm.hasFlag(ScriptBip16) &&\n\t\t!vm.hasFlag(ScriptVerifyWitness)) {\n\t\treturn nil, scriptError(ErrInvalidFlags,\n\t\t\t\"invalid flags combination\")\n\t}\n\n\t// The signature script must only contain data pushes when the\n\t// associated flag is set.\n\tif vm.hasFlag(ScriptVerifySigPushOnly) && !IsPushOnlyScript(scriptSig) {\n\t\treturn nil, scriptError(ErrNotPushOnly,\n\t\t\t\"signature script is not push only\")\n\t}\n\n\t// The engine stores the scripts in parsed form using a slice.  This\n\t// allows multiple scripts to be executed in sequence.  For example,\n\t// with a pay-to-script-hash transaction, there will be ultimately be\n\t// a third script to execute.\n\tscripts := [][]byte{scriptSig, scriptPubKey}\n\tvm.scripts = make([][]parsedOpcode, len(scripts))\n\tfor i, scr := range scripts {\n\t\tif len(scr) > MaxScriptSize {\n\t\t\tstr := fmt.Sprintf(\"script size %d is larger than max \"+\n\t\t\t\t\"allowed size %d\", len(scr), MaxScriptSize)\n\t\t\treturn nil, scriptError(ErrScriptTooBig, str)\n\t\t}\n\t\tvar err error\n\t\tvm.scripts[i], err = parseScript(scr)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\t// Advance the program counter to the public key script if the signature\n\t// script is empty since there is nothing to execute for it in that\n\t// case.\n\tif len(scripts[0]) == 0 {\n\t\tvm.scriptIdx++\n\t}\n\n\tif vm.hasFlag(ScriptBip16) && isScriptHash(vm.scripts[1]) {\n\t\t// Only accept input scripts that push data for P2SH.\n\t\tif !isPushOnly(vm.scripts[0]) {\n\t\t\treturn nil, scriptError(ErrNotPushOnly,\n\t\t\t\t\"pay to script hash is not push only\")\n\t\t}\n\t\tvm.bip16 = true\n\t}\n\tif vm.hasFlag(ScriptVerifyMinimalData) {\n\t\tvm.dstack.verifyMinimalData = true\n\t\tvm.astack.verifyMinimalData = true\n\t}\n\n\t// Check to see if we should execute in witness verification mode\n\t// according to the set flags. We check both the pkScript, and sigScript\n\t// here since in the case of nested p2sh, the scriptSig will be a valid\n\t// witness program. For nested p2sh, all the bytes after the first data\n\t// push should *exactly* match the witness program template.\n\tif vm.hasFlag(ScriptVerifyWitness) {\n\t\t// If witness evaluation is enabled, then P2SH MUST also be\n\t\t// active.\n\t\tif !vm.hasFlag(ScriptBip16) {\n\t\t\terrStr := \"P2SH must be enabled to do witness verification\"\n\t\t\treturn nil, scriptError(ErrInvalidFlags, errStr)\n\t\t}\n\n\t\tvar witProgram []byte\n\n\t\tswitch {\n\t\tcase isWitnessProgram(vm.scripts[1]):\n\t\t\t// The scriptSig must be *empty* for all native witness\n\t\t\t// programs, otherwise we introduce malleability.\n\t\t\tif len(scriptSig) != 0 {\n\t\t\t\terrStr := \"native witness program cannot \" +\n\t\t\t\t\t\"also have a signature script\"\n\t\t\t\treturn nil, scriptError(ErrWitnessMalleated, errStr)\n\t\t\t}\n\n\t\t\twitProgram = scriptPubKey\n\t\tcase len(tx.TxIn[txIdx].Witness) != 0 && vm.bip16:\n\t\t\t// The sigScript MUST be *exactly* a single canonical\n\t\t\t// data push of the witness program, otherwise we\n\t\t\t// reintroduce malleability.\n\t\t\tsigPops := vm.scripts[0]\n\t\t\tif len(sigPops) == 1 && canonicalPush(sigPops[0]) &&\n\t\t\t\tIsWitnessProgram(sigPops[0].data) {\n\n\t\t\t\twitProgram = sigPops[0].data\n\t\t\t} else {\n\t\t\t\terrStr := \"signature script for witness \" +\n\t\t\t\t\t\"nested p2sh is not canonical\"\n\t\t\t\treturn nil, scriptError(ErrWitnessMalleatedP2SH, errStr)\n\t\t\t}\n\t\t}\n\n\t\tif witProgram != nil {\n\t\t\tvar err error\n\t\t\tvm.witnessVersion, vm.witnessProgram, err = ExtractWitnessProgramInfo(witProgram)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t} else {\n\t\t\t// If we didn't find a witness program in either the\n\t\t\t// pkScript or as a datapush within the sigScript, then\n\t\t\t// there MUST NOT be any witness data associated with\n\t\t\t// the input being validated.\n\t\t\tif vm.witnessProgram == nil && len(tx.TxIn[txIdx].Witness) != 0 {\n\t\t\t\terrStr := \"non-witness inputs cannot have a witness\"\n\t\t\t\treturn nil, scriptError(ErrWitnessUnexpected, errStr)\n\t\t\t}\n\t\t}\n\n\t}\n\n\tvm.tx = *tx\n\tvm.txIdx = txIdx\n\n\treturn &vm, nil\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/txscript/error.go",
    "content": "// Copyright (c) 2013-2017 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage txscript\n\nimport (\n\t\"fmt\"\n)\n\n// ErrorCode identifies a kind of script error.\ntype ErrorCode int\n\n// These constants are used to identify a specific Error.\nconst (\n\t// ErrInternal is returned if internal consistency checks fail.  In\n\t// practice this error should never be seen as it would mean there is an\n\t// error in the engine logic.\n\tErrInternal ErrorCode = iota\n\n\t// ---------------------------------------\n\t// Failures related to improper API usage.\n\t// ---------------------------------------\n\n\t// ErrInvalidFlags is returned when the passed flags to NewEngine\n\t// contain an invalid combination.\n\tErrInvalidFlags\n\n\t// ErrInvalidIndex is returned when an out-of-bounds index is passed to\n\t// a function.\n\tErrInvalidIndex\n\n\t// ErrUnsupportedAddress is returned when a concrete type that\n\t// implements a btcutil.Address is not a supported type.\n\tErrUnsupportedAddress\n\n\t// ErrNotMultisigScript is returned from CalcMultiSigStats when the\n\t// provided script is not a multisig script.\n\tErrNotMultisigScript\n\n\t// ErrTooManyRequiredSigs is returned from MultiSigScript when the\n\t// specified number of required signatures is larger than the number of\n\t// provided public keys.\n\tErrTooManyRequiredSigs\n\n\t// ErrTooMuchNullData is returned from NullDataScript when the length of\n\t// the provided data exceeds MaxDataCarrierSize.\n\tErrTooMuchNullData\n\n\t// ------------------------------------------\n\t// Failures related to final execution state.\n\t// ------------------------------------------\n\n\t// ErrEarlyReturn is returned when OP_RETURN is executed in the script.\n\tErrEarlyReturn\n\n\t// ErrEmptyStack is returned when the script evaluated without error,\n\t// but terminated with an empty top stack element.\n\tErrEmptyStack\n\n\t// ErrEvalFalse is returned when the script evaluated without error but\n\t// terminated with a false top stack element.\n\tErrEvalFalse\n\n\t// ErrScriptUnfinished is returned when CheckErrorCondition is called on\n\t// a script that has not finished executing.\n\tErrScriptUnfinished\n\n\t// ErrScriptDone is returned when an attempt to execute an opcode is\n\t// made once all of them have already been executed.  This can happen\n\t// due to things such as a second call to Execute or calling Step after\n\t// all opcodes have already been executed.\n\tErrInvalidProgramCounter\n\n\t// -----------------------------------------------------\n\t// Failures related to exceeding maximum allowed limits.\n\t// -----------------------------------------------------\n\n\t// ErrScriptTooBig is returned if a script is larger than MaxScriptSize.\n\tErrScriptTooBig\n\n\t// ErrElementTooBig is returned if the size of an element to be pushed\n\t// to the stack is over MaxScriptElementSize.\n\tErrElementTooBig\n\n\t// ErrTooManyOperations is returned if a script has more than\n\t// MaxOpsPerScript opcodes that do not push data.\n\tErrTooManyOperations\n\n\t// ErrStackOverflow is returned when stack and altstack combined depth\n\t// is over the limit.\n\tErrStackOverflow\n\n\t// ErrInvalidPubKeyCount is returned when the number of public keys\n\t// specified for a multsig is either negative or greater than\n\t// MaxPubKeysPerMultiSig.\n\tErrInvalidPubKeyCount\n\n\t// ErrInvalidSignatureCount is returned when the number of signatures\n\t// specified for a multisig is either negative or greater than the\n\t// number of public keys.\n\tErrInvalidSignatureCount\n\n\t// ErrNumberTooBig is returned when the argument for an opcode that\n\t// expects numeric input is larger than the expected maximum number of\n\t// bytes.  For the most part, opcodes that deal with stack manipulation\n\t// via offsets, arithmetic, numeric comparison, and boolean logic are\n\t// those that this applies to.  However, any opcode that expects numeric\n\t// input may fail with this code.\n\tErrNumberTooBig\n\n\t// --------------------------------------------\n\t// Failures related to verification operations.\n\t// --------------------------------------------\n\n\t// ErrVerify is returned when OP_VERIFY is encountered in a script and\n\t// the top item on the data stack does not evaluate to true.\n\tErrVerify\n\n\t// ErrEqualVerify is returned when OP_EQUALVERIFY is encountered in a\n\t// script and the top item on the data stack does not evaluate to true.\n\tErrEqualVerify\n\n\t// ErrNumEqualVerify is returned when OP_NUMEQUALVERIFY is encountered\n\t// in a script and the top item on the data stack does not evaluate to\n\t// true.\n\tErrNumEqualVerify\n\n\t// ErrCheckSigVerify is returned when OP_CHECKSIGVERIFY is encountered\n\t// in a script and the top item on the data stack does not evaluate to\n\t// true.\n\tErrCheckSigVerify\n\n\t// ErrCheckSigVerify is returned when OP_CHECKMULTISIGVERIFY is\n\t// encountered in a script and the top item on the data stack does not\n\t// evaluate to true.\n\tErrCheckMultiSigVerify\n\n\t// --------------------------------------------\n\t// Failures related to improper use of opcodes.\n\t// --------------------------------------------\n\n\t// ErrDisabledOpcode is returned when a disabled opcode is encountered\n\t// in a script.\n\tErrDisabledOpcode\n\n\t// ErrReservedOpcode is returned when an opcode marked as reserved\n\t// is encountered in a script.\n\tErrReservedOpcode\n\n\t// ErrMalformedPush is returned when a data push opcode tries to push\n\t// more bytes than are left in the script.\n\tErrMalformedPush\n\n\t// ErrInvalidStackOperation is returned when a stack operation is\n\t// attempted with a number that is invalid for the current stack size.\n\tErrInvalidStackOperation\n\n\t// ErrUnbalancedConditional is returned when an OP_ELSE or OP_ENDIF is\n\t// encountered in a script without first having an OP_IF or OP_NOTIF or\n\t// the end of script is reached without encountering an OP_ENDIF when\n\t// an OP_IF or OP_NOTIF was previously encountered.\n\tErrUnbalancedConditional\n\n\t// ---------------------------------\n\t// Failures related to malleability.\n\t// ---------------------------------\n\n\t// ErrMinimalData is returned when the ScriptVerifyMinimalData flag\n\t// is set and the script contains push operations that do not use\n\t// the minimal opcode required.\n\tErrMinimalData\n\n\t// ErrInvalidSigHashType is returned when a signature hash type is not\n\t// one of the supported types.\n\tErrInvalidSigHashType\n\n\t// ErrSigTooShort is returned when a signature that should be a\n\t// canonically-encoded DER signature is too short.\n\tErrSigTooShort\n\n\t// ErrSigTooLong is returned when a signature that should be a\n\t// canonically-encoded DER signature is too long.\n\tErrSigTooLong\n\n\t// ErrSigInvalidSeqID is returned when a signature that should be a\n\t// canonically-encoded DER signature does not have the expected ASN.1\n\t// sequence ID.\n\tErrSigInvalidSeqID\n\n\t// ErrSigInvalidDataLen is returned a signature that should be a\n\t// canonically-encoded DER signature does not specify the correct number\n\t// of remaining bytes for the R and S portions.\n\tErrSigInvalidDataLen\n\n\t// ErrSigMissingSTypeID is returned a signature that should be a\n\t// canonically-encoded DER signature does not provide the ASN.1 type ID\n\t// for S.\n\tErrSigMissingSTypeID\n\n\t// ErrSigMissingSLen is returned when a signature that should be a\n\t// canonically-encoded DER signature does not provide the length of S.\n\tErrSigMissingSLen\n\n\t// ErrSigInvalidSLen is returned a signature that should be a\n\t// canonically-encoded DER signature does not specify the correct number\n\t// of bytes for the S portion.\n\tErrSigInvalidSLen\n\n\t// ErrSigInvalidRIntID is returned when a signature that should be a\n\t// canonically-encoded DER signature does not have the expected ASN.1\n\t// integer ID for R.\n\tErrSigInvalidRIntID\n\n\t// ErrSigZeroRLen is returned when a signature that should be a\n\t// canonically-encoded DER signature has an R length of zero.\n\tErrSigZeroRLen\n\n\t// ErrSigNegativeR is returned when a signature that should be a\n\t// canonically-encoded DER signature has a negative value for R.\n\tErrSigNegativeR\n\n\t// ErrSigTooMuchRPadding is returned when a signature that should be a\n\t// canonically-encoded DER signature has too much padding for R.\n\tErrSigTooMuchRPadding\n\n\t// ErrSigInvalidSIntID is returned when a signature that should be a\n\t// canonically-encoded DER signature does not have the expected ASN.1\n\t// integer ID for S.\n\tErrSigInvalidSIntID\n\n\t// ErrSigZeroSLen is returned when a signature that should be a\n\t// canonically-encoded DER signature has an S length of zero.\n\tErrSigZeroSLen\n\n\t// ErrSigNegativeS is returned when a signature that should be a\n\t// canonically-encoded DER signature has a negative value for S.\n\tErrSigNegativeS\n\n\t// ErrSigTooMuchSPadding is returned when a signature that should be a\n\t// canonically-encoded DER signature has too much padding for S.\n\tErrSigTooMuchSPadding\n\n\t// ErrSigHighS is returned when the ScriptVerifyLowS flag is set and the\n\t// script contains any signatures whose S values are higher than the\n\t// half order.\n\tErrSigHighS\n\n\t// ErrNotPushOnly is returned when a script that is required to only\n\t// push data to the stack performs other operations.  A couple of cases\n\t// where this applies is for a pay-to-script-hash signature script when\n\t// bip16 is active and when the ScriptVerifySigPushOnly flag is set.\n\tErrNotPushOnly\n\n\t// ErrSigNullDummy is returned when the ScriptStrictMultiSig flag is set\n\t// and a multisig script has anything other than 0 for the extra dummy\n\t// argument.\n\tErrSigNullDummy\n\n\t// ErrPubKeyType is returned when the ScriptVerifyStrictEncoding\n\t// flag is set and the script contains invalid public keys.\n\tErrPubKeyType\n\n\t// ErrCleanStack is returned when the ScriptVerifyCleanStack flag\n\t// is set, and after evalution, the stack does not contain only a\n\t// single element.\n\tErrCleanStack\n\n\t// ErrNullFail is returned when the ScriptVerifyNullFail flag is\n\t// set and signatures are not empty on failed checksig or checkmultisig\n\t// operations.\n\tErrNullFail\n\n\t// ErrWitnessMalleated is returned if ScriptVerifyWitness is set and a\n\t// native p2wsh program is encountered which has a non-empty sigScript.\n\tErrWitnessMalleated\n\n\t// ErrWitnessMalleatedP2SH is returned if ScriptVerifyWitness if set\n\t// and the validation logic for nested p2sh encounters a sigScript\n\t// which isn't *exactyl* a datapush of the witness program.\n\tErrWitnessMalleatedP2SH\n\n\t// -------------------------------\n\t// Failures related to soft forks.\n\t// -------------------------------\n\n\t// ErrDiscourageUpgradableNOPs is returned when the\n\t// ScriptDiscourageUpgradableNops flag is set and a NOP opcode is\n\t// encountered in a script.\n\tErrDiscourageUpgradableNOPs\n\n\t// ErrNegativeLockTime is returned when a script contains an opcode that\n\t// interprets a negative lock time.\n\tErrNegativeLockTime\n\n\t// ErrUnsatisfiedLockTime is returned when a script contains an opcode\n\t// that involves a lock time and the required lock time has not been\n\t// reached.\n\tErrUnsatisfiedLockTime\n\n\t// ErrMinimalIf is returned if ScriptVerifyWitness is set and the\n\t// operand of an OP_IF/OP_NOF_IF are not either an empty vector or\n\t// [0x01].\n\tErrMinimalIf\n\n\t// ErrDiscourageUpgradableWitnessProgram is returned if\n\t// ScriptVerifyWitness is set and the versino of an executing witness\n\t// program is outside the set of currently defined witness program\n\t// vesions.\n\tErrDiscourageUpgradableWitnessProgram\n\n\t// ----------------------------------------\n\t// Failures related to segregated witness.\n\t// ----------------------------------------\n\n\t// ErrWitnessProgramEmpty is returned if ScriptVerifyWitness is set and\n\t// the witness stack itself is empty.\n\tErrWitnessProgramEmpty\n\n\t// ErrWitnessProgramMismatch is returned if ScriptVerifyWitness is set\n\t// and the witness itself for a p2wkh witness program isn't *exactly* 2\n\t// items or if the witness for a p2wsh isn't the sha255 of the witness\n\t// script.\n\tErrWitnessProgramMismatch\n\n\t// ErrWitnessProgramWrongLength is returned if ScriptVerifyWitness is\n\t// set and the length of the witness program violates the length as\n\t// dictated by the current witness version.\n\tErrWitnessProgramWrongLength\n\n\t// ErrWitnessUnexpected is returned if ScriptVerifyWitness is set and a\n\t// transaction includes witness data but doesn't spend an which is a\n\t// witness program (nested or native).\n\tErrWitnessUnexpected\n\n\t// ErrWitnessPubKeyType is returned if ScriptVerifyWitness is set and\n\t// the public key used in either a check-sig or check-multi-sig isn't\n\t// serialized in a compressed format.\n\tErrWitnessPubKeyType\n\n\t// numErrorCodes is the maximum error code number used in tests.  This\n\t// entry MUST be the last entry in the enum.\n\tnumErrorCodes\n)\n\n// Map of ErrorCode values back to their constant names for pretty printing.\nvar errorCodeStrings = map[ErrorCode]string{\n\tErrInternal:                           \"ErrInternal\",\n\tErrInvalidFlags:                       \"ErrInvalidFlags\",\n\tErrInvalidIndex:                       \"ErrInvalidIndex\",\n\tErrUnsupportedAddress:                 \"ErrUnsupportedAddress\",\n\tErrNotMultisigScript:                  \"ErrNotMultisigScript\",\n\tErrTooManyRequiredSigs:                \"ErrTooManyRequiredSigs\",\n\tErrTooMuchNullData:                    \"ErrTooMuchNullData\",\n\tErrEarlyReturn:                        \"ErrEarlyReturn\",\n\tErrEmptyStack:                         \"ErrEmptyStack\",\n\tErrEvalFalse:                          \"ErrEvalFalse\",\n\tErrScriptUnfinished:                   \"ErrScriptUnfinished\",\n\tErrInvalidProgramCounter:              \"ErrInvalidProgramCounter\",\n\tErrScriptTooBig:                       \"ErrScriptTooBig\",\n\tErrElementTooBig:                      \"ErrElementTooBig\",\n\tErrTooManyOperations:                  \"ErrTooManyOperations\",\n\tErrStackOverflow:                      \"ErrStackOverflow\",\n\tErrInvalidPubKeyCount:                 \"ErrInvalidPubKeyCount\",\n\tErrInvalidSignatureCount:              \"ErrInvalidSignatureCount\",\n\tErrNumberTooBig:                       \"ErrNumberTooBig\",\n\tErrVerify:                             \"ErrVerify\",\n\tErrEqualVerify:                        \"ErrEqualVerify\",\n\tErrNumEqualVerify:                     \"ErrNumEqualVerify\",\n\tErrCheckSigVerify:                     \"ErrCheckSigVerify\",\n\tErrCheckMultiSigVerify:                \"ErrCheckMultiSigVerify\",\n\tErrDisabledOpcode:                     \"ErrDisabledOpcode\",\n\tErrReservedOpcode:                     \"ErrReservedOpcode\",\n\tErrMalformedPush:                      \"ErrMalformedPush\",\n\tErrInvalidStackOperation:              \"ErrInvalidStackOperation\",\n\tErrUnbalancedConditional:              \"ErrUnbalancedConditional\",\n\tErrMinimalData:                        \"ErrMinimalData\",\n\tErrInvalidSigHashType:                 \"ErrInvalidSigHashType\",\n\tErrSigTooShort:                        \"ErrSigTooShort\",\n\tErrSigTooLong:                         \"ErrSigTooLong\",\n\tErrSigInvalidSeqID:                    \"ErrSigInvalidSeqID\",\n\tErrSigInvalidDataLen:                  \"ErrSigInvalidDataLen\",\n\tErrSigMissingSTypeID:                  \"ErrSigMissingSTypeID\",\n\tErrSigMissingSLen:                     \"ErrSigMissingSLen\",\n\tErrSigInvalidSLen:                     \"ErrSigInvalidSLen\",\n\tErrSigInvalidRIntID:                   \"ErrSigInvalidRIntID\",\n\tErrSigZeroRLen:                        \"ErrSigZeroRLen\",\n\tErrSigNegativeR:                       \"ErrSigNegativeR\",\n\tErrSigTooMuchRPadding:                 \"ErrSigTooMuchRPadding\",\n\tErrSigInvalidSIntID:                   \"ErrSigInvalidSIntID\",\n\tErrSigZeroSLen:                        \"ErrSigZeroSLen\",\n\tErrSigNegativeS:                       \"ErrSigNegativeS\",\n\tErrSigTooMuchSPadding:                 \"ErrSigTooMuchSPadding\",\n\tErrSigHighS:                           \"ErrSigHighS\",\n\tErrNotPushOnly:                        \"ErrNotPushOnly\",\n\tErrSigNullDummy:                       \"ErrSigNullDummy\",\n\tErrPubKeyType:                         \"ErrPubKeyType\",\n\tErrCleanStack:                         \"ErrCleanStack\",\n\tErrNullFail:                           \"ErrNullFail\",\n\tErrDiscourageUpgradableNOPs:           \"ErrDiscourageUpgradableNOPs\",\n\tErrNegativeLockTime:                   \"ErrNegativeLockTime\",\n\tErrUnsatisfiedLockTime:                \"ErrUnsatisfiedLockTime\",\n\tErrWitnessProgramEmpty:                \"ErrWitnessProgramEmpty\",\n\tErrWitnessProgramMismatch:             \"ErrWitnessProgramMismatch\",\n\tErrWitnessProgramWrongLength:          \"ErrWitnessProgramWrongLength\",\n\tErrWitnessMalleated:                   \"ErrWitnessMalleated\",\n\tErrWitnessMalleatedP2SH:               \"ErrWitnessMalleatedP2SH\",\n\tErrWitnessUnexpected:                  \"ErrWitnessUnexpected\",\n\tErrMinimalIf:                          \"ErrMinimalIf\",\n\tErrWitnessPubKeyType:                  \"ErrWitnessPubKeyType\",\n\tErrDiscourageUpgradableWitnessProgram: \"ErrDiscourageUpgradableWitnessProgram\",\n}\n\n// String returns the ErrorCode as a human-readable name.\nfunc (e ErrorCode) String() string {\n\tif s := errorCodeStrings[e]; s != \"\" {\n\t\treturn s\n\t}\n\treturn fmt.Sprintf(\"Unknown ErrorCode (%d)\", int(e))\n}\n\n// Error identifies a script-related error.  It is used to indicate three\n// classes of errors:\n// 1) Script execution failures due to violating one of the many requirements\n//    imposed by the script engine or evaluating to false\n// 2) Improper API usage by callers\n// 3) Internal consistency check failures\n//\n// The caller can use type assertions on the returned errors to access the\n// ErrorCode field to ascertain the specific reason for the error.  As an\n// additional convenience, the caller may make use of the IsErrorCode function\n// to check for a specific error code.\ntype Error struct {\n\tErrorCode   ErrorCode\n\tDescription string\n}\n\n// Error satisfies the error interface and prints human-readable errors.\nfunc (e Error) Error() string {\n\treturn e.Description\n}\n\n// scriptError creates an Error given a set of arguments.\nfunc scriptError(c ErrorCode, desc string) Error {\n\treturn Error{ErrorCode: c, Description: desc}\n}\n\n// IsErrorCode returns whether or not the provided error is a script error with\n// the provided error code.\nfunc IsErrorCode(err error, c ErrorCode) bool {\n\tserr, ok := err.(Error)\n\treturn ok && serr.ErrorCode == c\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/txscript/hashcache.go",
    "content": "// Copyright (c) 2016 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage txscript\n\nimport (\n\t\"sync\"\n\n\t\"github.com/btcsuite/btcd/chaincfg/chainhash\"\n\t\"github.com/btcsuite/btcd/wire\"\n)\n\n// TxSigHashes houses the partial set of sighashes introduced within BIP0143.\n// This partial set of sighashes may be re-used within each input across a\n// transaction when validating all inputs. As a result, validation complexity\n// for SigHashAll can be reduced by a polynomial factor.\ntype TxSigHashes struct {\n\tHashPrevOuts chainhash.Hash\n\tHashSequence chainhash.Hash\n\tHashOutputs  chainhash.Hash\n}\n\n// NewTxSigHashes computes, and returns the cached sighashes of the given\n// transaction.\nfunc NewTxSigHashes(tx *wire.MsgTx) *TxSigHashes {\n\treturn &TxSigHashes{\n\t\tHashPrevOuts: calcHashPrevOuts(tx),\n\t\tHashSequence: calcHashSequence(tx),\n\t\tHashOutputs:  calcHashOutputs(tx),\n\t}\n}\n\n// HashCache houses a set of partial sighashes keyed by txid. The set of partial\n// sighashes are those introduced within BIP0143 by the new more efficient\n// sighash digest calculation algorithm. Using this threadsafe shared cache,\n// multiple goroutines can safely re-use the pre-computed partial sighashes\n// speeding up validation time amongst all inputs found within a block.\ntype HashCache struct {\n\tsigHashes map[chainhash.Hash]*TxSigHashes\n\n\tsync.RWMutex\n}\n\n// NewHashCache returns a new instance of the HashCache given a maximum number\n// of entries which may exist within it at anytime.\nfunc NewHashCache(maxSize uint) *HashCache {\n\treturn &HashCache{\n\t\tsigHashes: make(map[chainhash.Hash]*TxSigHashes, maxSize),\n\t}\n}\n\n// AddSigHashes computes, then adds the partial sighashes for the passed\n// transaction.\nfunc (h *HashCache) AddSigHashes(tx *wire.MsgTx) {\n\th.Lock()\n\th.sigHashes[tx.TxHash()] = NewTxSigHashes(tx)\n\th.Unlock()\n}\n\n// ContainsHashes returns true if the partial sighashes for the passed\n// transaction currently exist within the HashCache, and false otherwise.\nfunc (h *HashCache) ContainsHashes(txid *chainhash.Hash) bool {\n\th.RLock()\n\t_, found := h.sigHashes[*txid]\n\th.RUnlock()\n\n\treturn found\n}\n\n// GetSigHashes possibly returns the previously cached partial sighashes for\n// the passed transaction. This function also returns an additional boolean\n// value indicating if the sighashes for the passed transaction were found to\n// be present within the HashCache.\nfunc (h *HashCache) GetSigHashes(txid *chainhash.Hash) (*TxSigHashes, bool) {\n\th.RLock()\n\titem, found := h.sigHashes[*txid]\n\th.RUnlock()\n\n\treturn item, found\n}\n\n// PurgeSigHashes removes all partial sighashes from the HashCache belonging to\n// the passed transaction.\nfunc (h *HashCache) PurgeSigHashes(txid *chainhash.Hash) {\n\th.Lock()\n\tdelete(h.sigHashes, *txid)\n\th.Unlock()\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/txscript/log.go",
    "content": "// Copyright (c) 2013-2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage txscript\n\nimport (\n\t\"github.com/btcsuite/btclog\"\n)\n\n// log is a logger that is initialized with no output filters.  This\n// means the package will not perform any logging by default until the caller\n// requests it.\nvar log btclog.Logger\n\n// The default amount of logging is none.\nfunc init() {\n\tDisableLog()\n}\n\n// DisableLog disables all library log output.  Logging output is disabled\n// by default until UseLogger is called.\nfunc DisableLog() {\n\tlog = btclog.Disabled\n}\n\n// UseLogger uses a specified Logger to output package logging info.\nfunc UseLogger(logger btclog.Logger) {\n\tlog = logger\n}\n\n// LogClosure is a closure that can be printed with %v to be used to\n// generate expensive-to-create data for a detailed log level and avoid doing\n// the work if the data isn't printed.\ntype logClosure func() string\n\nfunc (c logClosure) String() string {\n\treturn c()\n}\n\nfunc newLogClosure(c func() string) logClosure {\n\treturn logClosure(c)\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/txscript/opcode.go",
    "content": "// Copyright (c) 2013-2017 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage txscript\n\nimport (\n\t\"bytes\"\n\t\"crypto/sha1\"\n\t\"crypto/sha256\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"hash\"\n\n\t\"golang.org/x/crypto/ripemd160\"\n\n\t\"github.com/btcsuite/btcd/btcec\"\n\t\"github.com/btcsuite/btcd/chaincfg/chainhash\"\n\t\"github.com/btcsuite/btcd/wire\"\n)\n\n// An opcode defines the information related to a txscript opcode.  opfunc, if\n// present, is the function to call to perform the opcode on the script.  The\n// current script is passed in as a slice with the first member being the opcode\n// itself.\ntype opcode struct {\n\tvalue  byte\n\tname   string\n\tlength int\n\topfunc func(*parsedOpcode, *Engine) error\n}\n\n// These constants are the values of the official opcodes used on the btc wiki,\n// in bitcoin core and in most if not all other references and software related\n// to handling BTC scripts.\nconst (\n\tOP_0                   = 0x00 // 0\n\tOP_FALSE               = 0x00 // 0 - AKA OP_0\n\tOP_DATA_1              = 0x01 // 1\n\tOP_DATA_2              = 0x02 // 2\n\tOP_DATA_3              = 0x03 // 3\n\tOP_DATA_4              = 0x04 // 4\n\tOP_DATA_5              = 0x05 // 5\n\tOP_DATA_6              = 0x06 // 6\n\tOP_DATA_7              = 0x07 // 7\n\tOP_DATA_8              = 0x08 // 8\n\tOP_DATA_9              = 0x09 // 9\n\tOP_DATA_10             = 0x0a // 10\n\tOP_DATA_11             = 0x0b // 11\n\tOP_DATA_12             = 0x0c // 12\n\tOP_DATA_13             = 0x0d // 13\n\tOP_DATA_14             = 0x0e // 14\n\tOP_DATA_15             = 0x0f // 15\n\tOP_DATA_16             = 0x10 // 16\n\tOP_DATA_17             = 0x11 // 17\n\tOP_DATA_18             = 0x12 // 18\n\tOP_DATA_19             = 0x13 // 19\n\tOP_DATA_20             = 0x14 // 20\n\tOP_DATA_21             = 0x15 // 21\n\tOP_DATA_22             = 0x16 // 22\n\tOP_DATA_23             = 0x17 // 23\n\tOP_DATA_24             = 0x18 // 24\n\tOP_DATA_25             = 0x19 // 25\n\tOP_DATA_26             = 0x1a // 26\n\tOP_DATA_27             = 0x1b // 27\n\tOP_DATA_28             = 0x1c // 28\n\tOP_DATA_29             = 0x1d // 29\n\tOP_DATA_30             = 0x1e // 30\n\tOP_DATA_31             = 0x1f // 31\n\tOP_DATA_32             = 0x20 // 32\n\tOP_DATA_33             = 0x21 // 33\n\tOP_DATA_34             = 0x22 // 34\n\tOP_DATA_35             = 0x23 // 35\n\tOP_DATA_36             = 0x24 // 36\n\tOP_DATA_37             = 0x25 // 37\n\tOP_DATA_38             = 0x26 // 38\n\tOP_DATA_39             = 0x27 // 39\n\tOP_DATA_40             = 0x28 // 40\n\tOP_DATA_41             = 0x29 // 41\n\tOP_DATA_42             = 0x2a // 42\n\tOP_DATA_43             = 0x2b // 43\n\tOP_DATA_44             = 0x2c // 44\n\tOP_DATA_45             = 0x2d // 45\n\tOP_DATA_46             = 0x2e // 46\n\tOP_DATA_47             = 0x2f // 47\n\tOP_DATA_48             = 0x30 // 48\n\tOP_DATA_49             = 0x31 // 49\n\tOP_DATA_50             = 0x32 // 50\n\tOP_DATA_51             = 0x33 // 51\n\tOP_DATA_52             = 0x34 // 52\n\tOP_DATA_53             = 0x35 // 53\n\tOP_DATA_54             = 0x36 // 54\n\tOP_DATA_55             = 0x37 // 55\n\tOP_DATA_56             = 0x38 // 56\n\tOP_DATA_57             = 0x39 // 57\n\tOP_DATA_58             = 0x3a // 58\n\tOP_DATA_59             = 0x3b // 59\n\tOP_DATA_60             = 0x3c // 60\n\tOP_DATA_61             = 0x3d // 61\n\tOP_DATA_62             = 0x3e // 62\n\tOP_DATA_63             = 0x3f // 63\n\tOP_DATA_64             = 0x40 // 64\n\tOP_DATA_65             = 0x41 // 65\n\tOP_DATA_66             = 0x42 // 66\n\tOP_DATA_67             = 0x43 // 67\n\tOP_DATA_68             = 0x44 // 68\n\tOP_DATA_69             = 0x45 // 69\n\tOP_DATA_70             = 0x46 // 70\n\tOP_DATA_71             = 0x47 // 71\n\tOP_DATA_72             = 0x48 // 72\n\tOP_DATA_73             = 0x49 // 73\n\tOP_DATA_74             = 0x4a // 74\n\tOP_DATA_75             = 0x4b // 75\n\tOP_PUSHDATA1           = 0x4c // 76\n\tOP_PUSHDATA2           = 0x4d // 77\n\tOP_PUSHDATA4           = 0x4e // 78\n\tOP_1NEGATE             = 0x4f // 79\n\tOP_RESERVED            = 0x50 // 80\n\tOP_1                   = 0x51 // 81 - AKA OP_TRUE\n\tOP_TRUE                = 0x51 // 81\n\tOP_2                   = 0x52 // 82\n\tOP_3                   = 0x53 // 83\n\tOP_4                   = 0x54 // 84\n\tOP_5                   = 0x55 // 85\n\tOP_6                   = 0x56 // 86\n\tOP_7                   = 0x57 // 87\n\tOP_8                   = 0x58 // 88\n\tOP_9                   = 0x59 // 89\n\tOP_10                  = 0x5a // 90\n\tOP_11                  = 0x5b // 91\n\tOP_12                  = 0x5c // 92\n\tOP_13                  = 0x5d // 93\n\tOP_14                  = 0x5e // 94\n\tOP_15                  = 0x5f // 95\n\tOP_16                  = 0x60 // 96\n\tOP_NOP                 = 0x61 // 97\n\tOP_VER                 = 0x62 // 98\n\tOP_IF                  = 0x63 // 99\n\tOP_NOTIF               = 0x64 // 100\n\tOP_VERIF               = 0x65 // 101\n\tOP_VERNOTIF            = 0x66 // 102\n\tOP_ELSE                = 0x67 // 103\n\tOP_ENDIF               = 0x68 // 104\n\tOP_VERIFY              = 0x69 // 105\n\tOP_RETURN              = 0x6a // 106\n\tOP_TOALTSTACK          = 0x6b // 107\n\tOP_FROMALTSTACK        = 0x6c // 108\n\tOP_2DROP               = 0x6d // 109\n\tOP_2DUP                = 0x6e // 110\n\tOP_3DUP                = 0x6f // 111\n\tOP_2OVER               = 0x70 // 112\n\tOP_2ROT                = 0x71 // 113\n\tOP_2SWAP               = 0x72 // 114\n\tOP_IFDUP               = 0x73 // 115\n\tOP_DEPTH               = 0x74 // 116\n\tOP_DROP                = 0x75 // 117\n\tOP_DUP                 = 0x76 // 118\n\tOP_NIP                 = 0x77 // 119\n\tOP_OVER                = 0x78 // 120\n\tOP_PICK                = 0x79 // 121\n\tOP_ROLL                = 0x7a // 122\n\tOP_ROT                 = 0x7b // 123\n\tOP_SWAP                = 0x7c // 124\n\tOP_TUCK                = 0x7d // 125\n\tOP_CAT                 = 0x7e // 126\n\tOP_SUBSTR              = 0x7f // 127\n\tOP_LEFT                = 0x80 // 128\n\tOP_RIGHT               = 0x81 // 129\n\tOP_SIZE                = 0x82 // 130\n\tOP_INVERT              = 0x83 // 131\n\tOP_AND                 = 0x84 // 132\n\tOP_OR                  = 0x85 // 133\n\tOP_XOR                 = 0x86 // 134\n\tOP_EQUAL               = 0x87 // 135\n\tOP_EQUALVERIFY         = 0x88 // 136\n\tOP_RESERVED1           = 0x89 // 137\n\tOP_RESERVED2           = 0x8a // 138\n\tOP_1ADD                = 0x8b // 139\n\tOP_1SUB                = 0x8c // 140\n\tOP_2MUL                = 0x8d // 141\n\tOP_2DIV                = 0x8e // 142\n\tOP_NEGATE              = 0x8f // 143\n\tOP_ABS                 = 0x90 // 144\n\tOP_NOT                 = 0x91 // 145\n\tOP_0NOTEQUAL           = 0x92 // 146\n\tOP_ADD                 = 0x93 // 147\n\tOP_SUB                 = 0x94 // 148\n\tOP_MUL                 = 0x95 // 149\n\tOP_DIV                 = 0x96 // 150\n\tOP_MOD                 = 0x97 // 151\n\tOP_LSHIFT              = 0x98 // 152\n\tOP_RSHIFT              = 0x99 // 153\n\tOP_BOOLAND             = 0x9a // 154\n\tOP_BOOLOR              = 0x9b // 155\n\tOP_NUMEQUAL            = 0x9c // 156\n\tOP_NUMEQUALVERIFY      = 0x9d // 157\n\tOP_NUMNOTEQUAL         = 0x9e // 158\n\tOP_LESSTHAN            = 0x9f // 159\n\tOP_GREATERTHAN         = 0xa0 // 160\n\tOP_LESSTHANOREQUAL     = 0xa1 // 161\n\tOP_GREATERTHANOREQUAL  = 0xa2 // 162\n\tOP_MIN                 = 0xa3 // 163\n\tOP_MAX                 = 0xa4 // 164\n\tOP_WITHIN              = 0xa5 // 165\n\tOP_RIPEMD160           = 0xa6 // 166\n\tOP_SHA1                = 0xa7 // 167\n\tOP_SHA256              = 0xa8 // 168\n\tOP_HASH160             = 0xa9 // 169\n\tOP_HASH256             = 0xaa // 170\n\tOP_CODESEPARATOR       = 0xab // 171\n\tOP_CHECKSIG            = 0xac // 172\n\tOP_CHECKSIGVERIFY      = 0xad // 173\n\tOP_CHECKMULTISIG       = 0xae // 174\n\tOP_CHECKMULTISIGVERIFY = 0xaf // 175\n\tOP_NOP1                = 0xb0 // 176\n\tOP_NOP2                = 0xb1 // 177\n\tOP_CHECKLOCKTIMEVERIFY = 0xb1 // 177 - AKA OP_NOP2\n\tOP_NOP3                = 0xb2 // 178\n\tOP_CHECKSEQUENCEVERIFY = 0xb2 // 178 - AKA OP_NOP3\n\tOP_NOP4                = 0xb3 // 179\n\tOP_NOP5                = 0xb4 // 180\n\tOP_NOP6                = 0xb5 // 181\n\tOP_NOP7                = 0xb6 // 182\n\tOP_NOP8                = 0xb7 // 183\n\tOP_NOP9                = 0xb8 // 184\n\tOP_NOP10               = 0xb9 // 185\n\tOP_UNKNOWN186          = 0xba // 186\n\tOP_UNKNOWN187          = 0xbb // 187\n\tOP_UNKNOWN188          = 0xbc // 188\n\tOP_UNKNOWN189          = 0xbd // 189\n\tOP_UNKNOWN190          = 0xbe // 190\n\tOP_UNKNOWN191          = 0xbf // 191\n\tOP_UNKNOWN192          = 0xc0 // 192\n\tOP_UNKNOWN193          = 0xc1 // 193\n\tOP_UNKNOWN194          = 0xc2 // 194\n\tOP_UNKNOWN195          = 0xc3 // 195\n\tOP_UNKNOWN196          = 0xc4 // 196\n\tOP_UNKNOWN197          = 0xc5 // 197\n\tOP_UNKNOWN198          = 0xc6 // 198\n\tOP_UNKNOWN199          = 0xc7 // 199\n\tOP_UNKNOWN200          = 0xc8 // 200\n\tOP_UNKNOWN201          = 0xc9 // 201\n\tOP_UNKNOWN202          = 0xca // 202\n\tOP_UNKNOWN203          = 0xcb // 203\n\tOP_UNKNOWN204          = 0xcc // 204\n\tOP_UNKNOWN205          = 0xcd // 205\n\tOP_UNKNOWN206          = 0xce // 206\n\tOP_UNKNOWN207          = 0xcf // 207\n\tOP_UNKNOWN208          = 0xd0 // 208\n\tOP_UNKNOWN209          = 0xd1 // 209\n\tOP_UNKNOWN210          = 0xd2 // 210\n\tOP_UNKNOWN211          = 0xd3 // 211\n\tOP_UNKNOWN212          = 0xd4 // 212\n\tOP_UNKNOWN213          = 0xd5 // 213\n\tOP_UNKNOWN214          = 0xd6 // 214\n\tOP_UNKNOWN215          = 0xd7 // 215\n\tOP_UNKNOWN216          = 0xd8 // 216\n\tOP_UNKNOWN217          = 0xd9 // 217\n\tOP_UNKNOWN218          = 0xda // 218\n\tOP_UNKNOWN219          = 0xdb // 219\n\tOP_UNKNOWN220          = 0xdc // 220\n\tOP_UNKNOWN221          = 0xdd // 221\n\tOP_UNKNOWN222          = 0xde // 222\n\tOP_UNKNOWN223          = 0xdf // 223\n\tOP_UNKNOWN224          = 0xe0 // 224\n\tOP_UNKNOWN225          = 0xe1 // 225\n\tOP_UNKNOWN226          = 0xe2 // 226\n\tOP_UNKNOWN227          = 0xe3 // 227\n\tOP_UNKNOWN228          = 0xe4 // 228\n\tOP_UNKNOWN229          = 0xe5 // 229\n\tOP_UNKNOWN230          = 0xe6 // 230\n\tOP_UNKNOWN231          = 0xe7 // 231\n\tOP_UNKNOWN232          = 0xe8 // 232\n\tOP_UNKNOWN233          = 0xe9 // 233\n\tOP_UNKNOWN234          = 0xea // 234\n\tOP_UNKNOWN235          = 0xeb // 235\n\tOP_UNKNOWN236          = 0xec // 236\n\tOP_UNKNOWN237          = 0xed // 237\n\tOP_UNKNOWN238          = 0xee // 238\n\tOP_UNKNOWN239          = 0xef // 239\n\tOP_UNKNOWN240          = 0xf0 // 240\n\tOP_UNKNOWN241          = 0xf1 // 241\n\tOP_UNKNOWN242          = 0xf2 // 242\n\tOP_UNKNOWN243          = 0xf3 // 243\n\tOP_UNKNOWN244          = 0xf4 // 244\n\tOP_UNKNOWN245          = 0xf5 // 245\n\tOP_UNKNOWN246          = 0xf6 // 246\n\tOP_UNKNOWN247          = 0xf7 // 247\n\tOP_UNKNOWN248          = 0xf8 // 248\n\tOP_UNKNOWN249          = 0xf9 // 249\n\tOP_SMALLINTEGER        = 0xfa // 250 - bitcoin core internal\n\tOP_PUBKEYS             = 0xfb // 251 - bitcoin core internal\n\tOP_UNKNOWN252          = 0xfc // 252\n\tOP_PUBKEYHASH          = 0xfd // 253 - bitcoin core internal\n\tOP_PUBKEY              = 0xfe // 254 - bitcoin core internal\n\tOP_INVALIDOPCODE       = 0xff // 255 - bitcoin core internal\n)\n\n// Conditional execution constants.\nconst (\n\tOpCondFalse = 0\n\tOpCondTrue  = 1\n\tOpCondSkip  = 2\n)\n\n// opcodeArray holds details about all possible opcodes such as how many bytes\n// the opcode and any associated data should take, its human-readable name, and\n// the handler function.\nvar opcodeArray = [256]opcode{\n\t// Data push opcodes.\n\tOP_FALSE:     {OP_FALSE, \"OP_0\", 1, opcodeFalse},\n\tOP_DATA_1:    {OP_DATA_1, \"OP_DATA_1\", 2, opcodePushData},\n\tOP_DATA_2:    {OP_DATA_2, \"OP_DATA_2\", 3, opcodePushData},\n\tOP_DATA_3:    {OP_DATA_3, \"OP_DATA_3\", 4, opcodePushData},\n\tOP_DATA_4:    {OP_DATA_4, \"OP_DATA_4\", 5, opcodePushData},\n\tOP_DATA_5:    {OP_DATA_5, \"OP_DATA_5\", 6, opcodePushData},\n\tOP_DATA_6:    {OP_DATA_6, \"OP_DATA_6\", 7, opcodePushData},\n\tOP_DATA_7:    {OP_DATA_7, \"OP_DATA_7\", 8, opcodePushData},\n\tOP_DATA_8:    {OP_DATA_8, \"OP_DATA_8\", 9, opcodePushData},\n\tOP_DATA_9:    {OP_DATA_9, \"OP_DATA_9\", 10, opcodePushData},\n\tOP_DATA_10:   {OP_DATA_10, \"OP_DATA_10\", 11, opcodePushData},\n\tOP_DATA_11:   {OP_DATA_11, \"OP_DATA_11\", 12, opcodePushData},\n\tOP_DATA_12:   {OP_DATA_12, \"OP_DATA_12\", 13, opcodePushData},\n\tOP_DATA_13:   {OP_DATA_13, \"OP_DATA_13\", 14, opcodePushData},\n\tOP_DATA_14:   {OP_DATA_14, \"OP_DATA_14\", 15, opcodePushData},\n\tOP_DATA_15:   {OP_DATA_15, \"OP_DATA_15\", 16, opcodePushData},\n\tOP_DATA_16:   {OP_DATA_16, \"OP_DATA_16\", 17, opcodePushData},\n\tOP_DATA_17:   {OP_DATA_17, \"OP_DATA_17\", 18, opcodePushData},\n\tOP_DATA_18:   {OP_DATA_18, \"OP_DATA_18\", 19, opcodePushData},\n\tOP_DATA_19:   {OP_DATA_19, \"OP_DATA_19\", 20, opcodePushData},\n\tOP_DATA_20:   {OP_DATA_20, \"OP_DATA_20\", 21, opcodePushData},\n\tOP_DATA_21:   {OP_DATA_21, \"OP_DATA_21\", 22, opcodePushData},\n\tOP_DATA_22:   {OP_DATA_22, \"OP_DATA_22\", 23, opcodePushData},\n\tOP_DATA_23:   {OP_DATA_23, \"OP_DATA_23\", 24, opcodePushData},\n\tOP_DATA_24:   {OP_DATA_24, \"OP_DATA_24\", 25, opcodePushData},\n\tOP_DATA_25:   {OP_DATA_25, \"OP_DATA_25\", 26, opcodePushData},\n\tOP_DATA_26:   {OP_DATA_26, \"OP_DATA_26\", 27, opcodePushData},\n\tOP_DATA_27:   {OP_DATA_27, \"OP_DATA_27\", 28, opcodePushData},\n\tOP_DATA_28:   {OP_DATA_28, \"OP_DATA_28\", 29, opcodePushData},\n\tOP_DATA_29:   {OP_DATA_29, \"OP_DATA_29\", 30, opcodePushData},\n\tOP_DATA_30:   {OP_DATA_30, \"OP_DATA_30\", 31, opcodePushData},\n\tOP_DATA_31:   {OP_DATA_31, \"OP_DATA_31\", 32, opcodePushData},\n\tOP_DATA_32:   {OP_DATA_32, \"OP_DATA_32\", 33, opcodePushData},\n\tOP_DATA_33:   {OP_DATA_33, \"OP_DATA_33\", 34, opcodePushData},\n\tOP_DATA_34:   {OP_DATA_34, \"OP_DATA_34\", 35, opcodePushData},\n\tOP_DATA_35:   {OP_DATA_35, \"OP_DATA_35\", 36, opcodePushData},\n\tOP_DATA_36:   {OP_DATA_36, \"OP_DATA_36\", 37, opcodePushData},\n\tOP_DATA_37:   {OP_DATA_37, \"OP_DATA_37\", 38, opcodePushData},\n\tOP_DATA_38:   {OP_DATA_38, \"OP_DATA_38\", 39, opcodePushData},\n\tOP_DATA_39:   {OP_DATA_39, \"OP_DATA_39\", 40, opcodePushData},\n\tOP_DATA_40:   {OP_DATA_40, \"OP_DATA_40\", 41, opcodePushData},\n\tOP_DATA_41:   {OP_DATA_41, \"OP_DATA_41\", 42, opcodePushData},\n\tOP_DATA_42:   {OP_DATA_42, \"OP_DATA_42\", 43, opcodePushData},\n\tOP_DATA_43:   {OP_DATA_43, \"OP_DATA_43\", 44, opcodePushData},\n\tOP_DATA_44:   {OP_DATA_44, \"OP_DATA_44\", 45, opcodePushData},\n\tOP_DATA_45:   {OP_DATA_45, \"OP_DATA_45\", 46, opcodePushData},\n\tOP_DATA_46:   {OP_DATA_46, \"OP_DATA_46\", 47, opcodePushData},\n\tOP_DATA_47:   {OP_DATA_47, \"OP_DATA_47\", 48, opcodePushData},\n\tOP_DATA_48:   {OP_DATA_48, \"OP_DATA_48\", 49, opcodePushData},\n\tOP_DATA_49:   {OP_DATA_49, \"OP_DATA_49\", 50, opcodePushData},\n\tOP_DATA_50:   {OP_DATA_50, \"OP_DATA_50\", 51, opcodePushData},\n\tOP_DATA_51:   {OP_DATA_51, \"OP_DATA_51\", 52, opcodePushData},\n\tOP_DATA_52:   {OP_DATA_52, \"OP_DATA_52\", 53, opcodePushData},\n\tOP_DATA_53:   {OP_DATA_53, \"OP_DATA_53\", 54, opcodePushData},\n\tOP_DATA_54:   {OP_DATA_54, \"OP_DATA_54\", 55, opcodePushData},\n\tOP_DATA_55:   {OP_DATA_55, \"OP_DATA_55\", 56, opcodePushData},\n\tOP_DATA_56:   {OP_DATA_56, \"OP_DATA_56\", 57, opcodePushData},\n\tOP_DATA_57:   {OP_DATA_57, \"OP_DATA_57\", 58, opcodePushData},\n\tOP_DATA_58:   {OP_DATA_58, \"OP_DATA_58\", 59, opcodePushData},\n\tOP_DATA_59:   {OP_DATA_59, \"OP_DATA_59\", 60, opcodePushData},\n\tOP_DATA_60:   {OP_DATA_60, \"OP_DATA_60\", 61, opcodePushData},\n\tOP_DATA_61:   {OP_DATA_61, \"OP_DATA_61\", 62, opcodePushData},\n\tOP_DATA_62:   {OP_DATA_62, \"OP_DATA_62\", 63, opcodePushData},\n\tOP_DATA_63:   {OP_DATA_63, \"OP_DATA_63\", 64, opcodePushData},\n\tOP_DATA_64:   {OP_DATA_64, \"OP_DATA_64\", 65, opcodePushData},\n\tOP_DATA_65:   {OP_DATA_65, \"OP_DATA_65\", 66, opcodePushData},\n\tOP_DATA_66:   {OP_DATA_66, \"OP_DATA_66\", 67, opcodePushData},\n\tOP_DATA_67:   {OP_DATA_67, \"OP_DATA_67\", 68, opcodePushData},\n\tOP_DATA_68:   {OP_DATA_68, \"OP_DATA_68\", 69, opcodePushData},\n\tOP_DATA_69:   {OP_DATA_69, \"OP_DATA_69\", 70, opcodePushData},\n\tOP_DATA_70:   {OP_DATA_70, \"OP_DATA_70\", 71, opcodePushData},\n\tOP_DATA_71:   {OP_DATA_71, \"OP_DATA_71\", 72, opcodePushData},\n\tOP_DATA_72:   {OP_DATA_72, \"OP_DATA_72\", 73, opcodePushData},\n\tOP_DATA_73:   {OP_DATA_73, \"OP_DATA_73\", 74, opcodePushData},\n\tOP_DATA_74:   {OP_DATA_74, \"OP_DATA_74\", 75, opcodePushData},\n\tOP_DATA_75:   {OP_DATA_75, \"OP_DATA_75\", 76, opcodePushData},\n\tOP_PUSHDATA1: {OP_PUSHDATA1, \"OP_PUSHDATA1\", -1, opcodePushData},\n\tOP_PUSHDATA2: {OP_PUSHDATA2, \"OP_PUSHDATA2\", -2, opcodePushData},\n\tOP_PUSHDATA4: {OP_PUSHDATA4, \"OP_PUSHDATA4\", -4, opcodePushData},\n\tOP_1NEGATE:   {OP_1NEGATE, \"OP_1NEGATE\", 1, opcode1Negate},\n\tOP_RESERVED:  {OP_RESERVED, \"OP_RESERVED\", 1, opcodeReserved},\n\tOP_TRUE:      {OP_TRUE, \"OP_1\", 1, opcodeN},\n\tOP_2:         {OP_2, \"OP_2\", 1, opcodeN},\n\tOP_3:         {OP_3, \"OP_3\", 1, opcodeN},\n\tOP_4:         {OP_4, \"OP_4\", 1, opcodeN},\n\tOP_5:         {OP_5, \"OP_5\", 1, opcodeN},\n\tOP_6:         {OP_6, \"OP_6\", 1, opcodeN},\n\tOP_7:         {OP_7, \"OP_7\", 1, opcodeN},\n\tOP_8:         {OP_8, \"OP_8\", 1, opcodeN},\n\tOP_9:         {OP_9, \"OP_9\", 1, opcodeN},\n\tOP_10:        {OP_10, \"OP_10\", 1, opcodeN},\n\tOP_11:        {OP_11, \"OP_11\", 1, opcodeN},\n\tOP_12:        {OP_12, \"OP_12\", 1, opcodeN},\n\tOP_13:        {OP_13, \"OP_13\", 1, opcodeN},\n\tOP_14:        {OP_14, \"OP_14\", 1, opcodeN},\n\tOP_15:        {OP_15, \"OP_15\", 1, opcodeN},\n\tOP_16:        {OP_16, \"OP_16\", 1, opcodeN},\n\n\t// Control opcodes.\n\tOP_NOP:                 {OP_NOP, \"OP_NOP\", 1, opcodeNop},\n\tOP_VER:                 {OP_VER, \"OP_VER\", 1, opcodeReserved},\n\tOP_IF:                  {OP_IF, \"OP_IF\", 1, opcodeIf},\n\tOP_NOTIF:               {OP_NOTIF, \"OP_NOTIF\", 1, opcodeNotIf},\n\tOP_VERIF:               {OP_VERIF, \"OP_VERIF\", 1, opcodeReserved},\n\tOP_VERNOTIF:            {OP_VERNOTIF, \"OP_VERNOTIF\", 1, opcodeReserved},\n\tOP_ELSE:                {OP_ELSE, \"OP_ELSE\", 1, opcodeElse},\n\tOP_ENDIF:               {OP_ENDIF, \"OP_ENDIF\", 1, opcodeEndif},\n\tOP_VERIFY:              {OP_VERIFY, \"OP_VERIFY\", 1, opcodeVerify},\n\tOP_RETURN:              {OP_RETURN, \"OP_RETURN\", 1, opcodeReturn},\n\tOP_CHECKLOCKTIMEVERIFY: {OP_CHECKLOCKTIMEVERIFY, \"OP_CHECKLOCKTIMEVERIFY\", 1, opcodeCheckLockTimeVerify},\n\tOP_CHECKSEQUENCEVERIFY: {OP_CHECKSEQUENCEVERIFY, \"OP_CHECKSEQUENCEVERIFY\", 1, opcodeCheckSequenceVerify},\n\n\t// Stack opcodes.\n\tOP_TOALTSTACK:   {OP_TOALTSTACK, \"OP_TOALTSTACK\", 1, opcodeToAltStack},\n\tOP_FROMALTSTACK: {OP_FROMALTSTACK, \"OP_FROMALTSTACK\", 1, opcodeFromAltStack},\n\tOP_2DROP:        {OP_2DROP, \"OP_2DROP\", 1, opcode2Drop},\n\tOP_2DUP:         {OP_2DUP, \"OP_2DUP\", 1, opcode2Dup},\n\tOP_3DUP:         {OP_3DUP, \"OP_3DUP\", 1, opcode3Dup},\n\tOP_2OVER:        {OP_2OVER, \"OP_2OVER\", 1, opcode2Over},\n\tOP_2ROT:         {OP_2ROT, \"OP_2ROT\", 1, opcode2Rot},\n\tOP_2SWAP:        {OP_2SWAP, \"OP_2SWAP\", 1, opcode2Swap},\n\tOP_IFDUP:        {OP_IFDUP, \"OP_IFDUP\", 1, opcodeIfDup},\n\tOP_DEPTH:        {OP_DEPTH, \"OP_DEPTH\", 1, opcodeDepth},\n\tOP_DROP:         {OP_DROP, \"OP_DROP\", 1, opcodeDrop},\n\tOP_DUP:          {OP_DUP, \"OP_DUP\", 1, opcodeDup},\n\tOP_NIP:          {OP_NIP, \"OP_NIP\", 1, opcodeNip},\n\tOP_OVER:         {OP_OVER, \"OP_OVER\", 1, opcodeOver},\n\tOP_PICK:         {OP_PICK, \"OP_PICK\", 1, opcodePick},\n\tOP_ROLL:         {OP_ROLL, \"OP_ROLL\", 1, opcodeRoll},\n\tOP_ROT:          {OP_ROT, \"OP_ROT\", 1, opcodeRot},\n\tOP_SWAP:         {OP_SWAP, \"OP_SWAP\", 1, opcodeSwap},\n\tOP_TUCK:         {OP_TUCK, \"OP_TUCK\", 1, opcodeTuck},\n\n\t// Splice opcodes.\n\tOP_CAT:    {OP_CAT, \"OP_CAT\", 1, opcodeDisabled},\n\tOP_SUBSTR: {OP_SUBSTR, \"OP_SUBSTR\", 1, opcodeDisabled},\n\tOP_LEFT:   {OP_LEFT, \"OP_LEFT\", 1, opcodeDisabled},\n\tOP_RIGHT:  {OP_RIGHT, \"OP_RIGHT\", 1, opcodeDisabled},\n\tOP_SIZE:   {OP_SIZE, \"OP_SIZE\", 1, opcodeSize},\n\n\t// Bitwise logic opcodes.\n\tOP_INVERT:      {OP_INVERT, \"OP_INVERT\", 1, opcodeDisabled},\n\tOP_AND:         {OP_AND, \"OP_AND\", 1, opcodeDisabled},\n\tOP_OR:          {OP_OR, \"OP_OR\", 1, opcodeDisabled},\n\tOP_XOR:         {OP_XOR, \"OP_XOR\", 1, opcodeDisabled},\n\tOP_EQUAL:       {OP_EQUAL, \"OP_EQUAL\", 1, opcodeEqual},\n\tOP_EQUALVERIFY: {OP_EQUALVERIFY, \"OP_EQUALVERIFY\", 1, opcodeEqualVerify},\n\tOP_RESERVED1:   {OP_RESERVED1, \"OP_RESERVED1\", 1, opcodeReserved},\n\tOP_RESERVED2:   {OP_RESERVED2, \"OP_RESERVED2\", 1, opcodeReserved},\n\n\t// Numeric related opcodes.\n\tOP_1ADD:               {OP_1ADD, \"OP_1ADD\", 1, opcode1Add},\n\tOP_1SUB:               {OP_1SUB, \"OP_1SUB\", 1, opcode1Sub},\n\tOP_2MUL:               {OP_2MUL, \"OP_2MUL\", 1, opcodeDisabled},\n\tOP_2DIV:               {OP_2DIV, \"OP_2DIV\", 1, opcodeDisabled},\n\tOP_NEGATE:             {OP_NEGATE, \"OP_NEGATE\", 1, opcodeNegate},\n\tOP_ABS:                {OP_ABS, \"OP_ABS\", 1, opcodeAbs},\n\tOP_NOT:                {OP_NOT, \"OP_NOT\", 1, opcodeNot},\n\tOP_0NOTEQUAL:          {OP_0NOTEQUAL, \"OP_0NOTEQUAL\", 1, opcode0NotEqual},\n\tOP_ADD:                {OP_ADD, \"OP_ADD\", 1, opcodeAdd},\n\tOP_SUB:                {OP_SUB, \"OP_SUB\", 1, opcodeSub},\n\tOP_MUL:                {OP_MUL, \"OP_MUL\", 1, opcodeDisabled},\n\tOP_DIV:                {OP_DIV, \"OP_DIV\", 1, opcodeDisabled},\n\tOP_MOD:                {OP_MOD, \"OP_MOD\", 1, opcodeDisabled},\n\tOP_LSHIFT:             {OP_LSHIFT, \"OP_LSHIFT\", 1, opcodeDisabled},\n\tOP_RSHIFT:             {OP_RSHIFT, \"OP_RSHIFT\", 1, opcodeDisabled},\n\tOP_BOOLAND:            {OP_BOOLAND, \"OP_BOOLAND\", 1, opcodeBoolAnd},\n\tOP_BOOLOR:             {OP_BOOLOR, \"OP_BOOLOR\", 1, opcodeBoolOr},\n\tOP_NUMEQUAL:           {OP_NUMEQUAL, \"OP_NUMEQUAL\", 1, opcodeNumEqual},\n\tOP_NUMEQUALVERIFY:     {OP_NUMEQUALVERIFY, \"OP_NUMEQUALVERIFY\", 1, opcodeNumEqualVerify},\n\tOP_NUMNOTEQUAL:        {OP_NUMNOTEQUAL, \"OP_NUMNOTEQUAL\", 1, opcodeNumNotEqual},\n\tOP_LESSTHAN:           {OP_LESSTHAN, \"OP_LESSTHAN\", 1, opcodeLessThan},\n\tOP_GREATERTHAN:        {OP_GREATERTHAN, \"OP_GREATERTHAN\", 1, opcodeGreaterThan},\n\tOP_LESSTHANOREQUAL:    {OP_LESSTHANOREQUAL, \"OP_LESSTHANOREQUAL\", 1, opcodeLessThanOrEqual},\n\tOP_GREATERTHANOREQUAL: {OP_GREATERTHANOREQUAL, \"OP_GREATERTHANOREQUAL\", 1, opcodeGreaterThanOrEqual},\n\tOP_MIN:                {OP_MIN, \"OP_MIN\", 1, opcodeMin},\n\tOP_MAX:                {OP_MAX, \"OP_MAX\", 1, opcodeMax},\n\tOP_WITHIN:             {OP_WITHIN, \"OP_WITHIN\", 1, opcodeWithin},\n\n\t// Crypto opcodes.\n\tOP_RIPEMD160:           {OP_RIPEMD160, \"OP_RIPEMD160\", 1, opcodeRipemd160},\n\tOP_SHA1:                {OP_SHA1, \"OP_SHA1\", 1, opcodeSha1},\n\tOP_SHA256:              {OP_SHA256, \"OP_SHA256\", 1, opcodeSha256},\n\tOP_HASH160:             {OP_HASH160, \"OP_HASH160\", 1, opcodeHash160},\n\tOP_HASH256:             {OP_HASH256, \"OP_HASH256\", 1, opcodeHash256},\n\tOP_CODESEPARATOR:       {OP_CODESEPARATOR, \"OP_CODESEPARATOR\", 1, opcodeCodeSeparator},\n\tOP_CHECKSIG:            {OP_CHECKSIG, \"OP_CHECKSIG\", 1, opcodeCheckSig},\n\tOP_CHECKSIGVERIFY:      {OP_CHECKSIGVERIFY, \"OP_CHECKSIGVERIFY\", 1, opcodeCheckSigVerify},\n\tOP_CHECKMULTISIG:       {OP_CHECKMULTISIG, \"OP_CHECKMULTISIG\", 1, opcodeCheckMultiSig},\n\tOP_CHECKMULTISIGVERIFY: {OP_CHECKMULTISIGVERIFY, \"OP_CHECKMULTISIGVERIFY\", 1, opcodeCheckMultiSigVerify},\n\n\t// Reserved opcodes.\n\tOP_NOP1:  {OP_NOP1, \"OP_NOP1\", 1, opcodeNop},\n\tOP_NOP4:  {OP_NOP4, \"OP_NOP4\", 1, opcodeNop},\n\tOP_NOP5:  {OP_NOP5, \"OP_NOP5\", 1, opcodeNop},\n\tOP_NOP6:  {OP_NOP6, \"OP_NOP6\", 1, opcodeNop},\n\tOP_NOP7:  {OP_NOP7, \"OP_NOP7\", 1, opcodeNop},\n\tOP_NOP8:  {OP_NOP8, \"OP_NOP8\", 1, opcodeNop},\n\tOP_NOP9:  {OP_NOP9, \"OP_NOP9\", 1, opcodeNop},\n\tOP_NOP10: {OP_NOP10, \"OP_NOP10\", 1, opcodeNop},\n\n\t// Undefined opcodes.\n\tOP_UNKNOWN186: {OP_UNKNOWN186, \"OP_UNKNOWN186\", 1, opcodeInvalid},\n\tOP_UNKNOWN187: {OP_UNKNOWN187, \"OP_UNKNOWN187\", 1, opcodeInvalid},\n\tOP_UNKNOWN188: {OP_UNKNOWN188, \"OP_UNKNOWN188\", 1, opcodeInvalid},\n\tOP_UNKNOWN189: {OP_UNKNOWN189, \"OP_UNKNOWN189\", 1, opcodeInvalid},\n\tOP_UNKNOWN190: {OP_UNKNOWN190, \"OP_UNKNOWN190\", 1, opcodeInvalid},\n\tOP_UNKNOWN191: {OP_UNKNOWN191, \"OP_UNKNOWN191\", 1, opcodeInvalid},\n\tOP_UNKNOWN192: {OP_UNKNOWN192, \"OP_UNKNOWN192\", 1, opcodeInvalid},\n\tOP_UNKNOWN193: {OP_UNKNOWN193, \"OP_UNKNOWN193\", 1, opcodeInvalid},\n\tOP_UNKNOWN194: {OP_UNKNOWN194, \"OP_UNKNOWN194\", 1, opcodeInvalid},\n\tOP_UNKNOWN195: {OP_UNKNOWN195, \"OP_UNKNOWN195\", 1, opcodeInvalid},\n\tOP_UNKNOWN196: {OP_UNKNOWN196, \"OP_UNKNOWN196\", 1, opcodeInvalid},\n\tOP_UNKNOWN197: {OP_UNKNOWN197, \"OP_UNKNOWN197\", 1, opcodeInvalid},\n\tOP_UNKNOWN198: {OP_UNKNOWN198, \"OP_UNKNOWN198\", 1, opcodeInvalid},\n\tOP_UNKNOWN199: {OP_UNKNOWN199, \"OP_UNKNOWN199\", 1, opcodeInvalid},\n\tOP_UNKNOWN200: {OP_UNKNOWN200, \"OP_UNKNOWN200\", 1, opcodeInvalid},\n\tOP_UNKNOWN201: {OP_UNKNOWN201, \"OP_UNKNOWN201\", 1, opcodeInvalid},\n\tOP_UNKNOWN202: {OP_UNKNOWN202, \"OP_UNKNOWN202\", 1, opcodeInvalid},\n\tOP_UNKNOWN203: {OP_UNKNOWN203, \"OP_UNKNOWN203\", 1, opcodeInvalid},\n\tOP_UNKNOWN204: {OP_UNKNOWN204, \"OP_UNKNOWN204\", 1, opcodeInvalid},\n\tOP_UNKNOWN205: {OP_UNKNOWN205, \"OP_UNKNOWN205\", 1, opcodeInvalid},\n\tOP_UNKNOWN206: {OP_UNKNOWN206, \"OP_UNKNOWN206\", 1, opcodeInvalid},\n\tOP_UNKNOWN207: {OP_UNKNOWN207, \"OP_UNKNOWN207\", 1, opcodeInvalid},\n\tOP_UNKNOWN208: {OP_UNKNOWN208, \"OP_UNKNOWN208\", 1, opcodeInvalid},\n\tOP_UNKNOWN209: {OP_UNKNOWN209, \"OP_UNKNOWN209\", 1, opcodeInvalid},\n\tOP_UNKNOWN210: {OP_UNKNOWN210, \"OP_UNKNOWN210\", 1, opcodeInvalid},\n\tOP_UNKNOWN211: {OP_UNKNOWN211, \"OP_UNKNOWN211\", 1, opcodeInvalid},\n\tOP_UNKNOWN212: {OP_UNKNOWN212, \"OP_UNKNOWN212\", 1, opcodeInvalid},\n\tOP_UNKNOWN213: {OP_UNKNOWN213, \"OP_UNKNOWN213\", 1, opcodeInvalid},\n\tOP_UNKNOWN214: {OP_UNKNOWN214, \"OP_UNKNOWN214\", 1, opcodeInvalid},\n\tOP_UNKNOWN215: {OP_UNKNOWN215, \"OP_UNKNOWN215\", 1, opcodeInvalid},\n\tOP_UNKNOWN216: {OP_UNKNOWN216, \"OP_UNKNOWN216\", 1, opcodeInvalid},\n\tOP_UNKNOWN217: {OP_UNKNOWN217, \"OP_UNKNOWN217\", 1, opcodeInvalid},\n\tOP_UNKNOWN218: {OP_UNKNOWN218, \"OP_UNKNOWN218\", 1, opcodeInvalid},\n\tOP_UNKNOWN219: {OP_UNKNOWN219, \"OP_UNKNOWN219\", 1, opcodeInvalid},\n\tOP_UNKNOWN220: {OP_UNKNOWN220, \"OP_UNKNOWN220\", 1, opcodeInvalid},\n\tOP_UNKNOWN221: {OP_UNKNOWN221, \"OP_UNKNOWN221\", 1, opcodeInvalid},\n\tOP_UNKNOWN222: {OP_UNKNOWN222, \"OP_UNKNOWN222\", 1, opcodeInvalid},\n\tOP_UNKNOWN223: {OP_UNKNOWN223, \"OP_UNKNOWN223\", 1, opcodeInvalid},\n\tOP_UNKNOWN224: {OP_UNKNOWN224, \"OP_UNKNOWN224\", 1, opcodeInvalid},\n\tOP_UNKNOWN225: {OP_UNKNOWN225, \"OP_UNKNOWN225\", 1, opcodeInvalid},\n\tOP_UNKNOWN226: {OP_UNKNOWN226, \"OP_UNKNOWN226\", 1, opcodeInvalid},\n\tOP_UNKNOWN227: {OP_UNKNOWN227, \"OP_UNKNOWN227\", 1, opcodeInvalid},\n\tOP_UNKNOWN228: {OP_UNKNOWN228, \"OP_UNKNOWN228\", 1, opcodeInvalid},\n\tOP_UNKNOWN229: {OP_UNKNOWN229, \"OP_UNKNOWN229\", 1, opcodeInvalid},\n\tOP_UNKNOWN230: {OP_UNKNOWN230, \"OP_UNKNOWN230\", 1, opcodeInvalid},\n\tOP_UNKNOWN231: {OP_UNKNOWN231, \"OP_UNKNOWN231\", 1, opcodeInvalid},\n\tOP_UNKNOWN232: {OP_UNKNOWN232, \"OP_UNKNOWN232\", 1, opcodeInvalid},\n\tOP_UNKNOWN233: {OP_UNKNOWN233, \"OP_UNKNOWN233\", 1, opcodeInvalid},\n\tOP_UNKNOWN234: {OP_UNKNOWN234, \"OP_UNKNOWN234\", 1, opcodeInvalid},\n\tOP_UNKNOWN235: {OP_UNKNOWN235, \"OP_UNKNOWN235\", 1, opcodeInvalid},\n\tOP_UNKNOWN236: {OP_UNKNOWN236, \"OP_UNKNOWN236\", 1, opcodeInvalid},\n\tOP_UNKNOWN237: {OP_UNKNOWN237, \"OP_UNKNOWN237\", 1, opcodeInvalid},\n\tOP_UNKNOWN238: {OP_UNKNOWN238, \"OP_UNKNOWN238\", 1, opcodeInvalid},\n\tOP_UNKNOWN239: {OP_UNKNOWN239, \"OP_UNKNOWN239\", 1, opcodeInvalid},\n\tOP_UNKNOWN240: {OP_UNKNOWN240, \"OP_UNKNOWN240\", 1, opcodeInvalid},\n\tOP_UNKNOWN241: {OP_UNKNOWN241, \"OP_UNKNOWN241\", 1, opcodeInvalid},\n\tOP_UNKNOWN242: {OP_UNKNOWN242, \"OP_UNKNOWN242\", 1, opcodeInvalid},\n\tOP_UNKNOWN243: {OP_UNKNOWN243, \"OP_UNKNOWN243\", 1, opcodeInvalid},\n\tOP_UNKNOWN244: {OP_UNKNOWN244, \"OP_UNKNOWN244\", 1, opcodeInvalid},\n\tOP_UNKNOWN245: {OP_UNKNOWN245, \"OP_UNKNOWN245\", 1, opcodeInvalid},\n\tOP_UNKNOWN246: {OP_UNKNOWN246, \"OP_UNKNOWN246\", 1, opcodeInvalid},\n\tOP_UNKNOWN247: {OP_UNKNOWN247, \"OP_UNKNOWN247\", 1, opcodeInvalid},\n\tOP_UNKNOWN248: {OP_UNKNOWN248, \"OP_UNKNOWN248\", 1, opcodeInvalid},\n\tOP_UNKNOWN249: {OP_UNKNOWN249, \"OP_UNKNOWN249\", 1, opcodeInvalid},\n\n\t// Bitcoin Core internal use opcode.  Defined here for completeness.\n\tOP_SMALLINTEGER: {OP_SMALLINTEGER, \"OP_SMALLINTEGER\", 1, opcodeInvalid},\n\tOP_PUBKEYS:      {OP_PUBKEYS, \"OP_PUBKEYS\", 1, opcodeInvalid},\n\tOP_UNKNOWN252:   {OP_UNKNOWN252, \"OP_UNKNOWN252\", 1, opcodeInvalid},\n\tOP_PUBKEYHASH:   {OP_PUBKEYHASH, \"OP_PUBKEYHASH\", 1, opcodeInvalid},\n\tOP_PUBKEY:       {OP_PUBKEY, \"OP_PUBKEY\", 1, opcodeInvalid},\n\n\tOP_INVALIDOPCODE: {OP_INVALIDOPCODE, \"OP_INVALIDOPCODE\", 1, opcodeInvalid},\n}\n\n// opcodeOnelineRepls defines opcode names which are replaced when doing a\n// one-line disassembly.  This is done to match the output of the reference\n// implementation while not changing the opcode names in the nicer full\n// disassembly.\nvar opcodeOnelineRepls = map[string]string{\n\t\"OP_1NEGATE\": \"-1\",\n\t\"OP_0\":       \"0\",\n\t\"OP_1\":       \"1\",\n\t\"OP_2\":       \"2\",\n\t\"OP_3\":       \"3\",\n\t\"OP_4\":       \"4\",\n\t\"OP_5\":       \"5\",\n\t\"OP_6\":       \"6\",\n\t\"OP_7\":       \"7\",\n\t\"OP_8\":       \"8\",\n\t\"OP_9\":       \"9\",\n\t\"OP_10\":      \"10\",\n\t\"OP_11\":      \"11\",\n\t\"OP_12\":      \"12\",\n\t\"OP_13\":      \"13\",\n\t\"OP_14\":      \"14\",\n\t\"OP_15\":      \"15\",\n\t\"OP_16\":      \"16\",\n}\n\n// parsedOpcode represents an opcode that has been parsed and includes any\n// potential data associated with it.\ntype parsedOpcode struct {\n\topcode *opcode\n\tdata   []byte\n}\n\n// isDisabled returns whether or not the opcode is disabled and thus is always\n// bad to see in the instruction stream (even if turned off by a conditional).\nfunc (pop *parsedOpcode) isDisabled() bool {\n\tswitch pop.opcode.value {\n\tcase OP_CAT:\n\t\treturn true\n\tcase OP_SUBSTR:\n\t\treturn true\n\tcase OP_LEFT:\n\t\treturn true\n\tcase OP_RIGHT:\n\t\treturn true\n\tcase OP_INVERT:\n\t\treturn true\n\tcase OP_AND:\n\t\treturn true\n\tcase OP_OR:\n\t\treturn true\n\tcase OP_XOR:\n\t\treturn true\n\tcase OP_2MUL:\n\t\treturn true\n\tcase OP_2DIV:\n\t\treturn true\n\tcase OP_MUL:\n\t\treturn true\n\tcase OP_DIV:\n\t\treturn true\n\tcase OP_MOD:\n\t\treturn true\n\tcase OP_LSHIFT:\n\t\treturn true\n\tcase OP_RSHIFT:\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\n// alwaysIllegal returns whether or not the opcode is always illegal when passed\n// over by the program counter even if in a non-executed branch (it isn't a\n// coincidence that they are conditionals).\nfunc (pop *parsedOpcode) alwaysIllegal() bool {\n\tswitch pop.opcode.value {\n\tcase OP_VERIF:\n\t\treturn true\n\tcase OP_VERNOTIF:\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\n// isConditional returns whether or not the opcode is a conditional opcode which\n// changes the conditional execution stack when executed.\nfunc (pop *parsedOpcode) isConditional() bool {\n\tswitch pop.opcode.value {\n\tcase OP_IF:\n\t\treturn true\n\tcase OP_NOTIF:\n\t\treturn true\n\tcase OP_ELSE:\n\t\treturn true\n\tcase OP_ENDIF:\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\n// checkMinimalDataPush returns whether or not the current data push uses the\n// smallest possible opcode to represent it.  For example, the value 15 could\n// be pushed with OP_DATA_1 15 (among other variations); however, OP_15 is a\n// single opcode that represents the same value and is only a single byte versus\n// two bytes.\nfunc (pop *parsedOpcode) checkMinimalDataPush() error {\n\tdata := pop.data\n\tdataLen := len(data)\n\topcode := pop.opcode.value\n\n\tif dataLen == 0 && opcode != OP_0 {\n\t\tstr := fmt.Sprintf(\"zero length data push is encoded with \"+\n\t\t\t\"opcode %s instead of OP_0\", pop.opcode.name)\n\t\treturn scriptError(ErrMinimalData, str)\n\t} else if dataLen == 1 && data[0] >= 1 && data[0] <= 16 {\n\t\tif opcode != OP_1+data[0]-1 {\n\t\t\t// Should have used OP_1 .. OP_16\n\t\t\tstr := fmt.Sprintf(\"data push of the value %d encoded \"+\n\t\t\t\t\"with opcode %s instead of OP_%d\", data[0],\n\t\t\t\tpop.opcode.name, data[0])\n\t\t\treturn scriptError(ErrMinimalData, str)\n\t\t}\n\t} else if dataLen == 1 && data[0] == 0x81 {\n\t\tif opcode != OP_1NEGATE {\n\t\t\tstr := fmt.Sprintf(\"data push of the value -1 encoded \"+\n\t\t\t\t\"with opcode %s instead of OP_1NEGATE\",\n\t\t\t\tpop.opcode.name)\n\t\t\treturn scriptError(ErrMinimalData, str)\n\t\t}\n\t} else if dataLen <= 75 {\n\t\tif int(opcode) != dataLen {\n\t\t\t// Should have used a direct push\n\t\t\tstr := fmt.Sprintf(\"data push of %d bytes encoded \"+\n\t\t\t\t\"with opcode %s instead of OP_DATA_%d\", dataLen,\n\t\t\t\tpop.opcode.name, dataLen)\n\t\t\treturn scriptError(ErrMinimalData, str)\n\t\t}\n\t} else if dataLen <= 255 {\n\t\tif opcode != OP_PUSHDATA1 {\n\t\t\tstr := fmt.Sprintf(\"data push of %d bytes encoded \"+\n\t\t\t\t\"with opcode %s instead of OP_PUSHDATA1\",\n\t\t\t\tdataLen, pop.opcode.name)\n\t\t\treturn scriptError(ErrMinimalData, str)\n\t\t}\n\t} else if dataLen <= 65535 {\n\t\tif opcode != OP_PUSHDATA2 {\n\t\t\tstr := fmt.Sprintf(\"data push of %d bytes encoded \"+\n\t\t\t\t\"with opcode %s instead of OP_PUSHDATA2\",\n\t\t\t\tdataLen, pop.opcode.name)\n\t\t\treturn scriptError(ErrMinimalData, str)\n\t\t}\n\t}\n\treturn nil\n}\n\n// print returns a human-readable string representation of the opcode for use\n// in script disassembly.\nfunc (pop *parsedOpcode) print(oneline bool) string {\n\t// The reference implementation one-line disassembly replaces opcodes\n\t// which represent values (e.g. OP_0 through OP_16 and OP_1NEGATE)\n\t// with the raw value.  However, when not doing a one-line dissassembly,\n\t// we prefer to show the actual opcode names.  Thus, only replace the\n\t// opcodes in question when the oneline flag is set.\n\topcodeName := pop.opcode.name\n\tif oneline {\n\t\tif replName, ok := opcodeOnelineRepls[opcodeName]; ok {\n\t\t\topcodeName = replName\n\t\t}\n\n\t\t// Nothing more to do for non-data push opcodes.\n\t\tif pop.opcode.length == 1 {\n\t\t\treturn opcodeName\n\t\t}\n\n\t\treturn fmt.Sprintf(\"%x\", pop.data)\n\t}\n\n\t// Nothing more to do for non-data push opcodes.\n\tif pop.opcode.length == 1 {\n\t\treturn opcodeName\n\t}\n\n\t// Add length for the OP_PUSHDATA# opcodes.\n\tretString := opcodeName\n\tswitch pop.opcode.length {\n\tcase -1:\n\t\tretString += fmt.Sprintf(\" 0x%02x\", len(pop.data))\n\tcase -2:\n\t\tretString += fmt.Sprintf(\" 0x%04x\", len(pop.data))\n\tcase -4:\n\t\tretString += fmt.Sprintf(\" 0x%08x\", len(pop.data))\n\t}\n\n\treturn fmt.Sprintf(\"%s 0x%02x\", retString, pop.data)\n}\n\n// bytes returns any data associated with the opcode encoded as it would be in\n// a script.  This is used for unparsing scripts from parsed opcodes.\nfunc (pop *parsedOpcode) bytes() ([]byte, error) {\n\tvar retbytes []byte\n\tif pop.opcode.length > 0 {\n\t\tretbytes = make([]byte, 1, pop.opcode.length)\n\t} else {\n\t\tretbytes = make([]byte, 1, 1+len(pop.data)-\n\t\t\tpop.opcode.length)\n\t}\n\n\tretbytes[0] = pop.opcode.value\n\tif pop.opcode.length == 1 {\n\t\tif len(pop.data) != 0 {\n\t\t\tstr := fmt.Sprintf(\"internal consistency error - \"+\n\t\t\t\t\"parsed opcode %s has data length %d when %d \"+\n\t\t\t\t\"was expected\", pop.opcode.name, len(pop.data),\n\t\t\t\t0)\n\t\t\treturn nil, scriptError(ErrInternal, str)\n\t\t}\n\t\treturn retbytes, nil\n\t}\n\tnbytes := pop.opcode.length\n\tif pop.opcode.length < 0 {\n\t\tl := len(pop.data)\n\t\t// tempting just to hardcode to avoid the complexity here.\n\t\tswitch pop.opcode.length {\n\t\tcase -1:\n\t\t\tretbytes = append(retbytes, byte(l))\n\t\t\tnbytes = int(retbytes[1]) + len(retbytes)\n\t\tcase -2:\n\t\t\tretbytes = append(retbytes, byte(l&0xff),\n\t\t\t\tbyte(l>>8&0xff))\n\t\t\tnbytes = int(binary.LittleEndian.Uint16(retbytes[1:])) +\n\t\t\t\tlen(retbytes)\n\t\tcase -4:\n\t\t\tretbytes = append(retbytes, byte(l&0xff),\n\t\t\t\tbyte((l>>8)&0xff), byte((l>>16)&0xff),\n\t\t\t\tbyte((l>>24)&0xff))\n\t\t\tnbytes = int(binary.LittleEndian.Uint32(retbytes[1:])) +\n\t\t\t\tlen(retbytes)\n\t\t}\n\t}\n\n\tretbytes = append(retbytes, pop.data...)\n\n\tif len(retbytes) != nbytes {\n\t\tstr := fmt.Sprintf(\"internal consistency error - \"+\n\t\t\t\"parsed opcode %s has data length %d when %d was \"+\n\t\t\t\"expected\", pop.opcode.name, len(retbytes), nbytes)\n\t\treturn nil, scriptError(ErrInternal, str)\n\t}\n\n\treturn retbytes, nil\n}\n\n// *******************************************\n// Opcode implementation functions start here.\n// *******************************************\n\n// opcodeDisabled is a common handler for disabled opcodes.  It returns an\n// appropriate error indicating the opcode is disabled.  While it would\n// ordinarily make more sense to detect if the script contains any disabled\n// opcodes before executing in an initial parse step, the consensus rules\n// dictate the script doesn't fail until the program counter passes over a\n// disabled opcode (even when they appear in a branch that is not executed).\nfunc opcodeDisabled(op *parsedOpcode, vm *Engine) error {\n\tstr := fmt.Sprintf(\"attempt to execute disabled opcode %s\",\n\t\top.opcode.name)\n\treturn scriptError(ErrDisabledOpcode, str)\n}\n\n// opcodeReserved is a common handler for all reserved opcodes.  It returns an\n// appropriate error indicating the opcode is reserved.\nfunc opcodeReserved(op *parsedOpcode, vm *Engine) error {\n\tstr := fmt.Sprintf(\"attempt to execute reserved opcode %s\",\n\t\top.opcode.name)\n\treturn scriptError(ErrReservedOpcode, str)\n}\n\n// opcodeInvalid is a common handler for all invalid opcodes.  It returns an\n// appropriate error indicating the opcode is invalid.\nfunc opcodeInvalid(op *parsedOpcode, vm *Engine) error {\n\tstr := fmt.Sprintf(\"attempt to execute invalid opcode %s\",\n\t\top.opcode.name)\n\treturn scriptError(ErrReservedOpcode, str)\n}\n\n// opcodeFalse pushes an empty array to the data stack to represent false.  Note\n// that 0, when encoded as a number according to the numeric encoding consensus\n// rules, is an empty array.\nfunc opcodeFalse(op *parsedOpcode, vm *Engine) error {\n\tvm.dstack.PushByteArray(nil)\n\treturn nil\n}\n\n// opcodePushData is a common handler for the vast majority of opcodes that push\n// raw data (bytes) to the data stack.\nfunc opcodePushData(op *parsedOpcode, vm *Engine) error {\n\tvm.dstack.PushByteArray(op.data)\n\treturn nil\n}\n\n// opcode1Negate pushes -1, encoded as a number, to the data stack.\nfunc opcode1Negate(op *parsedOpcode, vm *Engine) error {\n\tvm.dstack.PushInt(scriptNum(-1))\n\treturn nil\n}\n\n// opcodeN is a common handler for the small integer data push opcodes.  It\n// pushes the numeric value the opcode represents (which will be from 1 to 16)\n// onto the data stack.\nfunc opcodeN(op *parsedOpcode, vm *Engine) error {\n\t// The opcodes are all defined consecutively, so the numeric value is\n\t// the difference.\n\tvm.dstack.PushInt(scriptNum((op.opcode.value - (OP_1 - 1))))\n\treturn nil\n}\n\n// opcodeNop is a common handler for the NOP family of opcodes.  As the name\n// implies it generally does nothing, however, it will return an error when\n// the flag to discourage use of NOPs is set for select opcodes.\nfunc opcodeNop(op *parsedOpcode, vm *Engine) error {\n\tswitch op.opcode.value {\n\tcase OP_NOP1, OP_NOP4, OP_NOP5,\n\t\tOP_NOP6, OP_NOP7, OP_NOP8, OP_NOP9, OP_NOP10:\n\t\tif vm.hasFlag(ScriptDiscourageUpgradableNops) {\n\t\t\tstr := fmt.Sprintf(\"OP_NOP%d reserved for soft-fork \"+\n\t\t\t\t\"upgrades\", op.opcode.value-(OP_NOP1-1))\n\t\t\treturn scriptError(ErrDiscourageUpgradableNOPs, str)\n\t\t}\n\t}\n\treturn nil\n}\n\n// popIfBool enforces the \"minimal if\" policy during script execution if the\n// particular flag is set.  If so, in order to eliminate an additional source\n// of nuisance malleability, post-segwit for version 0 witness programs, we now\n// require the following: for OP_IF and OP_NOT_IF, the top stack item MUST\n// either be an empty byte slice, or [0x01]. Otherwise, the item at the top of\n// the stack will be popped and interpreted as a boolean.\nfunc popIfBool(vm *Engine) (bool, error) {\n\t// When not in witness execution mode, not executing a v0 witness\n\t// program, or the minimal if flag isn't set pop the top stack item as\n\t// a normal bool.\n\tif !vm.isWitnessVersionActive(0) || !vm.hasFlag(ScriptVerifyMinimalIf) {\n\t\treturn vm.dstack.PopBool()\n\t}\n\n\t// At this point, a v0 witness program is being executed and the minimal\n\t// if flag is set, so enforce additional constraints on the top stack\n\t// item.\n\tso, err := vm.dstack.PopByteArray()\n\tif err != nil {\n\t\treturn false, err\n\t}\n\n\t// The top element MUST have a length of at least one.\n\tif len(so) > 1 {\n\t\tstr := fmt.Sprintf(\"minimal if is active, top element MUST \"+\n\t\t\t\"have a length of at least, instead length is %v\",\n\t\t\tlen(so))\n\t\treturn false, scriptError(ErrMinimalIf, str)\n\t}\n\n\t// Additionally, if the length is one, then the value MUST be 0x01.\n\tif len(so) == 1 && so[0] != 0x01 {\n\t\tstr := fmt.Sprintf(\"minimal if is active, top stack item MUST \"+\n\t\t\t\"be an empty byte array or 0x01, is instead: %v\",\n\t\t\tso[0])\n\t\treturn false, scriptError(ErrMinimalIf, str)\n\t}\n\n\treturn asBool(so), nil\n}\n\n// opcodeIf treats the top item on the data stack as a boolean and removes it.\n//\n// An appropriate entry is added to the conditional stack depending on whether\n// the boolean is true and whether this if is on an executing branch in order\n// to allow proper execution of further opcodes depending on the conditional\n// logic.  When the boolean is true, the first branch will be executed (unless\n// this opcode is nested in a non-executed branch).\n//\n// <expression> if [statements] [else [statements]] endif\n//\n// Note that, unlike for all non-conditional opcodes, this is executed even when\n// it is on a non-executing branch so proper nesting is maintained.\n//\n// Data stack transformation: [... bool] -> [...]\n// Conditional stack transformation: [...] -> [... OpCondValue]\nfunc opcodeIf(op *parsedOpcode, vm *Engine) error {\n\tcondVal := OpCondFalse\n\tif vm.isBranchExecuting() {\n\t\tok, err := popIfBool(vm)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif ok {\n\t\t\tcondVal = OpCondTrue\n\t\t}\n\t} else {\n\t\tcondVal = OpCondSkip\n\t}\n\tvm.condStack = append(vm.condStack, condVal)\n\treturn nil\n}\n\n// opcodeNotIf treats the top item on the data stack as a boolean and removes\n// it.\n//\n// An appropriate entry is added to the conditional stack depending on whether\n// the boolean is true and whether this if is on an executing branch in order\n// to allow proper execution of further opcodes depending on the conditional\n// logic.  When the boolean is false, the first branch will be executed (unless\n// this opcode is nested in a non-executed branch).\n//\n// <expression> notif [statements] [else [statements]] endif\n//\n// Note that, unlike for all non-conditional opcodes, this is executed even when\n// it is on a non-executing branch so proper nesting is maintained.\n//\n// Data stack transformation: [... bool] -> [...]\n// Conditional stack transformation: [...] -> [... OpCondValue]\nfunc opcodeNotIf(op *parsedOpcode, vm *Engine) error {\n\tcondVal := OpCondFalse\n\tif vm.isBranchExecuting() {\n\t\tok, err := popIfBool(vm)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif !ok {\n\t\t\tcondVal = OpCondTrue\n\t\t}\n\t} else {\n\t\tcondVal = OpCondSkip\n\t}\n\tvm.condStack = append(vm.condStack, condVal)\n\treturn nil\n}\n\n// opcodeElse inverts conditional execution for other half of if/else/endif.\n//\n// An error is returned if there has not already been a matching OP_IF.\n//\n// Conditional stack transformation: [... OpCondValue] -> [... !OpCondValue]\nfunc opcodeElse(op *parsedOpcode, vm *Engine) error {\n\tif len(vm.condStack) == 0 {\n\t\tstr := fmt.Sprintf(\"encountered opcode %s with no matching \"+\n\t\t\t\"opcode to begin conditional execution\", op.opcode.name)\n\t\treturn scriptError(ErrUnbalancedConditional, str)\n\t}\n\n\tconditionalIdx := len(vm.condStack) - 1\n\tswitch vm.condStack[conditionalIdx] {\n\tcase OpCondTrue:\n\t\tvm.condStack[conditionalIdx] = OpCondFalse\n\tcase OpCondFalse:\n\t\tvm.condStack[conditionalIdx] = OpCondTrue\n\tcase OpCondSkip:\n\t\t// Value doesn't change in skip since it indicates this opcode\n\t\t// is nested in a non-executed branch.\n\t}\n\treturn nil\n}\n\n// opcodeEndif terminates a conditional block, removing the value from the\n// conditional execution stack.\n//\n// An error is returned if there has not already been a matching OP_IF.\n//\n// Conditional stack transformation: [... OpCondValue] -> [...]\nfunc opcodeEndif(op *parsedOpcode, vm *Engine) error {\n\tif len(vm.condStack) == 0 {\n\t\tstr := fmt.Sprintf(\"encountered opcode %s with no matching \"+\n\t\t\t\"opcode to begin conditional execution\", op.opcode.name)\n\t\treturn scriptError(ErrUnbalancedConditional, str)\n\t}\n\n\tvm.condStack = vm.condStack[:len(vm.condStack)-1]\n\treturn nil\n}\n\n// abstractVerify examines the top item on the data stack as a boolean value and\n// verifies it evaluates to true.  An error is returned either when there is no\n// item on the stack or when that item evaluates to false.  In the latter case\n// where the verification fails specifically due to the top item evaluating\n// to false, the returned error will use the passed error code.\nfunc abstractVerify(op *parsedOpcode, vm *Engine, c ErrorCode) error {\n\tverified, err := vm.dstack.PopBool()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif !verified {\n\t\tstr := fmt.Sprintf(\"%s failed\", op.opcode.name)\n\t\treturn scriptError(c, str)\n\t}\n\treturn nil\n}\n\n// opcodeVerify examines the top item on the data stack as a boolean value and\n// verifies it evaluates to true.  An error is returned if it does not.\nfunc opcodeVerify(op *parsedOpcode, vm *Engine) error {\n\treturn abstractVerify(op, vm, ErrVerify)\n}\n\n// opcodeReturn returns an appropriate error since it is always an error to\n// return early from a script.\nfunc opcodeReturn(op *parsedOpcode, vm *Engine) error {\n\treturn scriptError(ErrEarlyReturn, \"script returned early\")\n}\n\n// verifyLockTime is a helper function used to validate locktimes.\nfunc verifyLockTime(txLockTime, threshold, lockTime int64) error {\n\t// The lockTimes in both the script and transaction must be of the same\n\t// type.\n\tif !((txLockTime < threshold && lockTime < threshold) ||\n\t\t(txLockTime >= threshold && lockTime >= threshold)) {\n\t\tstr := fmt.Sprintf(\"mismatched locktime types -- tx locktime \"+\n\t\t\t\"%d, stack locktime %d\", txLockTime, lockTime)\n\t\treturn scriptError(ErrUnsatisfiedLockTime, str)\n\t}\n\n\tif lockTime > txLockTime {\n\t\tstr := fmt.Sprintf(\"locktime requirement not satisfied -- \"+\n\t\t\t\"locktime is greater than the transaction locktime: \"+\n\t\t\t\"%d > %d\", lockTime, txLockTime)\n\t\treturn scriptError(ErrUnsatisfiedLockTime, str)\n\t}\n\n\treturn nil\n}\n\n// opcodeCheckLockTimeVerify compares the top item on the data stack to the\n// LockTime field of the transaction containing the script signature\n// validating if the transaction outputs are spendable yet.  If flag\n// ScriptVerifyCheckLockTimeVerify is not set, the code continues as if OP_NOP2\n// were executed.\nfunc opcodeCheckLockTimeVerify(op *parsedOpcode, vm *Engine) error {\n\t// If the ScriptVerifyCheckLockTimeVerify script flag is not set, treat\n\t// opcode as OP_NOP2 instead.\n\tif !vm.hasFlag(ScriptVerifyCheckLockTimeVerify) {\n\t\tif vm.hasFlag(ScriptDiscourageUpgradableNops) {\n\t\t\treturn scriptError(ErrDiscourageUpgradableNOPs,\n\t\t\t\t\"OP_NOP2 reserved for soft-fork upgrades\")\n\t\t}\n\t\treturn nil\n\t}\n\n\t// The current transaction locktime is a uint32 resulting in a maximum\n\t// locktime of 2^32-1 (the year 2106).  However, scriptNums are signed\n\t// and therefore a standard 4-byte scriptNum would only support up to a\n\t// maximum of 2^31-1 (the year 2038).  Thus, a 5-byte scriptNum is used\n\t// here since it will support up to 2^39-1 which allows dates beyond the\n\t// current locktime limit.\n\t//\n\t// PeekByteArray is used here instead of PeekInt because we do not want\n\t// to be limited to a 4-byte integer for reasons specified above.\n\tso, err := vm.dstack.PeekByteArray(0)\n\tif err != nil {\n\t\treturn err\n\t}\n\tlockTime, err := makeScriptNum(so, vm.dstack.verifyMinimalData, 5)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// In the rare event that the argument needs to be < 0 due to some\n\t// arithmetic being done first, you can always use\n\t// 0 OP_MAX OP_CHECKLOCKTIMEVERIFY.\n\tif lockTime < 0 {\n\t\tstr := fmt.Sprintf(\"negative lock time: %d\", lockTime)\n\t\treturn scriptError(ErrNegativeLockTime, str)\n\t}\n\n\t// The lock time field of a transaction is either a block height at\n\t// which the transaction is finalized or a timestamp depending on if the\n\t// value is before the txscript.LockTimeThreshold.  When it is under the\n\t// threshold it is a block height.\n\terr = verifyLockTime(int64(vm.tx.LockTime), LockTimeThreshold,\n\t\tint64(lockTime))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// The lock time feature can also be disabled, thereby bypassing\n\t// OP_CHECKLOCKTIMEVERIFY, if every transaction input has been finalized by\n\t// setting its sequence to the maximum value (wire.MaxTxInSequenceNum).  This\n\t// condition would result in the transaction being allowed into the blockchain\n\t// making the opcode ineffective.\n\t//\n\t// This condition is prevented by enforcing that the input being used by\n\t// the opcode is unlocked (its sequence number is less than the max\n\t// value).  This is sufficient to prove correctness without having to\n\t// check every input.\n\t//\n\t// NOTE: This implies that even if the transaction is not finalized due to\n\t// another input being unlocked, the opcode execution will still fail when the\n\t// input being used by the opcode is locked.\n\tif vm.tx.TxIn[vm.txIdx].Sequence == wire.MaxTxInSequenceNum {\n\t\treturn scriptError(ErrUnsatisfiedLockTime,\n\t\t\t\"transaction input is finalized\")\n\t}\n\n\treturn nil\n}\n\n// opcodeCheckSequenceVerify compares the top item on the data stack to the\n// LockTime field of the transaction containing the script signature\n// validating if the transaction outputs are spendable yet.  If flag\n// ScriptVerifyCheckSequenceVerify is not set, the code continues as if OP_NOP3\n// were executed.\nfunc opcodeCheckSequenceVerify(op *parsedOpcode, vm *Engine) error {\n\t// If the ScriptVerifyCheckSequenceVerify script flag is not set, treat\n\t// opcode as OP_NOP3 instead.\n\tif !vm.hasFlag(ScriptVerifyCheckSequenceVerify) {\n\t\tif vm.hasFlag(ScriptDiscourageUpgradableNops) {\n\t\t\treturn scriptError(ErrDiscourageUpgradableNOPs,\n\t\t\t\t\"OP_NOP3 reserved for soft-fork upgrades\")\n\t\t}\n\t\treturn nil\n\t}\n\n\t// The current transaction sequence is a uint32 resulting in a maximum\n\t// sequence of 2^32-1.  However, scriptNums are signed and therefore a\n\t// standard 4-byte scriptNum would only support up to a maximum of\n\t// 2^31-1.  Thus, a 5-byte scriptNum is used here since it will support\n\t// up to 2^39-1 which allows sequences beyond the current sequence\n\t// limit.\n\t//\n\t// PeekByteArray is used here instead of PeekInt because we do not want\n\t// to be limited to a 4-byte integer for reasons specified above.\n\tso, err := vm.dstack.PeekByteArray(0)\n\tif err != nil {\n\t\treturn err\n\t}\n\tstackSequence, err := makeScriptNum(so, vm.dstack.verifyMinimalData, 5)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// In the rare event that the argument needs to be < 0 due to some\n\t// arithmetic being done first, you can always use\n\t// 0 OP_MAX OP_CHECKSEQUENCEVERIFY.\n\tif stackSequence < 0 {\n\t\tstr := fmt.Sprintf(\"negative sequence: %d\", stackSequence)\n\t\treturn scriptError(ErrNegativeLockTime, str)\n\t}\n\n\tsequence := int64(stackSequence)\n\n\t// To provide for future soft-fork extensibility, if the\n\t// operand has the disabled lock-time flag set,\n\t// CHECKSEQUENCEVERIFY behaves as a NOP.\n\tif sequence&int64(wire.SequenceLockTimeDisabled) != 0 {\n\t\treturn nil\n\t}\n\n\t// Transaction version numbers not high enough to trigger CSV rules must\n\t// fail.\n\tif vm.tx.Version < 2 {\n\t\tstr := fmt.Sprintf(\"invalid transaction version: %d\",\n\t\t\tvm.tx.Version)\n\t\treturn scriptError(ErrUnsatisfiedLockTime, str)\n\t}\n\n\t// Sequence numbers with their most significant bit set are not\n\t// consensus constrained. Testing that the transaction's sequence\n\t// number does not have this bit set prevents using this property\n\t// to get around a CHECKSEQUENCEVERIFY check.\n\ttxSequence := int64(vm.tx.TxIn[vm.txIdx].Sequence)\n\tif txSequence&int64(wire.SequenceLockTimeDisabled) != 0 {\n\t\tstr := fmt.Sprintf(\"transaction sequence has sequence \"+\n\t\t\t\"locktime disabled bit set: 0x%x\", txSequence)\n\t\treturn scriptError(ErrUnsatisfiedLockTime, str)\n\t}\n\n\t// Mask off non-consensus bits before doing comparisons.\n\tlockTimeMask := int64(wire.SequenceLockTimeIsSeconds |\n\t\twire.SequenceLockTimeMask)\n\treturn verifyLockTime(txSequence&lockTimeMask,\n\t\twire.SequenceLockTimeIsSeconds, sequence&lockTimeMask)\n}\n\n// opcodeToAltStack removes the top item from the main data stack and pushes it\n// onto the alternate data stack.\n//\n// Main data stack transformation: [... x1 x2 x3] -> [... x1 x2]\n// Alt data stack transformation:  [... y1 y2 y3] -> [... y1 y2 y3 x3]\nfunc opcodeToAltStack(op *parsedOpcode, vm *Engine) error {\n\tso, err := vm.dstack.PopByteArray()\n\tif err != nil {\n\t\treturn err\n\t}\n\tvm.astack.PushByteArray(so)\n\n\treturn nil\n}\n\n// opcodeFromAltStack removes the top item from the alternate data stack and\n// pushes it onto the main data stack.\n//\n// Main data stack transformation: [... x1 x2 x3] -> [... x1 x2 x3 y3]\n// Alt data stack transformation:  [... y1 y2 y3] -> [... y1 y2]\nfunc opcodeFromAltStack(op *parsedOpcode, vm *Engine) error {\n\tso, err := vm.astack.PopByteArray()\n\tif err != nil {\n\t\treturn err\n\t}\n\tvm.dstack.PushByteArray(so)\n\n\treturn nil\n}\n\n// opcode2Drop removes the top 2 items from the data stack.\n//\n// Stack transformation: [... x1 x2 x3] -> [... x1]\nfunc opcode2Drop(op *parsedOpcode, vm *Engine) error {\n\treturn vm.dstack.DropN(2)\n}\n\n// opcode2Dup duplicates the top 2 items on the data stack.\n//\n// Stack transformation: [... x1 x2 x3] -> [... x1 x2 x3 x2 x3]\nfunc opcode2Dup(op *parsedOpcode, vm *Engine) error {\n\treturn vm.dstack.DupN(2)\n}\n\n// opcode3Dup duplicates the top 3 items on the data stack.\n//\n// Stack transformation: [... x1 x2 x3] -> [... x1 x2 x3 x1 x2 x3]\nfunc opcode3Dup(op *parsedOpcode, vm *Engine) error {\n\treturn vm.dstack.DupN(3)\n}\n\n// opcode2Over duplicates the 2 items before the top 2 items on the data stack.\n//\n// Stack transformation: [... x1 x2 x3 x4] -> [... x1 x2 x3 x4 x1 x2]\nfunc opcode2Over(op *parsedOpcode, vm *Engine) error {\n\treturn vm.dstack.OverN(2)\n}\n\n// opcode2Rot rotates the top 6 items on the data stack to the left twice.\n//\n// Stack transformation: [... x1 x2 x3 x4 x5 x6] -> [... x3 x4 x5 x6 x1 x2]\nfunc opcode2Rot(op *parsedOpcode, vm *Engine) error {\n\treturn vm.dstack.RotN(2)\n}\n\n// opcode2Swap swaps the top 2 items on the data stack with the 2 that come\n// before them.\n//\n// Stack transformation: [... x1 x2 x3 x4] -> [... x3 x4 x1 x2]\nfunc opcode2Swap(op *parsedOpcode, vm *Engine) error {\n\treturn vm.dstack.SwapN(2)\n}\n\n// opcodeIfDup duplicates the top item of the stack if it is not zero.\n//\n// Stack transformation (x1==0): [... x1] -> [... x1]\n// Stack transformation (x1!=0): [... x1] -> [... x1 x1]\nfunc opcodeIfDup(op *parsedOpcode, vm *Engine) error {\n\tso, err := vm.dstack.PeekByteArray(0)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Push copy of data iff it isn't zero\n\tif asBool(so) {\n\t\tvm.dstack.PushByteArray(so)\n\t}\n\n\treturn nil\n}\n\n// opcodeDepth pushes the depth of the data stack prior to executing this\n// opcode, encoded as a number, onto the data stack.\n//\n// Stack transformation: [...] -> [... <num of items on the stack>]\n// Example with 2 items: [x1 x2] -> [x1 x2 2]\n// Example with 3 items: [x1 x2 x3] -> [x1 x2 x3 3]\nfunc opcodeDepth(op *parsedOpcode, vm *Engine) error {\n\tvm.dstack.PushInt(scriptNum(vm.dstack.Depth()))\n\treturn nil\n}\n\n// opcodeDrop removes the top item from the data stack.\n//\n// Stack transformation: [... x1 x2 x3] -> [... x1 x2]\nfunc opcodeDrop(op *parsedOpcode, vm *Engine) error {\n\treturn vm.dstack.DropN(1)\n}\n\n// opcodeDup duplicates the top item on the data stack.\n//\n// Stack transformation: [... x1 x2 x3] -> [... x1 x2 x3 x3]\nfunc opcodeDup(op *parsedOpcode, vm *Engine) error {\n\treturn vm.dstack.DupN(1)\n}\n\n// opcodeNip removes the item before the top item on the data stack.\n//\n// Stack transformation: [... x1 x2 x3] -> [... x1 x3]\nfunc opcodeNip(op *parsedOpcode, vm *Engine) error {\n\treturn vm.dstack.NipN(1)\n}\n\n// opcodeOver duplicates the item before the top item on the data stack.\n//\n// Stack transformation: [... x1 x2 x3] -> [... x1 x2 x3 x2]\nfunc opcodeOver(op *parsedOpcode, vm *Engine) error {\n\treturn vm.dstack.OverN(1)\n}\n\n// opcodePick treats the top item on the data stack as an integer and duplicates\n// the item on the stack that number of items back to the top.\n//\n// Stack transformation: [xn ... x2 x1 x0 n] -> [xn ... x2 x1 x0 xn]\n// Example with n=1: [x2 x1 x0 1] -> [x2 x1 x0 x1]\n// Example with n=2: [x2 x1 x0 2] -> [x2 x1 x0 x2]\nfunc opcodePick(op *parsedOpcode, vm *Engine) error {\n\tval, err := vm.dstack.PopInt()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn vm.dstack.PickN(val.Int32())\n}\n\n// opcodeRoll treats the top item on the data stack as an integer and moves\n// the item on the stack that number of items back to the top.\n//\n// Stack transformation: [xn ... x2 x1 x0 n] -> [... x2 x1 x0 xn]\n// Example with n=1: [x2 x1 x0 1] -> [x2 x0 x1]\n// Example with n=2: [x2 x1 x0 2] -> [x1 x0 x2]\nfunc opcodeRoll(op *parsedOpcode, vm *Engine) error {\n\tval, err := vm.dstack.PopInt()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn vm.dstack.RollN(val.Int32())\n}\n\n// opcodeRot rotates the top 3 items on the data stack to the left.\n//\n// Stack transformation: [... x1 x2 x3] -> [... x2 x3 x1]\nfunc opcodeRot(op *parsedOpcode, vm *Engine) error {\n\treturn vm.dstack.RotN(1)\n}\n\n// opcodeSwap swaps the top two items on the stack.\n//\n// Stack transformation: [... x1 x2] -> [... x2 x1]\nfunc opcodeSwap(op *parsedOpcode, vm *Engine) error {\n\treturn vm.dstack.SwapN(1)\n}\n\n// opcodeTuck inserts a duplicate of the top item of the data stack before the\n// second-to-top item.\n//\n// Stack transformation: [... x1 x2] -> [... x2 x1 x2]\nfunc opcodeTuck(op *parsedOpcode, vm *Engine) error {\n\treturn vm.dstack.Tuck()\n}\n\n// opcodeSize pushes the size of the top item of the data stack onto the data\n// stack.\n//\n// Stack transformation: [... x1] -> [... x1 len(x1)]\nfunc opcodeSize(op *parsedOpcode, vm *Engine) error {\n\tso, err := vm.dstack.PeekByteArray(0)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tvm.dstack.PushInt(scriptNum(len(so)))\n\treturn nil\n}\n\n// opcodeEqual removes the top 2 items of the data stack, compares them as raw\n// bytes, and pushes the result, encoded as a boolean, back to the stack.\n//\n// Stack transformation: [... x1 x2] -> [... bool]\nfunc opcodeEqual(op *parsedOpcode, vm *Engine) error {\n\ta, err := vm.dstack.PopByteArray()\n\tif err != nil {\n\t\treturn err\n\t}\n\tb, err := vm.dstack.PopByteArray()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tvm.dstack.PushBool(bytes.Equal(a, b))\n\treturn nil\n}\n\n// opcodeEqualVerify is a combination of opcodeEqual and opcodeVerify.\n// Specifically, it removes the top 2 items of the data stack, compares them,\n// and pushes the result, encoded as a boolean, back to the stack.  Then, it\n// examines the top item on the data stack as a boolean value and verifies it\n// evaluates to true.  An error is returned if it does not.\n//\n// Stack transformation: [... x1 x2] -> [... bool] -> [...]\nfunc opcodeEqualVerify(op *parsedOpcode, vm *Engine) error {\n\terr := opcodeEqual(op, vm)\n\tif err == nil {\n\t\terr = abstractVerify(op, vm, ErrEqualVerify)\n\t}\n\treturn err\n}\n\n// opcode1Add treats the top item on the data stack as an integer and replaces\n// it with its incremented value (plus 1).\n//\n// Stack transformation: [... x1 x2] -> [... x1 x2+1]\nfunc opcode1Add(op *parsedOpcode, vm *Engine) error {\n\tm, err := vm.dstack.PopInt()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tvm.dstack.PushInt(m + 1)\n\treturn nil\n}\n\n// opcode1Sub treats the top item on the data stack as an integer and replaces\n// it with its decremented value (minus 1).\n//\n// Stack transformation: [... x1 x2] -> [... x1 x2-1]\nfunc opcode1Sub(op *parsedOpcode, vm *Engine) error {\n\tm, err := vm.dstack.PopInt()\n\tif err != nil {\n\t\treturn err\n\t}\n\tvm.dstack.PushInt(m - 1)\n\n\treturn nil\n}\n\n// opcodeNegate treats the top item on the data stack as an integer and replaces\n// it with its negation.\n//\n// Stack transformation: [... x1 x2] -> [... x1 -x2]\nfunc opcodeNegate(op *parsedOpcode, vm *Engine) error {\n\tm, err := vm.dstack.PopInt()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tvm.dstack.PushInt(-m)\n\treturn nil\n}\n\n// opcodeAbs treats the top item on the data stack as an integer and replaces it\n// it with its absolute value.\n//\n// Stack transformation: [... x1 x2] -> [... x1 abs(x2)]\nfunc opcodeAbs(op *parsedOpcode, vm *Engine) error {\n\tm, err := vm.dstack.PopInt()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif m < 0 {\n\t\tm = -m\n\t}\n\tvm.dstack.PushInt(m)\n\treturn nil\n}\n\n// opcodeNot treats the top item on the data stack as an integer and replaces\n// it with its \"inverted\" value (0 becomes 1, non-zero becomes 0).\n//\n// NOTE: While it would probably make more sense to treat the top item as a\n// boolean, and push the opposite, which is really what the intention of this\n// opcode is, it is extremely important that is not done because integers are\n// interpreted differently than booleans and the consensus rules for this opcode\n// dictate the item is interpreted as an integer.\n//\n// Stack transformation (x2==0): [... x1 0] -> [... x1 1]\n// Stack transformation (x2!=0): [... x1 1] -> [... x1 0]\n// Stack transformation (x2!=0): [... x1 17] -> [... x1 0]\nfunc opcodeNot(op *parsedOpcode, vm *Engine) error {\n\tm, err := vm.dstack.PopInt()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif m == 0 {\n\t\tvm.dstack.PushInt(scriptNum(1))\n\t} else {\n\t\tvm.dstack.PushInt(scriptNum(0))\n\t}\n\treturn nil\n}\n\n// opcode0NotEqual treats the top item on the data stack as an integer and\n// replaces it with either a 0 if it is zero, or a 1 if it is not zero.\n//\n// Stack transformation (x2==0): [... x1 0] -> [... x1 0]\n// Stack transformation (x2!=0): [... x1 1] -> [... x1 1]\n// Stack transformation (x2!=0): [... x1 17] -> [... x1 1]\nfunc opcode0NotEqual(op *parsedOpcode, vm *Engine) error {\n\tm, err := vm.dstack.PopInt()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif m != 0 {\n\t\tm = 1\n\t}\n\tvm.dstack.PushInt(m)\n\treturn nil\n}\n\n// opcodeAdd treats the top two items on the data stack as integers and replaces\n// them with their sum.\n//\n// Stack transformation: [... x1 x2] -> [... x1+x2]\nfunc opcodeAdd(op *parsedOpcode, vm *Engine) error {\n\tv0, err := vm.dstack.PopInt()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tv1, err := vm.dstack.PopInt()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tvm.dstack.PushInt(v0 + v1)\n\treturn nil\n}\n\n// opcodeSub treats the top two items on the data stack as integers and replaces\n// them with the result of subtracting the top entry from the second-to-top\n// entry.\n//\n// Stack transformation: [... x1 x2] -> [... x1-x2]\nfunc opcodeSub(op *parsedOpcode, vm *Engine) error {\n\tv0, err := vm.dstack.PopInt()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tv1, err := vm.dstack.PopInt()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tvm.dstack.PushInt(v1 - v0)\n\treturn nil\n}\n\n// opcodeBoolAnd treats the top two items on the data stack as integers.  When\n// both of them are not zero, they are replaced with a 1, otherwise a 0.\n//\n// Stack transformation (x1==0, x2==0): [... 0 0] -> [... 0]\n// Stack transformation (x1!=0, x2==0): [... 5 0] -> [... 0]\n// Stack transformation (x1==0, x2!=0): [... 0 7] -> [... 0]\n// Stack transformation (x1!=0, x2!=0): [... 4 8] -> [... 1]\nfunc opcodeBoolAnd(op *parsedOpcode, vm *Engine) error {\n\tv0, err := vm.dstack.PopInt()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tv1, err := vm.dstack.PopInt()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif v0 != 0 && v1 != 0 {\n\t\tvm.dstack.PushInt(scriptNum(1))\n\t} else {\n\t\tvm.dstack.PushInt(scriptNum(0))\n\t}\n\n\treturn nil\n}\n\n// opcodeBoolOr treats the top two items on the data stack as integers.  When\n// either of them are not zero, they are replaced with a 1, otherwise a 0.\n//\n// Stack transformation (x1==0, x2==0): [... 0 0] -> [... 0]\n// Stack transformation (x1!=0, x2==0): [... 5 0] -> [... 1]\n// Stack transformation (x1==0, x2!=0): [... 0 7] -> [... 1]\n// Stack transformation (x1!=0, x2!=0): [... 4 8] -> [... 1]\nfunc opcodeBoolOr(op *parsedOpcode, vm *Engine) error {\n\tv0, err := vm.dstack.PopInt()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tv1, err := vm.dstack.PopInt()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif v0 != 0 || v1 != 0 {\n\t\tvm.dstack.PushInt(scriptNum(1))\n\t} else {\n\t\tvm.dstack.PushInt(scriptNum(0))\n\t}\n\n\treturn nil\n}\n\n// opcodeNumEqual treats the top two items on the data stack as integers.  When\n// they are equal, they are replaced with a 1, otherwise a 0.\n//\n// Stack transformation (x1==x2): [... 5 5] -> [... 1]\n// Stack transformation (x1!=x2): [... 5 7] -> [... 0]\nfunc opcodeNumEqual(op *parsedOpcode, vm *Engine) error {\n\tv0, err := vm.dstack.PopInt()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tv1, err := vm.dstack.PopInt()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif v0 == v1 {\n\t\tvm.dstack.PushInt(scriptNum(1))\n\t} else {\n\t\tvm.dstack.PushInt(scriptNum(0))\n\t}\n\n\treturn nil\n}\n\n// opcodeNumEqualVerify is a combination of opcodeNumEqual and opcodeVerify.\n//\n// Specifically, treats the top two items on the data stack as integers.  When\n// they are equal, they are replaced with a 1, otherwise a 0.  Then, it examines\n// the top item on the data stack as a boolean value and verifies it evaluates\n// to true.  An error is returned if it does not.\n//\n// Stack transformation: [... x1 x2] -> [... bool] -> [...]\nfunc opcodeNumEqualVerify(op *parsedOpcode, vm *Engine) error {\n\terr := opcodeNumEqual(op, vm)\n\tif err == nil {\n\t\terr = abstractVerify(op, vm, ErrNumEqualVerify)\n\t}\n\treturn err\n}\n\n// opcodeNumNotEqual treats the top two items on the data stack as integers.\n// When they are NOT equal, they are replaced with a 1, otherwise a 0.\n//\n// Stack transformation (x1==x2): [... 5 5] -> [... 0]\n// Stack transformation (x1!=x2): [... 5 7] -> [... 1]\nfunc opcodeNumNotEqual(op *parsedOpcode, vm *Engine) error {\n\tv0, err := vm.dstack.PopInt()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tv1, err := vm.dstack.PopInt()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif v0 != v1 {\n\t\tvm.dstack.PushInt(scriptNum(1))\n\t} else {\n\t\tvm.dstack.PushInt(scriptNum(0))\n\t}\n\n\treturn nil\n}\n\n// opcodeLessThan treats the top two items on the data stack as integers.  When\n// the second-to-top item is less than the top item, they are replaced with a 1,\n// otherwise a 0.\n//\n// Stack transformation: [... x1 x2] -> [... bool]\nfunc opcodeLessThan(op *parsedOpcode, vm *Engine) error {\n\tv0, err := vm.dstack.PopInt()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tv1, err := vm.dstack.PopInt()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif v1 < v0 {\n\t\tvm.dstack.PushInt(scriptNum(1))\n\t} else {\n\t\tvm.dstack.PushInt(scriptNum(0))\n\t}\n\n\treturn nil\n}\n\n// opcodeGreaterThan treats the top two items on the data stack as integers.\n// When the second-to-top item is greater than the top item, they are replaced\n// with a 1, otherwise a 0.\n//\n// Stack transformation: [... x1 x2] -> [... bool]\nfunc opcodeGreaterThan(op *parsedOpcode, vm *Engine) error {\n\tv0, err := vm.dstack.PopInt()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tv1, err := vm.dstack.PopInt()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif v1 > v0 {\n\t\tvm.dstack.PushInt(scriptNum(1))\n\t} else {\n\t\tvm.dstack.PushInt(scriptNum(0))\n\t}\n\treturn nil\n}\n\n// opcodeLessThanOrEqual treats the top two items on the data stack as integers.\n// When the second-to-top item is less than or equal to the top item, they are\n// replaced with a 1, otherwise a 0.\n//\n// Stack transformation: [... x1 x2] -> [... bool]\nfunc opcodeLessThanOrEqual(op *parsedOpcode, vm *Engine) error {\n\tv0, err := vm.dstack.PopInt()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tv1, err := vm.dstack.PopInt()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif v1 <= v0 {\n\t\tvm.dstack.PushInt(scriptNum(1))\n\t} else {\n\t\tvm.dstack.PushInt(scriptNum(0))\n\t}\n\treturn nil\n}\n\n// opcodeGreaterThanOrEqual treats the top two items on the data stack as\n// integers.  When the second-to-top item is greater than or equal to the top\n// item, they are replaced with a 1, otherwise a 0.\n//\n// Stack transformation: [... x1 x2] -> [... bool]\nfunc opcodeGreaterThanOrEqual(op *parsedOpcode, vm *Engine) error {\n\tv0, err := vm.dstack.PopInt()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tv1, err := vm.dstack.PopInt()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif v1 >= v0 {\n\t\tvm.dstack.PushInt(scriptNum(1))\n\t} else {\n\t\tvm.dstack.PushInt(scriptNum(0))\n\t}\n\n\treturn nil\n}\n\n// opcodeMin treats the top two items on the data stack as integers and replaces\n// them with the minimum of the two.\n//\n// Stack transformation: [... x1 x2] -> [... min(x1, x2)]\nfunc opcodeMin(op *parsedOpcode, vm *Engine) error {\n\tv0, err := vm.dstack.PopInt()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tv1, err := vm.dstack.PopInt()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif v1 < v0 {\n\t\tvm.dstack.PushInt(v1)\n\t} else {\n\t\tvm.dstack.PushInt(v0)\n\t}\n\n\treturn nil\n}\n\n// opcodeMax treats the top two items on the data stack as integers and replaces\n// them with the maximum of the two.\n//\n// Stack transformation: [... x1 x2] -> [... max(x1, x2)]\nfunc opcodeMax(op *parsedOpcode, vm *Engine) error {\n\tv0, err := vm.dstack.PopInt()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tv1, err := vm.dstack.PopInt()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif v1 > v0 {\n\t\tvm.dstack.PushInt(v1)\n\t} else {\n\t\tvm.dstack.PushInt(v0)\n\t}\n\n\treturn nil\n}\n\n// opcodeWithin treats the top 3 items on the data stack as integers.  When the\n// value to test is within the specified range (left inclusive), they are\n// replaced with a 1, otherwise a 0.\n//\n// The top item is the max value, the second-top-item is the minimum value, and\n// the third-to-top item is the value to test.\n//\n// Stack transformation: [... x1 min max] -> [... bool]\nfunc opcodeWithin(op *parsedOpcode, vm *Engine) error {\n\tmaxVal, err := vm.dstack.PopInt()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tminVal, err := vm.dstack.PopInt()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tx, err := vm.dstack.PopInt()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif x >= minVal && x < maxVal {\n\t\tvm.dstack.PushInt(scriptNum(1))\n\t} else {\n\t\tvm.dstack.PushInt(scriptNum(0))\n\t}\n\treturn nil\n}\n\n// calcHash calculates the hash of hasher over buf.\nfunc calcHash(buf []byte, hasher hash.Hash) []byte {\n\thasher.Write(buf)\n\treturn hasher.Sum(nil)\n}\n\n// opcodeRipemd160 treats the top item of the data stack as raw bytes and\n// replaces it with ripemd160(data).\n//\n// Stack transformation: [... x1] -> [... ripemd160(x1)]\nfunc opcodeRipemd160(op *parsedOpcode, vm *Engine) error {\n\tbuf, err := vm.dstack.PopByteArray()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tvm.dstack.PushByteArray(calcHash(buf, ripemd160.New()))\n\treturn nil\n}\n\n// opcodeSha1 treats the top item of the data stack as raw bytes and replaces it\n// with sha1(data).\n//\n// Stack transformation: [... x1] -> [... sha1(x1)]\nfunc opcodeSha1(op *parsedOpcode, vm *Engine) error {\n\tbuf, err := vm.dstack.PopByteArray()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\thash := sha1.Sum(buf)\n\tvm.dstack.PushByteArray(hash[:])\n\treturn nil\n}\n\n// opcodeSha256 treats the top item of the data stack as raw bytes and replaces\n// it with sha256(data).\n//\n// Stack transformation: [... x1] -> [... sha256(x1)]\nfunc opcodeSha256(op *parsedOpcode, vm *Engine) error {\n\tbuf, err := vm.dstack.PopByteArray()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\thash := sha256.Sum256(buf)\n\tvm.dstack.PushByteArray(hash[:])\n\treturn nil\n}\n\n// opcodeHash160 treats the top item of the data stack as raw bytes and replaces\n// it with ripemd160(sha256(data)).\n//\n// Stack transformation: [... x1] -> [... ripemd160(sha256(x1))]\nfunc opcodeHash160(op *parsedOpcode, vm *Engine) error {\n\tbuf, err := vm.dstack.PopByteArray()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\thash := sha256.Sum256(buf)\n\tvm.dstack.PushByteArray(calcHash(hash[:], ripemd160.New()))\n\treturn nil\n}\n\n// opcodeHash256 treats the top item of the data stack as raw bytes and replaces\n// it with sha256(sha256(data)).\n//\n// Stack transformation: [... x1] -> [... sha256(sha256(x1))]\nfunc opcodeHash256(op *parsedOpcode, vm *Engine) error {\n\tbuf, err := vm.dstack.PopByteArray()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tvm.dstack.PushByteArray(chainhash.DoubleHashB(buf))\n\treturn nil\n}\n\n// opcodeCodeSeparator stores the current script offset as the most recently\n// seen OP_CODESEPARATOR which is used during signature checking.\n//\n// This opcode does not change the contents of the data stack.\nfunc opcodeCodeSeparator(op *parsedOpcode, vm *Engine) error {\n\tvm.lastCodeSep = vm.scriptOff\n\treturn nil\n}\n\n// opcodeCheckSig treats the top 2 items on the stack as a public key and a\n// signature and replaces them with a bool which indicates if the signature was\n// successfully verified.\n//\n// The process of verifying a signature requires calculating a signature hash in\n// the same way the transaction signer did.  It involves hashing portions of the\n// transaction based on the hash type byte (which is the final byte of the\n// signature) and the portion of the script starting from the most recent\n// OP_CODESEPARATOR (or the beginning of the script if there are none) to the\n// end of the script (with any other OP_CODESEPARATORs removed).  Once this\n// \"script hash\" is calculated, the signature is checked using standard\n// cryptographic methods against the provided public key.\n//\n// Stack transformation: [... signature pubkey] -> [... bool]\nfunc opcodeCheckSig(op *parsedOpcode, vm *Engine) error {\n\tpkBytes, err := vm.dstack.PopByteArray()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfullSigBytes, err := vm.dstack.PopByteArray()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// The signature actually needs needs to be longer than this, but at\n\t// least 1 byte is needed for the hash type below.  The full length is\n\t// checked depending on the script flags and upon parsing the signature.\n\tif len(fullSigBytes) < 1 {\n\t\tvm.dstack.PushBool(false)\n\t\treturn nil\n\t}\n\n\t// Trim off hashtype from the signature string and check if the\n\t// signature and pubkey conform to the strict encoding requirements\n\t// depending on the flags.\n\t//\n\t// NOTE: When the strict encoding flags are set, any errors in the\n\t// signature or public encoding here result in an immediate script error\n\t// (and thus no result bool is pushed to the data stack).  This differs\n\t// from the logic below where any errors in parsing the signature is\n\t// treated as the signature failure resulting in false being pushed to\n\t// the data stack.  This is required because the more general script\n\t// validation consensus rules do not have the new strict encoding\n\t// requirements enabled by the flags.\n\thashType := SigHashType(fullSigBytes[len(fullSigBytes)-1])\n\tsigBytes := fullSigBytes[:len(fullSigBytes)-1]\n\tif err := vm.checkHashTypeEncoding(hashType); err != nil {\n\t\treturn err\n\t}\n\tif err := vm.checkSignatureEncoding(sigBytes); err != nil {\n\t\treturn err\n\t}\n\tif err := vm.checkPubKeyEncoding(pkBytes); err != nil {\n\t\treturn err\n\t}\n\n\t// Get script starting from the most recent OP_CODESEPARATOR.\n\tsubScript := vm.subScript()\n\n\t// Generate the signature hash based on the signature hash type.\n\tvar hash []byte\n\tif vm.isWitnessVersionActive(0) {\n\t\tvar sigHashes *TxSigHashes\n\t\tif vm.hashCache != nil {\n\t\t\tsigHashes = vm.hashCache\n\t\t} else {\n\t\t\tsigHashes = NewTxSigHashes(&vm.tx)\n\t\t}\n\n\t\thash, err = calcWitnessSignatureHash(subScript, sigHashes, hashType,\n\t\t\t&vm.tx, vm.txIdx, vm.inputAmount)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t} else {\n\t\t// Remove the signature since there is no way for a signature\n\t\t// to sign itself.\n\t\tsubScript = removeOpcodeByData(subScript, fullSigBytes)\n\n\t\thash = calcSignatureHash(subScript, hashType, &vm.tx, vm.txIdx)\n\t}\n\n\tpubKey, err := btcec.ParsePubKey(pkBytes, btcec.S256())\n\tif err != nil {\n\t\tvm.dstack.PushBool(false)\n\t\treturn nil\n\t}\n\n\tvar signature *btcec.Signature\n\tif vm.hasFlag(ScriptVerifyStrictEncoding) ||\n\t\tvm.hasFlag(ScriptVerifyDERSignatures) {\n\n\t\tsignature, err = btcec.ParseDERSignature(sigBytes, btcec.S256())\n\t} else {\n\t\tsignature, err = btcec.ParseSignature(sigBytes, btcec.S256())\n\t}\n\tif err != nil {\n\t\tvm.dstack.PushBool(false)\n\t\treturn nil\n\t}\n\n\tvar valid bool\n\tif vm.sigCache != nil {\n\t\tvar sigHash chainhash.Hash\n\t\tcopy(sigHash[:], hash)\n\n\t\tvalid = vm.sigCache.Exists(sigHash, signature, pubKey)\n\t\tif !valid && signature.Verify(hash, pubKey) {\n\t\t\tvm.sigCache.Add(sigHash, signature, pubKey)\n\t\t\tvalid = true\n\t\t}\n\t} else {\n\t\tvalid = signature.Verify(hash, pubKey)\n\t}\n\n\tif !valid && vm.hasFlag(ScriptVerifyNullFail) && len(sigBytes) > 0 {\n\t\tstr := \"signature not empty on failed checksig\"\n\t\treturn scriptError(ErrNullFail, str)\n\t}\n\n\tvm.dstack.PushBool(valid)\n\treturn nil\n}\n\n// opcodeCheckSigVerify is a combination of opcodeCheckSig and opcodeVerify.\n// The opcodeCheckSig function is invoked followed by opcodeVerify.  See the\n// documentation for each of those opcodes for more details.\n//\n// Stack transformation: signature pubkey] -> [... bool] -> [...]\nfunc opcodeCheckSigVerify(op *parsedOpcode, vm *Engine) error {\n\terr := opcodeCheckSig(op, vm)\n\tif err == nil {\n\t\terr = abstractVerify(op, vm, ErrCheckSigVerify)\n\t}\n\treturn err\n}\n\n// parsedSigInfo houses a raw signature along with its parsed form and a flag\n// for whether or not it has already been parsed.  It is used to prevent parsing\n// the same signature multiple times when verifying a multisig.\ntype parsedSigInfo struct {\n\tsignature       []byte\n\tparsedSignature *btcec.Signature\n\tparsed          bool\n}\n\n// opcodeCheckMultiSig treats the top item on the stack as an integer number of\n// public keys, followed by that many entries as raw data representing the public\n// keys, followed by the integer number of signatures, followed by that many\n// entries as raw data representing the signatures.\n//\n// Due to a bug in the original Satoshi client implementation, an additional\n// dummy argument is also required by the consensus rules, although it is not\n// used.  The dummy value SHOULD be an OP_0, although that is not required by\n// the consensus rules.  When the ScriptStrictMultiSig flag is set, it must be\n// OP_0.\n//\n// All of the aforementioned stack items are replaced with a bool which\n// indicates if the requisite number of signatures were successfully verified.\n//\n// See the opcodeCheckSigVerify documentation for more details about the process\n// for verifying each signature.\n//\n// Stack transformation:\n// [... dummy [sig ...] numsigs [pubkey ...] numpubkeys] -> [... bool]\nfunc opcodeCheckMultiSig(op *parsedOpcode, vm *Engine) error {\n\tnumKeys, err := vm.dstack.PopInt()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tnumPubKeys := int(numKeys.Int32())\n\tif numPubKeys < 0 {\n\t\tstr := fmt.Sprintf(\"number of pubkeys %d is negative\",\n\t\t\tnumPubKeys)\n\t\treturn scriptError(ErrInvalidPubKeyCount, str)\n\t}\n\tif numPubKeys > MaxPubKeysPerMultiSig {\n\t\tstr := fmt.Sprintf(\"too many pubkeys: %d > %d\",\n\t\t\tnumPubKeys, MaxPubKeysPerMultiSig)\n\t\treturn scriptError(ErrInvalidPubKeyCount, str)\n\t}\n\tvm.numOps += numPubKeys\n\tif vm.numOps > MaxOpsPerScript {\n\t\tstr := fmt.Sprintf(\"exceeded max operation limit of %d\",\n\t\t\tMaxOpsPerScript)\n\t\treturn scriptError(ErrTooManyOperations, str)\n\t}\n\n\tpubKeys := make([][]byte, 0, numPubKeys)\n\tfor i := 0; i < numPubKeys; i++ {\n\t\tpubKey, err := vm.dstack.PopByteArray()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tpubKeys = append(pubKeys, pubKey)\n\t}\n\n\tnumSigs, err := vm.dstack.PopInt()\n\tif err != nil {\n\t\treturn err\n\t}\n\tnumSignatures := int(numSigs.Int32())\n\tif numSignatures < 0 {\n\t\tstr := fmt.Sprintf(\"number of signatures %d is negative\",\n\t\t\tnumSignatures)\n\t\treturn scriptError(ErrInvalidSignatureCount, str)\n\n\t}\n\tif numSignatures > numPubKeys {\n\t\tstr := fmt.Sprintf(\"more signatures than pubkeys: %d > %d\",\n\t\t\tnumSignatures, numPubKeys)\n\t\treturn scriptError(ErrInvalidSignatureCount, str)\n\t}\n\n\tsignatures := make([]*parsedSigInfo, 0, numSignatures)\n\tfor i := 0; i < numSignatures; i++ {\n\t\tsignature, err := vm.dstack.PopByteArray()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsigInfo := &parsedSigInfo{signature: signature}\n\t\tsignatures = append(signatures, sigInfo)\n\t}\n\n\t// A bug in the original Satoshi client implementation means one more\n\t// stack value than should be used must be popped.  Unfortunately, this\n\t// buggy behavior is now part of the consensus and a hard fork would be\n\t// required to fix it.\n\tdummy, err := vm.dstack.PopByteArray()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Since the dummy argument is otherwise not checked, it could be any\n\t// value which unfortunately provides a source of malleability.  Thus,\n\t// there is a script flag to force an error when the value is NOT 0.\n\tif vm.hasFlag(ScriptStrictMultiSig) && len(dummy) != 0 {\n\t\tstr := fmt.Sprintf(\"multisig dummy argument has length %d \"+\n\t\t\t\"instead of 0\", len(dummy))\n\t\treturn scriptError(ErrSigNullDummy, str)\n\t}\n\n\t// Get script starting from the most recent OP_CODESEPARATOR.\n\tscript := vm.subScript()\n\n\t// Remove the signature in pre version 0 segwit scripts since there is\n\t// no way for a signature to sign itself.\n\tif !vm.isWitnessVersionActive(0) {\n\t\tfor _, sigInfo := range signatures {\n\t\t\tscript = removeOpcodeByData(script, sigInfo.signature)\n\t\t}\n\t}\n\n\tsuccess := true\n\tnumPubKeys++\n\tpubKeyIdx := -1\n\tsignatureIdx := 0\n\tfor numSignatures > 0 {\n\t\t// When there are more signatures than public keys remaining,\n\t\t// there is no way to succeed since too many signatures are\n\t\t// invalid, so exit early.\n\t\tpubKeyIdx++\n\t\tnumPubKeys--\n\t\tif numSignatures > numPubKeys {\n\t\t\tsuccess = false\n\t\t\tbreak\n\t\t}\n\n\t\tsigInfo := signatures[signatureIdx]\n\t\tpubKey := pubKeys[pubKeyIdx]\n\n\t\t// The order of the signature and public key evaluation is\n\t\t// important here since it can be distinguished by an\n\t\t// OP_CHECKMULTISIG NOT when the strict encoding flag is set.\n\n\t\trawSig := sigInfo.signature\n\t\tif len(rawSig) == 0 {\n\t\t\t// Skip to the next pubkey if signature is empty.\n\t\t\tcontinue\n\t\t}\n\n\t\t// Split the signature into hash type and signature components.\n\t\thashType := SigHashType(rawSig[len(rawSig)-1])\n\t\tsignature := rawSig[:len(rawSig)-1]\n\n\t\t// Only parse and check the signature encoding once.\n\t\tvar parsedSig *btcec.Signature\n\t\tif !sigInfo.parsed {\n\t\t\tif err := vm.checkHashTypeEncoding(hashType); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif err := vm.checkSignatureEncoding(signature); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\t// Parse the signature.\n\t\t\tvar err error\n\t\t\tif vm.hasFlag(ScriptVerifyStrictEncoding) ||\n\t\t\t\tvm.hasFlag(ScriptVerifyDERSignatures) {\n\n\t\t\t\tparsedSig, err = btcec.ParseDERSignature(signature,\n\t\t\t\t\tbtcec.S256())\n\t\t\t} else {\n\t\t\t\tparsedSig, err = btcec.ParseSignature(signature,\n\t\t\t\t\tbtcec.S256())\n\t\t\t}\n\t\t\tsigInfo.parsed = true\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tsigInfo.parsedSignature = parsedSig\n\t\t} else {\n\t\t\t// Skip to the next pubkey if the signature is invalid.\n\t\t\tif sigInfo.parsedSignature == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Use the already parsed signature.\n\t\t\tparsedSig = sigInfo.parsedSignature\n\t\t}\n\n\t\tif err := vm.checkPubKeyEncoding(pubKey); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Parse the pubkey.\n\t\tparsedPubKey, err := btcec.ParsePubKey(pubKey, btcec.S256())\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Generate the signature hash based on the signature hash type.\n\t\tvar hash []byte\n\t\tif vm.isWitnessVersionActive(0) {\n\t\t\tvar sigHashes *TxSigHashes\n\t\t\tif vm.hashCache != nil {\n\t\t\t\tsigHashes = vm.hashCache\n\t\t\t} else {\n\t\t\t\tsigHashes = NewTxSigHashes(&vm.tx)\n\t\t\t}\n\n\t\t\thash, err = calcWitnessSignatureHash(script, sigHashes, hashType,\n\t\t\t\t&vm.tx, vm.txIdx, vm.inputAmount)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t} else {\n\t\t\thash = calcSignatureHash(script, hashType, &vm.tx, vm.txIdx)\n\t\t}\n\n\t\tvar valid bool\n\t\tif vm.sigCache != nil {\n\t\t\tvar sigHash chainhash.Hash\n\t\t\tcopy(sigHash[:], hash)\n\n\t\t\tvalid = vm.sigCache.Exists(sigHash, parsedSig, parsedPubKey)\n\t\t\tif !valid && parsedSig.Verify(hash, parsedPubKey) {\n\t\t\t\tvm.sigCache.Add(sigHash, parsedSig, parsedPubKey)\n\t\t\t\tvalid = true\n\t\t\t}\n\t\t} else {\n\t\t\tvalid = parsedSig.Verify(hash, parsedPubKey)\n\t\t}\n\n\t\tif valid {\n\t\t\t// PubKey verified, move on to the next signature.\n\t\t\tsignatureIdx++\n\t\t\tnumSignatures--\n\t\t}\n\t}\n\n\tif !success && vm.hasFlag(ScriptVerifyNullFail) {\n\t\tfor _, sig := range signatures {\n\t\t\tif len(sig.signature) > 0 {\n\t\t\t\tstr := \"not all signatures empty on failed checkmultisig\"\n\t\t\t\treturn scriptError(ErrNullFail, str)\n\t\t\t}\n\t\t}\n\t}\n\n\tvm.dstack.PushBool(success)\n\treturn nil\n}\n\n// opcodeCheckMultiSigVerify is a combination of opcodeCheckMultiSig and\n// opcodeVerify.  The opcodeCheckMultiSig is invoked followed by opcodeVerify.\n// See the documentation for each of those opcodes for more details.\n//\n// Stack transformation:\n// [... dummy [sig ...] numsigs [pubkey ...] numpubkeys] -> [... bool] -> [...]\nfunc opcodeCheckMultiSigVerify(op *parsedOpcode, vm *Engine) error {\n\terr := opcodeCheckMultiSig(op, vm)\n\tif err == nil {\n\t\terr = abstractVerify(op, vm, ErrCheckMultiSigVerify)\n\t}\n\treturn err\n}\n\n// OpcodeByName is a map that can be used to lookup an opcode by its\n// human-readable name (OP_CHECKMULTISIG, OP_CHECKSIG, etc).\nvar OpcodeByName = make(map[string]byte)\n\nfunc init() {\n\t// Initialize the opcode name to value map using the contents of the\n\t// opcode array.  Also add entries for \"OP_FALSE\", \"OP_TRUE\", and\n\t// \"OP_NOP2\" since they are aliases for \"OP_0\", \"OP_1\",\n\t// and \"OP_CHECKLOCKTIMEVERIFY\" respectively.\n\tfor _, op := range opcodeArray {\n\t\tOpcodeByName[op.name] = op.value\n\t}\n\tOpcodeByName[\"OP_FALSE\"] = OP_FALSE\n\tOpcodeByName[\"OP_TRUE\"] = OP_TRUE\n\tOpcodeByName[\"OP_NOP2\"] = OP_CHECKLOCKTIMEVERIFY\n\tOpcodeByName[\"OP_NOP3\"] = OP_CHECKSEQUENCEVERIFY\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/txscript/script.go",
    "content": "// Copyright (c) 2013-2017 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage txscript\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/btcsuite/btcd/chaincfg/chainhash\"\n\t\"github.com/btcsuite/btcd/wire\"\n)\n\n// Bip16Activation is the timestamp where BIP0016 is valid to use in the\n// blockchain.  To be used to determine if BIP0016 should be called for or not.\n// This timestamp corresponds to Sun Apr 1 00:00:00 UTC 2012.\nvar Bip16Activation = time.Unix(1333238400, 0)\n\n// SigHashType represents hash type bits at the end of a signature.\ntype SigHashType uint32\n\n// Hash type bits from the end of a signature.\nconst (\n\tSigHashOld          SigHashType = 0x0\n\tSigHashAll          SigHashType = 0x1\n\tSigHashNone         SigHashType = 0x2\n\tSigHashSingle       SigHashType = 0x3\n\tSigHashAnyOneCanPay SigHashType = 0x80\n\n\t// sigHashMask defines the number of bits of the hash type which is used\n\t// to identify which outputs are signed.\n\tsigHashMask = 0x1f\n)\n\n// These are the constants specified for maximums in individual scripts.\nconst (\n\tMaxOpsPerScript       = 201 // Max number of non-push operations.\n\tMaxPubKeysPerMultiSig = 20  // Multisig can't have more sigs than this.\n\tMaxScriptElementSize  = 520 // Max bytes pushable to the stack.\n)\n\n// isSmallInt returns whether or not the opcode is considered a small integer,\n// which is an OP_0, or OP_1 through OP_16.\nfunc isSmallInt(op *opcode) bool {\n\tif op.value == OP_0 || (op.value >= OP_1 && op.value <= OP_16) {\n\t\treturn true\n\t}\n\treturn false\n}\n\n// isScriptHash returns true if the script passed is a pay-to-script-hash\n// transaction, false otherwise.\nfunc isScriptHash(pops []parsedOpcode) bool {\n\treturn len(pops) == 3 &&\n\t\tpops[0].opcode.value == OP_HASH160 &&\n\t\tpops[1].opcode.value == OP_DATA_20 &&\n\t\tpops[2].opcode.value == OP_EQUAL\n}\n\n// IsPayToScriptHash returns true if the script is in the standard\n// pay-to-script-hash (P2SH) format, false otherwise.\nfunc IsPayToScriptHash(script []byte) bool {\n\tpops, err := parseScript(script)\n\tif err != nil {\n\t\treturn false\n\t}\n\treturn isScriptHash(pops)\n}\n\n// isWitnessScriptHash returns true if the passed script is a\n// pay-to-witness-script-hash transaction, false otherwise.\nfunc isWitnessScriptHash(pops []parsedOpcode) bool {\n\treturn len(pops) == 2 &&\n\t\tpops[0].opcode.value == OP_0 &&\n\t\tpops[1].opcode.value == OP_DATA_32\n}\n\n// IsPayToWitnessScriptHash returns true if the is in the standard\n// pay-to-witness-script-hash (P2WSH) format, false otherwise.\nfunc IsPayToWitnessScriptHash(script []byte) bool {\n\tpops, err := parseScript(script)\n\tif err != nil {\n\t\treturn false\n\t}\n\treturn isWitnessScriptHash(pops)\n}\n\n// IsPayToWitnessPubKeyHash returns true if the is in the standard\n// pay-to-witness-pubkey-hash (P2WKH) format, false otherwise.\nfunc IsPayToWitnessPubKeyHash(script []byte) bool {\n\tpops, err := parseScript(script)\n\tif err != nil {\n\t\treturn false\n\t}\n\treturn isWitnessPubKeyHash(pops)\n}\n\n// isWitnessPubKeyHash returns true if the passed script is a\n// pay-to-witness-pubkey-hash, and false otherwise.\nfunc isWitnessPubKeyHash(pops []parsedOpcode) bool {\n\treturn len(pops) == 2 &&\n\t\tpops[0].opcode.value == OP_0 &&\n\t\tpops[1].opcode.value == OP_DATA_20\n}\n\n// IsWitnessProgram returns true if the passed script is a valid witness\n// program which is encoded according to the passed witness program version. A\n// witness program must be a small integer (from 0-16), followed by 2-40 bytes\n// of pushed data.\nfunc IsWitnessProgram(script []byte) bool {\n\t// The length of the script must be between 4 and 42 bytes. The\n\t// smallest program is the witness version, followed by a data push of\n\t// 2 bytes.  The largest allowed witness program has a data push of\n\t// 40-bytes.\n\tif len(script) < 4 || len(script) > 42 {\n\t\treturn false\n\t}\n\n\tpops, err := parseScript(script)\n\tif err != nil {\n\t\treturn false\n\t}\n\n\treturn isWitnessProgram(pops)\n}\n\n// isWitnessProgram returns true if the passed script is a witness program, and\n// false otherwise. A witness program MUST adhere to the following constraints:\n// there must be exactly two pops (program version and the program itself), the\n// first opcode MUST be a small integer (0-16), the push data MUST be\n// canonical, and finally the size of the push data must be between 2 and 40\n// bytes.\nfunc isWitnessProgram(pops []parsedOpcode) bool {\n\treturn len(pops) == 2 &&\n\t\tisSmallInt(pops[0].opcode) &&\n\t\tcanonicalPush(pops[1]) &&\n\t\t(len(pops[1].data) >= 2 && len(pops[1].data) <= 40)\n}\n\n// ExtractWitnessProgramInfo attempts to extract the witness program version,\n// as well as the witness program itself from the passed script.\nfunc ExtractWitnessProgramInfo(script []byte) (int, []byte, error) {\n\tpops, err := parseScript(script)\n\tif err != nil {\n\t\treturn 0, nil, err\n\t}\n\n\t// If at this point, the scripts doesn't resemble a witness program,\n\t// then we'll exit early as there isn't a valid version or program to\n\t// extract.\n\tif !isWitnessProgram(pops) {\n\t\treturn 0, nil, fmt.Errorf(\"script is not a witness program, \" +\n\t\t\t\"unable to extract version or witness program\")\n\t}\n\n\twitnessVersion := asSmallInt(pops[0].opcode)\n\twitnessProgram := pops[1].data\n\n\treturn witnessVersion, witnessProgram, nil\n}\n\n// isPushOnly returns true if the script only pushes data, false otherwise.\nfunc isPushOnly(pops []parsedOpcode) bool {\n\t// NOTE: This function does NOT verify opcodes directly since it is\n\t// internal and is only called with parsed opcodes for scripts that did\n\t// not have any parse errors.  Thus, consensus is properly maintained.\n\n\tfor _, pop := range pops {\n\t\t// All opcodes up to OP_16 are data push instructions.\n\t\t// NOTE: This does consider OP_RESERVED to be a data push\n\t\t// instruction, but execution of OP_RESERVED will fail anyways\n\t\t// and matches the behavior required by consensus.\n\t\tif pop.opcode.value > OP_16 {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// IsPushOnlyScript returns whether or not the passed script only pushes data.\n//\n// False will be returned when the script does not parse.\nfunc IsPushOnlyScript(script []byte) bool {\n\tpops, err := parseScript(script)\n\tif err != nil {\n\t\treturn false\n\t}\n\treturn isPushOnly(pops)\n}\n\n// parseScriptTemplate is the same as parseScript but allows the passing of the\n// template list for testing purposes.  When there are parse errors, it returns\n// the list of parsed opcodes up to the point of failure along with the error.\nfunc parseScriptTemplate(script []byte, opcodes *[256]opcode) ([]parsedOpcode, error) {\n\tretScript := make([]parsedOpcode, 0, len(script))\n\tfor i := 0; i < len(script); {\n\t\tinstr := script[i]\n\t\top := &opcodes[instr]\n\t\tpop := parsedOpcode{opcode: op}\n\n\t\t// Parse data out of instruction.\n\t\tswitch {\n\t\t// No additional data.  Note that some of the opcodes, notably\n\t\t// OP_1NEGATE, OP_0, and OP_[1-16] represent the data\n\t\t// themselves.\n\t\tcase op.length == 1:\n\t\t\ti++\n\n\t\t// Data pushes of specific lengths -- OP_DATA_[1-75].\n\t\tcase op.length > 1:\n\t\t\tif len(script[i:]) < op.length {\n\t\t\t\tstr := fmt.Sprintf(\"opcode %s requires %d \"+\n\t\t\t\t\t\"bytes, but script only has %d remaining\",\n\t\t\t\t\top.name, op.length, len(script[i:]))\n\t\t\t\treturn retScript, scriptError(ErrMalformedPush,\n\t\t\t\t\tstr)\n\t\t\t}\n\n\t\t\t// Slice out the data.\n\t\t\tpop.data = script[i+1 : i+op.length]\n\t\t\ti += op.length\n\n\t\t// Data pushes with parsed lengths -- OP_PUSHDATAP{1,2,4}.\n\t\tcase op.length < 0:\n\t\t\tvar l uint\n\t\t\toff := i + 1\n\n\t\t\tif len(script[off:]) < -op.length {\n\t\t\t\tstr := fmt.Sprintf(\"opcode %s requires %d \"+\n\t\t\t\t\t\"bytes, but script only has %d remaining\",\n\t\t\t\t\top.name, -op.length, len(script[off:]))\n\t\t\t\treturn retScript, scriptError(ErrMalformedPush,\n\t\t\t\t\tstr)\n\t\t\t}\n\n\t\t\t// Next -length bytes are little endian length of data.\n\t\t\tswitch op.length {\n\t\t\tcase -1:\n\t\t\t\tl = uint(script[off])\n\t\t\tcase -2:\n\t\t\t\tl = ((uint(script[off+1]) << 8) |\n\t\t\t\t\tuint(script[off]))\n\t\t\tcase -4:\n\t\t\t\tl = ((uint(script[off+3]) << 24) |\n\t\t\t\t\t(uint(script[off+2]) << 16) |\n\t\t\t\t\t(uint(script[off+1]) << 8) |\n\t\t\t\t\tuint(script[off]))\n\t\t\tdefault:\n\t\t\t\tstr := fmt.Sprintf(\"invalid opcode length %d\",\n\t\t\t\t\top.length)\n\t\t\t\treturn retScript, scriptError(ErrMalformedPush,\n\t\t\t\t\tstr)\n\t\t\t}\n\n\t\t\t// Move offset to beginning of the data.\n\t\t\toff += -op.length\n\n\t\t\t// Disallow entries that do not fit script or were\n\t\t\t// sign extended.\n\t\t\tif int(l) > len(script[off:]) || int(l) < 0 {\n\t\t\t\tstr := fmt.Sprintf(\"opcode %s pushes %d bytes, \"+\n\t\t\t\t\t\"but script only has %d remaining\",\n\t\t\t\t\top.name, int(l), len(script[off:]))\n\t\t\t\treturn retScript, scriptError(ErrMalformedPush,\n\t\t\t\t\tstr)\n\t\t\t}\n\n\t\t\tpop.data = script[off : off+int(l)]\n\t\t\ti += 1 - op.length + int(l)\n\t\t}\n\n\t\tretScript = append(retScript, pop)\n\t}\n\n\treturn retScript, nil\n}\n\n// parseScript preparses the script in bytes into a list of parsedOpcodes while\n// applying a number of sanity checks.\nfunc parseScript(script []byte) ([]parsedOpcode, error) {\n\treturn parseScriptTemplate(script, &opcodeArray)\n}\n\n// unparseScript reversed the action of parseScript and returns the\n// parsedOpcodes as a list of bytes\nfunc unparseScript(pops []parsedOpcode) ([]byte, error) {\n\tscript := make([]byte, 0, len(pops))\n\tfor _, pop := range pops {\n\t\tb, err := pop.bytes()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tscript = append(script, b...)\n\t}\n\treturn script, nil\n}\n\n// DisasmString formats a disassembled script for one line printing.  When the\n// script fails to parse, the returned string will contain the disassembled\n// script up to the point the failure occurred along with the string '[error]'\n// appended.  In addition, the reason the script failed to parse is returned\n// if the caller wants more information about the failure.\nfunc DisasmString(buf []byte) (string, error) {\n\tvar disbuf bytes.Buffer\n\topcodes, err := parseScript(buf)\n\tfor _, pop := range opcodes {\n\t\tdisbuf.WriteString(pop.print(true))\n\t\tdisbuf.WriteByte(' ')\n\t}\n\tif disbuf.Len() > 0 {\n\t\tdisbuf.Truncate(disbuf.Len() - 1)\n\t}\n\tif err != nil {\n\t\tdisbuf.WriteString(\"[error]\")\n\t}\n\treturn disbuf.String(), err\n}\n\n// removeOpcode will remove any opcode matching ``opcode'' from the opcode\n// stream in pkscript\nfunc removeOpcode(pkscript []parsedOpcode, opcode byte) []parsedOpcode {\n\tretScript := make([]parsedOpcode, 0, len(pkscript))\n\tfor _, pop := range pkscript {\n\t\tif pop.opcode.value != opcode {\n\t\t\tretScript = append(retScript, pop)\n\t\t}\n\t}\n\treturn retScript\n}\n\n// canonicalPush returns true if the object is either not a push instruction\n// or the push instruction contained wherein is matches the canonical form\n// or using the smallest instruction to do the job. False otherwise.\nfunc canonicalPush(pop parsedOpcode) bool {\n\topcode := pop.opcode.value\n\tdata := pop.data\n\tdataLen := len(pop.data)\n\tif opcode > OP_16 {\n\t\treturn true\n\t}\n\n\tif opcode < OP_PUSHDATA1 && opcode > OP_0 && (dataLen == 1 && data[0] <= 16) {\n\t\treturn false\n\t}\n\tif opcode == OP_PUSHDATA1 && dataLen < OP_PUSHDATA1 {\n\t\treturn false\n\t}\n\tif opcode == OP_PUSHDATA2 && dataLen <= 0xff {\n\t\treturn false\n\t}\n\tif opcode == OP_PUSHDATA4 && dataLen <= 0xffff {\n\t\treturn false\n\t}\n\treturn true\n}\n\n// removeOpcodeByData will return the script minus any opcodes that would push\n// the passed data to the stack.\nfunc removeOpcodeByData(pkscript []parsedOpcode, data []byte) []parsedOpcode {\n\tretScript := make([]parsedOpcode, 0, len(pkscript))\n\tfor _, pop := range pkscript {\n\t\tif !canonicalPush(pop) || !bytes.Contains(pop.data, data) {\n\t\t\tretScript = append(retScript, pop)\n\t\t}\n\t}\n\treturn retScript\n\n}\n\n// calcHashPrevOuts calculates a single hash of all the previous outputs\n// (txid:index) referenced within the passed transaction. This calculated hash\n// can be re-used when validating all inputs spending segwit outputs, with a\n// signature hash type of SigHashAll. This allows validation to re-use previous\n// hashing computation, reducing the complexity of validating SigHashAll inputs\n// from  O(N^2) to O(N).\nfunc calcHashPrevOuts(tx *wire.MsgTx) chainhash.Hash {\n\tvar b bytes.Buffer\n\tfor _, in := range tx.TxIn {\n\t\t// First write out the 32-byte transaction ID one of whose\n\t\t// outputs are being referenced by this input.\n\t\tb.Write(in.PreviousOutPoint.Hash[:])\n\n\t\t// Next, we'll encode the index of the referenced output as a\n\t\t// little endian integer.\n\t\tvar buf [4]byte\n\t\tbinary.LittleEndian.PutUint32(buf[:], in.PreviousOutPoint.Index)\n\t\tb.Write(buf[:])\n\t}\n\n\treturn chainhash.DoubleHashH(b.Bytes())\n}\n\n// calcHashSequence computes an aggregated hash of each of the sequence numbers\n// within the inputs of the passed transaction. This single hash can be re-used\n// when validating all inputs spending segwit outputs, which include signatures\n// using the SigHashAll sighash type. This allows validation to re-use previous\n// hashing computation, reducing the complexity of validating SigHashAll inputs\n// from O(N^2) to O(N).\nfunc calcHashSequence(tx *wire.MsgTx) chainhash.Hash {\n\tvar b bytes.Buffer\n\tfor _, in := range tx.TxIn {\n\t\tvar buf [4]byte\n\t\tbinary.LittleEndian.PutUint32(buf[:], in.Sequence)\n\t\tb.Write(buf[:])\n\t}\n\n\treturn chainhash.DoubleHashH(b.Bytes())\n}\n\n// calcHashOutputs computes a hash digest of all outputs created by the\n// transaction encoded using the wire format. This single hash can be re-used\n// when validating all inputs spending witness programs, which include\n// signatures using the SigHashAll sighash type. This allows computation to be\n// cached, reducing the total hashing complexity from O(N^2) to O(N).\nfunc calcHashOutputs(tx *wire.MsgTx) chainhash.Hash {\n\tvar b bytes.Buffer\n\tfor _, out := range tx.TxOut {\n\t\twire.WriteTxOut(&b, 0, 0, out)\n\t}\n\n\treturn chainhash.DoubleHashH(b.Bytes())\n}\n\n// calcWitnessSignatureHash computes the sighash digest of a transaction's\n// segwit input using the new, optimized digest calculation algorithm defined\n// in BIP0143: https://github.com/bitcoin/bips/blob/master/bip-0143.mediawiki.\n// This function makes use of pre-calculated sighash fragments stored within\n// the passed HashCache to eliminate duplicate hashing computations when\n// calculating the final digest, reducing the complexity from O(N^2) to O(N).\n// Additionally, signatures now cover the input value of the referenced unspent\n// output. This allows offline, or hardware wallets to compute the exact amount\n// being spent, in addition to the final transaction fee. In the case the\n// wallet if fed an invalid input amount, the real sighash will differ causing\n// the produced signature to be invalid.\nfunc calcWitnessSignatureHash(subScript []parsedOpcode, sigHashes *TxSigHashes,\n\thashType SigHashType, tx *wire.MsgTx, idx int, amt int64) ([]byte, error) {\n\n\t// As a sanity check, ensure the passed input index for the transaction\n\t// is valid.\n\tif idx > len(tx.TxIn)-1 {\n\t\treturn nil, fmt.Errorf(\"idx %d but %d txins\", idx, len(tx.TxIn))\n\t}\n\n\t// We'll utilize this buffer throughout to incrementally calculate\n\t// the signature hash for this transaction.\n\tvar sigHash bytes.Buffer\n\n\t// First write out, then encode the transaction's version number.\n\tvar bVersion [4]byte\n\tbinary.LittleEndian.PutUint32(bVersion[:], uint32(tx.Version))\n\tsigHash.Write(bVersion[:])\n\n\t// Next write out the possibly pre-calculated hashes for the sequence\n\t// numbers of all inputs, and the hashes of the previous outs for all\n\t// outputs.\n\tvar zeroHash chainhash.Hash\n\n\t// If anyone can pay isn't active, then we can use the cached\n\t// hashPrevOuts, otherwise we just write zeroes for the prev outs.\n\tif hashType&SigHashAnyOneCanPay == 0 {\n\t\tsigHash.Write(sigHashes.HashPrevOuts[:])\n\t} else {\n\t\tsigHash.Write(zeroHash[:])\n\t}\n\n\t// If the sighash isn't anyone can pay, single, or none, the use the\n\t// cached hash sequences, otherwise write all zeroes for the\n\t// hashSequence.\n\tif hashType&SigHashAnyOneCanPay == 0 &&\n\t\thashType&sigHashMask != SigHashSingle &&\n\t\thashType&sigHashMask != SigHashNone {\n\t\tsigHash.Write(sigHashes.HashSequence[:])\n\t} else {\n\t\tsigHash.Write(zeroHash[:])\n\t}\n\n\ttxIn := tx.TxIn[idx]\n\n\t// Next, write the outpoint being spent.\n\tsigHash.Write(txIn.PreviousOutPoint.Hash[:])\n\tvar bIndex [4]byte\n\tbinary.LittleEndian.PutUint32(bIndex[:], txIn.PreviousOutPoint.Index)\n\tsigHash.Write(bIndex[:])\n\n\tif isWitnessPubKeyHash(subScript) {\n\t\t// The script code for a p2wkh is a length prefix varint for\n\t\t// the next 25 bytes, followed by a re-creation of the original\n\t\t// p2pkh pk script.\n\t\tsigHash.Write([]byte{0x19})\n\t\tsigHash.Write([]byte{OP_DUP})\n\t\tsigHash.Write([]byte{OP_HASH160})\n\t\tsigHash.Write([]byte{OP_DATA_20})\n\t\tsigHash.Write(subScript[1].data)\n\t\tsigHash.Write([]byte{OP_EQUALVERIFY})\n\t\tsigHash.Write([]byte{OP_CHECKSIG})\n\t} else {\n\t\t// For p2wsh outputs, and future outputs, the script code is\n\t\t// the original script, with all code separators removed,\n\t\t// serialized with a var int length prefix.\n\t\trawScript, _ := unparseScript(subScript)\n\t\twire.WriteVarBytes(&sigHash, 0, rawScript)\n\t}\n\n\t// Next, add the input amount, and sequence number of the input being\n\t// signed.\n\tvar bAmount [8]byte\n\tbinary.LittleEndian.PutUint64(bAmount[:], uint64(amt))\n\tsigHash.Write(bAmount[:])\n\tvar bSequence [4]byte\n\tbinary.LittleEndian.PutUint32(bSequence[:], txIn.Sequence)\n\tsigHash.Write(bSequence[:])\n\n\t// If the current signature mode isn't single, or none, then we can\n\t// re-use the pre-generated hashoutputs sighash fragment. Otherwise,\n\t// we'll serialize and add only the target output index to the signature\n\t// pre-image.\n\tif hashType&SigHashSingle != SigHashSingle &&\n\t\thashType&SigHashNone != SigHashNone {\n\t\tsigHash.Write(sigHashes.HashOutputs[:])\n\t} else if hashType&sigHashMask == SigHashSingle && idx < len(tx.TxOut) {\n\t\tvar b bytes.Buffer\n\t\twire.WriteTxOut(&b, 0, 0, tx.TxOut[idx])\n\t\tsigHash.Write(chainhash.DoubleHashB(b.Bytes()))\n\t} else {\n\t\tsigHash.Write(zeroHash[:])\n\t}\n\n\t// Finally, write out the transaction's locktime, and the sig hash\n\t// type.\n\tvar bLockTime [4]byte\n\tbinary.LittleEndian.PutUint32(bLockTime[:], tx.LockTime)\n\tsigHash.Write(bLockTime[:])\n\tvar bHashType [4]byte\n\tbinary.LittleEndian.PutUint32(bHashType[:], uint32(hashType))\n\tsigHash.Write(bHashType[:])\n\n\treturn chainhash.DoubleHashB(sigHash.Bytes()), nil\n}\n\n// CalcWitnessSigHash computes the sighash digest for the specified input of\n// the target transaction observing the desired sig hash type.\nfunc CalcWitnessSigHash(script []byte, sigHashes *TxSigHashes, hType SigHashType,\n\ttx *wire.MsgTx, idx int, amt int64) ([]byte, error) {\n\n\tparsedScript, err := parseScript(script)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"cannot parse output script: %v\", err)\n\t}\n\n\treturn calcWitnessSignatureHash(parsedScript, sigHashes, hType, tx, idx,\n\t\tamt)\n}\n\n// shallowCopyTx creates a shallow copy of the transaction for use when\n// calculating the signature hash.  It is used over the Copy method on the\n// transaction itself since that is a deep copy and therefore does more work and\n// allocates much more space than needed.\nfunc shallowCopyTx(tx *wire.MsgTx) wire.MsgTx {\n\t// As an additional memory optimization, use contiguous backing arrays\n\t// for the copied inputs and outputs and point the final slice of\n\t// pointers into the contiguous arrays.  This avoids a lot of small\n\t// allocations.\n\ttxCopy := wire.MsgTx{\n\t\tVersion:  tx.Version,\n\t\tTxIn:     make([]*wire.TxIn, len(tx.TxIn)),\n\t\tTxOut:    make([]*wire.TxOut, len(tx.TxOut)),\n\t\tLockTime: tx.LockTime,\n\t}\n\ttxIns := make([]wire.TxIn, len(tx.TxIn))\n\tfor i, oldTxIn := range tx.TxIn {\n\t\ttxIns[i] = *oldTxIn\n\t\ttxCopy.TxIn[i] = &txIns[i]\n\t}\n\ttxOuts := make([]wire.TxOut, len(tx.TxOut))\n\tfor i, oldTxOut := range tx.TxOut {\n\t\ttxOuts[i] = *oldTxOut\n\t\ttxCopy.TxOut[i] = &txOuts[i]\n\t}\n\treturn txCopy\n}\n\n// CalcSignatureHash will, given a script and hash type for the current script\n// engine instance, calculate the signature hash to be used for signing and\n// verification.\nfunc CalcSignatureHash(script []byte, hashType SigHashType, tx *wire.MsgTx, idx int) ([]byte, error) {\n\tparsedScript, err := parseScript(script)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"cannot parse output script: %v\", err)\n\t}\n\treturn calcSignatureHash(parsedScript, hashType, tx, idx), nil\n}\n\n// calcSignatureHash will, given a script and hash type for the current script\n// engine instance, calculate the signature hash to be used for signing and\n// verification.\nfunc calcSignatureHash(script []parsedOpcode, hashType SigHashType, tx *wire.MsgTx, idx int) []byte {\n\t// The SigHashSingle signature type signs only the corresponding input\n\t// and output (the output with the same index number as the input).\n\t//\n\t// Since transactions can have more inputs than outputs, this means it\n\t// is improper to use SigHashSingle on input indices that don't have a\n\t// corresponding output.\n\t//\n\t// A bug in the original Satoshi client implementation means specifying\n\t// an index that is out of range results in a signature hash of 1 (as a\n\t// uint256 little endian).  The original intent appeared to be to\n\t// indicate failure, but unfortunately, it was never checked and thus is\n\t// treated as the actual signature hash.  This buggy behavior is now\n\t// part of the consensus and a hard fork would be required to fix it.\n\t//\n\t// Due to this, care must be taken by software that creates transactions\n\t// which make use of SigHashSingle because it can lead to an extremely\n\t// dangerous situation where the invalid inputs will end up signing a\n\t// hash of 1.  This in turn presents an opportunity for attackers to\n\t// cleverly construct transactions which can steal those coins provided\n\t// they can reuse signatures.\n\tif hashType&sigHashMask == SigHashSingle && idx >= len(tx.TxOut) {\n\t\tvar hash chainhash.Hash\n\t\thash[0] = 0x01\n\t\treturn hash[:]\n\t}\n\n\t// Remove all instances of OP_CODESEPARATOR from the script.\n\tscript = removeOpcode(script, OP_CODESEPARATOR)\n\n\t// Make a shallow copy of the transaction, zeroing out the script for\n\t// all inputs that are not currently being processed.\n\ttxCopy := shallowCopyTx(tx)\n\tfor i := range txCopy.TxIn {\n\t\tif i == idx {\n\t\t\t// UnparseScript cannot fail here because removeOpcode\n\t\t\t// above only returns a valid script.\n\t\t\tsigScript, _ := unparseScript(script)\n\t\t\ttxCopy.TxIn[idx].SignatureScript = sigScript\n\t\t} else {\n\t\t\ttxCopy.TxIn[i].SignatureScript = nil\n\t\t}\n\t}\n\n\tswitch hashType & sigHashMask {\n\tcase SigHashNone:\n\t\ttxCopy.TxOut = txCopy.TxOut[0:0] // Empty slice.\n\t\tfor i := range txCopy.TxIn {\n\t\t\tif i != idx {\n\t\t\t\ttxCopy.TxIn[i].Sequence = 0\n\t\t\t}\n\t\t}\n\n\tcase SigHashSingle:\n\t\t// Resize output array to up to and including requested index.\n\t\ttxCopy.TxOut = txCopy.TxOut[:idx+1]\n\n\t\t// All but current output get zeroed out.\n\t\tfor i := 0; i < idx; i++ {\n\t\t\ttxCopy.TxOut[i].Value = -1\n\t\t\ttxCopy.TxOut[i].PkScript = nil\n\t\t}\n\n\t\t// Sequence on all other inputs is 0, too.\n\t\tfor i := range txCopy.TxIn {\n\t\t\tif i != idx {\n\t\t\t\ttxCopy.TxIn[i].Sequence = 0\n\t\t\t}\n\t\t}\n\n\tdefault:\n\t\t// Consensus treats undefined hashtypes like normal SigHashAll\n\t\t// for purposes of hash generation.\n\t\tfallthrough\n\tcase SigHashOld:\n\t\tfallthrough\n\tcase SigHashAll:\n\t\t// Nothing special here.\n\t}\n\tif hashType&SigHashAnyOneCanPay != 0 {\n\t\ttxCopy.TxIn = txCopy.TxIn[idx : idx+1]\n\t}\n\n\t// The final hash is the double sha256 of both the serialized modified\n\t// transaction and the hash type (encoded as a 4-byte little-endian\n\t// value) appended.\n\twbuf := bytes.NewBuffer(make([]byte, 0, txCopy.SerializeSizeStripped()+4))\n\ttxCopy.SerializeNoWitness(wbuf)\n\tbinary.Write(wbuf, binary.LittleEndian, hashType)\n\treturn chainhash.DoubleHashB(wbuf.Bytes())\n}\n\n// asSmallInt returns the passed opcode, which must be true according to\n// isSmallInt(), as an integer.\nfunc asSmallInt(op *opcode) int {\n\tif op.value == OP_0 {\n\t\treturn 0\n\t}\n\n\treturn int(op.value - (OP_1 - 1))\n}\n\n// getSigOpCount is the implementation function for counting the number of\n// signature operations in the script provided by pops. If precise mode is\n// requested then we attempt to count the number of operations for a multisig\n// op. Otherwise we use the maximum.\nfunc getSigOpCount(pops []parsedOpcode, precise bool) int {\n\tnSigs := 0\n\tfor i, pop := range pops {\n\t\tswitch pop.opcode.value {\n\t\tcase OP_CHECKSIG:\n\t\t\tfallthrough\n\t\tcase OP_CHECKSIGVERIFY:\n\t\t\tnSigs++\n\t\tcase OP_CHECKMULTISIG:\n\t\t\tfallthrough\n\t\tcase OP_CHECKMULTISIGVERIFY:\n\t\t\t// If we are being precise then look for familiar\n\t\t\t// patterns for multisig, for now all we recognize is\n\t\t\t// OP_1 - OP_16 to signify the number of pubkeys.\n\t\t\t// Otherwise, we use the max of 20.\n\t\t\tif precise && i > 0 &&\n\t\t\t\tpops[i-1].opcode.value >= OP_1 &&\n\t\t\t\tpops[i-1].opcode.value <= OP_16 {\n\t\t\t\tnSigs += asSmallInt(pops[i-1].opcode)\n\t\t\t} else {\n\t\t\t\tnSigs += MaxPubKeysPerMultiSig\n\t\t\t}\n\t\tdefault:\n\t\t\t// Not a sigop.\n\t\t}\n\t}\n\n\treturn nSigs\n}\n\n// GetSigOpCount provides a quick count of the number of signature operations\n// in a script. a CHECKSIG operations counts for 1, and a CHECK_MULTISIG for 20.\n// If the script fails to parse, then the count up to the point of failure is\n// returned.\nfunc GetSigOpCount(script []byte) int {\n\t// Don't check error since parseScript returns the parsed-up-to-error\n\t// list of pops.\n\tpops, _ := parseScript(script)\n\treturn getSigOpCount(pops, false)\n}\n\n// GetPreciseSigOpCount returns the number of signature operations in\n// scriptPubKey.  If bip16 is true then scriptSig may be searched for the\n// Pay-To-Script-Hash script in order to find the precise number of signature\n// operations in the transaction.  If the script fails to parse, then the count\n// up to the point of failure is returned.\nfunc GetPreciseSigOpCount(scriptSig, scriptPubKey []byte, bip16 bool) int {\n\t// Don't check error since parseScript returns the parsed-up-to-error\n\t// list of pops.\n\tpops, _ := parseScript(scriptPubKey)\n\n\t// Treat non P2SH transactions as normal.\n\tif !(bip16 && isScriptHash(pops)) {\n\t\treturn getSigOpCount(pops, true)\n\t}\n\n\t// The public key script is a pay-to-script-hash, so parse the signature\n\t// script to get the final item.  Scripts that fail to fully parse count\n\t// as 0 signature operations.\n\tsigPops, err := parseScript(scriptSig)\n\tif err != nil {\n\t\treturn 0\n\t}\n\n\t// The signature script must only push data to the stack for P2SH to be\n\t// a valid pair, so the signature operation count is 0 when that is not\n\t// the case.\n\tif !isPushOnly(sigPops) || len(sigPops) == 0 {\n\t\treturn 0\n\t}\n\n\t// The P2SH script is the last item the signature script pushes to the\n\t// stack.  When the script is empty, there are no signature operations.\n\tshScript := sigPops[len(sigPops)-1].data\n\tif len(shScript) == 0 {\n\t\treturn 0\n\t}\n\n\t// Parse the P2SH script and don't check the error since parseScript\n\t// returns the parsed-up-to-error list of pops and the consensus rules\n\t// dictate signature operations are counted up to the first parse\n\t// failure.\n\tshPops, _ := parseScript(shScript)\n\treturn getSigOpCount(shPops, true)\n}\n\n// GetWitnessSigOpCount returns the number of signature operations generated by\n// spending the passed pkScript with the specified witness, or sigScript.\n// Unlike GetPreciseSigOpCount, this function is able to accurately count the\n// number of signature operations generated by spending witness programs, and\n// nested p2sh witness programs. If the script fails to parse, then the count\n// up to the point of failure is returned.\nfunc GetWitnessSigOpCount(sigScript, pkScript []byte, witness wire.TxWitness) int {\n\t// If this is a regular witness program, then we can proceed directly\n\t// to counting its signature operations without any further processing.\n\tif IsWitnessProgram(pkScript) {\n\t\treturn getWitnessSigOps(pkScript, witness)\n\t}\n\n\t// Next, we'll check the sigScript to see if this is a nested p2sh\n\t// witness program. This is a case wherein the sigScript is actually a\n\t// datapush of a p2wsh witness program.\n\tsigPops, err := parseScript(sigScript)\n\tif err != nil {\n\t\treturn 0\n\t}\n\tif IsPayToScriptHash(pkScript) && isPushOnly(sigPops) &&\n\t\tIsWitnessProgram(sigScript[1:]) {\n\t\treturn getWitnessSigOps(sigScript[1:], witness)\n\t}\n\n\treturn 0\n}\n\n// getWitnessSigOps returns the number of signature operations generated by\n// spending the passed witness program wit the passed witness. The exact\n// signature counting heuristic is modified by the version of the passed\n// witness program. If the version of the witness program is unable to be\n// extracted, then 0 is returned for the sig op count.\nfunc getWitnessSigOps(pkScript []byte, witness wire.TxWitness) int {\n\t// Attempt to extract the witness program version.\n\twitnessVersion, witnessProgram, err := ExtractWitnessProgramInfo(\n\t\tpkScript,\n\t)\n\tif err != nil {\n\t\treturn 0\n\t}\n\n\tswitch witnessVersion {\n\tcase 0:\n\t\tswitch {\n\t\tcase len(witnessProgram) == payToWitnessPubKeyHashDataSize:\n\t\t\treturn 1\n\t\tcase len(witnessProgram) == payToWitnessScriptHashDataSize &&\n\t\t\tlen(witness) > 0:\n\n\t\t\twitnessScript := witness[len(witness)-1]\n\t\t\tpops, _ := parseScript(witnessScript)\n\t\t\treturn getSigOpCount(pops, true)\n\t\t}\n\t}\n\n\treturn 0\n}\n\n// IsUnspendable returns whether the passed public key script is unspendable, or\n// guaranteed to fail at execution.  This allows inputs to be pruned instantly\n// when entering the UTXO set.\nfunc IsUnspendable(pkScript []byte) bool {\n\tpops, err := parseScript(pkScript)\n\tif err != nil {\n\t\treturn true\n\t}\n\n\treturn len(pops) > 0 && pops[0].opcode.value == OP_RETURN\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/txscript/scriptbuilder.go",
    "content": "// Copyright (c) 2013-2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage txscript\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n)\n\nconst (\n\t// defaultScriptAlloc is the default size used for the backing array\n\t// for a script being built by the ScriptBuilder.  The array will\n\t// dynamically grow as needed, but this figure is intended to provide\n\t// enough space for vast majority of scripts without needing to grow the\n\t// backing array multiple times.\n\tdefaultScriptAlloc = 500\n)\n\n// ErrScriptNotCanonical identifies a non-canonical script.  The caller can use\n// a type assertion to detect this error type.\ntype ErrScriptNotCanonical string\n\n// Error implements the error interface.\nfunc (e ErrScriptNotCanonical) Error() string {\n\treturn string(e)\n}\n\n// ScriptBuilder provides a facility for building custom scripts.  It allows\n// you to push opcodes, ints, and data while respecting canonical encoding.  In\n// general it does not ensure the script will execute correctly, however any\n// data pushes which would exceed the maximum allowed script engine limits and\n// are therefore guaranteed not to execute will not be pushed and will result in\n// the Script function returning an error.\n//\n// For example, the following would build a 2-of-3 multisig script for usage in\n// a pay-to-script-hash (although in this situation MultiSigScript() would be a\n// better choice to generate the script):\n// \tbuilder := txscript.NewScriptBuilder()\n// \tbuilder.AddOp(txscript.OP_2).AddData(pubKey1).AddData(pubKey2)\n// \tbuilder.AddData(pubKey3).AddOp(txscript.OP_3)\n// \tbuilder.AddOp(txscript.OP_CHECKMULTISIG)\n// \tscript, err := builder.Script()\n// \tif err != nil {\n// \t\t// Handle the error.\n// \t\treturn\n// \t}\n// \tfmt.Printf(\"Final multi-sig script: %x\\n\", script)\ntype ScriptBuilder struct {\n\tscript []byte\n\terr    error\n}\n\n// AddOp pushes the passed opcode to the end of the script.  The script will not\n// be modified if pushing the opcode would cause the script to exceed the\n// maximum allowed script engine size.\nfunc (b *ScriptBuilder) AddOp(opcode byte) *ScriptBuilder {\n\tif b.err != nil {\n\t\treturn b\n\t}\n\n\t// Pushes that would cause the script to exceed the largest allowed\n\t// script size would result in a non-canonical script.\n\tif len(b.script)+1 > MaxScriptSize {\n\t\tstr := fmt.Sprintf(\"adding an opcode would exceed the maximum \"+\n\t\t\t\"allowed canonical script length of %d\", MaxScriptSize)\n\t\tb.err = ErrScriptNotCanonical(str)\n\t\treturn b\n\t}\n\n\tb.script = append(b.script, opcode)\n\treturn b\n}\n\n// AddOps pushes the passed opcodes to the end of the script.  The script will\n// not be modified if pushing the opcodes would cause the script to exceed the\n// maximum allowed script engine size.\nfunc (b *ScriptBuilder) AddOps(opcodes []byte) *ScriptBuilder {\n\tif b.err != nil {\n\t\treturn b\n\t}\n\n\t// Pushes that would cause the script to exceed the largest allowed\n\t// script size would result in a non-canonical script.\n\tif len(b.script)+len(opcodes) > MaxScriptSize {\n\t\tstr := fmt.Sprintf(\"adding opcodes would exceed the maximum \"+\n\t\t\t\"allowed canonical script length of %d\", MaxScriptSize)\n\t\tb.err = ErrScriptNotCanonical(str)\n\t\treturn b\n\t}\n\n\tb.script = append(b.script, opcodes...)\n\treturn b\n}\n\n// canonicalDataSize returns the number of bytes the canonical encoding of the\n// data will take.\nfunc canonicalDataSize(data []byte) int {\n\tdataLen := len(data)\n\n\t// When the data consists of a single number that can be represented\n\t// by one of the \"small integer\" opcodes, that opcode will be instead\n\t// of a data push opcode followed by the number.\n\tif dataLen == 0 {\n\t\treturn 1\n\t} else if dataLen == 1 && data[0] <= 16 {\n\t\treturn 1\n\t} else if dataLen == 1 && data[0] == 0x81 {\n\t\treturn 1\n\t}\n\n\tif dataLen < OP_PUSHDATA1 {\n\t\treturn 1 + dataLen\n\t} else if dataLen <= 0xff {\n\t\treturn 2 + dataLen\n\t} else if dataLen <= 0xffff {\n\t\treturn 3 + dataLen\n\t}\n\n\treturn 5 + dataLen\n}\n\n// addData is the internal function that actually pushes the passed data to the\n// end of the script.  It automatically chooses canonical opcodes depending on\n// the length of the data.  A zero length buffer will lead to a push of empty\n// data onto the stack (OP_0).  No data limits are enforced with this function.\nfunc (b *ScriptBuilder) addData(data []byte) *ScriptBuilder {\n\tdataLen := len(data)\n\n\t// When the data consists of a single number that can be represented\n\t// by one of the \"small integer\" opcodes, use that opcode instead of\n\t// a data push opcode followed by the number.\n\tif dataLen == 0 || dataLen == 1 && data[0] == 0 {\n\t\tb.script = append(b.script, OP_0)\n\t\treturn b\n\t} else if dataLen == 1 && data[0] <= 16 {\n\t\tb.script = append(b.script, (OP_1-1)+data[0])\n\t\treturn b\n\t} else if dataLen == 1 && data[0] == 0x81 {\n\t\tb.script = append(b.script, byte(OP_1NEGATE))\n\t\treturn b\n\t}\n\n\t// Use one of the OP_DATA_# opcodes if the length of the data is small\n\t// enough so the data push instruction is only a single byte.\n\t// Otherwise, choose the smallest possible OP_PUSHDATA# opcode that\n\t// can represent the length of the data.\n\tif dataLen < OP_PUSHDATA1 {\n\t\tb.script = append(b.script, byte((OP_DATA_1-1)+dataLen))\n\t} else if dataLen <= 0xff {\n\t\tb.script = append(b.script, OP_PUSHDATA1, byte(dataLen))\n\t} else if dataLen <= 0xffff {\n\t\tbuf := make([]byte, 2)\n\t\tbinary.LittleEndian.PutUint16(buf, uint16(dataLen))\n\t\tb.script = append(b.script, OP_PUSHDATA2)\n\t\tb.script = append(b.script, buf...)\n\t} else {\n\t\tbuf := make([]byte, 4)\n\t\tbinary.LittleEndian.PutUint32(buf, uint32(dataLen))\n\t\tb.script = append(b.script, OP_PUSHDATA4)\n\t\tb.script = append(b.script, buf...)\n\t}\n\n\t// Append the actual data.\n\tb.script = append(b.script, data...)\n\n\treturn b\n}\n\n// AddFullData should not typically be used by ordinary users as it does not\n// include the checks which prevent data pushes larger than the maximum allowed\n// sizes which leads to scripts that can't be executed.  This is provided for\n// testing purposes such as regression tests where sizes are intentionally made\n// larger than allowed.\n//\n// Use AddData instead.\nfunc (b *ScriptBuilder) AddFullData(data []byte) *ScriptBuilder {\n\tif b.err != nil {\n\t\treturn b\n\t}\n\n\treturn b.addData(data)\n}\n\n// AddData pushes the passed data to the end of the script.  It automatically\n// chooses canonical opcodes depending on the length of the data.  A zero length\n// buffer will lead to a push of empty data onto the stack (OP_0) and any push\n// of data greater than MaxScriptElementSize will not modify the script since\n// that is not allowed by the script engine.  Also, the script will not be\n// modified if pushing the data would cause the script to exceed the maximum\n// allowed script engine size.\nfunc (b *ScriptBuilder) AddData(data []byte) *ScriptBuilder {\n\tif b.err != nil {\n\t\treturn b\n\t}\n\n\t// Pushes that would cause the script to exceed the largest allowed\n\t// script size would result in a non-canonical script.\n\tdataSize := canonicalDataSize(data)\n\tif len(b.script)+dataSize > MaxScriptSize {\n\t\tstr := fmt.Sprintf(\"adding %d bytes of data would exceed the \"+\n\t\t\t\"maximum allowed canonical script length of %d\",\n\t\t\tdataSize, MaxScriptSize)\n\t\tb.err = ErrScriptNotCanonical(str)\n\t\treturn b\n\t}\n\n\t// Pushes larger than the max script element size would result in a\n\t// script that is not canonical.\n\tdataLen := len(data)\n\tif dataLen > MaxScriptElementSize {\n\t\tstr := fmt.Sprintf(\"adding a data element of %d bytes would \"+\n\t\t\t\"exceed the maximum allowed script element size of %d\",\n\t\t\tdataLen, MaxScriptElementSize)\n\t\tb.err = ErrScriptNotCanonical(str)\n\t\treturn b\n\t}\n\n\treturn b.addData(data)\n}\n\n// AddInt64 pushes the passed integer to the end of the script.  The script will\n// not be modified if pushing the data would cause the script to exceed the\n// maximum allowed script engine size.\nfunc (b *ScriptBuilder) AddInt64(val int64) *ScriptBuilder {\n\tif b.err != nil {\n\t\treturn b\n\t}\n\n\t// Pushes that would cause the script to exceed the largest allowed\n\t// script size would result in a non-canonical script.\n\tif len(b.script)+1 > MaxScriptSize {\n\t\tstr := fmt.Sprintf(\"adding an integer would exceed the \"+\n\t\t\t\"maximum allow canonical script length of %d\",\n\t\t\tMaxScriptSize)\n\t\tb.err = ErrScriptNotCanonical(str)\n\t\treturn b\n\t}\n\n\t// Fast path for small integers and OP_1NEGATE.\n\tif val == 0 {\n\t\tb.script = append(b.script, OP_0)\n\t\treturn b\n\t}\n\tif val == -1 || (val >= 1 && val <= 16) {\n\t\tb.script = append(b.script, byte((OP_1-1)+val))\n\t\treturn b\n\t}\n\n\treturn b.AddData(scriptNum(val).Bytes())\n}\n\n// Reset resets the script so it has no content.\nfunc (b *ScriptBuilder) Reset() *ScriptBuilder {\n\tb.script = b.script[0:0]\n\tb.err = nil\n\treturn b\n}\n\n// Script returns the currently built script.  When any errors occurred while\n// building the script, the script will be returned up the point of the first\n// error along with the error.\nfunc (b *ScriptBuilder) Script() ([]byte, error) {\n\treturn b.script, b.err\n}\n\n// NewScriptBuilder returns a new instance of a script builder.  See\n// ScriptBuilder for details.\nfunc NewScriptBuilder() *ScriptBuilder {\n\treturn &ScriptBuilder{\n\t\tscript: make([]byte, 0, defaultScriptAlloc),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/txscript/scriptnum.go",
    "content": "// Copyright (c) 2015-2017 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage txscript\n\nimport (\n\t\"fmt\"\n)\n\nconst (\n\tmaxInt32 = 1<<31 - 1\n\tminInt32 = -1 << 31\n\n\t// defaultScriptNumLen is the default number of bytes\n\t// data being interpreted as an integer may be.\n\tdefaultScriptNumLen = 4\n)\n\n// scriptNum represents a numeric value used in the scripting engine with\n// special handling to deal with the subtle semantics required by consensus.\n//\n// All numbers are stored on the data and alternate stacks encoded as little\n// endian with a sign bit.  All numeric opcodes such as OP_ADD, OP_SUB,\n// and OP_MUL, are only allowed to operate on 4-byte integers in the range\n// [-2^31 + 1, 2^31 - 1], however the results of numeric operations may overflow\n// and remain valid so long as they are not used as inputs to other numeric\n// operations or otherwise interpreted as an integer.\n//\n// For example, it is possible for OP_ADD to have 2^31 - 1 for its two operands\n// resulting 2^32 - 2, which overflows, but is still pushed to the stack as the\n// result of the addition.  That value can then be used as input to OP_VERIFY\n// which will succeed because the data is being interpreted as a boolean.\n// However, if that same value were to be used as input to another numeric\n// opcode, such as OP_SUB, it must fail.\n//\n// This type handles the aforementioned requirements by storing all numeric\n// operation results as an int64 to handle overflow and provides the Bytes\n// method to get the serialized representation (including values that overflow).\n//\n// Then, whenever data is interpreted as an integer, it is converted to this\n// type by using the makeScriptNum function which will return an error if the\n// number is out of range or not minimally encoded depending on parameters.\n// Since all numeric opcodes involve pulling data from the stack and\n// interpreting it as an integer, it provides the required behavior.\ntype scriptNum int64\n\n// checkMinimalDataEncoding returns whether or not the passed byte array adheres\n// to the minimal encoding requirements.\nfunc checkMinimalDataEncoding(v []byte) error {\n\tif len(v) == 0 {\n\t\treturn nil\n\t}\n\n\t// Check that the number is encoded with the minimum possible\n\t// number of bytes.\n\t//\n\t// If the most-significant-byte - excluding the sign bit - is zero\n\t// then we're not minimal.  Note how this test also rejects the\n\t// negative-zero encoding, [0x80].\n\tif v[len(v)-1]&0x7f == 0 {\n\t\t// One exception: if there's more than one byte and the most\n\t\t// significant bit of the second-most-significant-byte is set\n\t\t// it would conflict with the sign bit.  An example of this case\n\t\t// is +-255, which encode to 0xff00 and 0xff80 respectively.\n\t\t// (big-endian).\n\t\tif len(v) == 1 || v[len(v)-2]&0x80 == 0 {\n\t\t\tstr := fmt.Sprintf(\"numeric value encoded as %x is \"+\n\t\t\t\t\"not minimally encoded\", v)\n\t\t\treturn scriptError(ErrMinimalData, str)\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Bytes returns the number serialized as a little endian with a sign bit.\n//\n// Example encodings:\n//       127 -> [0x7f]\n//      -127 -> [0xff]\n//       128 -> [0x80 0x00]\n//      -128 -> [0x80 0x80]\n//       129 -> [0x81 0x00]\n//      -129 -> [0x81 0x80]\n//       256 -> [0x00 0x01]\n//      -256 -> [0x00 0x81]\n//     32767 -> [0xff 0x7f]\n//    -32767 -> [0xff 0xff]\n//     32768 -> [0x00 0x80 0x00]\n//    -32768 -> [0x00 0x80 0x80]\nfunc (n scriptNum) Bytes() []byte {\n\t// Zero encodes as an empty byte slice.\n\tif n == 0 {\n\t\treturn nil\n\t}\n\n\t// Take the absolute value and keep track of whether it was originally\n\t// negative.\n\tisNegative := n < 0\n\tif isNegative {\n\t\tn = -n\n\t}\n\n\t// Encode to little endian.  The maximum number of encoded bytes is 9\n\t// (8 bytes for max int64 plus a potential byte for sign extension).\n\tresult := make([]byte, 0, 9)\n\tfor n > 0 {\n\t\tresult = append(result, byte(n&0xff))\n\t\tn >>= 8\n\t}\n\n\t// When the most significant byte already has the high bit set, an\n\t// additional high byte is required to indicate whether the number is\n\t// negative or positive.  The additional byte is removed when converting\n\t// back to an integral and its high bit is used to denote the sign.\n\t//\n\t// Otherwise, when the most significant byte does not already have the\n\t// high bit set, use it to indicate the value is negative, if needed.\n\tif result[len(result)-1]&0x80 != 0 {\n\t\textraByte := byte(0x00)\n\t\tif isNegative {\n\t\t\textraByte = 0x80\n\t\t}\n\t\tresult = append(result, extraByte)\n\n\t} else if isNegative {\n\t\tresult[len(result)-1] |= 0x80\n\t}\n\n\treturn result\n}\n\n// Int32 returns the script number clamped to a valid int32.  That is to say\n// when the script number is higher than the max allowed int32, the max int32\n// value is returned and vice versa for the minimum value.  Note that this\n// behavior is different from a simple int32 cast because that truncates\n// and the consensus rules dictate numbers which are directly cast to ints\n// provide this behavior.\n//\n// In practice, for most opcodes, the number should never be out of range since\n// it will have been created with makeScriptNum using the defaultScriptLen\n// value, which rejects them.  In case something in the future ends up calling\n// this function against the result of some arithmetic, which IS allowed to be\n// out of range before being reinterpreted as an integer, this will provide the\n// correct behavior.\nfunc (n scriptNum) Int32() int32 {\n\tif n > maxInt32 {\n\t\treturn maxInt32\n\t}\n\n\tif n < minInt32 {\n\t\treturn minInt32\n\t}\n\n\treturn int32(n)\n}\n\n// makeScriptNum interprets the passed serialized bytes as an encoded integer\n// and returns the result as a script number.\n//\n// Since the consensus rules dictate that serialized bytes interpreted as ints\n// are only allowed to be in the range determined by a maximum number of bytes,\n// on a per opcode basis, an error will be returned when the provided bytes\n// would result in a number outside of that range.  In particular, the range for\n// the vast majority of opcodes dealing with numeric values are limited to 4\n// bytes and therefore will pass that value to this function resulting in an\n// allowed range of [-2^31 + 1, 2^31 - 1].\n//\n// The requireMinimal flag causes an error to be returned if additional checks\n// on the encoding determine it is not represented with the smallest possible\n// number of bytes or is the negative 0 encoding, [0x80].  For example, consider\n// the number 127.  It could be encoded as [0x7f], [0x7f 0x00],\n// [0x7f 0x00 0x00 ...], etc.  All forms except [0x7f] will return an error with\n// requireMinimal enabled.\n//\n// The scriptNumLen is the maximum number of bytes the encoded value can be\n// before an ErrStackNumberTooBig is returned.  This effectively limits the\n// range of allowed values.\n// WARNING:  Great care should be taken if passing a value larger than\n// defaultScriptNumLen, which could lead to addition and multiplication\n// overflows.\n//\n// See the Bytes function documentation for example encodings.\nfunc makeScriptNum(v []byte, requireMinimal bool, scriptNumLen int) (scriptNum, error) {\n\t// Interpreting data requires that it is not larger than\n\t// the the passed scriptNumLen value.\n\tif len(v) > scriptNumLen {\n\t\tstr := fmt.Sprintf(\"numeric value encoded as %x is %d bytes \"+\n\t\t\t\"which exceeds the max allowed of %d\", v, len(v),\n\t\t\tscriptNumLen)\n\t\treturn 0, scriptError(ErrNumberTooBig, str)\n\t}\n\n\t// Enforce minimal encoded if requested.\n\tif requireMinimal {\n\t\tif err := checkMinimalDataEncoding(v); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t}\n\n\t// Zero is encoded as an empty byte slice.\n\tif len(v) == 0 {\n\t\treturn 0, nil\n\t}\n\n\t// Decode from little endian.\n\tvar result int64\n\tfor i, val := range v {\n\t\tresult |= int64(val) << uint8(8*i)\n\t}\n\n\t// When the most significant byte of the input bytes has the sign bit\n\t// set, the result is negative.  So, remove the sign bit from the result\n\t// and make it negative.\n\tif v[len(v)-1]&0x80 != 0 {\n\t\t// The maximum length of v has already been determined to be 4\n\t\t// above, so uint8 is enough to cover the max possible shift\n\t\t// value of 24.\n\t\tresult &= ^(int64(0x80) << uint8(8*(len(v)-1)))\n\t\treturn scriptNum(-result), nil\n\t}\n\n\treturn scriptNum(result), nil\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/txscript/sigcache.go",
    "content": "// Copyright (c) 2015-2016 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage txscript\n\nimport (\n\t\"sync\"\n\n\t\"github.com/btcsuite/btcd/btcec\"\n\t\"github.com/btcsuite/btcd/chaincfg/chainhash\"\n)\n\n// sigCacheEntry represents an entry in the SigCache. Entries within the\n// SigCache are keyed according to the sigHash of the signature. In the\n// scenario of a cache-hit (according to the sigHash), an additional comparison\n// of the signature, and public key will be executed in order to ensure a complete\n// match. In the occasion that two sigHashes collide, the newer sigHash will\n// simply overwrite the existing entry.\ntype sigCacheEntry struct {\n\tsig    *btcec.Signature\n\tpubKey *btcec.PublicKey\n}\n\n// SigCache implements an ECDSA signature verification cache with a randomized\n// entry eviction policy. Only valid signatures will be added to the cache. The\n// benefits of SigCache are two fold. Firstly, usage of SigCache mitigates a DoS\n// attack wherein an attack causes a victim's client to hang due to worst-case\n// behavior triggered while processing attacker crafted invalid transactions. A\n// detailed description of the mitigated DoS attack can be found here:\n// https://bitslog.wordpress.com/2013/01/23/fixed-bitcoin-vulnerability-explanation-why-the-signature-cache-is-a-dos-protection/.\n// Secondly, usage of the SigCache introduces a signature verification\n// optimization which speeds up the validation of transactions within a block,\n// if they've already been seen and verified within the mempool.\ntype SigCache struct {\n\tsync.RWMutex\n\tvalidSigs  map[chainhash.Hash]sigCacheEntry\n\tmaxEntries uint\n}\n\n// NewSigCache creates and initializes a new instance of SigCache. Its sole\n// parameter 'maxEntries' represents the maximum number of entries allowed to\n// exist in the SigCache at any particular moment. Random entries are evicted\n// to make room for new entries that would cause the number of entries in the\n// cache to exceed the max.\nfunc NewSigCache(maxEntries uint) *SigCache {\n\treturn &SigCache{\n\t\tvalidSigs:  make(map[chainhash.Hash]sigCacheEntry, maxEntries),\n\t\tmaxEntries: maxEntries,\n\t}\n}\n\n// Exists returns true if an existing entry of 'sig' over 'sigHash' for public\n// key 'pubKey' is found within the SigCache. Otherwise, false is returned.\n//\n// NOTE: This function is safe for concurrent access. Readers won't be blocked\n// unless there exists a writer, adding an entry to the SigCache.\nfunc (s *SigCache) Exists(sigHash chainhash.Hash, sig *btcec.Signature, pubKey *btcec.PublicKey) bool {\n\ts.RLock()\n\tentry, ok := s.validSigs[sigHash]\n\ts.RUnlock()\n\n\treturn ok && entry.pubKey.IsEqual(pubKey) && entry.sig.IsEqual(sig)\n}\n\n// Add adds an entry for a signature over 'sigHash' under public key 'pubKey'\n// to the signature cache. In the event that the SigCache is 'full', an\n// existing entry is randomly chosen to be evicted in order to make space for\n// the new entry.\n//\n// NOTE: This function is safe for concurrent access. Writers will block\n// simultaneous readers until function execution has concluded.\nfunc (s *SigCache) Add(sigHash chainhash.Hash, sig *btcec.Signature, pubKey *btcec.PublicKey) {\n\ts.Lock()\n\tdefer s.Unlock()\n\n\tif s.maxEntries <= 0 {\n\t\treturn\n\t}\n\n\t// If adding this new entry will put us over the max number of allowed\n\t// entries, then evict an entry.\n\tif uint(len(s.validSigs)+1) > s.maxEntries {\n\t\t// Remove a random entry from the map. Relying on the random\n\t\t// starting point of Go's map iteration. It's worth noting that\n\t\t// the random iteration starting point is not 100% guaranteed\n\t\t// by the spec, however most Go compilers support it.\n\t\t// Ultimately, the iteration order isn't important here because\n\t\t// in order to manipulate which items are evicted, an adversary\n\t\t// would need to be able to execute preimage attacks on the\n\t\t// hashing function in order to start eviction at a specific\n\t\t// entry.\n\t\tfor sigEntry := range s.validSigs {\n\t\t\tdelete(s.validSigs, sigEntry)\n\t\t\tbreak\n\t\t}\n\t}\n\ts.validSigs[sigHash] = sigCacheEntry{sig, pubKey}\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/txscript/sign.go",
    "content": "// Copyright (c) 2013-2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage txscript\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/btcsuite/btcd/btcec\"\n\t\"github.com/btcsuite/btcd/chaincfg\"\n\t\"github.com/btcsuite/btcd/wire\"\n\t\"github.com/btcsuite/btcutil\"\n)\n\n// RawTxInWitnessSignature returns the serialized ECDA signature for the input\n// idx of the given transaction, with the hashType appended to it. This\n// function is identical to RawTxInSignature, however the signature generated\n// signs a new sighash digest defined in BIP0143.\nfunc RawTxInWitnessSignature(tx *wire.MsgTx, sigHashes *TxSigHashes, idx int,\n\tamt int64, subScript []byte, hashType SigHashType,\n\tkey *btcec.PrivateKey) ([]byte, error) {\n\n\tparsedScript, err := parseScript(subScript)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"cannot parse output script: %v\", err)\n\t}\n\n\thash, err := calcWitnessSignatureHash(parsedScript, sigHashes, hashType, tx,\n\t\tidx, amt)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tsignature, err := key.Sign(hash)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"cannot sign tx input: %s\", err)\n\t}\n\n\treturn append(signature.Serialize(), byte(hashType)), nil\n}\n\n// WitnessSignature creates an input witness stack for tx to spend BTC sent\n// from a previous output to the owner of privKey using the p2wkh script\n// template. The passed transaction must contain all the inputs and outputs as\n// dictated by the passed hashType. The signature generated observes the new\n// transaction digest algorithm defined within BIP0143.\nfunc WitnessSignature(tx *wire.MsgTx, sigHashes *TxSigHashes, idx int, amt int64,\n\tsubscript []byte, hashType SigHashType, privKey *btcec.PrivateKey,\n\tcompress bool) (wire.TxWitness, error) {\n\n\tsig, err := RawTxInWitnessSignature(tx, sigHashes, idx, amt, subscript,\n\t\thashType, privKey)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tpk := (*btcec.PublicKey)(&privKey.PublicKey)\n\tvar pkData []byte\n\tif compress {\n\t\tpkData = pk.SerializeCompressed()\n\t} else {\n\t\tpkData = pk.SerializeUncompressed()\n\t}\n\n\t// A witness script is actually a stack, so we return an array of byte\n\t// slices here, rather than a single byte slice.\n\treturn wire.TxWitness{sig, pkData}, nil\n}\n\n// RawTxInSignature returns the serialized ECDSA signature for the input idx of\n// the given transaction, with hashType appended to it.\nfunc RawTxInSignature(tx *wire.MsgTx, idx int, subScript []byte,\n\thashType SigHashType, key *btcec.PrivateKey) ([]byte, error) {\n\n\thash, err := CalcSignatureHash(subScript, hashType, tx, idx)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tsignature, err := key.Sign(hash)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"cannot sign tx input: %s\", err)\n\t}\n\n\treturn append(signature.Serialize(), byte(hashType)), nil\n}\n\n// SignatureScript creates an input signature script for tx to spend BTC sent\n// from a previous output to the owner of privKey. tx must include all\n// transaction inputs and outputs, however txin scripts are allowed to be filled\n// or empty. The returned script is calculated to be used as the idx'th txin\n// sigscript for tx. subscript is the PkScript of the previous output being used\n// as the idx'th input. privKey is serialized in either a compressed or\n// uncompressed format based on compress. This format must match the same format\n// used to generate the payment address, or the script validation will fail.\nfunc SignatureScript(tx *wire.MsgTx, idx int, subscript []byte, hashType SigHashType, privKey *btcec.PrivateKey, compress bool) ([]byte, error) {\n\tsig, err := RawTxInSignature(tx, idx, subscript, hashType, privKey)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tpk := (*btcec.PublicKey)(&privKey.PublicKey)\n\tvar pkData []byte\n\tif compress {\n\t\tpkData = pk.SerializeCompressed()\n\t} else {\n\t\tpkData = pk.SerializeUncompressed()\n\t}\n\n\treturn NewScriptBuilder().AddData(sig).AddData(pkData).Script()\n}\n\nfunc p2pkSignatureScript(tx *wire.MsgTx, idx int, subScript []byte, hashType SigHashType, privKey *btcec.PrivateKey) ([]byte, error) {\n\tsig, err := RawTxInSignature(tx, idx, subScript, hashType, privKey)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn NewScriptBuilder().AddData(sig).Script()\n}\n\n// signMultiSig signs as many of the outputs in the provided multisig script as\n// possible. It returns the generated script and a boolean if the script fulfils\n// the contract (i.e. nrequired signatures are provided).  Since it is arguably\n// legal to not be able to sign any of the outputs, no error is returned.\nfunc signMultiSig(tx *wire.MsgTx, idx int, subScript []byte, hashType SigHashType,\n\taddresses []btcutil.Address, nRequired int, kdb KeyDB) ([]byte, bool) {\n\t// We start with a single OP_FALSE to work around the (now standard)\n\t// but in the reference implementation that causes a spurious pop at\n\t// the end of OP_CHECKMULTISIG.\n\tbuilder := NewScriptBuilder().AddOp(OP_FALSE)\n\tsigned := 0\n\tfor _, addr := range addresses {\n\t\tkey, _, err := kdb.GetKey(addr)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tsig, err := RawTxInSignature(tx, idx, subScript, hashType, key)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tbuilder.AddData(sig)\n\t\tsigned++\n\t\tif signed == nRequired {\n\t\t\tbreak\n\t\t}\n\n\t}\n\n\tscript, _ := builder.Script()\n\treturn script, signed == nRequired\n}\n\nfunc sign(chainParams *chaincfg.Params, tx *wire.MsgTx, idx int,\n\tsubScript []byte, hashType SigHashType, kdb KeyDB, sdb ScriptDB) ([]byte,\n\tScriptClass, []btcutil.Address, int, error) {\n\n\tclass, addresses, nrequired, err := ExtractPkScriptAddrs(subScript,\n\t\tchainParams)\n\tif err != nil {\n\t\treturn nil, NonStandardTy, nil, 0, err\n\t}\n\n\tswitch class {\n\tcase PubKeyTy:\n\t\t// look up key for address\n\t\tkey, _, err := kdb.GetKey(addresses[0])\n\t\tif err != nil {\n\t\t\treturn nil, class, nil, 0, err\n\t\t}\n\n\t\tscript, err := p2pkSignatureScript(tx, idx, subScript, hashType,\n\t\t\tkey)\n\t\tif err != nil {\n\t\t\treturn nil, class, nil, 0, err\n\t\t}\n\n\t\treturn script, class, addresses, nrequired, nil\n\tcase PubKeyHashTy:\n\t\t// look up key for address\n\t\tkey, compressed, err := kdb.GetKey(addresses[0])\n\t\tif err != nil {\n\t\t\treturn nil, class, nil, 0, err\n\t\t}\n\n\t\tscript, err := SignatureScript(tx, idx, subScript, hashType,\n\t\t\tkey, compressed)\n\t\tif err != nil {\n\t\t\treturn nil, class, nil, 0, err\n\t\t}\n\n\t\treturn script, class, addresses, nrequired, nil\n\tcase ScriptHashTy:\n\t\tscript, err := sdb.GetScript(addresses[0])\n\t\tif err != nil {\n\t\t\treturn nil, class, nil, 0, err\n\t\t}\n\n\t\treturn script, class, addresses, nrequired, nil\n\tcase MultiSigTy:\n\t\tscript, _ := signMultiSig(tx, idx, subScript, hashType,\n\t\t\taddresses, nrequired, kdb)\n\t\treturn script, class, addresses, nrequired, nil\n\tcase NullDataTy:\n\t\treturn nil, class, nil, 0,\n\t\t\terrors.New(\"can't sign NULLDATA transactions\")\n\tdefault:\n\t\treturn nil, class, nil, 0,\n\t\t\terrors.New(\"can't sign unknown transactions\")\n\t}\n}\n\n// mergeScripts merges sigScript and prevScript assuming they are both\n// partial solutions for pkScript spending output idx of tx. class, addresses\n// and nrequired are the result of extracting the addresses from pkscript.\n// The return value is the best effort merging of the two scripts. Calling this\n// function with addresses, class and nrequired that do not match pkScript is\n// an error and results in undefined behaviour.\nfunc mergeScripts(chainParams *chaincfg.Params, tx *wire.MsgTx, idx int,\n\tpkScript []byte, class ScriptClass, addresses []btcutil.Address,\n\tnRequired int, sigScript, prevScript []byte) []byte {\n\n\t// TODO: the scripthash and multisig paths here are overly\n\t// inefficient in that they will recompute already known data.\n\t// some internal refactoring could probably make this avoid needless\n\t// extra calculations.\n\tswitch class {\n\tcase ScriptHashTy:\n\t\t// Remove the last push in the script and then recurse.\n\t\t// this could be a lot less inefficient.\n\t\tsigPops, err := parseScript(sigScript)\n\t\tif err != nil || len(sigPops) == 0 {\n\t\t\treturn prevScript\n\t\t}\n\t\tprevPops, err := parseScript(prevScript)\n\t\tif err != nil || len(prevPops) == 0 {\n\t\t\treturn sigScript\n\t\t}\n\n\t\t// assume that script in sigPops is the correct one, we just\n\t\t// made it.\n\t\tscript := sigPops[len(sigPops)-1].data\n\n\t\t// We already know this information somewhere up the stack.\n\t\tclass, addresses, nrequired, _ :=\n\t\t\tExtractPkScriptAddrs(script, chainParams)\n\n\t\t// regenerate scripts.\n\t\tsigScript, _ := unparseScript(sigPops)\n\t\tprevScript, _ := unparseScript(prevPops)\n\n\t\t// Merge\n\t\tmergedScript := mergeScripts(chainParams, tx, idx, script,\n\t\t\tclass, addresses, nrequired, sigScript, prevScript)\n\n\t\t// Reappend the script and return the result.\n\t\tbuilder := NewScriptBuilder()\n\t\tbuilder.AddOps(mergedScript)\n\t\tbuilder.AddData(script)\n\t\tfinalScript, _ := builder.Script()\n\t\treturn finalScript\n\tcase MultiSigTy:\n\t\treturn mergeMultiSig(tx, idx, addresses, nRequired, pkScript,\n\t\t\tsigScript, prevScript)\n\n\t// It doesn't actually make sense to merge anything other than multiig\n\t// and scripthash (because it could contain multisig). Everything else\n\t// has either zero signature, can't be spent, or has a single signature\n\t// which is either present or not. The other two cases are handled\n\t// above. In the conflict case here we just assume the longest is\n\t// correct (this matches behaviour of the reference implementation).\n\tdefault:\n\t\tif len(sigScript) > len(prevScript) {\n\t\t\treturn sigScript\n\t\t}\n\t\treturn prevScript\n\t}\n}\n\n// mergeMultiSig combines the two signature scripts sigScript and prevScript\n// that both provide signatures for pkScript in output idx of tx. addresses\n// and nRequired should be the results from extracting the addresses from\n// pkScript. Since this function is internal only we assume that the arguments\n// have come from other functions internally and thus are all consistent with\n// each other, behaviour is undefined if this contract is broken.\nfunc mergeMultiSig(tx *wire.MsgTx, idx int, addresses []btcutil.Address,\n\tnRequired int, pkScript, sigScript, prevScript []byte) []byte {\n\n\t// This is an internal only function and we already parsed this script\n\t// as ok for multisig (this is how we got here), so if this fails then\n\t// all assumptions are broken and who knows which way is up?\n\tpkPops, _ := parseScript(pkScript)\n\n\tsigPops, err := parseScript(sigScript)\n\tif err != nil || len(sigPops) == 0 {\n\t\treturn prevScript\n\t}\n\n\tprevPops, err := parseScript(prevScript)\n\tif err != nil || len(prevPops) == 0 {\n\t\treturn sigScript\n\t}\n\n\t// Convenience function to avoid duplication.\n\textractSigs := func(pops []parsedOpcode, sigs [][]byte) [][]byte {\n\t\tfor _, pop := range pops {\n\t\t\tif len(pop.data) != 0 {\n\t\t\t\tsigs = append(sigs, pop.data)\n\t\t\t}\n\t\t}\n\t\treturn sigs\n\t}\n\n\tpossibleSigs := make([][]byte, 0, len(sigPops)+len(prevPops))\n\tpossibleSigs = extractSigs(sigPops, possibleSigs)\n\tpossibleSigs = extractSigs(prevPops, possibleSigs)\n\n\t// Now we need to match the signatures to pubkeys, the only real way to\n\t// do that is to try to verify them all and match it to the pubkey\n\t// that verifies it. we then can go through the addresses in order\n\t// to build our script. Anything that doesn't parse or doesn't verify we\n\t// throw away.\n\taddrToSig := make(map[string][]byte)\nsigLoop:\n\tfor _, sig := range possibleSigs {\n\n\t\t// can't have a valid signature that doesn't at least have a\n\t\t// hashtype, in practise it is even longer than this. but\n\t\t// that'll be checked next.\n\t\tif len(sig) < 1 {\n\t\t\tcontinue\n\t\t}\n\t\ttSig := sig[:len(sig)-1]\n\t\thashType := SigHashType(sig[len(sig)-1])\n\n\t\tpSig, err := btcec.ParseDERSignature(tSig, btcec.S256())\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\n\t\t// We have to do this each round since hash types may vary\n\t\t// between signatures and so the hash will vary. We can,\n\t\t// however, assume no sigs etc are in the script since that\n\t\t// would make the transaction nonstandard and thus not\n\t\t// MultiSigTy, so we just need to hash the full thing.\n\t\thash := calcSignatureHash(pkPops, hashType, tx, idx)\n\n\t\tfor _, addr := range addresses {\n\t\t\t// All multisig addresses should be pubkey addresses\n\t\t\t// it is an error to call this internal function with\n\t\t\t// bad input.\n\t\t\tpkaddr := addr.(*btcutil.AddressPubKey)\n\n\t\t\tpubKey := pkaddr.PubKey()\n\n\t\t\t// If it matches we put it in the map. We only\n\t\t\t// can take one signature per public key so if we\n\t\t\t// already have one, we can throw this away.\n\t\t\tif pSig.Verify(hash, pubKey) {\n\t\t\t\taStr := addr.EncodeAddress()\n\t\t\t\tif _, ok := addrToSig[aStr]; !ok {\n\t\t\t\t\taddrToSig[aStr] = sig\n\t\t\t\t}\n\t\t\t\tcontinue sigLoop\n\t\t\t}\n\t\t}\n\t}\n\n\t// Extra opcode to handle the extra arg consumed (due to previous bugs\n\t// in the reference implementation).\n\tbuilder := NewScriptBuilder().AddOp(OP_FALSE)\n\tdoneSigs := 0\n\t// This assumes that addresses are in the same order as in the script.\n\tfor _, addr := range addresses {\n\t\tsig, ok := addrToSig[addr.EncodeAddress()]\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\t\tbuilder.AddData(sig)\n\t\tdoneSigs++\n\t\tif doneSigs == nRequired {\n\t\t\tbreak\n\t\t}\n\t}\n\n\t// padding for missing ones.\n\tfor i := doneSigs; i < nRequired; i++ {\n\t\tbuilder.AddOp(OP_0)\n\t}\n\n\tscript, _ := builder.Script()\n\treturn script\n}\n\n// KeyDB is an interface type provided to SignTxOutput, it encapsulates\n// any user state required to get the private keys for an address.\ntype KeyDB interface {\n\tGetKey(btcutil.Address) (*btcec.PrivateKey, bool, error)\n}\n\n// KeyClosure implements KeyDB with a closure.\ntype KeyClosure func(btcutil.Address) (*btcec.PrivateKey, bool, error)\n\n// GetKey implements KeyDB by returning the result of calling the closure.\nfunc (kc KeyClosure) GetKey(address btcutil.Address) (*btcec.PrivateKey,\n\tbool, error) {\n\treturn kc(address)\n}\n\n// ScriptDB is an interface type provided to SignTxOutput, it encapsulates any\n// user state required to get the scripts for an pay-to-script-hash address.\ntype ScriptDB interface {\n\tGetScript(btcutil.Address) ([]byte, error)\n}\n\n// ScriptClosure implements ScriptDB with a closure.\ntype ScriptClosure func(btcutil.Address) ([]byte, error)\n\n// GetScript implements ScriptDB by returning the result of calling the closure.\nfunc (sc ScriptClosure) GetScript(address btcutil.Address) ([]byte, error) {\n\treturn sc(address)\n}\n\n// SignTxOutput signs output idx of the given tx to resolve the script given in\n// pkScript with a signature type of hashType. Any keys required will be\n// looked up by calling getKey() with the string of the given address.\n// Any pay-to-script-hash signatures will be similarly looked up by calling\n// getScript. If previousScript is provided then the results in previousScript\n// will be merged in a type-dependent manner with the newly generated.\n// signature script.\nfunc SignTxOutput(chainParams *chaincfg.Params, tx *wire.MsgTx, idx int,\n\tpkScript []byte, hashType SigHashType, kdb KeyDB, sdb ScriptDB,\n\tpreviousScript []byte) ([]byte, error) {\n\n\tsigScript, class, addresses, nrequired, err := sign(chainParams, tx,\n\t\tidx, pkScript, hashType, kdb, sdb)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif class == ScriptHashTy {\n\t\t// TODO keep the sub addressed and pass down to merge.\n\t\trealSigScript, _, _, _, err := sign(chainParams, tx, idx,\n\t\t\tsigScript, hashType, kdb, sdb)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// Append the p2sh script as the last push in the script.\n\t\tbuilder := NewScriptBuilder()\n\t\tbuilder.AddOps(realSigScript)\n\t\tbuilder.AddData(sigScript)\n\n\t\tsigScript, _ = builder.Script()\n\t\t// TODO keep a copy of the script for merging.\n\t}\n\n\t// Merge scripts. with any previous data, if any.\n\tmergedScript := mergeScripts(chainParams, tx, idx, pkScript, class,\n\t\taddresses, nrequired, sigScript, previousScript)\n\treturn mergedScript, nil\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/txscript/stack.go",
    "content": "// Copyright (c) 2013-2017 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage txscript\n\nimport (\n\t\"encoding/hex\"\n\t\"fmt\"\n)\n\n// asBool gets the boolean value of the byte array.\nfunc asBool(t []byte) bool {\n\tfor i := range t {\n\t\tif t[i] != 0 {\n\t\t\t// Negative 0 is also considered false.\n\t\t\tif i == len(t)-1 && t[i] == 0x80 {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// fromBool converts a boolean into the appropriate byte array.\nfunc fromBool(v bool) []byte {\n\tif v {\n\t\treturn []byte{1}\n\t}\n\treturn nil\n}\n\n// stack represents a stack of immutable objects to be used with bitcoin\n// scripts.  Objects may be shared, therefore in usage if a value is to be\n// changed it *must* be deep-copied first to avoid changing other values on the\n// stack.\ntype stack struct {\n\tstk               [][]byte\n\tverifyMinimalData bool\n}\n\n// Depth returns the number of items on the stack.\nfunc (s *stack) Depth() int32 {\n\treturn int32(len(s.stk))\n}\n\n// PushByteArray adds the given back array to the top of the stack.\n//\n// Stack transformation: [... x1 x2] -> [... x1 x2 data]\nfunc (s *stack) PushByteArray(so []byte) {\n\ts.stk = append(s.stk, so)\n}\n\n// PushInt converts the provided scriptNum to a suitable byte array then pushes\n// it onto the top of the stack.\n//\n// Stack transformation: [... x1 x2] -> [... x1 x2 int]\nfunc (s *stack) PushInt(val scriptNum) {\n\ts.PushByteArray(val.Bytes())\n}\n\n// PushBool converts the provided boolean to a suitable byte array then pushes\n// it onto the top of the stack.\n//\n// Stack transformation: [... x1 x2] -> [... x1 x2 bool]\nfunc (s *stack) PushBool(val bool) {\n\ts.PushByteArray(fromBool(val))\n}\n\n// PopByteArray pops the value off the top of the stack and returns it.\n//\n// Stack transformation: [... x1 x2 x3] -> [... x1 x2]\nfunc (s *stack) PopByteArray() ([]byte, error) {\n\treturn s.nipN(0)\n}\n\n// PopInt pops the value off the top of the stack, converts it into a script\n// num, and returns it.  The act of converting to a script num enforces the\n// consensus rules imposed on data interpreted as numbers.\n//\n// Stack transformation: [... x1 x2 x3] -> [... x1 x2]\nfunc (s *stack) PopInt() (scriptNum, error) {\n\tso, err := s.PopByteArray()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn makeScriptNum(so, s.verifyMinimalData, defaultScriptNumLen)\n}\n\n// PopBool pops the value off the top of the stack, converts it into a bool, and\n// returns it.\n//\n// Stack transformation: [... x1 x2 x3] -> [... x1 x2]\nfunc (s *stack) PopBool() (bool, error) {\n\tso, err := s.PopByteArray()\n\tif err != nil {\n\t\treturn false, err\n\t}\n\n\treturn asBool(so), nil\n}\n\n// PeekByteArray returns the Nth item on the stack without removing it.\nfunc (s *stack) PeekByteArray(idx int32) ([]byte, error) {\n\tsz := int32(len(s.stk))\n\tif idx < 0 || idx >= sz {\n\t\tstr := fmt.Sprintf(\"index %d is invalid for stack size %d\", idx,\n\t\t\tsz)\n\t\treturn nil, scriptError(ErrInvalidStackOperation, str)\n\t}\n\n\treturn s.stk[sz-idx-1], nil\n}\n\n// PeekInt returns the Nth item on the stack as a script num without removing\n// it.  The act of converting to a script num enforces the consensus rules\n// imposed on data interpreted as numbers.\nfunc (s *stack) PeekInt(idx int32) (scriptNum, error) {\n\tso, err := s.PeekByteArray(idx)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn makeScriptNum(so, s.verifyMinimalData, defaultScriptNumLen)\n}\n\n// PeekBool returns the Nth item on the stack as a bool without removing it.\nfunc (s *stack) PeekBool(idx int32) (bool, error) {\n\tso, err := s.PeekByteArray(idx)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\n\treturn asBool(so), nil\n}\n\n// nipN is an internal function that removes the nth item on the stack and\n// returns it.\n//\n// Stack transformation:\n// nipN(0): [... x1 x2 x3] -> [... x1 x2]\n// nipN(1): [... x1 x2 x3] -> [... x1 x3]\n// nipN(2): [... x1 x2 x3] -> [... x2 x3]\nfunc (s *stack) nipN(idx int32) ([]byte, error) {\n\tsz := int32(len(s.stk))\n\tif idx < 0 || idx > sz-1 {\n\t\tstr := fmt.Sprintf(\"index %d is invalid for stack size %d\", idx,\n\t\t\tsz)\n\t\treturn nil, scriptError(ErrInvalidStackOperation, str)\n\t}\n\n\tso := s.stk[sz-idx-1]\n\tif idx == 0 {\n\t\ts.stk = s.stk[:sz-1]\n\t} else if idx == sz-1 {\n\t\ts1 := make([][]byte, sz-1)\n\t\tcopy(s1, s.stk[1:])\n\t\ts.stk = s1\n\t} else {\n\t\ts1 := s.stk[sz-idx : sz]\n\t\ts.stk = s.stk[:sz-idx-1]\n\t\ts.stk = append(s.stk, s1...)\n\t}\n\treturn so, nil\n}\n\n// NipN removes the Nth object on the stack\n//\n// Stack transformation:\n// NipN(0): [... x1 x2 x3] -> [... x1 x2]\n// NipN(1): [... x1 x2 x3] -> [... x1 x3]\n// NipN(2): [... x1 x2 x3] -> [... x2 x3]\nfunc (s *stack) NipN(idx int32) error {\n\t_, err := s.nipN(idx)\n\treturn err\n}\n\n// Tuck copies the item at the top of the stack and inserts it before the 2nd\n// to top item.\n//\n// Stack transformation: [... x1 x2] -> [... x2 x1 x2]\nfunc (s *stack) Tuck() error {\n\tso2, err := s.PopByteArray()\n\tif err != nil {\n\t\treturn err\n\t}\n\tso1, err := s.PopByteArray()\n\tif err != nil {\n\t\treturn err\n\t}\n\ts.PushByteArray(so2) // stack [... x2]\n\ts.PushByteArray(so1) // stack [... x2 x1]\n\ts.PushByteArray(so2) // stack [... x2 x1 x2]\n\n\treturn nil\n}\n\n// DropN removes the top N items from the stack.\n//\n// Stack transformation:\n// DropN(1): [... x1 x2] -> [... x1]\n// DropN(2): [... x1 x2] -> [...]\nfunc (s *stack) DropN(n int32) error {\n\tif n < 1 {\n\t\tstr := fmt.Sprintf(\"attempt to drop %d items from stack\", n)\n\t\treturn scriptError(ErrInvalidStackOperation, str)\n\t}\n\n\tfor ; n > 0; n-- {\n\t\t_, err := s.PopByteArray()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// DupN duplicates the top N items on the stack.\n//\n// Stack transformation:\n// DupN(1): [... x1 x2] -> [... x1 x2 x2]\n// DupN(2): [... x1 x2] -> [... x1 x2 x1 x2]\nfunc (s *stack) DupN(n int32) error {\n\tif n < 1 {\n\t\tstr := fmt.Sprintf(\"attempt to dup %d stack items\", n)\n\t\treturn scriptError(ErrInvalidStackOperation, str)\n\t}\n\n\t// Iteratively duplicate the value n-1 down the stack n times.\n\t// This leaves an in-order duplicate of the top n items on the stack.\n\tfor i := n; i > 0; i-- {\n\t\tso, err := s.PeekByteArray(n - 1)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ts.PushByteArray(so)\n\t}\n\treturn nil\n}\n\n// RotN rotates the top 3N items on the stack to the left N times.\n//\n// Stack transformation:\n// RotN(1): [... x1 x2 x3] -> [... x2 x3 x1]\n// RotN(2): [... x1 x2 x3 x4 x5 x6] -> [... x3 x4 x5 x6 x1 x2]\nfunc (s *stack) RotN(n int32) error {\n\tif n < 1 {\n\t\tstr := fmt.Sprintf(\"attempt to rotate %d stack items\", n)\n\t\treturn scriptError(ErrInvalidStackOperation, str)\n\t}\n\n\t// Nip the 3n-1th item from the stack to the top n times to rotate\n\t// them up to the head of the stack.\n\tentry := 3*n - 1\n\tfor i := n; i > 0; i-- {\n\t\tso, err := s.nipN(entry)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\ts.PushByteArray(so)\n\t}\n\treturn nil\n}\n\n// SwapN swaps the top N items on the stack with those below them.\n//\n// Stack transformation:\n// SwapN(1): [... x1 x2] -> [... x2 x1]\n// SwapN(2): [... x1 x2 x3 x4] -> [... x3 x4 x1 x2]\nfunc (s *stack) SwapN(n int32) error {\n\tif n < 1 {\n\t\tstr := fmt.Sprintf(\"attempt to swap %d stack items\", n)\n\t\treturn scriptError(ErrInvalidStackOperation, str)\n\t}\n\n\tentry := 2*n - 1\n\tfor i := n; i > 0; i-- {\n\t\t// Swap 2n-1th entry to top.\n\t\tso, err := s.nipN(entry)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\ts.PushByteArray(so)\n\t}\n\treturn nil\n}\n\n// OverN copies N items N items back to the top of the stack.\n//\n// Stack transformation:\n// OverN(1): [... x1 x2 x3] -> [... x1 x2 x3 x2]\n// OverN(2): [... x1 x2 x3 x4] -> [... x1 x2 x3 x4 x1 x2]\nfunc (s *stack) OverN(n int32) error {\n\tif n < 1 {\n\t\tstr := fmt.Sprintf(\"attempt to perform over on %d stack items\",\n\t\t\tn)\n\t\treturn scriptError(ErrInvalidStackOperation, str)\n\t}\n\n\t// Copy 2n-1th entry to top of the stack.\n\tentry := 2*n - 1\n\tfor ; n > 0; n-- {\n\t\tso, err := s.PeekByteArray(entry)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ts.PushByteArray(so)\n\t}\n\n\treturn nil\n}\n\n// PickN copies the item N items back in the stack to the top.\n//\n// Stack transformation:\n// PickN(0): [x1 x2 x3] -> [x1 x2 x3 x3]\n// PickN(1): [x1 x2 x3] -> [x1 x2 x3 x2]\n// PickN(2): [x1 x2 x3] -> [x1 x2 x3 x1]\nfunc (s *stack) PickN(n int32) error {\n\tso, err := s.PeekByteArray(n)\n\tif err != nil {\n\t\treturn err\n\t}\n\ts.PushByteArray(so)\n\n\treturn nil\n}\n\n// RollN moves the item N items back in the stack to the top.\n//\n// Stack transformation:\n// RollN(0): [x1 x2 x3] -> [x1 x2 x3]\n// RollN(1): [x1 x2 x3] -> [x1 x3 x2]\n// RollN(2): [x1 x2 x3] -> [x2 x3 x1]\nfunc (s *stack) RollN(n int32) error {\n\tso, err := s.nipN(n)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\ts.PushByteArray(so)\n\n\treturn nil\n}\n\n// String returns the stack in a readable format.\nfunc (s *stack) String() string {\n\tvar result string\n\tfor _, stack := range s.stk {\n\t\tif len(stack) == 0 {\n\t\t\tresult += \"00000000  <empty>\\n\"\n\t\t}\n\t\tresult += hex.Dump(stack)\n\t}\n\n\treturn result\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/txscript/standard.go",
    "content": "// Copyright (c) 2013-2017 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage txscript\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/btcsuite/btcd/chaincfg\"\n\t\"github.com/btcsuite/btcd/wire\"\n\t\"github.com/btcsuite/btcutil\"\n)\n\nconst (\n\t// MaxDataCarrierSize is the maximum number of bytes allowed in pushed\n\t// data to be considered a nulldata transaction\n\tMaxDataCarrierSize = 80\n\n\t// StandardVerifyFlags are the script flags which are used when\n\t// executing transaction scripts to enforce additional checks which\n\t// are required for the script to be considered standard.  These checks\n\t// help reduce issues related to transaction malleability as well as\n\t// allow pay-to-script hash transactions.  Note these flags are\n\t// different than what is required for the consensus rules in that they\n\t// are more strict.\n\t//\n\t// TODO: This definition does not belong here.  It belongs in a policy\n\t// package.\n\tStandardVerifyFlags = ScriptBip16 |\n\t\tScriptVerifyDERSignatures |\n\t\tScriptVerifyStrictEncoding |\n\t\tScriptVerifyMinimalData |\n\t\tScriptStrictMultiSig |\n\t\tScriptDiscourageUpgradableNops |\n\t\tScriptVerifyCleanStack |\n\t\tScriptVerifyNullFail |\n\t\tScriptVerifyCheckLockTimeVerify |\n\t\tScriptVerifyCheckSequenceVerify |\n\t\tScriptVerifyLowS |\n\t\tScriptStrictMultiSig |\n\t\tScriptVerifyWitness |\n\t\tScriptVerifyDiscourageUpgradeableWitnessProgram |\n\t\tScriptVerifyMinimalIf |\n\t\tScriptVerifyWitnessPubKeyType\n)\n\n// ScriptClass is an enumeration for the list of standard types of script.\ntype ScriptClass byte\n\n// Classes of script payment known about in the blockchain.\nconst (\n\tNonStandardTy         ScriptClass = iota // None of the recognized forms.\n\tPubKeyTy                                 // Pay pubkey.\n\tPubKeyHashTy                             // Pay pubkey hash.\n\tWitnessV0PubKeyHashTy                    // Pay witness pubkey hash.\n\tScriptHashTy                             // Pay to script hash.\n\tWitnessV0ScriptHashTy                    // Pay to witness script hash.\n\tMultiSigTy                               // Multi signature.\n\tNullDataTy                               // Empty data-only (provably prunable).\n)\n\n// scriptClassToName houses the human-readable strings which describe each\n// script class.\nvar scriptClassToName = []string{\n\tNonStandardTy:         \"nonstandard\",\n\tPubKeyTy:              \"pubkey\",\n\tPubKeyHashTy:          \"pubkeyhash\",\n\tWitnessV0PubKeyHashTy: \"witness_v0_keyhash\",\n\tScriptHashTy:          \"scripthash\",\n\tWitnessV0ScriptHashTy: \"witness_v0_scripthash\",\n\tMultiSigTy:            \"multisig\",\n\tNullDataTy:            \"nulldata\",\n}\n\n// String implements the Stringer interface by returning the name of\n// the enum script class. If the enum is invalid then \"Invalid\" will be\n// returned.\nfunc (t ScriptClass) String() string {\n\tif int(t) > len(scriptClassToName) || int(t) < 0 {\n\t\treturn \"Invalid\"\n\t}\n\treturn scriptClassToName[t]\n}\n\n// isPubkey returns true if the script passed is a pay-to-pubkey transaction,\n// false otherwise.\nfunc isPubkey(pops []parsedOpcode) bool {\n\t// Valid pubkeys are either 33 or 65 bytes.\n\treturn len(pops) == 2 &&\n\t\t(len(pops[0].data) == 33 || len(pops[0].data) == 65) &&\n\t\tpops[1].opcode.value == OP_CHECKSIG\n}\n\n// isPubkeyHash returns true if the script passed is a pay-to-pubkey-hash\n// transaction, false otherwise.\nfunc isPubkeyHash(pops []parsedOpcode) bool {\n\treturn len(pops) == 5 &&\n\t\tpops[0].opcode.value == OP_DUP &&\n\t\tpops[1].opcode.value == OP_HASH160 &&\n\t\tpops[2].opcode.value == OP_DATA_20 &&\n\t\tpops[3].opcode.value == OP_EQUALVERIFY &&\n\t\tpops[4].opcode.value == OP_CHECKSIG\n\n}\n\n// isMultiSig returns true if the passed script is a multisig transaction, false\n// otherwise.\nfunc isMultiSig(pops []parsedOpcode) bool {\n\t// The absolute minimum is 1 pubkey:\n\t// OP_0/OP_1-16 <pubkey> OP_1 OP_CHECKMULTISIG\n\tl := len(pops)\n\tif l < 4 {\n\t\treturn false\n\t}\n\tif !isSmallInt(pops[0].opcode) {\n\t\treturn false\n\t}\n\tif !isSmallInt(pops[l-2].opcode) {\n\t\treturn false\n\t}\n\tif pops[l-1].opcode.value != OP_CHECKMULTISIG {\n\t\treturn false\n\t}\n\n\t// Verify the number of pubkeys specified matches the actual number\n\t// of pubkeys provided.\n\tif l-2-1 != asSmallInt(pops[l-2].opcode) {\n\t\treturn false\n\t}\n\n\tfor _, pop := range pops[1 : l-2] {\n\t\t// Valid pubkeys are either 33 or 65 bytes.\n\t\tif len(pop.data) != 33 && len(pop.data) != 65 {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// isNullData returns true if the passed script is a null data transaction,\n// false otherwise.\nfunc isNullData(pops []parsedOpcode) bool {\n\t// A nulldata transaction is either a single OP_RETURN or an\n\t// OP_RETURN SMALLDATA (where SMALLDATA is a data push up to\n\t// MaxDataCarrierSize bytes).\n\tl := len(pops)\n\tif l == 1 && pops[0].opcode.value == OP_RETURN {\n\t\treturn true\n\t}\n\n\treturn l == 2 &&\n\t\tpops[0].opcode.value == OP_RETURN &&\n\t\t(isSmallInt(pops[1].opcode) || pops[1].opcode.value <=\n\t\t\tOP_PUSHDATA4) &&\n\t\tlen(pops[1].data) <= MaxDataCarrierSize\n}\n\n// scriptType returns the type of the script being inspected from the known\n// standard types.\nfunc typeOfScript(pops []parsedOpcode) ScriptClass {\n\tif isPubkey(pops) {\n\t\treturn PubKeyTy\n\t} else if isPubkeyHash(pops) {\n\t\treturn PubKeyHashTy\n\t} else if isWitnessPubKeyHash(pops) {\n\t\treturn WitnessV0PubKeyHashTy\n\t} else if isScriptHash(pops) {\n\t\treturn ScriptHashTy\n\t} else if isWitnessScriptHash(pops) {\n\t\treturn WitnessV0ScriptHashTy\n\t} else if isMultiSig(pops) {\n\t\treturn MultiSigTy\n\t} else if isNullData(pops) {\n\t\treturn NullDataTy\n\t}\n\treturn NonStandardTy\n}\n\n// GetScriptClass returns the class of the script passed.\n//\n// NonStandardTy will be returned when the script does not parse.\nfunc GetScriptClass(script []byte) ScriptClass {\n\tpops, err := parseScript(script)\n\tif err != nil {\n\t\treturn NonStandardTy\n\t}\n\treturn typeOfScript(pops)\n}\n\n// expectedInputs returns the number of arguments required by a script.\n// If the script is of unknown type such that the number can not be determined\n// then -1 is returned. We are an internal function and thus assume that class\n// is the real class of pops (and we can thus assume things that were determined\n// while finding out the type).\nfunc expectedInputs(pops []parsedOpcode, class ScriptClass) int {\n\tswitch class {\n\tcase PubKeyTy:\n\t\treturn 1\n\n\tcase PubKeyHashTy:\n\t\treturn 2\n\n\tcase WitnessV0PubKeyHashTy:\n\t\treturn 2\n\n\tcase ScriptHashTy:\n\t\t// Not including script.  That is handled by the caller.\n\t\treturn 1\n\n\tcase WitnessV0ScriptHashTy:\n\t\t// Not including script.  That is handled by the caller.\n\t\treturn 1\n\n\tcase MultiSigTy:\n\t\t// Standard multisig has a push a small number for the number\n\t\t// of sigs and number of keys.  Check the first push instruction\n\t\t// to see how many arguments are expected. typeOfScript already\n\t\t// checked this so we know it'll be a small int.  Also, due to\n\t\t// the original bitcoind bug where OP_CHECKMULTISIG pops an\n\t\t// additional item from the stack, add an extra expected input\n\t\t// for the extra push that is required to compensate.\n\t\treturn asSmallInt(pops[0].opcode) + 1\n\n\tcase NullDataTy:\n\t\tfallthrough\n\tdefault:\n\t\treturn -1\n\t}\n}\n\n// ScriptInfo houses information about a script pair that is determined by\n// CalcScriptInfo.\ntype ScriptInfo struct {\n\t// PkScriptClass is the class of the public key script and is equivalent\n\t// to calling GetScriptClass on it.\n\tPkScriptClass ScriptClass\n\n\t// NumInputs is the number of inputs provided by the public key script.\n\tNumInputs int\n\n\t// ExpectedInputs is the number of outputs required by the signature\n\t// script and any pay-to-script-hash scripts. The number will be -1 if\n\t// unknown.\n\tExpectedInputs int\n\n\t// SigOps is the number of signature operations in the script pair.\n\tSigOps int\n}\n\n// CalcScriptInfo returns a structure providing data about the provided script\n// pair.  It will error if the pair is in someway invalid such that they can not\n// be analysed, i.e. if they do not parse or the pkScript is not a push-only\n// script\nfunc CalcScriptInfo(sigScript, pkScript []byte, witness wire.TxWitness,\n\tbip16, segwit bool) (*ScriptInfo, error) {\n\n\tsigPops, err := parseScript(sigScript)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tpkPops, err := parseScript(pkScript)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Push only sigScript makes little sense.\n\tsi := new(ScriptInfo)\n\tsi.PkScriptClass = typeOfScript(pkPops)\n\n\t// Can't have a signature script that doesn't just push data.\n\tif !isPushOnly(sigPops) {\n\t\treturn nil, scriptError(ErrNotPushOnly,\n\t\t\t\"signature script is not push only\")\n\t}\n\n\tsi.ExpectedInputs = expectedInputs(pkPops, si.PkScriptClass)\n\n\tswitch {\n\t// Count sigops taking into account pay-to-script-hash.\n\tcase si.PkScriptClass == ScriptHashTy && bip16 && !segwit:\n\t\t// The pay-to-hash-script is the final data push of the\n\t\t// signature script.\n\t\tscript := sigPops[len(sigPops)-1].data\n\t\tshPops, err := parseScript(script)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tshInputs := expectedInputs(shPops, typeOfScript(shPops))\n\t\tif shInputs == -1 {\n\t\t\tsi.ExpectedInputs = -1\n\t\t} else {\n\t\t\tsi.ExpectedInputs += shInputs\n\t\t}\n\t\tsi.SigOps = getSigOpCount(shPops, true)\n\n\t\t// All entries pushed to stack (or are OP_RESERVED and exec\n\t\t// will fail).\n\t\tsi.NumInputs = len(sigPops)\n\n\t// If segwit is active, and this is a regular p2wkh output, then we'll\n\t// treat the script as a p2pkh output in essence.\n\tcase si.PkScriptClass == WitnessV0PubKeyHashTy && segwit:\n\n\t\tsi.SigOps = GetWitnessSigOpCount(sigScript, pkScript, witness)\n\t\tsi.NumInputs = len(witness)\n\n\t// We'll attempt to detect the nested p2sh case so we can accurately\n\t// count the signature operations involved.\n\tcase si.PkScriptClass == ScriptHashTy &&\n\t\tIsWitnessProgram(sigScript[1:]) && bip16 && segwit:\n\n\t\t// Extract the pushed witness program from the sigScript so we\n\t\t// can determine the number of expected inputs.\n\t\tpkPops, _ := parseScript(sigScript[1:])\n\t\tshInputs := expectedInputs(pkPops, typeOfScript(pkPops))\n\t\tif shInputs == -1 {\n\t\t\tsi.ExpectedInputs = -1\n\t\t} else {\n\t\t\tsi.ExpectedInputs += shInputs\n\t\t}\n\n\t\tsi.SigOps = GetWitnessSigOpCount(sigScript, pkScript, witness)\n\n\t\tsi.NumInputs = len(witness)\n\t\tsi.NumInputs += len(sigPops)\n\n\t// If segwit is active, and this is a p2wsh output, then we'll need to\n\t// examine the witness script to generate accurate script info.\n\tcase si.PkScriptClass == WitnessV0ScriptHashTy && segwit:\n\t\t// The witness script is the final element of the witness\n\t\t// stack.\n\t\twitnessScript := witness[len(witness)-1]\n\t\tpops, _ := parseScript(witnessScript)\n\n\t\tshInputs := expectedInputs(pops, typeOfScript(pops))\n\t\tif shInputs == -1 {\n\t\t\tsi.ExpectedInputs = -1\n\t\t} else {\n\t\t\tsi.ExpectedInputs += shInputs\n\t\t}\n\n\t\tsi.SigOps = GetWitnessSigOpCount(sigScript, pkScript, witness)\n\t\tsi.NumInputs = len(witness)\n\n\tdefault:\n\t\tsi.SigOps = getSigOpCount(pkPops, true)\n\n\t\t// All entries pushed to stack (or are OP_RESERVED and exec\n\t\t// will fail).\n\t\tsi.NumInputs = len(sigPops)\n\t}\n\n\treturn si, nil\n}\n\n// CalcMultiSigStats returns the number of public keys and signatures from\n// a multi-signature transaction script.  The passed script MUST already be\n// known to be a multi-signature script.\nfunc CalcMultiSigStats(script []byte) (int, int, error) {\n\tpops, err := parseScript(script)\n\tif err != nil {\n\t\treturn 0, 0, err\n\t}\n\n\t// A multi-signature script is of the pattern:\n\t//  NUM_SIGS PUBKEY PUBKEY PUBKEY... NUM_PUBKEYS OP_CHECKMULTISIG\n\t// Therefore the number of signatures is the oldest item on the stack\n\t// and the number of pubkeys is the 2nd to last.  Also, the absolute\n\t// minimum for a multi-signature script is 1 pubkey, so at least 4\n\t// items must be on the stack per:\n\t//  OP_1 PUBKEY OP_1 OP_CHECKMULTISIG\n\tif len(pops) < 4 {\n\t\tstr := fmt.Sprintf(\"script %x is not a multisig script\", script)\n\t\treturn 0, 0, scriptError(ErrNotMultisigScript, str)\n\t}\n\n\tnumSigs := asSmallInt(pops[0].opcode)\n\tnumPubKeys := asSmallInt(pops[len(pops)-2].opcode)\n\treturn numPubKeys, numSigs, nil\n}\n\n// payToPubKeyHashScript creates a new script to pay a transaction\n// output to a 20-byte pubkey hash. It is expected that the input is a valid\n// hash.\nfunc payToPubKeyHashScript(pubKeyHash []byte) ([]byte, error) {\n\treturn NewScriptBuilder().AddOp(OP_DUP).AddOp(OP_HASH160).\n\t\tAddData(pubKeyHash).AddOp(OP_EQUALVERIFY).AddOp(OP_CHECKSIG).\n\t\tScript()\n}\n\n// payToWitnessPubKeyHashScript creates a new script to pay to a version 0\n// pubkey hash witness program. The passed hash is expected to be valid.\nfunc payToWitnessPubKeyHashScript(pubKeyHash []byte) ([]byte, error) {\n\treturn NewScriptBuilder().AddOp(OP_0).AddData(pubKeyHash).Script()\n}\n\n// payToScriptHashScript creates a new script to pay a transaction output to a\n// script hash. It is expected that the input is a valid hash.\nfunc payToScriptHashScript(scriptHash []byte) ([]byte, error) {\n\treturn NewScriptBuilder().AddOp(OP_HASH160).AddData(scriptHash).\n\t\tAddOp(OP_EQUAL).Script()\n}\n\n// payToWitnessPubKeyHashScript creates a new script to pay to a version 0\n// script hash witness program. The passed hash is expected to be valid.\nfunc payToWitnessScriptHashScript(scriptHash []byte) ([]byte, error) {\n\treturn NewScriptBuilder().AddOp(OP_0).AddData(scriptHash).Script()\n}\n\n// payToPubkeyScript creates a new script to pay a transaction output to a\n// public key. It is expected that the input is a valid pubkey.\nfunc payToPubKeyScript(serializedPubKey []byte) ([]byte, error) {\n\treturn NewScriptBuilder().AddData(serializedPubKey).\n\t\tAddOp(OP_CHECKSIG).Script()\n}\n\n// PayToAddrScript creates a new script to pay a transaction output to a the\n// specified address.\nfunc PayToAddrScript(addr btcutil.Address) ([]byte, error) {\n\tconst nilAddrErrStr = \"unable to generate payment script for nil address\"\n\n\tswitch addr := addr.(type) {\n\tcase *btcutil.AddressPubKeyHash:\n\t\tif addr == nil {\n\t\t\treturn nil, scriptError(ErrUnsupportedAddress,\n\t\t\t\tnilAddrErrStr)\n\t\t}\n\t\treturn payToPubKeyHashScript(addr.ScriptAddress())\n\n\tcase *btcutil.AddressScriptHash:\n\t\tif addr == nil {\n\t\t\treturn nil, scriptError(ErrUnsupportedAddress,\n\t\t\t\tnilAddrErrStr)\n\t\t}\n\t\treturn payToScriptHashScript(addr.ScriptAddress())\n\n\tcase *btcutil.AddressPubKey:\n\t\tif addr == nil {\n\t\t\treturn nil, scriptError(ErrUnsupportedAddress,\n\t\t\t\tnilAddrErrStr)\n\t\t}\n\t\treturn payToPubKeyScript(addr.ScriptAddress())\n\n\tcase *btcutil.AddressWitnessPubKeyHash:\n\t\tif addr == nil {\n\t\t\treturn nil, scriptError(ErrUnsupportedAddress,\n\t\t\t\tnilAddrErrStr)\n\t\t}\n\t\treturn payToWitnessPubKeyHashScript(addr.ScriptAddress())\n\tcase *btcutil.AddressWitnessScriptHash:\n\t\tif addr == nil {\n\t\t\treturn nil, scriptError(ErrUnsupportedAddress,\n\t\t\t\tnilAddrErrStr)\n\t\t}\n\t\treturn payToWitnessScriptHashScript(addr.ScriptAddress())\n\t}\n\n\tstr := fmt.Sprintf(\"unable to generate payment script for unsupported \"+\n\t\t\"address type %T\", addr)\n\treturn nil, scriptError(ErrUnsupportedAddress, str)\n}\n\n// NullDataScript creates a provably-prunable script containing OP_RETURN\n// followed by the passed data.  An Error with the error code ErrTooMuchNullData\n// will be returned if the length of the passed data exceeds MaxDataCarrierSize.\nfunc NullDataScript(data []byte) ([]byte, error) {\n\tif len(data) > MaxDataCarrierSize {\n\t\tstr := fmt.Sprintf(\"data size %d is larger than max \"+\n\t\t\t\"allowed size %d\", len(data), MaxDataCarrierSize)\n\t\treturn nil, scriptError(ErrTooMuchNullData, str)\n\t}\n\n\treturn NewScriptBuilder().AddOp(OP_RETURN).AddData(data).Script()\n}\n\n// MultiSigScript returns a valid script for a multisignature redemption where\n// nrequired of the keys in pubkeys are required to have signed the transaction\n// for success.  An Error with the error code ErrTooManyRequiredSigs will be\n// returned if nrequired is larger than the number of keys provided.\nfunc MultiSigScript(pubkeys []*btcutil.AddressPubKey, nrequired int) ([]byte, error) {\n\tif len(pubkeys) < nrequired {\n\t\tstr := fmt.Sprintf(\"unable to generate multisig script with \"+\n\t\t\t\"%d required signatures when there are only %d public \"+\n\t\t\t\"keys available\", nrequired, len(pubkeys))\n\t\treturn nil, scriptError(ErrTooManyRequiredSigs, str)\n\t}\n\n\tbuilder := NewScriptBuilder().AddInt64(int64(nrequired))\n\tfor _, key := range pubkeys {\n\t\tbuilder.AddData(key.ScriptAddress())\n\t}\n\tbuilder.AddInt64(int64(len(pubkeys)))\n\tbuilder.AddOp(OP_CHECKMULTISIG)\n\n\treturn builder.Script()\n}\n\n// PushedData returns an array of byte slices containing any pushed data found\n// in the passed script.  This includes OP_0, but not OP_1 - OP_16.\nfunc PushedData(script []byte) ([][]byte, error) {\n\tpops, err := parseScript(script)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar data [][]byte\n\tfor _, pop := range pops {\n\t\tif pop.data != nil {\n\t\t\tdata = append(data, pop.data)\n\t\t} else if pop.opcode.value == OP_0 {\n\t\t\tdata = append(data, nil)\n\t\t}\n\t}\n\treturn data, nil\n}\n\n// ExtractPkScriptAddrs returns the type of script, addresses and required\n// signatures associated with the passed PkScript.  Note that it only works for\n// 'standard' transaction script types.  Any data such as public keys which are\n// invalid are omitted from the results.\nfunc ExtractPkScriptAddrs(pkScript []byte, chainParams *chaincfg.Params) (ScriptClass, []btcutil.Address, int, error) {\n\tvar addrs []btcutil.Address\n\tvar requiredSigs int\n\n\t// No valid addresses or required signatures if the script doesn't\n\t// parse.\n\tpops, err := parseScript(pkScript)\n\tif err != nil {\n\t\treturn NonStandardTy, nil, 0, err\n\t}\n\n\tscriptClass := typeOfScript(pops)\n\tswitch scriptClass {\n\tcase PubKeyHashTy:\n\t\t// A pay-to-pubkey-hash script is of the form:\n\t\t//  OP_DUP OP_HASH160 <hash> OP_EQUALVERIFY OP_CHECKSIG\n\t\t// Therefore the pubkey hash is the 3rd item on the stack.\n\t\t// Skip the pubkey hash if it's invalid for some reason.\n\t\trequiredSigs = 1\n\t\taddr, err := btcutil.NewAddressPubKeyHash(pops[2].data,\n\t\t\tchainParams)\n\t\tif err == nil {\n\t\t\taddrs = append(addrs, addr)\n\t\t}\n\n\tcase WitnessV0PubKeyHashTy:\n\t\t// A pay-to-witness-pubkey-hash script is of thw form:\n\t\t//  OP_0 <20-byte hash>\n\t\t// Therefore, the pubkey hash is the second item on the stack.\n\t\t// Skip the pubkey hash if it's invalid for some reason.\n\t\trequiredSigs = 1\n\t\taddr, err := btcutil.NewAddressWitnessPubKeyHash(pops[1].data,\n\t\t\tchainParams)\n\t\tif err == nil {\n\t\t\taddrs = append(addrs, addr)\n\t\t}\n\n\tcase PubKeyTy:\n\t\t// A pay-to-pubkey script is of the form:\n\t\t//  <pubkey> OP_CHECKSIG\n\t\t// Therefore the pubkey is the first item on the stack.\n\t\t// Skip the pubkey if it's invalid for some reason.\n\t\trequiredSigs = 1\n\t\taddr, err := btcutil.NewAddressPubKey(pops[0].data, chainParams)\n\t\tif err == nil {\n\t\t\taddrs = append(addrs, addr)\n\t\t}\n\n\tcase ScriptHashTy:\n\t\t// A pay-to-script-hash script is of the form:\n\t\t//  OP_HASH160 <scripthash> OP_EQUAL\n\t\t// Therefore the script hash is the 2nd item on the stack.\n\t\t// Skip the script hash if it's invalid for some reason.\n\t\trequiredSigs = 1\n\t\taddr, err := btcutil.NewAddressScriptHashFromHash(pops[1].data,\n\t\t\tchainParams)\n\t\tif err == nil {\n\t\t\taddrs = append(addrs, addr)\n\t\t}\n\n\tcase WitnessV0ScriptHashTy:\n\t\t// A pay-to-witness-script-hash script is of the form:\n\t\t//  OP_0 <32-byte hash>\n\t\t// Therefore, the script hash is the second item on the stack.\n\t\t// Skip the script hash if it's invalid for some reason.\n\t\trequiredSigs = 1\n\t\taddr, err := btcutil.NewAddressWitnessScriptHash(pops[1].data,\n\t\t\tchainParams)\n\t\tif err == nil {\n\t\t\taddrs = append(addrs, addr)\n\t\t}\n\n\tcase MultiSigTy:\n\t\t// A multi-signature script is of the form:\n\t\t//  <numsigs> <pubkey> <pubkey> <pubkey>... <numpubkeys> OP_CHECKMULTISIG\n\t\t// Therefore the number of required signatures is the 1st item\n\t\t// on the stack and the number of public keys is the 2nd to last\n\t\t// item on the stack.\n\t\trequiredSigs = asSmallInt(pops[0].opcode)\n\t\tnumPubKeys := asSmallInt(pops[len(pops)-2].opcode)\n\n\t\t// Extract the public keys while skipping any that are invalid.\n\t\taddrs = make([]btcutil.Address, 0, numPubKeys)\n\t\tfor i := 0; i < numPubKeys; i++ {\n\t\t\taddr, err := btcutil.NewAddressPubKey(pops[i+1].data,\n\t\t\t\tchainParams)\n\t\t\tif err == nil {\n\t\t\t\taddrs = append(addrs, addr)\n\t\t\t}\n\t\t}\n\n\tcase NullDataTy:\n\t\t// Null data transactions have no addresses or required\n\t\t// signatures.\n\n\tcase NonStandardTy:\n\t\t// Don't attempt to extract addresses or required signatures for\n\t\t// nonstandard transactions.\n\t}\n\n\treturn scriptClass, addrs, requiredSigs, nil\n}\n\n// AtomicSwapDataPushes houses the data pushes found in atomic swap contracts.\ntype AtomicSwapDataPushes struct {\n\tRecipientHash160 [20]byte\n\tRefundHash160    [20]byte\n\tSecretHash       [32]byte\n\tSecretSize       int64\n\tLockTime         int64\n}\n\n// ExtractAtomicSwapDataPushes returns the data pushes from an atomic swap\n// contract.  If the script is not an atomic swap contract,\n// ExtractAtomicSwapDataPushes returns (nil, nil).  Non-nil errors are returned\n// for unparsable scripts.\n//\n// NOTE: Atomic swaps are not considered standard script types by the dcrd\n// mempool policy and should be used with P2SH.  The atomic swap format is also\n// expected to change to use a more secure hash function in the future.\n//\n// This function is only defined in the txscript package due to API limitations\n// which prevent callers using txscript to parse nonstandard scripts.\nfunc ExtractAtomicSwapDataPushes(version uint16, pkScript []byte) (*AtomicSwapDataPushes, error) {\n\tpops, err := parseScript(pkScript)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif len(pops) != 20 {\n\t\treturn nil, nil\n\t}\n\tisAtomicSwap := pops[0].opcode.value == OP_IF &&\n\t\tpops[1].opcode.value == OP_SIZE &&\n\t\tcanonicalPush(pops[2]) &&\n\t\tpops[3].opcode.value == OP_EQUALVERIFY &&\n\t\tpops[4].opcode.value == OP_SHA256 &&\n\t\tpops[5].opcode.value == OP_DATA_32 &&\n\t\tpops[6].opcode.value == OP_EQUALVERIFY &&\n\t\tpops[7].opcode.value == OP_DUP &&\n\t\tpops[8].opcode.value == OP_HASH160 &&\n\t\tpops[9].opcode.value == OP_DATA_20 &&\n\t\tpops[10].opcode.value == OP_ELSE &&\n\t\tcanonicalPush(pops[11]) &&\n\t\tpops[12].opcode.value == OP_CHECKLOCKTIMEVERIFY &&\n\t\tpops[13].opcode.value == OP_DROP &&\n\t\tpops[14].opcode.value == OP_DUP &&\n\t\tpops[15].opcode.value == OP_HASH160 &&\n\t\tpops[16].opcode.value == OP_DATA_20 &&\n\t\tpops[17].opcode.value == OP_ENDIF &&\n\t\tpops[18].opcode.value == OP_EQUALVERIFY &&\n\t\tpops[19].opcode.value == OP_CHECKSIG\n\tif !isAtomicSwap {\n\t\treturn nil, nil\n\t}\n\n\tpushes := new(AtomicSwapDataPushes)\n\tcopy(pushes.SecretHash[:], pops[5].data)\n\tcopy(pushes.RecipientHash160[:], pops[9].data)\n\tcopy(pushes.RefundHash160[:], pops[16].data)\n\tif pops[2].data != nil {\n\t\tlocktime, err := makeScriptNum(pops[2].data, true, 5)\n\t\tif err != nil {\n\t\t\treturn nil, nil\n\t\t}\n\t\tpushes.SecretSize = int64(locktime)\n\t} else if op := pops[2].opcode; isSmallInt(op) {\n\t\tpushes.SecretSize = int64(asSmallInt(op))\n\t} else {\n\t\treturn nil, nil\n\t}\n\tif pops[11].data != nil {\n\t\tlocktime, err := makeScriptNum(pops[11].data, true, 5)\n\t\tif err != nil {\n\t\t\treturn nil, nil\n\t\t}\n\t\tpushes.LockTime = int64(locktime)\n\t} else if op := pops[11].opcode; isSmallInt(op) {\n\t\tpushes.LockTime = int64(asSmallInt(op))\n\t} else {\n\t\treturn nil, nil\n\t}\n\treturn pushes, nil\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/README.md",
    "content": "wire\n====\n\n[![Build Status](http://img.shields.io/travis/btcsuite/btcd.svg)](https://travis-ci.org/btcsuite/btcd)\n[![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org)\n[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](http://godoc.org/github.com/btcsuite/btcd/wire)\n=======\n\nPackage wire implements the bitcoin wire protocol.  A comprehensive suite of\ntests with 100% test coverage is provided to ensure proper functionality.\n\nThere is an associated blog post about the release of this package\n[here](https://blog.conformal.com/btcwire-the-bitcoin-wire-protocol-package-from-btcd/).\n\nThis package has intentionally been designed so it can be used as a standalone\npackage for any projects needing to interface with bitcoin peers at the wire\nprotocol level.\n\n## Installation and Updating\n\n```bash\n$ go get -u github.com/btcsuite/btcd/wire\n```\n\n## Bitcoin Message Overview\n\nThe bitcoin protocol consists of exchanging messages between peers. Each message\nis preceded by a header which identifies information about it such as which\nbitcoin network it is a part of, its type, how big it is, and a checksum to\nverify validity. All encoding and decoding of message headers is handled by this\npackage.\n\nTo accomplish this, there is a generic interface for bitcoin messages named\n`Message` which allows messages of any type to be read, written, or passed\naround through channels, functions, etc. In addition, concrete implementations\nof most of the currently supported bitcoin messages are provided. For these\nsupported messages, all of the details of marshalling and unmarshalling to and\nfrom the wire using bitcoin encoding are handled so the caller doesn't have to\nconcern themselves with the specifics.\n\n## Reading Messages Example\n\nIn order to unmarshal bitcoin messages from the wire, use the `ReadMessage`\nfunction. It accepts any `io.Reader`, but typically this will be a `net.Conn`\nto a remote node running a bitcoin peer.  Example syntax is:\n\n```Go\n\t// Use the most recent protocol version supported by the package and the\n\t// main bitcoin network.\n\tpver := wire.ProtocolVersion\n\tbtcnet := wire.MainNet\n\n\t// Reads and validates the next bitcoin message from conn using the\n\t// protocol version pver and the bitcoin network btcnet.  The returns\n\t// are a wire.Message, a []byte which contains the unmarshalled\n\t// raw payload, and a possible error.\n\tmsg, rawPayload, err := wire.ReadMessage(conn, pver, btcnet)\n\tif err != nil {\n\t\t// Log and handle the error\n\t}\n```\n\nSee the package documentation for details on determining the message type.\n\n## Writing Messages Example\n\nIn order to marshal bitcoin messages to the wire, use the `WriteMessage`\nfunction. It accepts any `io.Writer`, but typically this will be a `net.Conn`\nto a remote node running a bitcoin peer. Example syntax to request addresses\nfrom a remote peer is:\n\n```Go\n\t// Use the most recent protocol version supported by the package and the\n\t// main bitcoin network.\n\tpver := wire.ProtocolVersion\n\tbtcnet := wire.MainNet\n\n\t// Create a new getaddr bitcoin message.\n\tmsg := wire.NewMsgGetAddr()\n\n\t// Writes a bitcoin message msg to conn using the protocol version\n\t// pver, and the bitcoin network btcnet.  The return is a possible\n\t// error.\n\terr := wire.WriteMessage(conn, msg, pver, btcnet)\n\tif err != nil {\n\t\t// Log and handle the error\n\t}\n```\n\n## GPG Verification Key\n\nAll official release tags are signed by Conformal so users can ensure the code\nhas not been tampered with and is coming from the btcsuite developers.  To\nverify the signature perform the following:\n\n- Download the public key from the Conformal website at\n  https://opensource.conformal.com/GIT-GPG-KEY-conformal.txt\n\n- Import the public key into your GPG keyring:\n  ```bash\n  gpg --import GIT-GPG-KEY-conformal.txt\n  ```\n\n- Verify the release tag with the following command where `TAG_NAME` is a\n  placeholder for the specific tag:\n  ```bash\n  git tag -v TAG_NAME\n  ```\n\n## License\n\nPackage wire is licensed under the [copyfree](http://copyfree.org) ISC\nLicense.\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/blockheader.go",
    "content": "// Copyright (c) 2013-2016 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"bytes\"\n\t\"io\"\n\t\"time\"\n\n\t\"github.com/btcsuite/btcd/chaincfg/chainhash\"\n)\n\n// MaxBlockHeaderPayload is the maximum number of bytes a block header can be.\n// Version 4 bytes + Timestamp 4 bytes + Bits 4 bytes + Nonce 4 bytes +\n// PrevBlock and MerkleRoot hashes.\nconst MaxBlockHeaderPayload = 16 + (chainhash.HashSize * 2)\n\n// BlockHeader defines information about a block and is used in the bitcoin\n// block (MsgBlock) and headers (MsgHeaders) messages.\ntype BlockHeader struct {\n\t// Version of the block.  This is not the same as the protocol version.\n\tVersion int32\n\n\t// Hash of the previous block header in the block chain.\n\tPrevBlock chainhash.Hash\n\n\t// Merkle tree reference to hash of all transactions for the block.\n\tMerkleRoot chainhash.Hash\n\n\t// Time the block was created.  This is, unfortunately, encoded as a\n\t// uint32 on the wire and therefore is limited to 2106.\n\tTimestamp time.Time\n\n\t// Difficulty target for the block.\n\tBits uint32\n\n\t// Nonce used to generate the block.\n\tNonce uint32\n}\n\n// blockHeaderLen is a constant that represents the number of bytes for a block\n// header.\nconst blockHeaderLen = 80\n\n// BlockHash computes the block identifier hash for the given block header.\nfunc (h *BlockHeader) BlockHash() chainhash.Hash {\n\t// Encode the header and double sha256 everything prior to the number of\n\t// transactions.  Ignore the error returns since there is no way the\n\t// encode could fail except being out of memory which would cause a\n\t// run-time panic.\n\tbuf := bytes.NewBuffer(make([]byte, 0, MaxBlockHeaderPayload))\n\t_ = writeBlockHeader(buf, 0, h)\n\n\treturn chainhash.DoubleHashH(buf.Bytes())\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\n// See Deserialize for decoding block headers stored to disk, such as in a\n// database, as opposed to decoding block headers from the wire.\nfunc (h *BlockHeader) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error {\n\treturn readBlockHeader(r, pver, h)\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\n// See Serialize for encoding block headers to be stored to disk, such as in a\n// database, as opposed to encoding block headers for the wire.\nfunc (h *BlockHeader) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error {\n\treturn writeBlockHeader(w, pver, h)\n}\n\n// Deserialize decodes a block header from r into the receiver using a format\n// that is suitable for long-term storage such as a database while respecting\n// the Version field.\nfunc (h *BlockHeader) Deserialize(r io.Reader) error {\n\t// At the current time, there is no difference between the wire encoding\n\t// at protocol version 0 and the stable long-term storage format.  As\n\t// a result, make use of readBlockHeader.\n\treturn readBlockHeader(r, 0, h)\n}\n\n// Serialize encodes a block header from r into the receiver using a format\n// that is suitable for long-term storage such as a database while respecting\n// the Version field.\nfunc (h *BlockHeader) Serialize(w io.Writer) error {\n\t// At the current time, there is no difference between the wire encoding\n\t// at protocol version 0 and the stable long-term storage format.  As\n\t// a result, make use of writeBlockHeader.\n\treturn writeBlockHeader(w, 0, h)\n}\n\n// NewBlockHeader returns a new BlockHeader using the provided version, previous\n// block hash, merkle root hash, difficulty bits, and nonce used to generate the\n// block with defaults for the remaining fields.\nfunc NewBlockHeader(version int32, prevHash, merkleRootHash *chainhash.Hash,\n\tbits uint32, nonce uint32) *BlockHeader {\n\n\t// Limit the timestamp to one second precision since the protocol\n\t// doesn't support better.\n\treturn &BlockHeader{\n\t\tVersion:    version,\n\t\tPrevBlock:  *prevHash,\n\t\tMerkleRoot: *merkleRootHash,\n\t\tTimestamp:  time.Unix(time.Now().Unix(), 0),\n\t\tBits:       bits,\n\t\tNonce:      nonce,\n\t}\n}\n\n// readBlockHeader reads a bitcoin block header from r.  See Deserialize for\n// decoding block headers stored to disk, such as in a database, as opposed to\n// decoding from the wire.\nfunc readBlockHeader(r io.Reader, pver uint32, bh *BlockHeader) error {\n\treturn readElements(r, &bh.Version, &bh.PrevBlock, &bh.MerkleRoot,\n\t\t(*uint32Time)(&bh.Timestamp), &bh.Bits, &bh.Nonce)\n}\n\n// writeBlockHeader writes a bitcoin block header to w.  See Serialize for\n// encoding block headers to be stored to disk, such as in a database, as\n// opposed to encoding for the wire.\nfunc writeBlockHeader(w io.Writer, pver uint32, bh *BlockHeader) error {\n\tsec := uint32(bh.Timestamp.Unix())\n\treturn writeElements(w, bh.Version, &bh.PrevBlock, &bh.MerkleRoot,\n\t\tsec, bh.Bits, bh.Nonce)\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/common.go",
    "content": "// Copyright (c) 2013-2016 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"crypto/rand\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"time\"\n\n\t\"github.com/btcsuite/btcd/chaincfg/chainhash\"\n)\n\nconst (\n\t// MaxVarIntPayload is the maximum payload size for a variable length integer.\n\tMaxVarIntPayload = 9\n\n\t// binaryFreeListMaxItems is the number of buffers to keep in the free\n\t// list to use for binary serialization and deserialization.\n\tbinaryFreeListMaxItems = 1024\n)\n\nvar (\n\t// littleEndian is a convenience variable since binary.LittleEndian is\n\t// quite long.\n\tlittleEndian = binary.LittleEndian\n\n\t// bigEndian is a convenience variable since binary.BigEndian is quite\n\t// long.\n\tbigEndian = binary.BigEndian\n)\n\n// binaryFreeList defines a concurrent safe free list of byte slices (up to the\n// maximum number defined by the binaryFreeListMaxItems constant) that have a\n// cap of 8 (thus it supports up to a uint64).  It is used to provide temporary\n// buffers for serializing and deserializing primitive numbers to and from their\n// binary encoding in order to greatly reduce the number of allocations\n// required.\n//\n// For convenience, functions are provided for each of the primitive unsigned\n// integers that automatically obtain a buffer from the free list, perform the\n// necessary binary conversion, read from or write to the given io.Reader or\n// io.Writer, and return the buffer to the free list.\ntype binaryFreeList chan []byte\n\n// Borrow returns a byte slice from the free list with a length of 8.  A new\n// buffer is allocated if there are not any available on the free list.\nfunc (l binaryFreeList) Borrow() []byte {\n\tvar buf []byte\n\tselect {\n\tcase buf = <-l:\n\tdefault:\n\t\tbuf = make([]byte, 8)\n\t}\n\treturn buf[:8]\n}\n\n// Return puts the provided byte slice back on the free list.  The buffer MUST\n// have been obtained via the Borrow function and therefore have a cap of 8.\nfunc (l binaryFreeList) Return(buf []byte) {\n\tselect {\n\tcase l <- buf:\n\tdefault:\n\t\t// Let it go to the garbage collector.\n\t}\n}\n\n// Uint8 reads a single byte from the provided reader using a buffer from the\n// free list and returns it as a uint8.\nfunc (l binaryFreeList) Uint8(r io.Reader) (uint8, error) {\n\tbuf := l.Borrow()[:1]\n\tif _, err := io.ReadFull(r, buf); err != nil {\n\t\tl.Return(buf)\n\t\treturn 0, err\n\t}\n\trv := buf[0]\n\tl.Return(buf)\n\treturn rv, nil\n}\n\n// Uint16 reads two bytes from the provided reader using a buffer from the\n// free list, converts it to a number using the provided byte order, and returns\n// the resulting uint16.\nfunc (l binaryFreeList) Uint16(r io.Reader, byteOrder binary.ByteOrder) (uint16, error) {\n\tbuf := l.Borrow()[:2]\n\tif _, err := io.ReadFull(r, buf); err != nil {\n\t\tl.Return(buf)\n\t\treturn 0, err\n\t}\n\trv := byteOrder.Uint16(buf)\n\tl.Return(buf)\n\treturn rv, nil\n}\n\n// Uint32 reads four bytes from the provided reader using a buffer from the\n// free list, converts it to a number using the provided byte order, and returns\n// the resulting uint32.\nfunc (l binaryFreeList) Uint32(r io.Reader, byteOrder binary.ByteOrder) (uint32, error) {\n\tbuf := l.Borrow()[:4]\n\tif _, err := io.ReadFull(r, buf); err != nil {\n\t\tl.Return(buf)\n\t\treturn 0, err\n\t}\n\trv := byteOrder.Uint32(buf)\n\tl.Return(buf)\n\treturn rv, nil\n}\n\n// Uint64 reads eight bytes from the provided reader using a buffer from the\n// free list, converts it to a number using the provided byte order, and returns\n// the resulting uint64.\nfunc (l binaryFreeList) Uint64(r io.Reader, byteOrder binary.ByteOrder) (uint64, error) {\n\tbuf := l.Borrow()[:8]\n\tif _, err := io.ReadFull(r, buf); err != nil {\n\t\tl.Return(buf)\n\t\treturn 0, err\n\t}\n\trv := byteOrder.Uint64(buf)\n\tl.Return(buf)\n\treturn rv, nil\n}\n\n// PutUint8 copies the provided uint8 into a buffer from the free list and\n// writes the resulting byte to the given writer.\nfunc (l binaryFreeList) PutUint8(w io.Writer, val uint8) error {\n\tbuf := l.Borrow()[:1]\n\tbuf[0] = val\n\t_, err := w.Write(buf)\n\tl.Return(buf)\n\treturn err\n}\n\n// PutUint16 serializes the provided uint16 using the given byte order into a\n// buffer from the free list and writes the resulting two bytes to the given\n// writer.\nfunc (l binaryFreeList) PutUint16(w io.Writer, byteOrder binary.ByteOrder, val uint16) error {\n\tbuf := l.Borrow()[:2]\n\tbyteOrder.PutUint16(buf, val)\n\t_, err := w.Write(buf)\n\tl.Return(buf)\n\treturn err\n}\n\n// PutUint32 serializes the provided uint32 using the given byte order into a\n// buffer from the free list and writes the resulting four bytes to the given\n// writer.\nfunc (l binaryFreeList) PutUint32(w io.Writer, byteOrder binary.ByteOrder, val uint32) error {\n\tbuf := l.Borrow()[:4]\n\tbyteOrder.PutUint32(buf, val)\n\t_, err := w.Write(buf)\n\tl.Return(buf)\n\treturn err\n}\n\n// PutUint64 serializes the provided uint64 using the given byte order into a\n// buffer from the free list and writes the resulting eight bytes to the given\n// writer.\nfunc (l binaryFreeList) PutUint64(w io.Writer, byteOrder binary.ByteOrder, val uint64) error {\n\tbuf := l.Borrow()[:8]\n\tbyteOrder.PutUint64(buf, val)\n\t_, err := w.Write(buf)\n\tl.Return(buf)\n\treturn err\n}\n\n// binarySerializer provides a free list of buffers to use for serializing and\n// deserializing primitive integer values to and from io.Readers and io.Writers.\nvar binarySerializer binaryFreeList = make(chan []byte, binaryFreeListMaxItems)\n\n// errNonCanonicalVarInt is the common format string used for non-canonically\n// encoded variable length integer errors.\nvar errNonCanonicalVarInt = \"non-canonical varint %x - discriminant %x must \" +\n\t\"encode a value greater than %x\"\n\n// uint32Time represents a unix timestamp encoded with a uint32.  It is used as\n// a way to signal the readElement function how to decode a timestamp into a Go\n// time.Time since it is otherwise ambiguous.\ntype uint32Time time.Time\n\n// int64Time represents a unix timestamp encoded with an int64.  It is used as\n// a way to signal the readElement function how to decode a timestamp into a Go\n// time.Time since it is otherwise ambiguous.\ntype int64Time time.Time\n\n// readElement reads the next sequence of bytes from r using little endian\n// depending on the concrete type of element pointed to.\nfunc readElement(r io.Reader, element interface{}) error {\n\t// Attempt to read the element based on the concrete type via fast\n\t// type assertions first.\n\tswitch e := element.(type) {\n\tcase *int32:\n\t\trv, err := binarySerializer.Uint32(r, littleEndian)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*e = int32(rv)\n\t\treturn nil\n\n\tcase *uint32:\n\t\trv, err := binarySerializer.Uint32(r, littleEndian)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*e = rv\n\t\treturn nil\n\n\tcase *int64:\n\t\trv, err := binarySerializer.Uint64(r, littleEndian)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*e = int64(rv)\n\t\treturn nil\n\n\tcase *uint64:\n\t\trv, err := binarySerializer.Uint64(r, littleEndian)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*e = rv\n\t\treturn nil\n\n\tcase *bool:\n\t\trv, err := binarySerializer.Uint8(r)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif rv == 0x00 {\n\t\t\t*e = false\n\t\t} else {\n\t\t\t*e = true\n\t\t}\n\t\treturn nil\n\n\t// Unix timestamp encoded as a uint32.\n\tcase *uint32Time:\n\t\trv, err := binarySerializer.Uint32(r, binary.LittleEndian)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*e = uint32Time(time.Unix(int64(rv), 0))\n\t\treturn nil\n\n\t// Unix timestamp encoded as an int64.\n\tcase *int64Time:\n\t\trv, err := binarySerializer.Uint64(r, binary.LittleEndian)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*e = int64Time(time.Unix(int64(rv), 0))\n\t\treturn nil\n\n\t// Message header checksum.\n\tcase *[4]byte:\n\t\t_, err := io.ReadFull(r, e[:])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\n\t// Message header command.\n\tcase *[CommandSize]uint8:\n\t\t_, err := io.ReadFull(r, e[:])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\n\t// IP address.\n\tcase *[16]byte:\n\t\t_, err := io.ReadFull(r, e[:])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\n\tcase *chainhash.Hash:\n\t\t_, err := io.ReadFull(r, e[:])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\n\tcase *ServiceFlag:\n\t\trv, err := binarySerializer.Uint64(r, littleEndian)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*e = ServiceFlag(rv)\n\t\treturn nil\n\n\tcase *InvType:\n\t\trv, err := binarySerializer.Uint32(r, littleEndian)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*e = InvType(rv)\n\t\treturn nil\n\n\tcase *BitcoinNet:\n\t\trv, err := binarySerializer.Uint32(r, littleEndian)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*e = BitcoinNet(rv)\n\t\treturn nil\n\n\tcase *BloomUpdateType:\n\t\trv, err := binarySerializer.Uint8(r)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*e = BloomUpdateType(rv)\n\t\treturn nil\n\n\tcase *RejectCode:\n\t\trv, err := binarySerializer.Uint8(r)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*e = RejectCode(rv)\n\t\treturn nil\n\t}\n\n\t// Fall back to the slower binary.Read if a fast path was not available\n\t// above.\n\treturn binary.Read(r, littleEndian, element)\n}\n\n// readElements reads multiple items from r.  It is equivalent to multiple\n// calls to readElement.\nfunc readElements(r io.Reader, elements ...interface{}) error {\n\tfor _, element := range elements {\n\t\terr := readElement(r, element)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// writeElement writes the little endian representation of element to w.\nfunc writeElement(w io.Writer, element interface{}) error {\n\t// Attempt to write the element based on the concrete type via fast\n\t// type assertions first.\n\tswitch e := element.(type) {\n\tcase int32:\n\t\terr := binarySerializer.PutUint32(w, littleEndian, uint32(e))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\n\tcase uint32:\n\t\terr := binarySerializer.PutUint32(w, littleEndian, e)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\n\tcase int64:\n\t\terr := binarySerializer.PutUint64(w, littleEndian, uint64(e))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\n\tcase uint64:\n\t\terr := binarySerializer.PutUint64(w, littleEndian, e)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\n\tcase bool:\n\t\tvar err error\n\t\tif e {\n\t\t\terr = binarySerializer.PutUint8(w, 0x01)\n\t\t} else {\n\t\t\terr = binarySerializer.PutUint8(w, 0x00)\n\t\t}\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\n\t// Message header checksum.\n\tcase [4]byte:\n\t\t_, err := w.Write(e[:])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\n\t// Message header command.\n\tcase [CommandSize]uint8:\n\t\t_, err := w.Write(e[:])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\n\t// IP address.\n\tcase [16]byte:\n\t\t_, err := w.Write(e[:])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\n\tcase *chainhash.Hash:\n\t\t_, err := w.Write(e[:])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\n\tcase ServiceFlag:\n\t\terr := binarySerializer.PutUint64(w, littleEndian, uint64(e))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\n\tcase InvType:\n\t\terr := binarySerializer.PutUint32(w, littleEndian, uint32(e))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\n\tcase BitcoinNet:\n\t\terr := binarySerializer.PutUint32(w, littleEndian, uint32(e))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\n\tcase BloomUpdateType:\n\t\terr := binarySerializer.PutUint8(w, uint8(e))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\n\tcase RejectCode:\n\t\terr := binarySerializer.PutUint8(w, uint8(e))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t}\n\n\t// Fall back to the slower binary.Write if a fast path was not available\n\t// above.\n\treturn binary.Write(w, littleEndian, element)\n}\n\n// writeElements writes multiple items to w.  It is equivalent to multiple\n// calls to writeElement.\nfunc writeElements(w io.Writer, elements ...interface{}) error {\n\tfor _, element := range elements {\n\t\terr := writeElement(w, element)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// ReadVarInt reads a variable length integer from r and returns it as a uint64.\nfunc ReadVarInt(r io.Reader, pver uint32) (uint64, error) {\n\tdiscriminant, err := binarySerializer.Uint8(r)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tvar rv uint64\n\tswitch discriminant {\n\tcase 0xff:\n\t\tsv, err := binarySerializer.Uint64(r, littleEndian)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\trv = sv\n\n\t\t// The encoding is not canonical if the value could have been\n\t\t// encoded using fewer bytes.\n\t\tmin := uint64(0x100000000)\n\t\tif rv < min {\n\t\t\treturn 0, messageError(\"ReadVarInt\", fmt.Sprintf(\n\t\t\t\terrNonCanonicalVarInt, rv, discriminant, min))\n\t\t}\n\n\tcase 0xfe:\n\t\tsv, err := binarySerializer.Uint32(r, littleEndian)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\trv = uint64(sv)\n\n\t\t// The encoding is not canonical if the value could have been\n\t\t// encoded using fewer bytes.\n\t\tmin := uint64(0x10000)\n\t\tif rv < min {\n\t\t\treturn 0, messageError(\"ReadVarInt\", fmt.Sprintf(\n\t\t\t\terrNonCanonicalVarInt, rv, discriminant, min))\n\t\t}\n\n\tcase 0xfd:\n\t\tsv, err := binarySerializer.Uint16(r, littleEndian)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\trv = uint64(sv)\n\n\t\t// The encoding is not canonical if the value could have been\n\t\t// encoded using fewer bytes.\n\t\tmin := uint64(0xfd)\n\t\tif rv < min {\n\t\t\treturn 0, messageError(\"ReadVarInt\", fmt.Sprintf(\n\t\t\t\terrNonCanonicalVarInt, rv, discriminant, min))\n\t\t}\n\n\tdefault:\n\t\trv = uint64(discriminant)\n\t}\n\n\treturn rv, nil\n}\n\n// WriteVarInt serializes val to w using a variable number of bytes depending\n// on its value.\nfunc WriteVarInt(w io.Writer, pver uint32, val uint64) error {\n\tif val < 0xfd {\n\t\treturn binarySerializer.PutUint8(w, uint8(val))\n\t}\n\n\tif val <= math.MaxUint16 {\n\t\terr := binarySerializer.PutUint8(w, 0xfd)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn binarySerializer.PutUint16(w, littleEndian, uint16(val))\n\t}\n\n\tif val <= math.MaxUint32 {\n\t\terr := binarySerializer.PutUint8(w, 0xfe)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn binarySerializer.PutUint32(w, littleEndian, uint32(val))\n\t}\n\n\terr := binarySerializer.PutUint8(w, 0xff)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn binarySerializer.PutUint64(w, littleEndian, val)\n}\n\n// VarIntSerializeSize returns the number of bytes it would take to serialize\n// val as a variable length integer.\nfunc VarIntSerializeSize(val uint64) int {\n\t// The value is small enough to be represented by itself, so it's\n\t// just 1 byte.\n\tif val < 0xfd {\n\t\treturn 1\n\t}\n\n\t// Discriminant 1 byte plus 2 bytes for the uint16.\n\tif val <= math.MaxUint16 {\n\t\treturn 3\n\t}\n\n\t// Discriminant 1 byte plus 4 bytes for the uint32.\n\tif val <= math.MaxUint32 {\n\t\treturn 5\n\t}\n\n\t// Discriminant 1 byte plus 8 bytes for the uint64.\n\treturn 9\n}\n\n// ReadVarString reads a variable length string from r and returns it as a Go\n// string.  A variable length string is encoded as a variable length integer\n// containing the length of the string followed by the bytes that represent the\n// string itself.  An error is returned if the length is greater than the\n// maximum block payload size since it helps protect against memory exhaustion\n// attacks and forced panics through malformed messages.\nfunc ReadVarString(r io.Reader, pver uint32) (string, error) {\n\tcount, err := ReadVarInt(r, pver)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\t// Prevent variable length strings that are larger than the maximum\n\t// message size.  It would be possible to cause memory exhaustion and\n\t// panics without a sane upper bound on this count.\n\tif count > MaxMessagePayload {\n\t\tstr := fmt.Sprintf(\"variable length string is too long \"+\n\t\t\t\"[count %d, max %d]\", count, MaxMessagePayload)\n\t\treturn \"\", messageError(\"ReadVarString\", str)\n\t}\n\n\tbuf := make([]byte, count)\n\t_, err = io.ReadFull(r, buf)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn string(buf), nil\n}\n\n// WriteVarString serializes str to w as a variable length integer containing\n// the length of the string followed by the bytes that represent the string\n// itself.\nfunc WriteVarString(w io.Writer, pver uint32, str string) error {\n\terr := WriteVarInt(w, pver, uint64(len(str)))\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, err = w.Write([]byte(str))\n\treturn err\n}\n\n// ReadVarBytes reads a variable length byte array.  A byte array is encoded\n// as a varInt containing the length of the array followed by the bytes\n// themselves.  An error is returned if the length is greater than the\n// passed maxAllowed parameter which helps protect against memory exhaustion\n// attacks and forced panics through malformed messages.  The fieldName\n// parameter is only used for the error message so it provides more context in\n// the error.\nfunc ReadVarBytes(r io.Reader, pver uint32, maxAllowed uint32,\n\tfieldName string) ([]byte, error) {\n\n\tcount, err := ReadVarInt(r, pver)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Prevent byte array larger than the max message size.  It would\n\t// be possible to cause memory exhaustion and panics without a sane\n\t// upper bound on this count.\n\tif count > uint64(maxAllowed) {\n\t\tstr := fmt.Sprintf(\"%s is larger than the max allowed size \"+\n\t\t\t\"[count %d, max %d]\", fieldName, count, maxAllowed)\n\t\treturn nil, messageError(\"ReadVarBytes\", str)\n\t}\n\n\tb := make([]byte, count)\n\t_, err = io.ReadFull(r, b)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn b, nil\n}\n\n// WriteVarBytes serializes a variable length byte array to w as a varInt\n// containing the number of bytes, followed by the bytes themselves.\nfunc WriteVarBytes(w io.Writer, pver uint32, bytes []byte) error {\n\tslen := uint64(len(bytes))\n\terr := WriteVarInt(w, pver, slen)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t_, err = w.Write(bytes)\n\treturn err\n}\n\n// randomUint64 returns a cryptographically random uint64 value.  This\n// unexported version takes a reader primarily to ensure the error paths\n// can be properly tested by passing a fake reader in the tests.\nfunc randomUint64(r io.Reader) (uint64, error) {\n\trv, err := binarySerializer.Uint64(r, bigEndian)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn rv, nil\n}\n\n// RandomUint64 returns a cryptographically random uint64 value.\nfunc RandomUint64() (uint64, error) {\n\treturn randomUint64(rand.Reader)\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/doc.go",
    "content": "// Copyright (c) 2013-2016 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\n/*\nPackage wire implements the bitcoin wire protocol.\n\nFor the complete details of the bitcoin protocol, see the official wiki entry\nat https://en.bitcoin.it/wiki/Protocol_specification.  The following only serves\nas a quick overview to provide information on how to use the package.\n\nAt a high level, this package provides support for marshalling and unmarshalling\nsupported bitcoin messages to and from the wire.  This package does not deal\nwith the specifics of message handling such as what to do when a message is\nreceived.  This provides the caller with a high level of flexibility.\n\nBitcoin Message Overview\n\nThe bitcoin protocol consists of exchanging messages between peers.  Each\nmessage is preceded by a header which identifies information about it such as\nwhich bitcoin network it is a part of, its type, how big it is, and a checksum\nto verify validity.  All encoding and decoding of message headers is handled by\nthis package.\n\nTo accomplish this, there is a generic interface for bitcoin messages named\nMessage which allows messages of any type to be read, written, or passed around\nthrough channels, functions, etc.  In addition, concrete implementations of most\nof the currently supported bitcoin messages are provided.  For these supported\nmessages, all of the details of marshalling and unmarshalling to and from the\nwire using bitcoin encoding are handled so the caller doesn't have to concern\nthemselves with the specifics.\n\nMessage Interaction\n\nThe following provides a quick summary of how the bitcoin messages are intended\nto interact with one another.  As stated above, these interactions are not\ndirectly handled by this package.  For more in-depth details about the\nappropriate interactions, see the official bitcoin protocol wiki entry at\nhttps://en.bitcoin.it/wiki/Protocol_specification.\n\nThe initial handshake consists of two peers sending each other a version message\n(MsgVersion) followed by responding with a verack message (MsgVerAck).  Both\npeers use the information in the version message (MsgVersion) to negotiate\nthings such as protocol version and supported services with each other.  Once\nthe initial handshake is complete, the following chart indicates message\ninteractions in no particular order.\n\n\tPeer A Sends                          Peer B Responds\n\t----------------------------------------------------------------------------\n\tgetaddr message (MsgGetAddr)          addr message (MsgAddr)\n\tgetblocks message (MsgGetBlocks)      inv message (MsgInv)\n\tinv message (MsgInv)                  getdata message (MsgGetData)\n\tgetdata message (MsgGetData)          block message (MsgBlock) -or-\n\t                                      tx message (MsgTx) -or-\n\t                                      notfound message (MsgNotFound)\n\tgetheaders message (MsgGetHeaders)    headers message (MsgHeaders)\n\tping message (MsgPing)                pong message (MsgHeaders)* -or-\n\t                                      (none -- Ability to send message is enough)\n\n\tNOTES:\n\t* The pong message was not added until later protocol versions as defined\n\t  in BIP0031.  The BIP0031Version constant can be used to detect a recent\n\t  enough protocol version for this purpose (version > BIP0031Version).\n\nCommon Parameters\n\nThere are several common parameters that arise when using this package to read\nand write bitcoin messages.  The following sections provide a quick overview of\nthese parameters so the next sections can build on them.\n\nProtocol Version\n\nThe protocol version should be negotiated with the remote peer at a higher\nlevel than this package via the version (MsgVersion) message exchange, however,\nthis package provides the wire.ProtocolVersion constant which indicates the\nlatest protocol version this package supports and is typically the value to use\nfor all outbound connections before a potentially lower protocol version is\nnegotiated.\n\nBitcoin Network\n\nThe bitcoin network is a magic number which is used to identify the start of a\nmessage and which bitcoin network the message applies to.  This package provides\nthe following constants:\n\n\twire.MainNet\n\twire.TestNet  (Regression test network)\n\twire.TestNet3 (Test network version 3)\n\twire.SimNet   (Simulation test network)\n\nDetermining Message Type\n\nAs discussed in the bitcoin message overview section, this package reads\nand writes bitcoin messages using a generic interface named Message.  In\norder to determine the actual concrete type of the message, use a type\nswitch or type assertion.  An example of a type switch follows:\n\n\t// Assumes msg is already a valid concrete message such as one created\n\t// via NewMsgVersion or read via ReadMessage.\n\tswitch msg := msg.(type) {\n\tcase *wire.MsgVersion:\n\t\t// The message is a pointer to a MsgVersion struct.\n\t\tfmt.Printf(\"Protocol version: %v\", msg.ProtocolVersion)\n\tcase *wire.MsgBlock:\n\t\t// The message is a pointer to a MsgBlock struct.\n\t\tfmt.Printf(\"Number of tx in block: %v\", msg.Header.TxnCount)\n\t}\n\nReading Messages\n\nIn order to unmarshall bitcoin messages from the wire, use the ReadMessage\nfunction.  It accepts any io.Reader, but typically this will be a net.Conn to\na remote node running a bitcoin peer.  Example syntax is:\n\n\t// Reads and validates the next bitcoin message from conn using the\n\t// protocol version pver and the bitcoin network btcnet.  The returns\n\t// are a wire.Message, a []byte which contains the unmarshalled\n\t// raw payload, and a possible error.\n\tmsg, rawPayload, err := wire.ReadMessage(conn, pver, btcnet)\n\tif err != nil {\n\t\t// Log and handle the error\n\t}\n\nWriting Messages\n\nIn order to marshall bitcoin messages to the wire, use the WriteMessage\nfunction.  It accepts any io.Writer, but typically this will be a net.Conn to\na remote node running a bitcoin peer.  Example syntax to request addresses\nfrom a remote peer is:\n\n\t// Create a new getaddr bitcoin message.\n\tmsg := wire.NewMsgGetAddr()\n\n\t// Writes a bitcoin message msg to conn using the protocol version\n\t// pver, and the bitcoin network btcnet.  The return is a possible\n\t// error.\n\terr := wire.WriteMessage(conn, msg, pver, btcnet)\n\tif err != nil {\n\t\t// Log and handle the error\n\t}\n\nErrors\n\nErrors returned by this package are either the raw errors provided by underlying\ncalls to read/write from streams such as io.EOF, io.ErrUnexpectedEOF, and\nio.ErrShortWrite, or of type wire.MessageError.  This allows the caller to\ndifferentiate between general IO errors and malformed messages through type\nassertions.\n\nBitcoin Improvement Proposals\n\nThis package includes spec changes outlined by the following BIPs:\n\n\tBIP0014 (https://github.com/bitcoin/bips/blob/master/bip-0014.mediawiki)\n\tBIP0031 (https://github.com/bitcoin/bips/blob/master/bip-0031.mediawiki)\n\tBIP0035 (https://github.com/bitcoin/bips/blob/master/bip-0035.mediawiki)\n\tBIP0037 (https://github.com/bitcoin/bips/blob/master/bip-0037.mediawiki)\n\tBIP0111\t(https://github.com/bitcoin/bips/blob/master/bip-0111.mediawiki)\n\tBIP0130 (https://github.com/bitcoin/bips/blob/master/bip-0130.mediawiki)\n\tBIP0133 (https://github.com/bitcoin/bips/blob/master/bip-0133.mediawiki)\n*/\npackage wire\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/error.go",
    "content": "// Copyright (c) 2013-2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n)\n\n// MessageError describes an issue with a message.\n// An example of some potential issues are messages from the wrong bitcoin\n// network, invalid commands, mismatched checksums, and exceeding max payloads.\n//\n// This provides a mechanism for the caller to type assert the error to\n// differentiate between general io errors such as io.EOF and issues that\n// resulted from malformed messages.\ntype MessageError struct {\n\tFunc        string // Function name\n\tDescription string // Human readable description of the issue\n}\n\n// Error satisfies the error interface and prints human-readable errors.\nfunc (e *MessageError) Error() string {\n\tif e.Func != \"\" {\n\t\treturn fmt.Sprintf(\"%v: %v\", e.Func, e.Description)\n\t}\n\treturn e.Description\n}\n\n// messageError creates an error for the given function and description.\nfunc messageError(f string, desc string) *MessageError {\n\treturn &MessageError{Func: f, Description: desc}\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/invvect.go",
    "content": "// Copyright (c) 2013-2016 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/btcsuite/btcd/chaincfg/chainhash\"\n)\n\nconst (\n\t// MaxInvPerMsg is the maximum number of inventory vectors that can be in a\n\t// single bitcoin inv message.\n\tMaxInvPerMsg = 50000\n\n\t// Maximum payload size for an inventory vector.\n\tmaxInvVectPayload = 4 + chainhash.HashSize\n\n\t// InvWitnessFlag denotes that the inventory vector type is requesting,\n\t// or sending a version which includes witness data.\n\tInvWitnessFlag = 1 << 30\n)\n\n// InvType represents the allowed types of inventory vectors.  See InvVect.\ntype InvType uint32\n\n// These constants define the various supported inventory vector types.\nconst (\n\tInvTypeError                InvType = 0\n\tInvTypeTx                   InvType = 1\n\tInvTypeBlock                InvType = 2\n\tInvTypeFilteredBlock        InvType = 3\n\tInvTypeWitnessBlock         InvType = InvTypeBlock | InvWitnessFlag\n\tInvTypeWitnessTx            InvType = InvTypeTx | InvWitnessFlag\n\tInvTypeFilteredWitnessBlock InvType = InvTypeFilteredBlock | InvWitnessFlag\n)\n\n// Map of service flags back to their constant names for pretty printing.\nvar ivStrings = map[InvType]string{\n\tInvTypeError:                \"ERROR\",\n\tInvTypeTx:                   \"MSG_TX\",\n\tInvTypeBlock:                \"MSG_BLOCK\",\n\tInvTypeFilteredBlock:        \"MSG_FILTERED_BLOCK\",\n\tInvTypeWitnessBlock:         \"MSG_WITNESS_BLOCK\",\n\tInvTypeWitnessTx:            \"MSG_WITNESS_TX\",\n\tInvTypeFilteredWitnessBlock: \"MSG_FILTERED_WITNESS_BLOCK\",\n}\n\n// String returns the InvType in human-readable form.\nfunc (invtype InvType) String() string {\n\tif s, ok := ivStrings[invtype]; ok {\n\t\treturn s\n\t}\n\n\treturn fmt.Sprintf(\"Unknown InvType (%d)\", uint32(invtype))\n}\n\n// InvVect defines a bitcoin inventory vector which is used to describe data,\n// as specified by the Type field, that a peer wants, has, or does not have to\n// another peer.\ntype InvVect struct {\n\tType InvType        // Type of data\n\tHash chainhash.Hash // Hash of the data\n}\n\n// NewInvVect returns a new InvVect using the provided type and hash.\nfunc NewInvVect(typ InvType, hash *chainhash.Hash) *InvVect {\n\treturn &InvVect{\n\t\tType: typ,\n\t\tHash: *hash,\n\t}\n}\n\n// readInvVect reads an encoded InvVect from r depending on the protocol\n// version.\nfunc readInvVect(r io.Reader, pver uint32, iv *InvVect) error {\n\treturn readElements(r, &iv.Type, &iv.Hash)\n}\n\n// writeInvVect serializes an InvVect to w depending on the protocol version.\nfunc writeInvVect(w io.Writer, pver uint32, iv *InvVect) error {\n\treturn writeElements(w, iv.Type, &iv.Hash)\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/message.go",
    "content": "// Copyright (c) 2013-2016 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"unicode/utf8\"\n\n\t\"github.com/btcsuite/btcd/chaincfg/chainhash\"\n)\n\n// MessageHeaderSize is the number of bytes in a bitcoin message header.\n// Bitcoin network (magic) 4 bytes + command 12 bytes + payload length 4 bytes +\n// checksum 4 bytes.\nconst MessageHeaderSize = 24\n\n// CommandSize is the fixed size of all commands in the common bitcoin message\n// header.  Shorter commands must be zero padded.\nconst CommandSize = 12\n\n// MaxMessagePayload is the maximum bytes a message can be regardless of other\n// individual limits imposed by messages themselves.\nconst MaxMessagePayload = (1024 * 1024 * 32) // 32MB\n\n// Commands used in bitcoin message headers which describe the type of message.\nconst (\n\tCmdVersion      = \"version\"\n\tCmdVerAck       = \"verack\"\n\tCmdGetAddr      = \"getaddr\"\n\tCmdAddr         = \"addr\"\n\tCmdGetBlocks    = \"getblocks\"\n\tCmdInv          = \"inv\"\n\tCmdGetData      = \"getdata\"\n\tCmdNotFound     = \"notfound\"\n\tCmdBlock        = \"block\"\n\tCmdTx           = \"tx\"\n\tCmdGetHeaders   = \"getheaders\"\n\tCmdHeaders      = \"headers\"\n\tCmdPing         = \"ping\"\n\tCmdPong         = \"pong\"\n\tCmdAlert        = \"alert\"\n\tCmdMemPool      = \"mempool\"\n\tCmdFilterAdd    = \"filteradd\"\n\tCmdFilterClear  = \"filterclear\"\n\tCmdFilterLoad   = \"filterload\"\n\tCmdMerkleBlock  = \"merkleblock\"\n\tCmdReject       = \"reject\"\n\tCmdSendHeaders  = \"sendheaders\"\n\tCmdFeeFilter    = \"feefilter\"\n\tCmdGetCFilters  = \"getcfilters\"\n\tCmdGetCFHeaders = \"getcfheaders\"\n\tCmdGetCFCheckpt = \"getcfcheckpt\"\n\tCmdCFilter      = \"cfilter\"\n\tCmdCFHeaders    = \"cfheaders\"\n\tCmdCFCheckpt    = \"cfcheckpt\"\n)\n\n// MessageEncoding represents the wire message encoding format to be used.\ntype MessageEncoding uint32\n\nconst (\n\t// BaseEncoding encodes all messages in the default format specified\n\t// for the Bitcoin wire protocol.\n\tBaseEncoding MessageEncoding = 1 << iota\n\n\t// WitnessEncoding encodes all messages other than transaction messages\n\t// using the default Bitcoin wire protocol specification. For transaction\n\t// messages, the new encoding format detailed in BIP0144 will be used.\n\tWitnessEncoding\n)\n\n// LatestEncoding is the most recently specified encoding for the Bitcoin wire\n// protocol.\nvar LatestEncoding = WitnessEncoding\n\n// Message is an interface that describes a bitcoin message.  A type that\n// implements Message has complete control over the representation of its data\n// and may therefore contain additional or fewer fields than those which\n// are used directly in the protocol encoded message.\ntype Message interface {\n\tBtcDecode(io.Reader, uint32, MessageEncoding) error\n\tBtcEncode(io.Writer, uint32, MessageEncoding) error\n\tCommand() string\n\tMaxPayloadLength(uint32) uint32\n}\n\n// makeEmptyMessage creates a message of the appropriate concrete type based\n// on the command.\nfunc makeEmptyMessage(command string) (Message, error) {\n\tvar msg Message\n\tswitch command {\n\tcase CmdVersion:\n\t\tmsg = &MsgVersion{}\n\n\tcase CmdVerAck:\n\t\tmsg = &MsgVerAck{}\n\n\tcase CmdGetAddr:\n\t\tmsg = &MsgGetAddr{}\n\n\tcase CmdAddr:\n\t\tmsg = &MsgAddr{}\n\n\tcase CmdGetBlocks:\n\t\tmsg = &MsgGetBlocks{}\n\n\tcase CmdBlock:\n\t\tmsg = &MsgBlock{}\n\n\tcase CmdInv:\n\t\tmsg = &MsgInv{}\n\n\tcase CmdGetData:\n\t\tmsg = &MsgGetData{}\n\n\tcase CmdNotFound:\n\t\tmsg = &MsgNotFound{}\n\n\tcase CmdTx:\n\t\tmsg = &MsgTx{}\n\n\tcase CmdPing:\n\t\tmsg = &MsgPing{}\n\n\tcase CmdPong:\n\t\tmsg = &MsgPong{}\n\n\tcase CmdGetHeaders:\n\t\tmsg = &MsgGetHeaders{}\n\n\tcase CmdHeaders:\n\t\tmsg = &MsgHeaders{}\n\n\tcase CmdAlert:\n\t\tmsg = &MsgAlert{}\n\n\tcase CmdMemPool:\n\t\tmsg = &MsgMemPool{}\n\n\tcase CmdFilterAdd:\n\t\tmsg = &MsgFilterAdd{}\n\n\tcase CmdFilterClear:\n\t\tmsg = &MsgFilterClear{}\n\n\tcase CmdFilterLoad:\n\t\tmsg = &MsgFilterLoad{}\n\n\tcase CmdMerkleBlock:\n\t\tmsg = &MsgMerkleBlock{}\n\n\tcase CmdReject:\n\t\tmsg = &MsgReject{}\n\n\tcase CmdSendHeaders:\n\t\tmsg = &MsgSendHeaders{}\n\n\tcase CmdFeeFilter:\n\t\tmsg = &MsgFeeFilter{}\n\n\tcase CmdGetCFilters:\n\t\tmsg = &MsgGetCFilters{}\n\n\tcase CmdGetCFHeaders:\n\t\tmsg = &MsgGetCFHeaders{}\n\n\tcase CmdGetCFCheckpt:\n\t\tmsg = &MsgGetCFCheckpt{}\n\n\tcase CmdCFilter:\n\t\tmsg = &MsgCFilter{}\n\n\tcase CmdCFHeaders:\n\t\tmsg = &MsgCFHeaders{}\n\n\tcase CmdCFCheckpt:\n\t\tmsg = &MsgCFCheckpt{}\n\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"unhandled command [%s]\", command)\n\t}\n\treturn msg, nil\n}\n\n// messageHeader defines the header structure for all bitcoin protocol messages.\ntype messageHeader struct {\n\tmagic    BitcoinNet // 4 bytes\n\tcommand  string     // 12 bytes\n\tlength   uint32     // 4 bytes\n\tchecksum [4]byte    // 4 bytes\n}\n\n// readMessageHeader reads a bitcoin message header from r.\nfunc readMessageHeader(r io.Reader) (int, *messageHeader, error) {\n\t// Since readElements doesn't return the amount of bytes read, attempt\n\t// to read the entire header into a buffer first in case there is a\n\t// short read so the proper amount of read bytes are known.  This works\n\t// since the header is a fixed size.\n\tvar headerBytes [MessageHeaderSize]byte\n\tn, err := io.ReadFull(r, headerBytes[:])\n\tif err != nil {\n\t\treturn n, nil, err\n\t}\n\thr := bytes.NewReader(headerBytes[:])\n\n\t// Create and populate a messageHeader struct from the raw header bytes.\n\thdr := messageHeader{}\n\tvar command [CommandSize]byte\n\treadElements(hr, &hdr.magic, &command, &hdr.length, &hdr.checksum)\n\n\t// Strip trailing zeros from command string.\n\thdr.command = string(bytes.TrimRight(command[:], string(0)))\n\n\treturn n, &hdr, nil\n}\n\n// discardInput reads n bytes from reader r in chunks and discards the read\n// bytes.  This is used to skip payloads when various errors occur and helps\n// prevent rogue nodes from causing massive memory allocation through forging\n// header length.\nfunc discardInput(r io.Reader, n uint32) {\n\tmaxSize := uint32(10 * 1024) // 10k at a time\n\tnumReads := n / maxSize\n\tbytesRemaining := n % maxSize\n\tif n > 0 {\n\t\tbuf := make([]byte, maxSize)\n\t\tfor i := uint32(0); i < numReads; i++ {\n\t\t\tio.ReadFull(r, buf)\n\t\t}\n\t}\n\tif bytesRemaining > 0 {\n\t\tbuf := make([]byte, bytesRemaining)\n\t\tio.ReadFull(r, buf)\n\t}\n}\n\n// WriteMessageN writes a bitcoin Message to w including the necessary header\n// information and returns the number of bytes written.    This function is the\n// same as WriteMessage except it also returns the number of bytes written.\nfunc WriteMessageN(w io.Writer, msg Message, pver uint32, btcnet BitcoinNet) (int, error) {\n\treturn WriteMessageWithEncodingN(w, msg, pver, btcnet, BaseEncoding)\n}\n\n// WriteMessage writes a bitcoin Message to w including the necessary header\n// information.  This function is the same as WriteMessageN except it doesn't\n// doesn't return the number of bytes written.  This function is mainly provided\n// for backwards compatibility with the original API, but it's also useful for\n// callers that don't care about byte counts.\nfunc WriteMessage(w io.Writer, msg Message, pver uint32, btcnet BitcoinNet) error {\n\t_, err := WriteMessageN(w, msg, pver, btcnet)\n\treturn err\n}\n\n// WriteMessageWithEncodingN writes a bitcoin Message to w including the\n// necessary header information and returns the number of bytes written.\n// This function is the same as WriteMessageN except it also allows the caller\n// to specify the message encoding format to be used when serializing wire\n// messages.\nfunc WriteMessageWithEncodingN(w io.Writer, msg Message, pver uint32,\n\tbtcnet BitcoinNet, encoding MessageEncoding) (int, error) {\n\n\ttotalBytes := 0\n\n\t// Enforce max command size.\n\tvar command [CommandSize]byte\n\tcmd := msg.Command()\n\tif len(cmd) > CommandSize {\n\t\tstr := fmt.Sprintf(\"command [%s] is too long [max %v]\",\n\t\t\tcmd, CommandSize)\n\t\treturn totalBytes, messageError(\"WriteMessage\", str)\n\t}\n\tcopy(command[:], []byte(cmd))\n\n\t// Encode the message payload.\n\tvar bw bytes.Buffer\n\terr := msg.BtcEncode(&bw, pver, encoding)\n\tif err != nil {\n\t\treturn totalBytes, err\n\t}\n\tpayload := bw.Bytes()\n\tlenp := len(payload)\n\n\t// Enforce maximum overall message payload.\n\tif lenp > MaxMessagePayload {\n\t\tstr := fmt.Sprintf(\"message payload is too large - encoded \"+\n\t\t\t\"%d bytes, but maximum message payload is %d bytes\",\n\t\t\tlenp, MaxMessagePayload)\n\t\treturn totalBytes, messageError(\"WriteMessage\", str)\n\t}\n\n\t// Enforce maximum message payload based on the message type.\n\tmpl := msg.MaxPayloadLength(pver)\n\tif uint32(lenp) > mpl {\n\t\tstr := fmt.Sprintf(\"message payload is too large - encoded \"+\n\t\t\t\"%d bytes, but maximum message payload size for \"+\n\t\t\t\"messages of type [%s] is %d.\", lenp, cmd, mpl)\n\t\treturn totalBytes, messageError(\"WriteMessage\", str)\n\t}\n\n\t// Create header for the message.\n\thdr := messageHeader{}\n\thdr.magic = btcnet\n\thdr.command = cmd\n\thdr.length = uint32(lenp)\n\tcopy(hdr.checksum[:], chainhash.DoubleHashB(payload)[0:4])\n\n\t// Encode the header for the message.  This is done to a buffer\n\t// rather than directly to the writer since writeElements doesn't\n\t// return the number of bytes written.\n\thw := bytes.NewBuffer(make([]byte, 0, MessageHeaderSize))\n\twriteElements(hw, hdr.magic, command, hdr.length, hdr.checksum)\n\n\t// Write header.\n\tn, err := w.Write(hw.Bytes())\n\ttotalBytes += n\n\tif err != nil {\n\t\treturn totalBytes, err\n\t}\n\n\t// Write payload.\n\tn, err = w.Write(payload)\n\ttotalBytes += n\n\treturn totalBytes, err\n}\n\n// ReadMessageWithEncodingN reads, validates, and parses the next bitcoin Message\n// from r for the provided protocol version and bitcoin network.  It returns the\n// number of bytes read in addition to the parsed Message and raw bytes which\n// comprise the message.  This function is the same as ReadMessageN except it\n// allows the caller to specify which message encoding is to to consult when\n// decoding wire messages.\nfunc ReadMessageWithEncodingN(r io.Reader, pver uint32, btcnet BitcoinNet,\n\tenc MessageEncoding) (int, Message, []byte, error) {\n\n\ttotalBytes := 0\n\tn, hdr, err := readMessageHeader(r)\n\ttotalBytes += n\n\tif err != nil {\n\t\treturn totalBytes, nil, nil, err\n\t}\n\n\t// Enforce maximum message payload.\n\tif hdr.length > MaxMessagePayload {\n\t\tstr := fmt.Sprintf(\"message payload is too large - header \"+\n\t\t\t\"indicates %d bytes, but max message payload is %d \"+\n\t\t\t\"bytes.\", hdr.length, MaxMessagePayload)\n\t\treturn totalBytes, nil, nil, messageError(\"ReadMessage\", str)\n\n\t}\n\n\t// Check for messages from the wrong bitcoin network.\n\tif hdr.magic != btcnet {\n\t\tdiscardInput(r, hdr.length)\n\t\tstr := fmt.Sprintf(\"message from other network [%v]\", hdr.magic)\n\t\treturn totalBytes, nil, nil, messageError(\"ReadMessage\", str)\n\t}\n\n\t// Check for malformed commands.\n\tcommand := hdr.command\n\tif !utf8.ValidString(command) {\n\t\tdiscardInput(r, hdr.length)\n\t\tstr := fmt.Sprintf(\"invalid command %v\", []byte(command))\n\t\treturn totalBytes, nil, nil, messageError(\"ReadMessage\", str)\n\t}\n\n\t// Create struct of appropriate message type based on the command.\n\tmsg, err := makeEmptyMessage(command)\n\tif err != nil {\n\t\tdiscardInput(r, hdr.length)\n\t\treturn totalBytes, nil, nil, messageError(\"ReadMessage\",\n\t\t\terr.Error())\n\t}\n\n\t// Check for maximum length based on the message type as a malicious client\n\t// could otherwise create a well-formed header and set the length to max\n\t// numbers in order to exhaust the machine's memory.\n\tmpl := msg.MaxPayloadLength(pver)\n\tif hdr.length > mpl {\n\t\tdiscardInput(r, hdr.length)\n\t\tstr := fmt.Sprintf(\"payload exceeds max length - header \"+\n\t\t\t\"indicates %v bytes, but max payload size for \"+\n\t\t\t\"messages of type [%v] is %v.\", hdr.length, command, mpl)\n\t\treturn totalBytes, nil, nil, messageError(\"ReadMessage\", str)\n\t}\n\n\t// Read payload.\n\tpayload := make([]byte, hdr.length)\n\tn, err = io.ReadFull(r, payload)\n\ttotalBytes += n\n\tif err != nil {\n\t\treturn totalBytes, nil, nil, err\n\t}\n\n\t// Test checksum.\n\tchecksum := chainhash.DoubleHashB(payload)[0:4]\n\tif !bytes.Equal(checksum[:], hdr.checksum[:]) {\n\t\tstr := fmt.Sprintf(\"payload checksum failed - header \"+\n\t\t\t\"indicates %v, but actual checksum is %v.\",\n\t\t\thdr.checksum, checksum)\n\t\treturn totalBytes, nil, nil, messageError(\"ReadMessage\", str)\n\t}\n\n\t// Unmarshal message.  NOTE: This must be a *bytes.Buffer since the\n\t// MsgVersion BtcDecode function requires it.\n\tpr := bytes.NewBuffer(payload)\n\terr = msg.BtcDecode(pr, pver, enc)\n\tif err != nil {\n\t\treturn totalBytes, nil, nil, err\n\t}\n\n\treturn totalBytes, msg, payload, nil\n}\n\n// ReadMessageN reads, validates, and parses the next bitcoin Message from r for\n// the provided protocol version and bitcoin network.  It returns the number of\n// bytes read in addition to the parsed Message and raw bytes which comprise the\n// message.  This function is the same as ReadMessage except it also returns the\n// number of bytes read.\nfunc ReadMessageN(r io.Reader, pver uint32, btcnet BitcoinNet) (int, Message, []byte, error) {\n\treturn ReadMessageWithEncodingN(r, pver, btcnet, BaseEncoding)\n}\n\n// ReadMessage reads, validates, and parses the next bitcoin Message from r for\n// the provided protocol version and bitcoin network.  It returns the parsed\n// Message and raw bytes which comprise the message.  This function only differs\n// from ReadMessageN in that it doesn't return the number of bytes read.  This\n// function is mainly provided for backwards compatibility with the original\n// API, but it's also useful for callers that don't care about byte counts.\nfunc ReadMessage(r io.Reader, pver uint32, btcnet BitcoinNet) (Message, []byte, error) {\n\t_, msg, buf, err := ReadMessageN(r, pver, btcnet)\n\treturn msg, buf, err\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/msgaddr.go",
    "content": "// Copyright (c) 2013-2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\n// MaxAddrPerMsg is the maximum number of addresses that can be in a single\n// bitcoin addr message (MsgAddr).\nconst MaxAddrPerMsg = 1000\n\n// MsgAddr implements the Message interface and represents a bitcoin\n// addr message.  It is used to provide a list of known active peers on the\n// network.  An active peer is considered one that has transmitted a message\n// within the last 3 hours.  Nodes which have not transmitted in that time\n// frame should be forgotten.  Each message is limited to a maximum number of\n// addresses, which is currently 1000.  As a result, multiple messages must\n// be used to relay the full list.\n//\n// Use the AddAddress function to build up the list of known addresses when\n// sending an addr message to another peer.\ntype MsgAddr struct {\n\tAddrList []*NetAddress\n}\n\n// AddAddress adds a known active peer to the message.\nfunc (msg *MsgAddr) AddAddress(na *NetAddress) error {\n\tif len(msg.AddrList)+1 > MaxAddrPerMsg {\n\t\tstr := fmt.Sprintf(\"too many addresses in message [max %v]\",\n\t\t\tMaxAddrPerMsg)\n\t\treturn messageError(\"MsgAddr.AddAddress\", str)\n\t}\n\n\tmsg.AddrList = append(msg.AddrList, na)\n\treturn nil\n}\n\n// AddAddresses adds multiple known active peers to the message.\nfunc (msg *MsgAddr) AddAddresses(netAddrs ...*NetAddress) error {\n\tfor _, na := range netAddrs {\n\t\terr := msg.AddAddress(na)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// ClearAddresses removes all addresses from the message.\nfunc (msg *MsgAddr) ClearAddresses() {\n\tmsg.AddrList = []*NetAddress{}\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgAddr) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error {\n\tcount, err := ReadVarInt(r, pver)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Limit to max addresses per message.\n\tif count > MaxAddrPerMsg {\n\t\tstr := fmt.Sprintf(\"too many addresses for message \"+\n\t\t\t\"[count %v, max %v]\", count, MaxAddrPerMsg)\n\t\treturn messageError(\"MsgAddr.BtcDecode\", str)\n\t}\n\n\taddrList := make([]NetAddress, count)\n\tmsg.AddrList = make([]*NetAddress, 0, count)\n\tfor i := uint64(0); i < count; i++ {\n\t\tna := &addrList[i]\n\t\terr := readNetAddress(r, pver, na, true)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmsg.AddAddress(na)\n\t}\n\treturn nil\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgAddr) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error {\n\t// Protocol versions before MultipleAddressVersion only allowed 1 address\n\t// per message.\n\tcount := len(msg.AddrList)\n\tif pver < MultipleAddressVersion && count > 1 {\n\t\tstr := fmt.Sprintf(\"too many addresses for message of \"+\n\t\t\t\"protocol version %v [count %v, max 1]\", pver, count)\n\t\treturn messageError(\"MsgAddr.BtcEncode\", str)\n\n\t}\n\tif count > MaxAddrPerMsg {\n\t\tstr := fmt.Sprintf(\"too many addresses for message \"+\n\t\t\t\"[count %v, max %v]\", count, MaxAddrPerMsg)\n\t\treturn messageError(\"MsgAddr.BtcEncode\", str)\n\t}\n\n\terr := WriteVarInt(w, pver, uint64(count))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, na := range msg.AddrList {\n\t\terr = writeNetAddress(w, pver, na, true)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgAddr) Command() string {\n\treturn CmdAddr\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgAddr) MaxPayloadLength(pver uint32) uint32 {\n\tif pver < MultipleAddressVersion {\n\t\t// Num addresses (varInt) + a single net addresses.\n\t\treturn MaxVarIntPayload + maxNetAddressPayload(pver)\n\t}\n\n\t// Num addresses (varInt) + max allowed addresses.\n\treturn MaxVarIntPayload + (MaxAddrPerMsg * maxNetAddressPayload(pver))\n}\n\n// NewMsgAddr returns a new bitcoin addr message that conforms to the\n// Message interface.  See MsgAddr for details.\nfunc NewMsgAddr() *MsgAddr {\n\treturn &MsgAddr{\n\t\tAddrList: make([]*NetAddress, 0, MaxAddrPerMsg),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/msgalert.go",
    "content": "// Copyright (c) 2013-2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n)\n\n// MsgAlert contains a payload and a signature:\n//\n//        ===============================================\n//        |   Field         |   Data Type   |   Size    |\n//        ===============================================\n//        |   payload       |   []uchar     |   ?       |\n//        -----------------------------------------------\n//        |   signature     |   []uchar     |   ?       |\n//        -----------------------------------------------\n//\n// Here payload is an Alert serialized into a byte array to ensure that\n// versions using incompatible alert formats can still relay\n// alerts among one another.\n//\n// An Alert is the payload deserialized as follows:\n//\n//        ===============================================\n//        |   Field         |   Data Type   |   Size    |\n//        ===============================================\n//        |   Version       |   int32       |   4       |\n//        -----------------------------------------------\n//        |   RelayUntil    |   int64       |   8       |\n//        -----------------------------------------------\n//        |   Expiration    |   int64       |   8       |\n//        -----------------------------------------------\n//        |   ID            |   int32       |   4       |\n//        -----------------------------------------------\n//        |   Cancel        |   int32       |   4       |\n//        -----------------------------------------------\n//        |   SetCancel     |   set<int32>  |   ?       |\n//        -----------------------------------------------\n//        |   MinVer        |   int32       |   4       |\n//        -----------------------------------------------\n//        |   MaxVer        |   int32       |   4       |\n//        -----------------------------------------------\n//        |   SetSubVer     |   set<string> |   ?       |\n//        -----------------------------------------------\n//        |   Priority      |   int32       |   4       |\n//        -----------------------------------------------\n//        |   Comment       |   string      |   ?       |\n//        -----------------------------------------------\n//        |   StatusBar     |   string      |   ?       |\n//        -----------------------------------------------\n//        |   Reserved      |   string      |   ?       |\n//        -----------------------------------------------\n//        |   Total  (Fixed)                |   45      |\n//        -----------------------------------------------\n//\n// NOTE:\n//      * string is a VarString i.e VarInt length followed by the string itself\n//      * set<string> is a VarInt followed by as many number of strings\n//      * set<int32> is a VarInt followed by as many number of ints\n//      * fixedAlertSize = 40 + 5*min(VarInt)  = 40 + 5*1 = 45\n//\n// Now we can define bounds on Alert size, SetCancel and SetSubVer\n\n// Fixed size of the alert payload\nconst fixedAlertSize = 45\n\n// maxSignatureSize is the max size of an ECDSA signature.\n// NOTE: Since this size is fixed and < 255, the size of VarInt required = 1.\nconst maxSignatureSize = 72\n\n// maxAlertSize is the maximum size an alert.\n//\n// MessagePayload = VarInt(Alert) + Alert + VarInt(Signature) + Signature\n// MaxMessagePayload = maxAlertSize + max(VarInt) + maxSignatureSize + 1\nconst maxAlertSize = MaxMessagePayload - maxSignatureSize - MaxVarIntPayload - 1\n\n// maxCountSetCancel is the maximum number of cancel IDs that could possibly\n// fit into a maximum size alert.\n//\n// maxAlertSize = fixedAlertSize + max(SetCancel) + max(SetSubVer) + 3*(string)\n// for caculating maximum number of cancel IDs, set all other var  sizes to 0\n// maxAlertSize = fixedAlertSize + (MaxVarIntPayload-1) + x*sizeOf(int32)\n// x = (maxAlertSize - fixedAlertSize - MaxVarIntPayload + 1) / 4\nconst maxCountSetCancel = (maxAlertSize - fixedAlertSize - MaxVarIntPayload + 1) / 4\n\n// maxCountSetSubVer is the maximum number of subversions that could possibly\n// fit into a maximum size alert.\n//\n// maxAlertSize = fixedAlertSize + max(SetCancel) + max(SetSubVer) + 3*(string)\n// for caculating maximum number of subversions, set all other var sizes to 0\n// maxAlertSize = fixedAlertSize + (MaxVarIntPayload-1) + x*sizeOf(string)\n// x = (maxAlertSize - fixedAlertSize - MaxVarIntPayload + 1) / sizeOf(string)\n// subversion would typically be something like \"/Satoshi:0.7.2/\" (15 bytes)\n// so assuming < 255 bytes, sizeOf(string) = sizeOf(uint8) + 255 = 256\nconst maxCountSetSubVer = (maxAlertSize - fixedAlertSize - MaxVarIntPayload + 1) / 256\n\n// Alert contains the data deserialized from the MsgAlert payload.\ntype Alert struct {\n\t// Alert format version\n\tVersion int32\n\n\t// Timestamp beyond which nodes should stop relaying this alert\n\tRelayUntil int64\n\n\t// Timestamp beyond which this alert is no longer in effect and\n\t// should be ignored\n\tExpiration int64\n\n\t// A unique ID number for this alert\n\tID int32\n\n\t// All alerts with an ID less than or equal to this number should\n\t// cancelled, deleted and not accepted in the future\n\tCancel int32\n\n\t// All alert IDs contained in this set should be cancelled as above\n\tSetCancel []int32\n\n\t// This alert only applies to versions greater than or equal to this\n\t// version. Other versions should still relay it.\n\tMinVer int32\n\n\t// This alert only applies to versions less than or equal to this version.\n\t// Other versions should still relay it.\n\tMaxVer int32\n\n\t// If this set contains any elements, then only nodes that have their\n\t// subVer contained in this set are affected by the alert. Other versions\n\t// should still relay it.\n\tSetSubVer []string\n\n\t// Relative priority compared to other alerts\n\tPriority int32\n\n\t// A comment on the alert that is not displayed\n\tComment string\n\n\t// The alert message that is displayed to the user\n\tStatusBar string\n\n\t// Reserved\n\tReserved string\n}\n\n// Serialize encodes the alert to w using the alert protocol encoding format.\nfunc (alert *Alert) Serialize(w io.Writer, pver uint32) error {\n\terr := writeElements(w, alert.Version, alert.RelayUntil,\n\t\talert.Expiration, alert.ID, alert.Cancel)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tcount := len(alert.SetCancel)\n\tif count > maxCountSetCancel {\n\t\tstr := fmt.Sprintf(\"too many cancel alert IDs for alert \"+\n\t\t\t\"[count %v, max %v]\", count, maxCountSetCancel)\n\t\treturn messageError(\"Alert.Serialize\", str)\n\t}\n\terr = WriteVarInt(w, pver, uint64(count))\n\tif err != nil {\n\t\treturn err\n\t}\n\tfor i := 0; i < count; i++ {\n\t\terr = writeElement(w, alert.SetCancel[i])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\terr = writeElements(w, alert.MinVer, alert.MaxVer)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tcount = len(alert.SetSubVer)\n\tif count > maxCountSetSubVer {\n\t\tstr := fmt.Sprintf(\"too many sub versions for alert \"+\n\t\t\t\"[count %v, max %v]\", count, maxCountSetSubVer)\n\t\treturn messageError(\"Alert.Serialize\", str)\n\t}\n\terr = WriteVarInt(w, pver, uint64(count))\n\tif err != nil {\n\t\treturn err\n\t}\n\tfor i := 0; i < count; i++ {\n\t\terr = WriteVarString(w, pver, alert.SetSubVer[i])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\terr = writeElement(w, alert.Priority)\n\tif err != nil {\n\t\treturn err\n\t}\n\terr = WriteVarString(w, pver, alert.Comment)\n\tif err != nil {\n\t\treturn err\n\t}\n\terr = WriteVarString(w, pver, alert.StatusBar)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn WriteVarString(w, pver, alert.Reserved)\n}\n\n// Deserialize decodes from r into the receiver using the alert protocol\n// encoding format.\nfunc (alert *Alert) Deserialize(r io.Reader, pver uint32) error {\n\terr := readElements(r, &alert.Version, &alert.RelayUntil,\n\t\t&alert.Expiration, &alert.ID, &alert.Cancel)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// SetCancel: first read a VarInt that contains\n\t// count - the number of Cancel IDs, then\n\t// iterate count times and read them\n\tcount, err := ReadVarInt(r, pver)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif count > maxCountSetCancel {\n\t\tstr := fmt.Sprintf(\"too many cancel alert IDs for alert \"+\n\t\t\t\"[count %v, max %v]\", count, maxCountSetCancel)\n\t\treturn messageError(\"Alert.Deserialize\", str)\n\t}\n\talert.SetCancel = make([]int32, count)\n\tfor i := 0; i < int(count); i++ {\n\t\terr := readElement(r, &alert.SetCancel[i])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\terr = readElements(r, &alert.MinVer, &alert.MaxVer)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// SetSubVer: similar to SetCancel\n\t// but read count number of sub-version strings\n\tcount, err = ReadVarInt(r, pver)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif count > maxCountSetSubVer {\n\t\tstr := fmt.Sprintf(\"too many sub versions for alert \"+\n\t\t\t\"[count %v, max %v]\", count, maxCountSetSubVer)\n\t\treturn messageError(\"Alert.Deserialize\", str)\n\t}\n\talert.SetSubVer = make([]string, count)\n\tfor i := 0; i < int(count); i++ {\n\t\talert.SetSubVer[i], err = ReadVarString(r, pver)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\terr = readElement(r, &alert.Priority)\n\tif err != nil {\n\t\treturn err\n\t}\n\talert.Comment, err = ReadVarString(r, pver)\n\tif err != nil {\n\t\treturn err\n\t}\n\talert.StatusBar, err = ReadVarString(r, pver)\n\tif err != nil {\n\t\treturn err\n\t}\n\talert.Reserved, err = ReadVarString(r, pver)\n\treturn err\n}\n\n// NewAlert returns an new Alert with values provided.\nfunc NewAlert(version int32, relayUntil int64, expiration int64,\n\tid int32, cancel int32, setCancel []int32, minVer int32,\n\tmaxVer int32, setSubVer []string, priority int32, comment string,\n\tstatusBar string) *Alert {\n\treturn &Alert{\n\t\tVersion:    version,\n\t\tRelayUntil: relayUntil,\n\t\tExpiration: expiration,\n\t\tID:         id,\n\t\tCancel:     cancel,\n\t\tSetCancel:  setCancel,\n\t\tMinVer:     minVer,\n\t\tMaxVer:     maxVer,\n\t\tSetSubVer:  setSubVer,\n\t\tPriority:   priority,\n\t\tComment:    comment,\n\t\tStatusBar:  statusBar,\n\t\tReserved:   \"\",\n\t}\n}\n\n// NewAlertFromPayload returns an Alert with values deserialized from the\n// serialized payload.\nfunc NewAlertFromPayload(serializedPayload []byte, pver uint32) (*Alert, error) {\n\tvar alert Alert\n\tr := bytes.NewReader(serializedPayload)\n\terr := alert.Deserialize(r, pver)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &alert, nil\n}\n\n// MsgAlert  implements the Message interface and defines a bitcoin alert\n// message.\n//\n// This is a signed message that provides notifications that the client should\n// display if the signature matches the key.  bitcoind/bitcoin-qt only checks\n// against a signature from the core developers.\ntype MsgAlert struct {\n\t// SerializedPayload is the alert payload serialized as a string so that the\n\t// version can change but the Alert can still be passed on by older\n\t// clients.\n\tSerializedPayload []byte\n\n\t// Signature is the ECDSA signature of the message.\n\tSignature []byte\n\n\t// Deserialized Payload\n\tPayload *Alert\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgAlert) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error {\n\tvar err error\n\n\tmsg.SerializedPayload, err = ReadVarBytes(r, pver, MaxMessagePayload,\n\t\t\"alert serialized payload\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tmsg.Payload, err = NewAlertFromPayload(msg.SerializedPayload, pver)\n\tif err != nil {\n\t\tmsg.Payload = nil\n\t}\n\n\tmsg.Signature, err = ReadVarBytes(r, pver, MaxMessagePayload,\n\t\t\"alert signature\")\n\treturn err\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgAlert) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error {\n\tvar err error\n\tvar serializedpayload []byte\n\tif msg.Payload != nil {\n\t\t// try to Serialize Payload if possible\n\t\tr := new(bytes.Buffer)\n\t\terr = msg.Payload.Serialize(r, pver)\n\t\tif err != nil {\n\t\t\t// Serialize failed - ignore & fallback\n\t\t\t// to SerializedPayload\n\t\t\tserializedpayload = msg.SerializedPayload\n\t\t} else {\n\t\t\tserializedpayload = r.Bytes()\n\t\t}\n\t} else {\n\t\tserializedpayload = msg.SerializedPayload\n\t}\n\tslen := uint64(len(serializedpayload))\n\tif slen == 0 {\n\t\treturn messageError(\"MsgAlert.BtcEncode\", \"empty serialized payload\")\n\t}\n\terr = WriteVarBytes(w, pver, serializedpayload)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn WriteVarBytes(w, pver, msg.Signature)\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgAlert) Command() string {\n\treturn CmdAlert\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgAlert) MaxPayloadLength(pver uint32) uint32 {\n\t// Since this can vary depending on the message, make it the max\n\t// size allowed.\n\treturn MaxMessagePayload\n}\n\n// NewMsgAlert returns a new bitcoin alert message that conforms to the Message\n// interface.  See MsgAlert for details.\nfunc NewMsgAlert(serializedPayload []byte, signature []byte) *MsgAlert {\n\treturn &MsgAlert{\n\t\tSerializedPayload: serializedPayload,\n\t\tSignature:         signature,\n\t\tPayload:           nil,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/msgblock.go",
    "content": "// Copyright (c) 2013-2016 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/btcsuite/btcd/chaincfg/chainhash\"\n)\n\n// defaultTransactionAlloc is the default size used for the backing array\n// for transactions.  The transaction array will dynamically grow as needed, but\n// this figure is intended to provide enough space for the number of\n// transactions in the vast majority of blocks without needing to grow the\n// backing array multiple times.\nconst defaultTransactionAlloc = 2048\n\n// MaxBlocksPerMsg is the maximum number of blocks allowed per message.\nconst MaxBlocksPerMsg = 500\n\n// MaxBlockPayload is the maximum bytes a block message can be in bytes.\n// After Segregated Witness, the max block payload has been raised to 4MB.\nconst MaxBlockPayload = 4000000\n\n// maxTxPerBlock is the maximum number of transactions that could\n// possibly fit into a block.\nconst maxTxPerBlock = (MaxBlockPayload / minTxPayload) + 1\n\n// TxLoc holds locator data for the offset and length of where a transaction is\n// located within a MsgBlock data buffer.\ntype TxLoc struct {\n\tTxStart int\n\tTxLen   int\n}\n\n// MsgBlock implements the Message interface and represents a bitcoin\n// block message.  It is used to deliver block and transaction information in\n// response to a getdata message (MsgGetData) for a given block hash.\ntype MsgBlock struct {\n\tHeader       BlockHeader\n\tTransactions []*MsgTx\n}\n\n// AddTransaction adds a transaction to the message.\nfunc (msg *MsgBlock) AddTransaction(tx *MsgTx) error {\n\tmsg.Transactions = append(msg.Transactions, tx)\n\treturn nil\n\n}\n\n// ClearTransactions removes all transactions from the message.\nfunc (msg *MsgBlock) ClearTransactions() {\n\tmsg.Transactions = make([]*MsgTx, 0, defaultTransactionAlloc)\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\n// See Deserialize for decoding blocks stored to disk, such as in a database, as\n// opposed to decoding blocks from the wire.\nfunc (msg *MsgBlock) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error {\n\terr := readBlockHeader(r, pver, &msg.Header)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\ttxCount, err := ReadVarInt(r, pver)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Prevent more transactions than could possibly fit into a block.\n\t// It would be possible to cause memory exhaustion and panics without\n\t// a sane upper bound on this count.\n\tif txCount > maxTxPerBlock {\n\t\tstr := fmt.Sprintf(\"too many transactions to fit into a block \"+\n\t\t\t\"[count %d, max %d]\", txCount, maxTxPerBlock)\n\t\treturn messageError(\"MsgBlock.BtcDecode\", str)\n\t}\n\n\tmsg.Transactions = make([]*MsgTx, 0, txCount)\n\tfor i := uint64(0); i < txCount; i++ {\n\t\ttx := MsgTx{}\n\t\terr := tx.BtcDecode(r, pver, enc)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmsg.Transactions = append(msg.Transactions, &tx)\n\t}\n\n\treturn nil\n}\n\n// Deserialize decodes a block from r into the receiver using a format that is\n// suitable for long-term storage such as a database while respecting the\n// Version field in the block.  This function differs from BtcDecode in that\n// BtcDecode decodes from the bitcoin wire protocol as it was sent across the\n// network.  The wire encoding can technically differ depending on the protocol\n// version and doesn't even really need to match the format of a stored block at\n// all.  As of the time this comment was written, the encoded block is the same\n// in both instances, but there is a distinct difference and separating the two\n// allows the API to be flexible enough to deal with changes.\nfunc (msg *MsgBlock) Deserialize(r io.Reader) error {\n\t// At the current time, there is no difference between the wire encoding\n\t// at protocol version 0 and the stable long-term storage format.  As\n\t// a result, make use of BtcDecode.\n\t//\n\t// Passing an encoding type of WitnessEncoding to BtcEncode for the\n\t// MessageEncoding parameter indicates that the transactions within the\n\t// block are expected to be serialized according to the new\n\t// serialization structure defined in BIP0141.\n\treturn msg.BtcDecode(r, 0, WitnessEncoding)\n}\n\n// DeserializeNoWitness decodes a block from r into the receiver similar to\n// Deserialize, however DeserializeWitness strips all (if any) witness data\n// from the transactions within the block before encoding them.\nfunc (msg *MsgBlock) DeserializeNoWitness(r io.Reader) error {\n\treturn msg.BtcDecode(r, 0, BaseEncoding)\n}\n\n// DeserializeTxLoc decodes r in the same manner Deserialize does, but it takes\n// a byte buffer instead of a generic reader and returns a slice containing the\n// start and length of each transaction within the raw data that is being\n// deserialized.\nfunc (msg *MsgBlock) DeserializeTxLoc(r *bytes.Buffer) ([]TxLoc, error) {\n\tfullLen := r.Len()\n\n\t// At the current time, there is no difference between the wire encoding\n\t// at protocol version 0 and the stable long-term storage format.  As\n\t// a result, make use of existing wire protocol functions.\n\terr := readBlockHeader(r, 0, &msg.Header)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\ttxCount, err := ReadVarInt(r, 0)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Prevent more transactions than could possibly fit into a block.\n\t// It would be possible to cause memory exhaustion and panics without\n\t// a sane upper bound on this count.\n\tif txCount > maxTxPerBlock {\n\t\tstr := fmt.Sprintf(\"too many transactions to fit into a block \"+\n\t\t\t\"[count %d, max %d]\", txCount, maxTxPerBlock)\n\t\treturn nil, messageError(\"MsgBlock.DeserializeTxLoc\", str)\n\t}\n\n\t// Deserialize each transaction while keeping track of its location\n\t// within the byte stream.\n\tmsg.Transactions = make([]*MsgTx, 0, txCount)\n\ttxLocs := make([]TxLoc, txCount)\n\tfor i := uint64(0); i < txCount; i++ {\n\t\ttxLocs[i].TxStart = fullLen - r.Len()\n\t\ttx := MsgTx{}\n\t\terr := tx.Deserialize(r)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tmsg.Transactions = append(msg.Transactions, &tx)\n\t\ttxLocs[i].TxLen = (fullLen - r.Len()) - txLocs[i].TxStart\n\t}\n\n\treturn txLocs, nil\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\n// See Serialize for encoding blocks to be stored to disk, such as in a\n// database, as opposed to encoding blocks for the wire.\nfunc (msg *MsgBlock) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error {\n\terr := writeBlockHeader(w, pver, &msg.Header)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = WriteVarInt(w, pver, uint64(len(msg.Transactions)))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, tx := range msg.Transactions {\n\t\terr = tx.BtcEncode(w, pver, enc)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Serialize encodes the block to w using a format that suitable for long-term\n// storage such as a database while respecting the Version field in the block.\n// This function differs from BtcEncode in that BtcEncode encodes the block to\n// the bitcoin wire protocol in order to be sent across the network.  The wire\n// encoding can technically differ depending on the protocol version and doesn't\n// even really need to match the format of a stored block at all.  As of the\n// time this comment was written, the encoded block is the same in both\n// instances, but there is a distinct difference and separating the two allows\n// the API to be flexible enough to deal with changes.\nfunc (msg *MsgBlock) Serialize(w io.Writer) error {\n\t// At the current time, there is no difference between the wire encoding\n\t// at protocol version 0 and the stable long-term storage format.  As\n\t// a result, make use of BtcEncode.\n\t//\n\t// Passing WitnessEncoding as the encoding type here indicates that\n\t// each of the transactions should be serialized using the witness\n\t// serialization structure defined in BIP0141.\n\treturn msg.BtcEncode(w, 0, WitnessEncoding)\n}\n\n// SerializeNoWitness encodes a block to w using an identical format to\n// Serialize, with all (if any) witness data stripped from all transactions.\n// This method is provided in additon to the regular Serialize, in order to\n// allow one to selectively encode transaction witness data to non-upgraded\n// peers which are unaware of the new encoding.\nfunc (msg *MsgBlock) SerializeNoWitness(w io.Writer) error {\n\treturn msg.BtcEncode(w, 0, BaseEncoding)\n}\n\n// SerializeSize returns the number of bytes it would take to serialize the\n// block, factoring in any witness data within transaction.\nfunc (msg *MsgBlock) SerializeSize() int {\n\t// Block header bytes + Serialized varint size for the number of\n\t// transactions.\n\tn := blockHeaderLen + VarIntSerializeSize(uint64(len(msg.Transactions)))\n\n\tfor _, tx := range msg.Transactions {\n\t\tn += tx.SerializeSize()\n\t}\n\n\treturn n\n}\n\n// SerializeSizeStripped returns the number of bytes it would take to serialize\n// the block, excluding any witness data (if any).\nfunc (msg *MsgBlock) SerializeSizeStripped() int {\n\t// Block header bytes + Serialized varint size for the number of\n\t// transactions.\n\tn := blockHeaderLen + VarIntSerializeSize(uint64(len(msg.Transactions)))\n\n\tfor _, tx := range msg.Transactions {\n\t\tn += tx.SerializeSizeStripped()\n\t}\n\n\treturn n\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgBlock) Command() string {\n\treturn CmdBlock\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgBlock) MaxPayloadLength(pver uint32) uint32 {\n\t// Block header at 80 bytes + transaction count + max transactions\n\t// which can vary up to the MaxBlockPayload (including the block header\n\t// and transaction count).\n\treturn MaxBlockPayload\n}\n\n// BlockHash computes the block identifier hash for this block.\nfunc (msg *MsgBlock) BlockHash() chainhash.Hash {\n\treturn msg.Header.BlockHash()\n}\n\n// TxHashes returns a slice of hashes of all of transactions in this block.\nfunc (msg *MsgBlock) TxHashes() ([]chainhash.Hash, error) {\n\thashList := make([]chainhash.Hash, 0, len(msg.Transactions))\n\tfor _, tx := range msg.Transactions {\n\t\thashList = append(hashList, tx.TxHash())\n\t}\n\treturn hashList, nil\n}\n\n// NewMsgBlock returns a new bitcoin block message that conforms to the\n// Message interface.  See MsgBlock for details.\nfunc NewMsgBlock(blockHeader *BlockHeader) *MsgBlock {\n\treturn &MsgBlock{\n\t\tHeader:       *blockHeader,\n\t\tTransactions: make([]*MsgTx, 0, defaultTransactionAlloc),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/msgcfcheckpt.go",
    "content": "// Copyright (c) 2018 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/btcsuite/btcd/chaincfg/chainhash\"\n)\n\nconst (\n\t// CFCheckptInterval is the gap (in number of blocks) between each\n\t// filter header checkpoint.\n\tCFCheckptInterval = 1000\n\n\t// maxCFHeadersLen is the max number of filter headers we will attempt\n\t// to decode.\n\tmaxCFHeadersLen = 100000\n)\n\n// ErrInsaneCFHeaderCount signals that we were asked to decode an\n// unreasonable number of cfilter headers.\nvar ErrInsaneCFHeaderCount = errors.New(\n\t\"refusing to decode unreasonable number of filter headers\")\n\n// MsgCFCheckpt implements the Message interface and represents a bitcoin\n// cfcheckpt message.  It is used to deliver committed filter header information\n// in response to a getcfcheckpt message (MsgGetCFCheckpt). See MsgGetCFCheckpt\n// for details on requesting the headers.\ntype MsgCFCheckpt struct {\n\tFilterType    FilterType\n\tStopHash      chainhash.Hash\n\tFilterHeaders []*chainhash.Hash\n}\n\n// AddCFHeader adds a new committed filter header to the message.\nfunc (msg *MsgCFCheckpt) AddCFHeader(header *chainhash.Hash) error {\n\tif len(msg.FilterHeaders) == cap(msg.FilterHeaders) {\n\t\tstr := fmt.Sprintf(\"FilterHeaders has insufficient capacity for \"+\n\t\t\t\"additional header: len = %d\", len(msg.FilterHeaders))\n\t\treturn messageError(\"MsgCFCheckpt.AddCFHeader\", str)\n\t}\n\n\tmsg.FilterHeaders = append(msg.FilterHeaders, header)\n\treturn nil\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgCFCheckpt) BtcDecode(r io.Reader, pver uint32, _ MessageEncoding) error {\n\t// Read filter type\n\terr := readElement(r, &msg.FilterType)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Read stop hash\n\terr = readElement(r, &msg.StopHash)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Read number of filter headers\n\tcount, err := ReadVarInt(r, pver)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Refuse to decode an insane number of cfheaders.\n\tif count > maxCFHeadersLen {\n\t\treturn ErrInsaneCFHeaderCount\n\t}\n\n\t// Create a contiguous slice of hashes to deserialize into in order to\n\t// reduce the number of allocations.\n\tmsg.FilterHeaders = make([]*chainhash.Hash, count)\n\tfor i := uint64(0); i < count; i++ {\n\t\tvar cfh chainhash.Hash\n\t\terr := readElement(r, &cfh)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmsg.FilterHeaders[i] = &cfh\n\t}\n\n\treturn nil\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgCFCheckpt) BtcEncode(w io.Writer, pver uint32, _ MessageEncoding) error {\n\t// Write filter type\n\terr := writeElement(w, msg.FilterType)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Write stop hash\n\terr = writeElement(w, msg.StopHash)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Write length of FilterHeaders slice\n\tcount := len(msg.FilterHeaders)\n\terr = WriteVarInt(w, pver, uint64(count))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, cfh := range msg.FilterHeaders {\n\t\terr := writeElement(w, cfh)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Deserialize decodes a filter header from r into the receiver using a format\n// that is suitable for long-term storage such as a database. This function\n// differs from BtcDecode in that BtcDecode decodes from the bitcoin wire\n// protocol as it was sent across the network.  The wire encoding can\n// technically differ depending on the protocol version and doesn't even really\n// need to match the format of a stored filter header at all. As of the time\n// this comment was written, the encoded filter header is the same in both\n// instances, but there is a distinct difference and separating the two allows\n// the API to be flexible enough to deal with changes.\nfunc (msg *MsgCFCheckpt) Deserialize(r io.Reader) error {\n\t// At the current time, there is no difference between the wire encoding\n\t// and the stable long-term storage format.  As a result, make use of\n\t// BtcDecode.\n\treturn msg.BtcDecode(r, 0, BaseEncoding)\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgCFCheckpt) Command() string {\n\treturn CmdCFCheckpt\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver. This is part of the Message interface implementation.\nfunc (msg *MsgCFCheckpt) MaxPayloadLength(pver uint32) uint32 {\n\t// Message size depends on the blockchain height, so return general limit\n\t// for all messages.\n\treturn MaxMessagePayload\n}\n\n// NewMsgCFCheckpt returns a new bitcoin cfheaders message that conforms to\n// the Message interface. See MsgCFCheckpt for details.\nfunc NewMsgCFCheckpt(filterType FilterType, stopHash *chainhash.Hash,\n\theadersCount int) *MsgCFCheckpt {\n\treturn &MsgCFCheckpt{\n\t\tFilterType:    filterType,\n\t\tStopHash:      *stopHash,\n\t\tFilterHeaders: make([]*chainhash.Hash, 0, headersCount),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/msgcfheaders.go",
    "content": "// Copyright (c) 2017 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/btcsuite/btcd/chaincfg/chainhash\"\n)\n\nconst (\n\t// MaxCFHeaderPayload is the maximum byte size of a committed\n\t// filter header.\n\tMaxCFHeaderPayload = chainhash.HashSize\n\n\t// MaxCFHeadersPerMsg is the maximum number of committed filter headers\n\t// that can be in a single bitcoin cfheaders message.\n\tMaxCFHeadersPerMsg = 2000\n)\n\n// MsgCFHeaders implements the Message interface and represents a bitcoin\n// cfheaders message.  It is used to deliver committed filter header information\n// in response to a getcfheaders message (MsgGetCFHeaders). The maximum number\n// of committed filter headers per message is currently 2000. See\n// MsgGetCFHeaders for details on requesting the headers.\ntype MsgCFHeaders struct {\n\tFilterType       FilterType\n\tStopHash         chainhash.Hash\n\tPrevFilterHeader chainhash.Hash\n\tFilterHashes     []*chainhash.Hash\n}\n\n// AddCFHash adds a new filter hash to the message.\nfunc (msg *MsgCFHeaders) AddCFHash(hash *chainhash.Hash) error {\n\tif len(msg.FilterHashes)+1 > MaxCFHeadersPerMsg {\n\t\tstr := fmt.Sprintf(\"too many block headers in message [max %v]\",\n\t\t\tMaxBlockHeadersPerMsg)\n\t\treturn messageError(\"MsgCFHeaders.AddCFHash\", str)\n\t}\n\n\tmsg.FilterHashes = append(msg.FilterHashes, hash)\n\treturn nil\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgCFHeaders) BtcDecode(r io.Reader, pver uint32, _ MessageEncoding) error {\n\t// Read filter type\n\terr := readElement(r, &msg.FilterType)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Read stop hash\n\terr = readElement(r, &msg.StopHash)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Read prev filter header\n\terr = readElement(r, &msg.PrevFilterHeader)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Read number of filter headers\n\tcount, err := ReadVarInt(r, pver)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Limit to max committed filter headers per message.\n\tif count > MaxCFHeadersPerMsg {\n\t\tstr := fmt.Sprintf(\"too many committed filter headers for \"+\n\t\t\t\"message [count %v, max %v]\", count,\n\t\t\tMaxBlockHeadersPerMsg)\n\t\treturn messageError(\"MsgCFHeaders.BtcDecode\", str)\n\t}\n\n\t// Create a contiguous slice of hashes to deserialize into in order to\n\t// reduce the number of allocations.\n\tmsg.FilterHashes = make([]*chainhash.Hash, 0, count)\n\tfor i := uint64(0); i < count; i++ {\n\t\tvar cfh chainhash.Hash\n\t\terr := readElement(r, &cfh)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmsg.AddCFHash(&cfh)\n\t}\n\n\treturn nil\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgCFHeaders) BtcEncode(w io.Writer, pver uint32, _ MessageEncoding) error {\n\t// Write filter type\n\terr := writeElement(w, msg.FilterType)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Write stop hash\n\terr = writeElement(w, msg.StopHash)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Write prev filter header\n\terr = writeElement(w, msg.PrevFilterHeader)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Limit to max committed headers per message.\n\tcount := len(msg.FilterHashes)\n\tif count > MaxCFHeadersPerMsg {\n\t\tstr := fmt.Sprintf(\"too many committed filter headers for \"+\n\t\t\t\"message [count %v, max %v]\", count,\n\t\t\tMaxBlockHeadersPerMsg)\n\t\treturn messageError(\"MsgCFHeaders.BtcEncode\", str)\n\t}\n\n\terr = WriteVarInt(w, pver, uint64(count))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, cfh := range msg.FilterHashes {\n\t\terr := writeElement(w, cfh)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Deserialize decodes a filter header from r into the receiver using a format\n// that is suitable for long-term storage such as a database. This function\n// differs from BtcDecode in that BtcDecode decodes from the bitcoin wire\n// protocol as it was sent across the network.  The wire encoding can\n// technically differ depending on the protocol version and doesn't even really\n// need to match the format of a stored filter header at all. As of the time\n// this comment was written, the encoded filter header is the same in both\n// instances, but there is a distinct difference and separating the two allows\n// the API to be flexible enough to deal with changes.\nfunc (msg *MsgCFHeaders) Deserialize(r io.Reader) error {\n\t// At the current time, there is no difference between the wire encoding\n\t// and the stable long-term storage format.  As a result, make use of\n\t// BtcDecode.\n\treturn msg.BtcDecode(r, 0, BaseEncoding)\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgCFHeaders) Command() string {\n\treturn CmdCFHeaders\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver. This is part of the Message interface implementation.\nfunc (msg *MsgCFHeaders) MaxPayloadLength(pver uint32) uint32 {\n\t// Hash size + filter type + num headers (varInt) +\n\t// (header size * max headers).\n\treturn 1 + chainhash.HashSize + chainhash.HashSize + MaxVarIntPayload +\n\t\t(MaxCFHeaderPayload * MaxCFHeadersPerMsg)\n}\n\n// NewMsgCFHeaders returns a new bitcoin cfheaders message that conforms to\n// the Message interface. See MsgCFHeaders for details.\nfunc NewMsgCFHeaders() *MsgCFHeaders {\n\treturn &MsgCFHeaders{\n\t\tFilterHashes: make([]*chainhash.Hash, 0, MaxCFHeadersPerMsg),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/msgcfilter.go",
    "content": "// Copyright (c) 2017 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/btcsuite/btcd/chaincfg/chainhash\"\n)\n\n// FilterType is used to represent a filter type.\ntype FilterType uint8\n\nconst (\n\t// GCSFilterRegular is the regular filter type.\n\tGCSFilterRegular FilterType = iota\n)\n\nconst (\n\t// MaxCFilterDataSize is the maximum byte size of a committed filter.\n\t// The maximum size is currently defined as 256KiB.\n\tMaxCFilterDataSize = 256 * 1024\n)\n\n// MsgCFilter implements the Message interface and represents a bitcoin cfilter\n// message. It is used to deliver a committed filter in response to a\n// getcfilters (MsgGetCFilters) message.\ntype MsgCFilter struct {\n\tFilterType FilterType\n\tBlockHash  chainhash.Hash\n\tData       []byte\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgCFilter) BtcDecode(r io.Reader, pver uint32, _ MessageEncoding) error {\n\t// Read filter type\n\terr := readElement(r, &msg.FilterType)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Read the hash of the filter's block\n\terr = readElement(r, &msg.BlockHash)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Read filter data\n\tmsg.Data, err = ReadVarBytes(r, pver, MaxCFilterDataSize,\n\t\t\"cfilter data\")\n\treturn err\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgCFilter) BtcEncode(w io.Writer, pver uint32, _ MessageEncoding) error {\n\tsize := len(msg.Data)\n\tif size > MaxCFilterDataSize {\n\t\tstr := fmt.Sprintf(\"cfilter size too large for message \"+\n\t\t\t\"[size %v, max %v]\", size, MaxCFilterDataSize)\n\t\treturn messageError(\"MsgCFilter.BtcEncode\", str)\n\t}\n\n\terr := writeElement(w, msg.FilterType)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = writeElement(w, msg.BlockHash)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn WriteVarBytes(w, pver, msg.Data)\n}\n\n// Deserialize decodes a filter from r into the receiver using a format that is\n// suitable for long-term storage such as a database. This function differs\n// from BtcDecode in that BtcDecode decodes from the bitcoin wire protocol as\n// it was sent across the network.  The wire encoding can technically differ\n// depending on the protocol version and doesn't even really need to match the\n// format of a stored filter at all. As of the time this comment was written,\n// the encoded filter is the same in both instances, but there is a distinct\n// difference and separating the two allows the API to be flexible enough to\n// deal with changes.\nfunc (msg *MsgCFilter) Deserialize(r io.Reader) error {\n\t// At the current time, there is no difference between the wire encoding\n\t// and the stable long-term storage format.  As a result, make use of\n\t// BtcDecode.\n\treturn msg.BtcDecode(r, 0, BaseEncoding)\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgCFilter) Command() string {\n\treturn CmdCFilter\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgCFilter) MaxPayloadLength(pver uint32) uint32 {\n\treturn uint32(VarIntSerializeSize(MaxCFilterDataSize)) +\n\t\tMaxCFilterDataSize + chainhash.HashSize + 1\n}\n\n// NewMsgCFilter returns a new bitcoin cfilter message that conforms to the\n// Message interface. See MsgCFilter for details.\nfunc NewMsgCFilter(filterType FilterType, blockHash *chainhash.Hash,\n\tdata []byte) *MsgCFilter {\n\treturn &MsgCFilter{\n\t\tFilterType: filterType,\n\t\tBlockHash:  *blockHash,\n\t\tData:       data,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/msgfeefilter.go",
    "content": "// Copyright (c) 2016 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\n// MsgFeeFilter implements the Message interface and represents a bitcoin\n// feefilter message.  It is used to request the receiving peer does not\n// announce any transactions below the specified minimum fee rate.\n//\n// This message was not added until protocol versions starting with\n// FeeFilterVersion.\ntype MsgFeeFilter struct {\n\tMinFee int64\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgFeeFilter) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error {\n\tif pver < FeeFilterVersion {\n\t\tstr := fmt.Sprintf(\"feefilter message invalid for protocol \"+\n\t\t\t\"version %d\", pver)\n\t\treturn messageError(\"MsgFeeFilter.BtcDecode\", str)\n\t}\n\n\treturn readElement(r, &msg.MinFee)\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgFeeFilter) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error {\n\tif pver < FeeFilterVersion {\n\t\tstr := fmt.Sprintf(\"feefilter message invalid for protocol \"+\n\t\t\t\"version %d\", pver)\n\t\treturn messageError(\"MsgFeeFilter.BtcEncode\", str)\n\t}\n\n\treturn writeElement(w, msg.MinFee)\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgFeeFilter) Command() string {\n\treturn CmdFeeFilter\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgFeeFilter) MaxPayloadLength(pver uint32) uint32 {\n\treturn 8\n}\n\n// NewMsgFeeFilter returns a new bitcoin feefilter message that conforms to\n// the Message interface.  See MsgFeeFilter for details.\nfunc NewMsgFeeFilter(minfee int64) *MsgFeeFilter {\n\treturn &MsgFeeFilter{\n\t\tMinFee: minfee,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/msgfilteradd.go",
    "content": "// Copyright (c) 2014-2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\nconst (\n\t// MaxFilterAddDataSize is the maximum byte size of a data\n\t// element to add to the Bloom filter.  It is equal to the\n\t// maximum element size of a script.\n\tMaxFilterAddDataSize = 520\n)\n\n// MsgFilterAdd implements the Message interface and represents a bitcoin\n// filteradd message.  It is used to add a data element to an existing Bloom\n// filter.\n//\n// This message was not added until protocol version BIP0037Version.\ntype MsgFilterAdd struct {\n\tData []byte\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgFilterAdd) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error {\n\tif pver < BIP0037Version {\n\t\tstr := fmt.Sprintf(\"filteradd message invalid for protocol \"+\n\t\t\t\"version %d\", pver)\n\t\treturn messageError(\"MsgFilterAdd.BtcDecode\", str)\n\t}\n\n\tvar err error\n\tmsg.Data, err = ReadVarBytes(r, pver, MaxFilterAddDataSize,\n\t\t\"filteradd data\")\n\treturn err\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgFilterAdd) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error {\n\tif pver < BIP0037Version {\n\t\tstr := fmt.Sprintf(\"filteradd message invalid for protocol \"+\n\t\t\t\"version %d\", pver)\n\t\treturn messageError(\"MsgFilterAdd.BtcEncode\", str)\n\t}\n\n\tsize := len(msg.Data)\n\tif size > MaxFilterAddDataSize {\n\t\tstr := fmt.Sprintf(\"filteradd size too large for message \"+\n\t\t\t\"[size %v, max %v]\", size, MaxFilterAddDataSize)\n\t\treturn messageError(\"MsgFilterAdd.BtcEncode\", str)\n\t}\n\n\treturn WriteVarBytes(w, pver, msg.Data)\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgFilterAdd) Command() string {\n\treturn CmdFilterAdd\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgFilterAdd) MaxPayloadLength(pver uint32) uint32 {\n\treturn uint32(VarIntSerializeSize(MaxFilterAddDataSize)) +\n\t\tMaxFilterAddDataSize\n}\n\n// NewMsgFilterAdd returns a new bitcoin filteradd message that conforms to the\n// Message interface.  See MsgFilterAdd for details.\nfunc NewMsgFilterAdd(data []byte) *MsgFilterAdd {\n\treturn &MsgFilterAdd{\n\t\tData: data,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/msgfilterclear.go",
    "content": "// Copyright (c) 2014-2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\n// MsgFilterClear implements the Message interface and represents a bitcoin\n// filterclear message which is used to reset a Bloom filter.\n//\n// This message was not added until protocol version BIP0037Version and has\n// no payload.\ntype MsgFilterClear struct{}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgFilterClear) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error {\n\tif pver < BIP0037Version {\n\t\tstr := fmt.Sprintf(\"filterclear message invalid for protocol \"+\n\t\t\t\"version %d\", pver)\n\t\treturn messageError(\"MsgFilterClear.BtcDecode\", str)\n\t}\n\n\treturn nil\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgFilterClear) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error {\n\tif pver < BIP0037Version {\n\t\tstr := fmt.Sprintf(\"filterclear message invalid for protocol \"+\n\t\t\t\"version %d\", pver)\n\t\treturn messageError(\"MsgFilterClear.BtcEncode\", str)\n\t}\n\n\treturn nil\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgFilterClear) Command() string {\n\treturn CmdFilterClear\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgFilterClear) MaxPayloadLength(pver uint32) uint32 {\n\treturn 0\n}\n\n// NewMsgFilterClear returns a new bitcoin filterclear message that conforms to the Message\n// interface.  See MsgFilterClear for details.\nfunc NewMsgFilterClear() *MsgFilterClear {\n\treturn &MsgFilterClear{}\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/msgfilterload.go",
    "content": "// Copyright (c) 2014-2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\n// BloomUpdateType specifies how the filter is updated when a match is found\ntype BloomUpdateType uint8\n\nconst (\n\t// BloomUpdateNone indicates the filter is not adjusted when a match is\n\t// found.\n\tBloomUpdateNone BloomUpdateType = 0\n\n\t// BloomUpdateAll indicates if the filter matches any data element in a\n\t// public key script, the outpoint is serialized and inserted into the\n\t// filter.\n\tBloomUpdateAll BloomUpdateType = 1\n\n\t// BloomUpdateP2PubkeyOnly indicates if the filter matches a data\n\t// element in a public key script and the script is of the standard\n\t// pay-to-pubkey or multisig, the outpoint is serialized and inserted\n\t// into the filter.\n\tBloomUpdateP2PubkeyOnly BloomUpdateType = 2\n)\n\nconst (\n\t// MaxFilterLoadHashFuncs is the maximum number of hash functions to\n\t// load into the Bloom filter.\n\tMaxFilterLoadHashFuncs = 50\n\n\t// MaxFilterLoadFilterSize is the maximum size in bytes a filter may be.\n\tMaxFilterLoadFilterSize = 36000\n)\n\n// MsgFilterLoad implements the Message interface and represents a bitcoin\n// filterload message which is used to reset a Bloom filter.\n//\n// This message was not added until protocol version BIP0037Version.\ntype MsgFilterLoad struct {\n\tFilter    []byte\n\tHashFuncs uint32\n\tTweak     uint32\n\tFlags     BloomUpdateType\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgFilterLoad) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error {\n\tif pver < BIP0037Version {\n\t\tstr := fmt.Sprintf(\"filterload message invalid for protocol \"+\n\t\t\t\"version %d\", pver)\n\t\treturn messageError(\"MsgFilterLoad.BtcDecode\", str)\n\t}\n\n\tvar err error\n\tmsg.Filter, err = ReadVarBytes(r, pver, MaxFilterLoadFilterSize,\n\t\t\"filterload filter size\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = readElements(r, &msg.HashFuncs, &msg.Tweak, &msg.Flags)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif msg.HashFuncs > MaxFilterLoadHashFuncs {\n\t\tstr := fmt.Sprintf(\"too many filter hash functions for message \"+\n\t\t\t\"[count %v, max %v]\", msg.HashFuncs, MaxFilterLoadHashFuncs)\n\t\treturn messageError(\"MsgFilterLoad.BtcDecode\", str)\n\t}\n\n\treturn nil\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgFilterLoad) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error {\n\tif pver < BIP0037Version {\n\t\tstr := fmt.Sprintf(\"filterload message invalid for protocol \"+\n\t\t\t\"version %d\", pver)\n\t\treturn messageError(\"MsgFilterLoad.BtcEncode\", str)\n\t}\n\n\tsize := len(msg.Filter)\n\tif size > MaxFilterLoadFilterSize {\n\t\tstr := fmt.Sprintf(\"filterload filter size too large for message \"+\n\t\t\t\"[size %v, max %v]\", size, MaxFilterLoadFilterSize)\n\t\treturn messageError(\"MsgFilterLoad.BtcEncode\", str)\n\t}\n\n\tif msg.HashFuncs > MaxFilterLoadHashFuncs {\n\t\tstr := fmt.Sprintf(\"too many filter hash functions for message \"+\n\t\t\t\"[count %v, max %v]\", msg.HashFuncs, MaxFilterLoadHashFuncs)\n\t\treturn messageError(\"MsgFilterLoad.BtcEncode\", str)\n\t}\n\n\terr := WriteVarBytes(w, pver, msg.Filter)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn writeElements(w, msg.HashFuncs, msg.Tweak, msg.Flags)\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgFilterLoad) Command() string {\n\treturn CmdFilterLoad\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgFilterLoad) MaxPayloadLength(pver uint32) uint32 {\n\t// Num filter bytes (varInt) + filter + 4 bytes hash funcs +\n\t// 4 bytes tweak + 1 byte flags.\n\treturn uint32(VarIntSerializeSize(MaxFilterLoadFilterSize)) +\n\t\tMaxFilterLoadFilterSize + 9\n}\n\n// NewMsgFilterLoad returns a new bitcoin filterload message that conforms to\n// the Message interface.  See MsgFilterLoad for details.\nfunc NewMsgFilterLoad(filter []byte, hashFuncs uint32, tweak uint32, flags BloomUpdateType) *MsgFilterLoad {\n\treturn &MsgFilterLoad{\n\t\tFilter:    filter,\n\t\tHashFuncs: hashFuncs,\n\t\tTweak:     tweak,\n\t\tFlags:     flags,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/msggetaddr.go",
    "content": "// Copyright (c) 2013-2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"io\"\n)\n\n// MsgGetAddr implements the Message interface and represents a bitcoin\n// getaddr message.  It is used to request a list of known active peers on the\n// network from a peer to help identify potential nodes.  The list is returned\n// via one or more addr messages (MsgAddr).\n//\n// This message has no payload.\ntype MsgGetAddr struct{}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgGetAddr) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error {\n\treturn nil\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgGetAddr) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error {\n\treturn nil\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgGetAddr) Command() string {\n\treturn CmdGetAddr\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgGetAddr) MaxPayloadLength(pver uint32) uint32 {\n\treturn 0\n}\n\n// NewMsgGetAddr returns a new bitcoin getaddr message that conforms to the\n// Message interface.  See MsgGetAddr for details.\nfunc NewMsgGetAddr() *MsgGetAddr {\n\treturn &MsgGetAddr{}\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/msggetblocks.go",
    "content": "// Copyright (c) 2013-2016 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/btcsuite/btcd/chaincfg/chainhash\"\n)\n\n// MaxBlockLocatorsPerMsg is the maximum number of block locator hashes allowed\n// per message.\nconst MaxBlockLocatorsPerMsg = 500\n\n// MsgGetBlocks implements the Message interface and represents a bitcoin\n// getblocks message.  It is used to request a list of blocks starting after the\n// last known hash in the slice of block locator hashes.  The list is returned\n// via an inv message (MsgInv) and is limited by a specific hash to stop at or\n// the maximum number of blocks per message, which is currently 500.\n//\n// Set the HashStop field to the hash at which to stop and use\n// AddBlockLocatorHash to build up the list of block locator hashes.\n//\n// The algorithm for building the block locator hashes should be to add the\n// hashes in reverse order until you reach the genesis block.  In order to keep\n// the list of locator hashes to a reasonable number of entries, first add the\n// most recent 10 block hashes, then double the step each loop iteration to\n// exponentially decrease the number of hashes the further away from head and\n// closer to the genesis block you get.\ntype MsgGetBlocks struct {\n\tProtocolVersion    uint32\n\tBlockLocatorHashes []*chainhash.Hash\n\tHashStop           chainhash.Hash\n}\n\n// AddBlockLocatorHash adds a new block locator hash to the message.\nfunc (msg *MsgGetBlocks) AddBlockLocatorHash(hash *chainhash.Hash) error {\n\tif len(msg.BlockLocatorHashes)+1 > MaxBlockLocatorsPerMsg {\n\t\tstr := fmt.Sprintf(\"too many block locator hashes for message [max %v]\",\n\t\t\tMaxBlockLocatorsPerMsg)\n\t\treturn messageError(\"MsgGetBlocks.AddBlockLocatorHash\", str)\n\t}\n\n\tmsg.BlockLocatorHashes = append(msg.BlockLocatorHashes, hash)\n\treturn nil\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgGetBlocks) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error {\n\terr := readElement(r, &msg.ProtocolVersion)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Read num block locator hashes and limit to max.\n\tcount, err := ReadVarInt(r, pver)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif count > MaxBlockLocatorsPerMsg {\n\t\tstr := fmt.Sprintf(\"too many block locator hashes for message \"+\n\t\t\t\"[count %v, max %v]\", count, MaxBlockLocatorsPerMsg)\n\t\treturn messageError(\"MsgGetBlocks.BtcDecode\", str)\n\t}\n\n\t// Create a contiguous slice of hashes to deserialize into in order to\n\t// reduce the number of allocations.\n\tlocatorHashes := make([]chainhash.Hash, count)\n\tmsg.BlockLocatorHashes = make([]*chainhash.Hash, 0, count)\n\tfor i := uint64(0); i < count; i++ {\n\t\thash := &locatorHashes[i]\n\t\terr := readElement(r, hash)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmsg.AddBlockLocatorHash(hash)\n\t}\n\n\treturn readElement(r, &msg.HashStop)\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgGetBlocks) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error {\n\tcount := len(msg.BlockLocatorHashes)\n\tif count > MaxBlockLocatorsPerMsg {\n\t\tstr := fmt.Sprintf(\"too many block locator hashes for message \"+\n\t\t\t\"[count %v, max %v]\", count, MaxBlockLocatorsPerMsg)\n\t\treturn messageError(\"MsgGetBlocks.BtcEncode\", str)\n\t}\n\n\terr := writeElement(w, msg.ProtocolVersion)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = WriteVarInt(w, pver, uint64(count))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, hash := range msg.BlockLocatorHashes {\n\t\terr = writeElement(w, hash)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn writeElement(w, &msg.HashStop)\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgGetBlocks) Command() string {\n\treturn CmdGetBlocks\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgGetBlocks) MaxPayloadLength(pver uint32) uint32 {\n\t// Protocol version 4 bytes + num hashes (varInt) + max block locator\n\t// hashes + hash stop.\n\treturn 4 + MaxVarIntPayload + (MaxBlockLocatorsPerMsg * chainhash.HashSize) + chainhash.HashSize\n}\n\n// NewMsgGetBlocks returns a new bitcoin getblocks message that conforms to the\n// Message interface using the passed parameters and defaults for the remaining\n// fields.\nfunc NewMsgGetBlocks(hashStop *chainhash.Hash) *MsgGetBlocks {\n\treturn &MsgGetBlocks{\n\t\tProtocolVersion:    ProtocolVersion,\n\t\tBlockLocatorHashes: make([]*chainhash.Hash, 0, MaxBlockLocatorsPerMsg),\n\t\tHashStop:           *hashStop,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/msggetcfcheckpt.go",
    "content": "// Copyright (c) 2018 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"io\"\n\n\t\"github.com/btcsuite/btcd/chaincfg/chainhash\"\n)\n\n// MsgGetCFCheckpt is a request for filter headers at evenly spaced intervals\n// throughout the blockchain history. It allows to set the FilterType field to\n// get headers in the chain of basic (0x00) or extended (0x01) headers.\ntype MsgGetCFCheckpt struct {\n\tFilterType FilterType\n\tStopHash   chainhash.Hash\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgGetCFCheckpt) BtcDecode(r io.Reader, pver uint32, _ MessageEncoding) error {\n\terr := readElement(r, &msg.FilterType)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn readElement(r, &msg.StopHash)\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgGetCFCheckpt) BtcEncode(w io.Writer, pver uint32, _ MessageEncoding) error {\n\terr := writeElement(w, msg.FilterType)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn writeElement(w, &msg.StopHash)\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgGetCFCheckpt) Command() string {\n\treturn CmdGetCFCheckpt\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgGetCFCheckpt) MaxPayloadLength(pver uint32) uint32 {\n\t// Filter type + uint32 + block hash\n\treturn 1 + chainhash.HashSize\n}\n\n// NewMsgGetCFCheckpt returns a new bitcoin getcfcheckpt message that conforms\n// to the Message interface using the passed parameters and defaults for the\n// remaining fields.\nfunc NewMsgGetCFCheckpt(filterType FilterType, stopHash *chainhash.Hash) *MsgGetCFCheckpt {\n\treturn &MsgGetCFCheckpt{\n\t\tFilterType: filterType,\n\t\tStopHash:   *stopHash,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/msggetcfheaders.go",
    "content": "// Copyright (c) 2017 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"io\"\n\n\t\"github.com/btcsuite/btcd/chaincfg/chainhash\"\n)\n\n// MsgGetCFHeaders is a message similar to MsgGetHeaders, but for committed\n// filter headers. It allows to set the FilterType field to get headers in the\n// chain of basic (0x00) or extended (0x01) headers.\ntype MsgGetCFHeaders struct {\n\tFilterType  FilterType\n\tStartHeight uint32\n\tStopHash    chainhash.Hash\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgGetCFHeaders) BtcDecode(r io.Reader, pver uint32, _ MessageEncoding) error {\n\terr := readElement(r, &msg.FilterType)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = readElement(r, &msg.StartHeight)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn readElement(r, &msg.StopHash)\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgGetCFHeaders) BtcEncode(w io.Writer, pver uint32, _ MessageEncoding) error {\n\terr := writeElement(w, msg.FilterType)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = writeElement(w, &msg.StartHeight)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn writeElement(w, &msg.StopHash)\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgGetCFHeaders) Command() string {\n\treturn CmdGetCFHeaders\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgGetCFHeaders) MaxPayloadLength(pver uint32) uint32 {\n\t// Filter type + uint32 + block hash\n\treturn 1 + 4 + chainhash.HashSize\n}\n\n// NewMsgGetCFHeaders returns a new bitcoin getcfheader message that conforms to\n// the Message interface using the passed parameters and defaults for the\n// remaining fields.\nfunc NewMsgGetCFHeaders(filterType FilterType, startHeight uint32,\n\tstopHash *chainhash.Hash) *MsgGetCFHeaders {\n\treturn &MsgGetCFHeaders{\n\t\tFilterType:  filterType,\n\t\tStartHeight: startHeight,\n\t\tStopHash:    *stopHash,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/msggetcfilters.go",
    "content": "// Copyright (c) 2017 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"io\"\n\n\t\"github.com/btcsuite/btcd/chaincfg/chainhash\"\n)\n\n// MaxGetCFiltersReqRange the maximum number of filters that may be requested in\n// a getcfheaders message.\nconst MaxGetCFiltersReqRange = 1000\n\n// MsgGetCFilters implements the Message interface and represents a bitcoin\n// getcfilters message. It is used to request committed filters for a range of\n// blocks.\ntype MsgGetCFilters struct {\n\tFilterType  FilterType\n\tStartHeight uint32\n\tStopHash    chainhash.Hash\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgGetCFilters) BtcDecode(r io.Reader, pver uint32, _ MessageEncoding) error {\n\terr := readElement(r, &msg.FilterType)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = readElement(r, &msg.StartHeight)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn readElement(r, &msg.StopHash)\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgGetCFilters) BtcEncode(w io.Writer, pver uint32, _ MessageEncoding) error {\n\terr := writeElement(w, msg.FilterType)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = writeElement(w, &msg.StartHeight)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn writeElement(w, &msg.StopHash)\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgGetCFilters) Command() string {\n\treturn CmdGetCFilters\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgGetCFilters) MaxPayloadLength(pver uint32) uint32 {\n\t// Filter type + uint32 + block hash\n\treturn 1 + 4 + chainhash.HashSize\n}\n\n// NewMsgGetCFilters returns a new bitcoin getcfilters message that conforms to\n// the Message interface using the passed parameters and defaults for the\n// remaining fields.\nfunc NewMsgGetCFilters(filterType FilterType, startHeight uint32,\n\tstopHash *chainhash.Hash) *MsgGetCFilters {\n\treturn &MsgGetCFilters{\n\t\tFilterType:  filterType,\n\t\tStartHeight: startHeight,\n\t\tStopHash:    *stopHash,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/msggetdata.go",
    "content": "// Copyright (c) 2013-2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\n// MsgGetData implements the Message interface and represents a bitcoin\n// getdata message.  It is used to request data such as blocks and transactions\n// from another peer.  It should be used in response to the inv (MsgInv) message\n// to request the actual data referenced by each inventory vector the receiving\n// peer doesn't already have.  Each message is limited to a maximum number of\n// inventory vectors, which is currently 50,000.  As a result, multiple messages\n// must be used to request larger amounts of data.\n//\n// Use the AddInvVect function to build up the list of inventory vectors when\n// sending a getdata message to another peer.\ntype MsgGetData struct {\n\tInvList []*InvVect\n}\n\n// AddInvVect adds an inventory vector to the message.\nfunc (msg *MsgGetData) AddInvVect(iv *InvVect) error {\n\tif len(msg.InvList)+1 > MaxInvPerMsg {\n\t\tstr := fmt.Sprintf(\"too many invvect in message [max %v]\",\n\t\t\tMaxInvPerMsg)\n\t\treturn messageError(\"MsgGetData.AddInvVect\", str)\n\t}\n\n\tmsg.InvList = append(msg.InvList, iv)\n\treturn nil\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgGetData) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error {\n\tcount, err := ReadVarInt(r, pver)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Limit to max inventory vectors per message.\n\tif count > MaxInvPerMsg {\n\t\tstr := fmt.Sprintf(\"too many invvect in message [%v]\", count)\n\t\treturn messageError(\"MsgGetData.BtcDecode\", str)\n\t}\n\n\t// Create a contiguous slice of inventory vectors to deserialize into in\n\t// order to reduce the number of allocations.\n\tinvList := make([]InvVect, count)\n\tmsg.InvList = make([]*InvVect, 0, count)\n\tfor i := uint64(0); i < count; i++ {\n\t\tiv := &invList[i]\n\t\terr := readInvVect(r, pver, iv)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmsg.AddInvVect(iv)\n\t}\n\n\treturn nil\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgGetData) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error {\n\t// Limit to max inventory vectors per message.\n\tcount := len(msg.InvList)\n\tif count > MaxInvPerMsg {\n\t\tstr := fmt.Sprintf(\"too many invvect in message [%v]\", count)\n\t\treturn messageError(\"MsgGetData.BtcEncode\", str)\n\t}\n\n\terr := WriteVarInt(w, pver, uint64(count))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, iv := range msg.InvList {\n\t\terr := writeInvVect(w, pver, iv)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgGetData) Command() string {\n\treturn CmdGetData\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgGetData) MaxPayloadLength(pver uint32) uint32 {\n\t// Num inventory vectors (varInt) + max allowed inventory vectors.\n\treturn MaxVarIntPayload + (MaxInvPerMsg * maxInvVectPayload)\n}\n\n// NewMsgGetData returns a new bitcoin getdata message that conforms to the\n// Message interface.  See MsgGetData for details.\nfunc NewMsgGetData() *MsgGetData {\n\treturn &MsgGetData{\n\t\tInvList: make([]*InvVect, 0, defaultInvListAlloc),\n\t}\n}\n\n// NewMsgGetDataSizeHint returns a new bitcoin getdata message that conforms to\n// the Message interface.  See MsgGetData for details.  This function differs\n// from NewMsgGetData in that it allows a default allocation size for the\n// backing array which houses the inventory vector list.  This allows callers\n// who know in advance how large the inventory list will grow to avoid the\n// overhead of growing the internal backing array several times when appending\n// large amounts of inventory vectors with AddInvVect.  Note that the specified\n// hint is just that - a hint that is used for the default allocation size.\n// Adding more (or less) inventory vectors will still work properly.  The size\n// hint is limited to MaxInvPerMsg.\nfunc NewMsgGetDataSizeHint(sizeHint uint) *MsgGetData {\n\t// Limit the specified hint to the maximum allow per message.\n\tif sizeHint > MaxInvPerMsg {\n\t\tsizeHint = MaxInvPerMsg\n\t}\n\n\treturn &MsgGetData{\n\t\tInvList: make([]*InvVect, 0, sizeHint),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/msggetheaders.go",
    "content": "// Copyright (c) 2013-2016 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/btcsuite/btcd/chaincfg/chainhash\"\n)\n\n// MsgGetHeaders implements the Message interface and represents a bitcoin\n// getheaders message.  It is used to request a list of block headers for\n// blocks starting after the last known hash in the slice of block locator\n// hashes.  The list is returned via a headers message (MsgHeaders) and is\n// limited by a specific hash to stop at or the maximum number of block headers\n// per message, which is currently 2000.\n//\n// Set the HashStop field to the hash at which to stop and use\n// AddBlockLocatorHash to build up the list of block locator hashes.\n//\n// The algorithm for building the block locator hashes should be to add the\n// hashes in reverse order until you reach the genesis block.  In order to keep\n// the list of locator hashes to a resonable number of entries, first add the\n// most recent 10 block hashes, then double the step each loop iteration to\n// exponentially decrease the number of hashes the further away from head and\n// closer to the genesis block you get.\ntype MsgGetHeaders struct {\n\tProtocolVersion    uint32\n\tBlockLocatorHashes []*chainhash.Hash\n\tHashStop           chainhash.Hash\n}\n\n// AddBlockLocatorHash adds a new block locator hash to the message.\nfunc (msg *MsgGetHeaders) AddBlockLocatorHash(hash *chainhash.Hash) error {\n\tif len(msg.BlockLocatorHashes)+1 > MaxBlockLocatorsPerMsg {\n\t\tstr := fmt.Sprintf(\"too many block locator hashes for message [max %v]\",\n\t\t\tMaxBlockLocatorsPerMsg)\n\t\treturn messageError(\"MsgGetHeaders.AddBlockLocatorHash\", str)\n\t}\n\n\tmsg.BlockLocatorHashes = append(msg.BlockLocatorHashes, hash)\n\treturn nil\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgGetHeaders) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error {\n\terr := readElement(r, &msg.ProtocolVersion)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Read num block locator hashes and limit to max.\n\tcount, err := ReadVarInt(r, pver)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif count > MaxBlockLocatorsPerMsg {\n\t\tstr := fmt.Sprintf(\"too many block locator hashes for message \"+\n\t\t\t\"[count %v, max %v]\", count, MaxBlockLocatorsPerMsg)\n\t\treturn messageError(\"MsgGetHeaders.BtcDecode\", str)\n\t}\n\n\t// Create a contiguous slice of hashes to deserialize into in order to\n\t// reduce the number of allocations.\n\tlocatorHashes := make([]chainhash.Hash, count)\n\tmsg.BlockLocatorHashes = make([]*chainhash.Hash, 0, count)\n\tfor i := uint64(0); i < count; i++ {\n\t\thash := &locatorHashes[i]\n\t\terr := readElement(r, hash)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmsg.AddBlockLocatorHash(hash)\n\t}\n\n\treturn readElement(r, &msg.HashStop)\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgGetHeaders) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error {\n\t// Limit to max block locator hashes per message.\n\tcount := len(msg.BlockLocatorHashes)\n\tif count > MaxBlockLocatorsPerMsg {\n\t\tstr := fmt.Sprintf(\"too many block locator hashes for message \"+\n\t\t\t\"[count %v, max %v]\", count, MaxBlockLocatorsPerMsg)\n\t\treturn messageError(\"MsgGetHeaders.BtcEncode\", str)\n\t}\n\n\terr := writeElement(w, msg.ProtocolVersion)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = WriteVarInt(w, pver, uint64(count))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, hash := range msg.BlockLocatorHashes {\n\t\terr := writeElement(w, hash)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn writeElement(w, &msg.HashStop)\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgGetHeaders) Command() string {\n\treturn CmdGetHeaders\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgGetHeaders) MaxPayloadLength(pver uint32) uint32 {\n\t// Version 4 bytes + num block locator hashes (varInt) + max allowed block\n\t// locators + hash stop.\n\treturn 4 + MaxVarIntPayload + (MaxBlockLocatorsPerMsg *\n\t\tchainhash.HashSize) + chainhash.HashSize\n}\n\n// NewMsgGetHeaders returns a new bitcoin getheaders message that conforms to\n// the Message interface.  See MsgGetHeaders for details.\nfunc NewMsgGetHeaders() *MsgGetHeaders {\n\treturn &MsgGetHeaders{\n\t\tBlockLocatorHashes: make([]*chainhash.Hash, 0,\n\t\t\tMaxBlockLocatorsPerMsg),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/msgheaders.go",
    "content": "// Copyright (c) 2013-2016 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\n// MaxBlockHeadersPerMsg is the maximum number of block headers that can be in\n// a single bitcoin headers message.\nconst MaxBlockHeadersPerMsg = 2000\n\n// MsgHeaders implements the Message interface and represents a bitcoin headers\n// message.  It is used to deliver block header information in response\n// to a getheaders message (MsgGetHeaders).  The maximum number of block headers\n// per message is currently 2000.  See MsgGetHeaders for details on requesting\n// the headers.\ntype MsgHeaders struct {\n\tHeaders []*BlockHeader\n}\n\n// AddBlockHeader adds a new block header to the message.\nfunc (msg *MsgHeaders) AddBlockHeader(bh *BlockHeader) error {\n\tif len(msg.Headers)+1 > MaxBlockHeadersPerMsg {\n\t\tstr := fmt.Sprintf(\"too many block headers in message [max %v]\",\n\t\t\tMaxBlockHeadersPerMsg)\n\t\treturn messageError(\"MsgHeaders.AddBlockHeader\", str)\n\t}\n\n\tmsg.Headers = append(msg.Headers, bh)\n\treturn nil\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgHeaders) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error {\n\tcount, err := ReadVarInt(r, pver)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Limit to max block headers per message.\n\tif count > MaxBlockHeadersPerMsg {\n\t\tstr := fmt.Sprintf(\"too many block headers for message \"+\n\t\t\t\"[count %v, max %v]\", count, MaxBlockHeadersPerMsg)\n\t\treturn messageError(\"MsgHeaders.BtcDecode\", str)\n\t}\n\n\t// Create a contiguous slice of headers to deserialize into in order to\n\t// reduce the number of allocations.\n\theaders := make([]BlockHeader, count)\n\tmsg.Headers = make([]*BlockHeader, 0, count)\n\tfor i := uint64(0); i < count; i++ {\n\t\tbh := &headers[i]\n\t\terr := readBlockHeader(r, pver, bh)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\ttxCount, err := ReadVarInt(r, pver)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Ensure the transaction count is zero for headers.\n\t\tif txCount > 0 {\n\t\t\tstr := fmt.Sprintf(\"block headers may not contain \"+\n\t\t\t\t\"transactions [count %v]\", txCount)\n\t\t\treturn messageError(\"MsgHeaders.BtcDecode\", str)\n\t\t}\n\t\tmsg.AddBlockHeader(bh)\n\t}\n\n\treturn nil\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgHeaders) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error {\n\t// Limit to max block headers per message.\n\tcount := len(msg.Headers)\n\tif count > MaxBlockHeadersPerMsg {\n\t\tstr := fmt.Sprintf(\"too many block headers for message \"+\n\t\t\t\"[count %v, max %v]\", count, MaxBlockHeadersPerMsg)\n\t\treturn messageError(\"MsgHeaders.BtcEncode\", str)\n\t}\n\n\terr := WriteVarInt(w, pver, uint64(count))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, bh := range msg.Headers {\n\t\terr := writeBlockHeader(w, pver, bh)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// The wire protocol encoding always includes a 0 for the number\n\t\t// of transactions on header messages.  This is really just an\n\t\t// artifact of the way the original implementation serializes\n\t\t// block headers, but it is required.\n\t\terr = WriteVarInt(w, pver, 0)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgHeaders) Command() string {\n\treturn CmdHeaders\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgHeaders) MaxPayloadLength(pver uint32) uint32 {\n\t// Num headers (varInt) + max allowed headers (header length + 1 byte\n\t// for the number of transactions which is always 0).\n\treturn MaxVarIntPayload + ((MaxBlockHeaderPayload + 1) *\n\t\tMaxBlockHeadersPerMsg)\n}\n\n// NewMsgHeaders returns a new bitcoin headers message that conforms to the\n// Message interface.  See MsgHeaders for details.\nfunc NewMsgHeaders() *MsgHeaders {\n\treturn &MsgHeaders{\n\t\tHeaders: make([]*BlockHeader, 0, MaxBlockHeadersPerMsg),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/msginv.go",
    "content": "// Copyright (c) 2013-2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\n// defaultInvListAlloc is the default size used for the backing array for an\n// inventory list.  The array will dynamically grow as needed, but this\n// figure is intended to provide enough space for the max number of inventory\n// vectors in a *typical* inventory message without needing to grow the backing\n// array multiple times.  Technically, the list can grow to MaxInvPerMsg, but\n// rather than using that large figure, this figure more accurately reflects the\n// typical case.\nconst defaultInvListAlloc = 1000\n\n// MsgInv implements the Message interface and represents a bitcoin inv message.\n// It is used to advertise a peer's known data such as blocks and transactions\n// through inventory vectors.  It may be sent unsolicited to inform other peers\n// of the data or in response to a getblocks message (MsgGetBlocks).  Each\n// message is limited to a maximum number of inventory vectors, which is\n// currently 50,000.\n//\n// Use the AddInvVect function to build up the list of inventory vectors when\n// sending an inv message to another peer.\ntype MsgInv struct {\n\tInvList []*InvVect\n}\n\n// AddInvVect adds an inventory vector to the message.\nfunc (msg *MsgInv) AddInvVect(iv *InvVect) error {\n\tif len(msg.InvList)+1 > MaxInvPerMsg {\n\t\tstr := fmt.Sprintf(\"too many invvect in message [max %v]\",\n\t\t\tMaxInvPerMsg)\n\t\treturn messageError(\"MsgInv.AddInvVect\", str)\n\t}\n\n\tmsg.InvList = append(msg.InvList, iv)\n\treturn nil\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgInv) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error {\n\tcount, err := ReadVarInt(r, pver)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Limit to max inventory vectors per message.\n\tif count > MaxInvPerMsg {\n\t\tstr := fmt.Sprintf(\"too many invvect in message [%v]\", count)\n\t\treturn messageError(\"MsgInv.BtcDecode\", str)\n\t}\n\n\t// Create a contiguous slice of inventory vectors to deserialize into in\n\t// order to reduce the number of allocations.\n\tinvList := make([]InvVect, count)\n\tmsg.InvList = make([]*InvVect, 0, count)\n\tfor i := uint64(0); i < count; i++ {\n\t\tiv := &invList[i]\n\t\terr := readInvVect(r, pver, iv)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmsg.AddInvVect(iv)\n\t}\n\n\treturn nil\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgInv) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error {\n\t// Limit to max inventory vectors per message.\n\tcount := len(msg.InvList)\n\tif count > MaxInvPerMsg {\n\t\tstr := fmt.Sprintf(\"too many invvect in message [%v]\", count)\n\t\treturn messageError(\"MsgInv.BtcEncode\", str)\n\t}\n\n\terr := WriteVarInt(w, pver, uint64(count))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, iv := range msg.InvList {\n\t\terr := writeInvVect(w, pver, iv)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgInv) Command() string {\n\treturn CmdInv\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgInv) MaxPayloadLength(pver uint32) uint32 {\n\t// Num inventory vectors (varInt) + max allowed inventory vectors.\n\treturn MaxVarIntPayload + (MaxInvPerMsg * maxInvVectPayload)\n}\n\n// NewMsgInv returns a new bitcoin inv message that conforms to the Message\n// interface.  See MsgInv for details.\nfunc NewMsgInv() *MsgInv {\n\treturn &MsgInv{\n\t\tInvList: make([]*InvVect, 0, defaultInvListAlloc),\n\t}\n}\n\n// NewMsgInvSizeHint returns a new bitcoin inv message that conforms to the\n// Message interface.  See MsgInv for details.  This function differs from\n// NewMsgInv in that it allows a default allocation size for the backing array\n// which houses the inventory vector list.  This allows callers who know in\n// advance how large the inventory list will grow to avoid the overhead of\n// growing the internal backing array several times when appending large amounts\n// of inventory vectors with AddInvVect.  Note that the specified hint is just\n// that - a hint that is used for the default allocation size.  Adding more\n// (or less) inventory vectors will still work properly.  The size hint is\n// limited to MaxInvPerMsg.\nfunc NewMsgInvSizeHint(sizeHint uint) *MsgInv {\n\t// Limit the specified hint to the maximum allow per message.\n\tif sizeHint > MaxInvPerMsg {\n\t\tsizeHint = MaxInvPerMsg\n\t}\n\n\treturn &MsgInv{\n\t\tInvList: make([]*InvVect, 0, sizeHint),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/msgmempool.go",
    "content": "// Copyright (c) 2013-2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\n// MsgMemPool implements the Message interface and represents a bitcoin mempool\n// message.  It is used to request a list of transactions still in the active\n// memory pool of a relay.\n//\n// This message has no payload and was not added until protocol versions\n// starting with BIP0035Version.\ntype MsgMemPool struct{}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgMemPool) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error {\n\tif pver < BIP0035Version {\n\t\tstr := fmt.Sprintf(\"mempool message invalid for protocol \"+\n\t\t\t\"version %d\", pver)\n\t\treturn messageError(\"MsgMemPool.BtcDecode\", str)\n\t}\n\n\treturn nil\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgMemPool) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error {\n\tif pver < BIP0035Version {\n\t\tstr := fmt.Sprintf(\"mempool message invalid for protocol \"+\n\t\t\t\"version %d\", pver)\n\t\treturn messageError(\"MsgMemPool.BtcEncode\", str)\n\t}\n\n\treturn nil\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgMemPool) Command() string {\n\treturn CmdMemPool\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgMemPool) MaxPayloadLength(pver uint32) uint32 {\n\treturn 0\n}\n\n// NewMsgMemPool returns a new bitcoin pong message that conforms to the Message\n// interface.  See MsgPong for details.\nfunc NewMsgMemPool() *MsgMemPool {\n\treturn &MsgMemPool{}\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/msgmerkleblock.go",
    "content": "// Copyright (c) 2014-2016 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/btcsuite/btcd/chaincfg/chainhash\"\n)\n\n// maxFlagsPerMerkleBlock is the maximum number of flag bytes that could\n// possibly fit into a merkle block.  Since each transaction is represented by\n// a single bit, this is the max number of transactions per block divided by\n// 8 bits per byte.  Then an extra one to cover partials.\nconst maxFlagsPerMerkleBlock = maxTxPerBlock / 8\n\n// MsgMerkleBlock implements the Message interface and represents a bitcoin\n// merkleblock message which is used to reset a Bloom filter.\n//\n// This message was not added until protocol version BIP0037Version.\ntype MsgMerkleBlock struct {\n\tHeader       BlockHeader\n\tTransactions uint32\n\tHashes       []*chainhash.Hash\n\tFlags        []byte\n}\n\n// AddTxHash adds a new transaction hash to the message.\nfunc (msg *MsgMerkleBlock) AddTxHash(hash *chainhash.Hash) error {\n\tif len(msg.Hashes)+1 > maxTxPerBlock {\n\t\tstr := fmt.Sprintf(\"too many tx hashes for message [max %v]\",\n\t\t\tmaxTxPerBlock)\n\t\treturn messageError(\"MsgMerkleBlock.AddTxHash\", str)\n\t}\n\n\tmsg.Hashes = append(msg.Hashes, hash)\n\treturn nil\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgMerkleBlock) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error {\n\tif pver < BIP0037Version {\n\t\tstr := fmt.Sprintf(\"merkleblock message invalid for protocol \"+\n\t\t\t\"version %d\", pver)\n\t\treturn messageError(\"MsgMerkleBlock.BtcDecode\", str)\n\t}\n\n\terr := readBlockHeader(r, pver, &msg.Header)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = readElement(r, &msg.Transactions)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Read num block locator hashes and limit to max.\n\tcount, err := ReadVarInt(r, pver)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif count > maxTxPerBlock {\n\t\tstr := fmt.Sprintf(\"too many transaction hashes for message \"+\n\t\t\t\"[count %v, max %v]\", count, maxTxPerBlock)\n\t\treturn messageError(\"MsgMerkleBlock.BtcDecode\", str)\n\t}\n\n\t// Create a contiguous slice of hashes to deserialize into in order to\n\t// reduce the number of allocations.\n\thashes := make([]chainhash.Hash, count)\n\tmsg.Hashes = make([]*chainhash.Hash, 0, count)\n\tfor i := uint64(0); i < count; i++ {\n\t\thash := &hashes[i]\n\t\terr := readElement(r, hash)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmsg.AddTxHash(hash)\n\t}\n\n\tmsg.Flags, err = ReadVarBytes(r, pver, maxFlagsPerMerkleBlock,\n\t\t\"merkle block flags size\")\n\treturn err\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgMerkleBlock) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error {\n\tif pver < BIP0037Version {\n\t\tstr := fmt.Sprintf(\"merkleblock message invalid for protocol \"+\n\t\t\t\"version %d\", pver)\n\t\treturn messageError(\"MsgMerkleBlock.BtcEncode\", str)\n\t}\n\n\t// Read num transaction hashes and limit to max.\n\tnumHashes := len(msg.Hashes)\n\tif numHashes > maxTxPerBlock {\n\t\tstr := fmt.Sprintf(\"too many transaction hashes for message \"+\n\t\t\t\"[count %v, max %v]\", numHashes, maxTxPerBlock)\n\t\treturn messageError(\"MsgMerkleBlock.BtcDecode\", str)\n\t}\n\tnumFlagBytes := len(msg.Flags)\n\tif numFlagBytes > maxFlagsPerMerkleBlock {\n\t\tstr := fmt.Sprintf(\"too many flag bytes for message [count %v, \"+\n\t\t\t\"max %v]\", numFlagBytes, maxFlagsPerMerkleBlock)\n\t\treturn messageError(\"MsgMerkleBlock.BtcDecode\", str)\n\t}\n\n\terr := writeBlockHeader(w, pver, &msg.Header)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = writeElement(w, msg.Transactions)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = WriteVarInt(w, pver, uint64(numHashes))\n\tif err != nil {\n\t\treturn err\n\t}\n\tfor _, hash := range msg.Hashes {\n\t\terr = writeElement(w, hash)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn WriteVarBytes(w, pver, msg.Flags)\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgMerkleBlock) Command() string {\n\treturn CmdMerkleBlock\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgMerkleBlock) MaxPayloadLength(pver uint32) uint32 {\n\treturn MaxBlockPayload\n}\n\n// NewMsgMerkleBlock returns a new bitcoin merkleblock message that conforms to\n// the Message interface.  See MsgMerkleBlock for details.\nfunc NewMsgMerkleBlock(bh *BlockHeader) *MsgMerkleBlock {\n\treturn &MsgMerkleBlock{\n\t\tHeader:       *bh,\n\t\tTransactions: 0,\n\t\tHashes:       make([]*chainhash.Hash, 0),\n\t\tFlags:        make([]byte, 0),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/msgnotfound.go",
    "content": "// Copyright (c) 2013-2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\n// MsgNotFound defines a bitcoin notfound message which is sent in response to\n// a getdata message if any of the requested data in not available on the peer.\n// Each message is limited to a maximum number of inventory vectors, which is\n// currently 50,000.\n//\n// Use the AddInvVect function to build up the list of inventory vectors when\n// sending a notfound message to another peer.\ntype MsgNotFound struct {\n\tInvList []*InvVect\n}\n\n// AddInvVect adds an inventory vector to the message.\nfunc (msg *MsgNotFound) AddInvVect(iv *InvVect) error {\n\tif len(msg.InvList)+1 > MaxInvPerMsg {\n\t\tstr := fmt.Sprintf(\"too many invvect in message [max %v]\",\n\t\t\tMaxInvPerMsg)\n\t\treturn messageError(\"MsgNotFound.AddInvVect\", str)\n\t}\n\n\tmsg.InvList = append(msg.InvList, iv)\n\treturn nil\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgNotFound) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error {\n\tcount, err := ReadVarInt(r, pver)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Limit to max inventory vectors per message.\n\tif count > MaxInvPerMsg {\n\t\tstr := fmt.Sprintf(\"too many invvect in message [%v]\", count)\n\t\treturn messageError(\"MsgNotFound.BtcDecode\", str)\n\t}\n\n\t// Create a contiguous slice of inventory vectors to deserialize into in\n\t// order to reduce the number of allocations.\n\tinvList := make([]InvVect, count)\n\tmsg.InvList = make([]*InvVect, 0, count)\n\tfor i := uint64(0); i < count; i++ {\n\t\tiv := &invList[i]\n\t\terr := readInvVect(r, pver, iv)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmsg.AddInvVect(iv)\n\t}\n\n\treturn nil\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgNotFound) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error {\n\t// Limit to max inventory vectors per message.\n\tcount := len(msg.InvList)\n\tif count > MaxInvPerMsg {\n\t\tstr := fmt.Sprintf(\"too many invvect in message [%v]\", count)\n\t\treturn messageError(\"MsgNotFound.BtcEncode\", str)\n\t}\n\n\terr := WriteVarInt(w, pver, uint64(count))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, iv := range msg.InvList {\n\t\terr := writeInvVect(w, pver, iv)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgNotFound) Command() string {\n\treturn CmdNotFound\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgNotFound) MaxPayloadLength(pver uint32) uint32 {\n\t// Max var int 9 bytes + max InvVects at 36 bytes each.\n\t// Num inventory vectors (varInt) + max allowed inventory vectors.\n\treturn MaxVarIntPayload + (MaxInvPerMsg * maxInvVectPayload)\n}\n\n// NewMsgNotFound returns a new bitcoin notfound message that conforms to the\n// Message interface.  See MsgNotFound for details.\nfunc NewMsgNotFound() *MsgNotFound {\n\treturn &MsgNotFound{\n\t\tInvList: make([]*InvVect, 0, defaultInvListAlloc),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/msgping.go",
    "content": "// Copyright (c) 2013-2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"io\"\n)\n\n// MsgPing implements the Message interface and represents a bitcoin ping\n// message.\n//\n// For versions BIP0031Version and earlier, it is used primarily to confirm\n// that a connection is still valid.  A transmission error is typically\n// interpreted as a closed connection and that the peer should be removed.\n// For versions AFTER BIP0031Version it contains an identifier which can be\n// returned in the pong message to determine network timing.\n//\n// The payload for this message just consists of a nonce used for identifying\n// it later.\ntype MsgPing struct {\n\t// Unique value associated with message that is used to identify\n\t// specific ping message.\n\tNonce uint64\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgPing) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error {\n\t// There was no nonce for BIP0031Version and earlier.\n\t// NOTE: > is not a mistake here.  The BIP0031 was defined as AFTER\n\t// the version unlike most others.\n\tif pver > BIP0031Version {\n\t\terr := readElement(r, &msg.Nonce)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgPing) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error {\n\t// There was no nonce for BIP0031Version and earlier.\n\t// NOTE: > is not a mistake here.  The BIP0031 was defined as AFTER\n\t// the version unlike most others.\n\tif pver > BIP0031Version {\n\t\terr := writeElement(w, msg.Nonce)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgPing) Command() string {\n\treturn CmdPing\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgPing) MaxPayloadLength(pver uint32) uint32 {\n\tplen := uint32(0)\n\t// There was no nonce for BIP0031Version and earlier.\n\t// NOTE: > is not a mistake here.  The BIP0031 was defined as AFTER\n\t// the version unlike most others.\n\tif pver > BIP0031Version {\n\t\t// Nonce 8 bytes.\n\t\tplen += 8\n\t}\n\n\treturn plen\n}\n\n// NewMsgPing returns a new bitcoin ping message that conforms to the Message\n// interface.  See MsgPing for details.\nfunc NewMsgPing(nonce uint64) *MsgPing {\n\treturn &MsgPing{\n\t\tNonce: nonce,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/msgpong.go",
    "content": "// Copyright (c) 2013-2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\n// MsgPong implements the Message interface and represents a bitcoin pong\n// message which is used primarily to confirm that a connection is still valid\n// in response to a bitcoin ping message (MsgPing).\n//\n// This message was not added until protocol versions AFTER BIP0031Version.\ntype MsgPong struct {\n\t// Unique value associated with message that is used to identify\n\t// specific ping message.\n\tNonce uint64\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgPong) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error {\n\t// NOTE: <= is not a mistake here.  The BIP0031 was defined as AFTER\n\t// the version unlike most others.\n\tif pver <= BIP0031Version {\n\t\tstr := fmt.Sprintf(\"pong message invalid for protocol \"+\n\t\t\t\"version %d\", pver)\n\t\treturn messageError(\"MsgPong.BtcDecode\", str)\n\t}\n\n\treturn readElement(r, &msg.Nonce)\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgPong) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error {\n\t// NOTE: <= is not a mistake here.  The BIP0031 was defined as AFTER\n\t// the version unlike most others.\n\tif pver <= BIP0031Version {\n\t\tstr := fmt.Sprintf(\"pong message invalid for protocol \"+\n\t\t\t\"version %d\", pver)\n\t\treturn messageError(\"MsgPong.BtcEncode\", str)\n\t}\n\n\treturn writeElement(w, msg.Nonce)\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgPong) Command() string {\n\treturn CmdPong\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgPong) MaxPayloadLength(pver uint32) uint32 {\n\tplen := uint32(0)\n\t// The pong message did not exist for BIP0031Version and earlier.\n\t// NOTE: > is not a mistake here.  The BIP0031 was defined as AFTER\n\t// the version unlike most others.\n\tif pver > BIP0031Version {\n\t\t// Nonce 8 bytes.\n\t\tplen += 8\n\t}\n\n\treturn plen\n}\n\n// NewMsgPong returns a new bitcoin pong message that conforms to the Message\n// interface.  See MsgPong for details.\nfunc NewMsgPong(nonce uint64) *MsgPong {\n\treturn &MsgPong{\n\t\tNonce: nonce,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/msgreject.go",
    "content": "// Copyright (c) 2014-2016 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/btcsuite/btcd/chaincfg/chainhash\"\n)\n\n// RejectCode represents a numeric value by which a remote peer indicates\n// why a message was rejected.\ntype RejectCode uint8\n\n// These constants define the various supported reject codes.\nconst (\n\tRejectMalformed       RejectCode = 0x01\n\tRejectInvalid         RejectCode = 0x10\n\tRejectObsolete        RejectCode = 0x11\n\tRejectDuplicate       RejectCode = 0x12\n\tRejectNonstandard     RejectCode = 0x40\n\tRejectDust            RejectCode = 0x41\n\tRejectInsufficientFee RejectCode = 0x42\n\tRejectCheckpoint      RejectCode = 0x43\n)\n\n// Map of reject codes back strings for pretty printing.\nvar rejectCodeStrings = map[RejectCode]string{\n\tRejectMalformed:       \"REJECT_MALFORMED\",\n\tRejectInvalid:         \"REJECT_INVALID\",\n\tRejectObsolete:        \"REJECT_OBSOLETE\",\n\tRejectDuplicate:       \"REJECT_DUPLICATE\",\n\tRejectNonstandard:     \"REJECT_NONSTANDARD\",\n\tRejectDust:            \"REJECT_DUST\",\n\tRejectInsufficientFee: \"REJECT_INSUFFICIENTFEE\",\n\tRejectCheckpoint:      \"REJECT_CHECKPOINT\",\n}\n\n// String returns the RejectCode in human-readable form.\nfunc (code RejectCode) String() string {\n\tif s, ok := rejectCodeStrings[code]; ok {\n\t\treturn s\n\t}\n\n\treturn fmt.Sprintf(\"Unknown RejectCode (%d)\", uint8(code))\n}\n\n// MsgReject implements the Message interface and represents a bitcoin reject\n// message.\n//\n// This message was not added until protocol version RejectVersion.\ntype MsgReject struct {\n\t// Cmd is the command for the message which was rejected such as\n\t// as CmdBlock or CmdTx.  This can be obtained from the Command function\n\t// of a Message.\n\tCmd string\n\n\t// RejectCode is a code indicating why the command was rejected.  It\n\t// is encoded as a uint8 on the wire.\n\tCode RejectCode\n\n\t// Reason is a human-readable string with specific details (over and\n\t// above the reject code) about why the command was rejected.\n\tReason string\n\n\t// Hash identifies a specific block or transaction that was rejected\n\t// and therefore only applies the MsgBlock and MsgTx messages.\n\tHash chainhash.Hash\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgReject) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error {\n\tif pver < RejectVersion {\n\t\tstr := fmt.Sprintf(\"reject message invalid for protocol \"+\n\t\t\t\"version %d\", pver)\n\t\treturn messageError(\"MsgReject.BtcDecode\", str)\n\t}\n\n\t// Command that was rejected.\n\tcmd, err := ReadVarString(r, pver)\n\tif err != nil {\n\t\treturn err\n\t}\n\tmsg.Cmd = cmd\n\n\t// Code indicating why the command was rejected.\n\terr = readElement(r, &msg.Code)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Human readable string with specific details (over and above the\n\t// reject code above) about why the command was rejected.\n\treason, err := ReadVarString(r, pver)\n\tif err != nil {\n\t\treturn err\n\t}\n\tmsg.Reason = reason\n\n\t// CmdBlock and CmdTx messages have an additional hash field that\n\t// identifies the specific block or transaction.\n\tif msg.Cmd == CmdBlock || msg.Cmd == CmdTx {\n\t\terr := readElement(r, &msg.Hash)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgReject) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error {\n\tif pver < RejectVersion {\n\t\tstr := fmt.Sprintf(\"reject message invalid for protocol \"+\n\t\t\t\"version %d\", pver)\n\t\treturn messageError(\"MsgReject.BtcEncode\", str)\n\t}\n\n\t// Command that was rejected.\n\terr := WriteVarString(w, pver, msg.Cmd)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Code indicating why the command was rejected.\n\terr = writeElement(w, msg.Code)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Human readable string with specific details (over and above the\n\t// reject code above) about why the command was rejected.\n\terr = WriteVarString(w, pver, msg.Reason)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// CmdBlock and CmdTx messages have an additional hash field that\n\t// identifies the specific block or transaction.\n\tif msg.Cmd == CmdBlock || msg.Cmd == CmdTx {\n\t\terr := writeElement(w, &msg.Hash)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgReject) Command() string {\n\treturn CmdReject\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgReject) MaxPayloadLength(pver uint32) uint32 {\n\tplen := uint32(0)\n\t// The reject message did not exist before protocol version\n\t// RejectVersion.\n\tif pver >= RejectVersion {\n\t\t// Unfortunately the bitcoin protocol does not enforce a sane\n\t\t// limit on the length of the reason, so the max payload is the\n\t\t// overall maximum message payload.\n\t\tplen = MaxMessagePayload\n\t}\n\n\treturn plen\n}\n\n// NewMsgReject returns a new bitcoin reject message that conforms to the\n// Message interface.  See MsgReject for details.\nfunc NewMsgReject(command string, code RejectCode, reason string) *MsgReject {\n\treturn &MsgReject{\n\t\tCmd:    command,\n\t\tCode:   code,\n\t\tReason: reason,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/msgsendheaders.go",
    "content": "// Copyright (c) 2016 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\n// MsgSendHeaders implements the Message interface and represents a bitcoin\n// sendheaders message.  It is used to request the peer send block headers\n// rather than inventory vectors.\n//\n// This message has no payload and was not added until protocol versions\n// starting with SendHeadersVersion.\ntype MsgSendHeaders struct{}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgSendHeaders) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error {\n\tif pver < SendHeadersVersion {\n\t\tstr := fmt.Sprintf(\"sendheaders message invalid for protocol \"+\n\t\t\t\"version %d\", pver)\n\t\treturn messageError(\"MsgSendHeaders.BtcDecode\", str)\n\t}\n\n\treturn nil\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgSendHeaders) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error {\n\tif pver < SendHeadersVersion {\n\t\tstr := fmt.Sprintf(\"sendheaders message invalid for protocol \"+\n\t\t\t\"version %d\", pver)\n\t\treturn messageError(\"MsgSendHeaders.BtcEncode\", str)\n\t}\n\n\treturn nil\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgSendHeaders) Command() string {\n\treturn CmdSendHeaders\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgSendHeaders) MaxPayloadLength(pver uint32) uint32 {\n\treturn 0\n}\n\n// NewMsgSendHeaders returns a new bitcoin sendheaders message that conforms to\n// the Message interface.  See MsgSendHeaders for details.\nfunc NewMsgSendHeaders() *MsgSendHeaders {\n\treturn &MsgSendHeaders{}\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/msgtx.go",
    "content": "// Copyright (c) 2013-2016 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"strconv\"\n\n\t\"github.com/btcsuite/btcd/chaincfg/chainhash\"\n)\n\nconst (\n\t// TxVersion is the current latest supported transaction version.\n\tTxVersion = 1\n\n\t// MaxTxInSequenceNum is the maximum sequence number the sequence field\n\t// of a transaction input can be.\n\tMaxTxInSequenceNum uint32 = 0xffffffff\n\n\t// MaxPrevOutIndex is the maximum index the index field of a previous\n\t// outpoint can be.\n\tMaxPrevOutIndex uint32 = 0xffffffff\n\n\t// SequenceLockTimeDisabled is a flag that if set on a transaction\n\t// input's sequence number, the sequence number will not be interpreted\n\t// as a relative locktime.\n\tSequenceLockTimeDisabled = 1 << 31\n\n\t// SequenceLockTimeIsSeconds is a flag that if set on a transaction\n\t// input's sequence number, the relative locktime has units of 512\n\t// seconds.\n\tSequenceLockTimeIsSeconds = 1 << 22\n\n\t// SequenceLockTimeMask is a mask that extracts the relative locktime\n\t// when masked against the transaction input sequence number.\n\tSequenceLockTimeMask = 0x0000ffff\n\n\t// SequenceLockTimeGranularity is the defined time based granularity\n\t// for seconds-based relative time locks. When converting from seconds\n\t// to a sequence number, the value is right shifted by this amount,\n\t// therefore the granularity of relative time locks in 512 or 2^9\n\t// seconds. Enforced relative lock times are multiples of 512 seconds.\n\tSequenceLockTimeGranularity = 9\n\n\t// defaultTxInOutAlloc is the default size used for the backing array for\n\t// transaction inputs and outputs.  The array will dynamically grow as needed,\n\t// but this figure is intended to provide enough space for the number of\n\t// inputs and outputs in a typical transaction without needing to grow the\n\t// backing array multiple times.\n\tdefaultTxInOutAlloc = 15\n\n\t// minTxInPayload is the minimum payload size for a transaction input.\n\t// PreviousOutPoint.Hash + PreviousOutPoint.Index 4 bytes + Varint for\n\t// SignatureScript length 1 byte + Sequence 4 bytes.\n\tminTxInPayload = 9 + chainhash.HashSize\n\n\t// maxTxInPerMessage is the maximum number of transactions inputs that\n\t// a transaction which fits into a message could possibly have.\n\tmaxTxInPerMessage = (MaxMessagePayload / minTxInPayload) + 1\n\n\t// MinTxOutPayload is the minimum payload size for a transaction output.\n\t// Value 8 bytes + Varint for PkScript length 1 byte.\n\tMinTxOutPayload = 9\n\n\t// maxTxOutPerMessage is the maximum number of transactions outputs that\n\t// a transaction which fits into a message could possibly have.\n\tmaxTxOutPerMessage = (MaxMessagePayload / MinTxOutPayload) + 1\n\n\t// minTxPayload is the minimum payload size for a transaction.  Note\n\t// that any realistically usable transaction must have at least one\n\t// input or output, but that is a rule enforced at a higher layer, so\n\t// it is intentionally not included here.\n\t// Version 4 bytes + Varint number of transaction inputs 1 byte + Varint\n\t// number of transaction outputs 1 byte + LockTime 4 bytes + min input\n\t// payload + min output payload.\n\tminTxPayload = 10\n\n\t// freeListMaxScriptSize is the size of each buffer in the free list\n\t// that\tis used for deserializing scripts from the wire before they are\n\t// concatenated into a single contiguous buffers.  This value was chosen\n\t// because it is slightly more than twice the size of the vast majority\n\t// of all \"standard\" scripts.  Larger scripts are still deserialized\n\t// properly as the free list will simply be bypassed for them.\n\tfreeListMaxScriptSize = 512\n\n\t// freeListMaxItems is the number of buffers to keep in the free list\n\t// to use for script deserialization.  This value allows up to 100\n\t// scripts per transaction being simultaneously deserialized by 125\n\t// peers.  Thus, the peak usage of the free list is 12,500 * 512 =\n\t// 6,400,000 bytes.\n\tfreeListMaxItems = 12500\n\n\t// maxWitnessItemsPerInput is the maximum number of witness items to\n\t// be read for the witness data for a single TxIn. This number is\n\t// derived using a possble lower bound for the encoding of a witness\n\t// item: 1 byte for length + 1 byte for the witness item itself, or two\n\t// bytes. This value is then divided by the currently allowed maximum\n\t// \"cost\" for a transaction.\n\tmaxWitnessItemsPerInput = 500000\n\n\t// maxWitnessItemSize is the maximum allowed size for an item within\n\t// an input's witness data. This number is derived from the fact that\n\t// for script validation, each pushed item onto the stack must be less\n\t// than 10k bytes.\n\tmaxWitnessItemSize = 11000\n)\n\n// witnessMarkerBytes are a pair of bytes specific to the witness encoding. If\n// this sequence is encoutered, then it indicates a transaction has iwtness\n// data. The first byte is an always 0x00 marker byte, which allows decoders to\n// distinguish a serialized transaction with witnesses from a regular (legacy)\n// one. The second byte is the Flag field, which at the moment is always 0x01,\n// but may be extended in the future to accommodate auxiliary non-committed\n// fields.\nvar witessMarkerBytes = []byte{0x00, 0x01}\n\n// scriptFreeList defines a free list of byte slices (up to the maximum number\n// defined by the freeListMaxItems constant) that have a cap according to the\n// freeListMaxScriptSize constant.  It is used to provide temporary buffers for\n// deserializing scripts in order to greatly reduce the number of allocations\n// required.\n//\n// The caller can obtain a buffer from the free list by calling the Borrow\n// function and should return it via the Return function when done using it.\ntype scriptFreeList chan []byte\n\n// Borrow returns a byte slice from the free list with a length according the\n// provided size.  A new buffer is allocated if there are any items available.\n//\n// When the size is larger than the max size allowed for items on the free list\n// a new buffer of the appropriate size is allocated and returned.  It is safe\n// to attempt to return said buffer via the Return function as it will be\n// ignored and allowed to go the garbage collector.\nfunc (c scriptFreeList) Borrow(size uint64) []byte {\n\tif size > freeListMaxScriptSize {\n\t\treturn make([]byte, size)\n\t}\n\n\tvar buf []byte\n\tselect {\n\tcase buf = <-c:\n\tdefault:\n\t\tbuf = make([]byte, freeListMaxScriptSize)\n\t}\n\treturn buf[:size]\n}\n\n// Return puts the provided byte slice back on the free list when it has a cap\n// of the expected length.  The buffer is expected to have been obtained via\n// the Borrow function.  Any slices that are not of the appropriate size, such\n// as those whose size is greater than the largest allowed free list item size\n// are simply ignored so they can go to the garbage collector.\nfunc (c scriptFreeList) Return(buf []byte) {\n\t// Ignore any buffers returned that aren't the expected size for the\n\t// free list.\n\tif cap(buf) != freeListMaxScriptSize {\n\t\treturn\n\t}\n\n\t// Return the buffer to the free list when it's not full.  Otherwise let\n\t// it be garbage collected.\n\tselect {\n\tcase c <- buf:\n\tdefault:\n\t\t// Let it go to the garbage collector.\n\t}\n}\n\n// Create the concurrent safe free list to use for script deserialization.  As\n// previously described, this free list is maintained to significantly reduce\n// the number of allocations.\nvar scriptPool scriptFreeList = make(chan []byte, freeListMaxItems)\n\n// OutPoint defines a bitcoin data type that is used to track previous\n// transaction outputs.\ntype OutPoint struct {\n\tHash  chainhash.Hash\n\tIndex uint32\n}\n\n// NewOutPoint returns a new bitcoin transaction outpoint point with the\n// provided hash and index.\nfunc NewOutPoint(hash *chainhash.Hash, index uint32) *OutPoint {\n\treturn &OutPoint{\n\t\tHash:  *hash,\n\t\tIndex: index,\n\t}\n}\n\n// String returns the OutPoint in the human-readable form \"hash:index\".\nfunc (o OutPoint) String() string {\n\t// Allocate enough for hash string, colon, and 10 digits.  Although\n\t// at the time of writing, the number of digits can be no greater than\n\t// the length of the decimal representation of maxTxOutPerMessage, the\n\t// maximum message payload may increase in the future and this\n\t// optimization may go unnoticed, so allocate space for 10 decimal\n\t// digits, which will fit any uint32.\n\tbuf := make([]byte, 2*chainhash.HashSize+1, 2*chainhash.HashSize+1+10)\n\tcopy(buf, o.Hash.String())\n\tbuf[2*chainhash.HashSize] = ':'\n\tbuf = strconv.AppendUint(buf, uint64(o.Index), 10)\n\treturn string(buf)\n}\n\n// TxIn defines a bitcoin transaction input.\ntype TxIn struct {\n\tPreviousOutPoint OutPoint\n\tSignatureScript  []byte\n\tWitness          TxWitness\n\tSequence         uint32\n}\n\n// SerializeSize returns the number of bytes it would take to serialize the\n// the transaction input.\nfunc (t *TxIn) SerializeSize() int {\n\t// Outpoint Hash 32 bytes + Outpoint Index 4 bytes + Sequence 4 bytes +\n\t// serialized varint size for the length of SignatureScript +\n\t// SignatureScript bytes.\n\treturn 40 + VarIntSerializeSize(uint64(len(t.SignatureScript))) +\n\t\tlen(t.SignatureScript)\n}\n\n// NewTxIn returns a new bitcoin transaction input with the provided\n// previous outpoint point and signature script with a default sequence of\n// MaxTxInSequenceNum.\nfunc NewTxIn(prevOut *OutPoint, signatureScript []byte, witness [][]byte) *TxIn {\n\treturn &TxIn{\n\t\tPreviousOutPoint: *prevOut,\n\t\tSignatureScript:  signatureScript,\n\t\tWitness:          witness,\n\t\tSequence:         MaxTxInSequenceNum,\n\t}\n}\n\n// TxWitness defines the witness for a TxIn. A witness is to be interpreted as\n// a slice of byte slices, or a stack with one or many elements.\ntype TxWitness [][]byte\n\n// SerializeSize returns the number of bytes it would take to serialize the the\n// transaction input's witness.\nfunc (t TxWitness) SerializeSize() int {\n\t// A varint to signal the number of elements the witness has.\n\tn := VarIntSerializeSize(uint64(len(t)))\n\n\t// For each element in the witness, we'll need a varint to signal the\n\t// size of the element, then finally the number of bytes the element\n\t// itself comprises.\n\tfor _, witItem := range t {\n\t\tn += VarIntSerializeSize(uint64(len(witItem)))\n\t\tn += len(witItem)\n\t}\n\n\treturn n\n}\n\n// TxOut defines a bitcoin transaction output.\ntype TxOut struct {\n\tValue    int64\n\tPkScript []byte\n}\n\n// SerializeSize returns the number of bytes it would take to serialize the\n// the transaction output.\nfunc (t *TxOut) SerializeSize() int {\n\t// Value 8 bytes + serialized varint size for the length of PkScript +\n\t// PkScript bytes.\n\treturn 8 + VarIntSerializeSize(uint64(len(t.PkScript))) + len(t.PkScript)\n}\n\n// NewTxOut returns a new bitcoin transaction output with the provided\n// transaction value and public key script.\nfunc NewTxOut(value int64, pkScript []byte) *TxOut {\n\treturn &TxOut{\n\t\tValue:    value,\n\t\tPkScript: pkScript,\n\t}\n}\n\n// MsgTx implements the Message interface and represents a bitcoin tx message.\n// It is used to deliver transaction information in response to a getdata\n// message (MsgGetData) for a given transaction.\n//\n// Use the AddTxIn and AddTxOut functions to build up the list of transaction\n// inputs and outputs.\ntype MsgTx struct {\n\tVersion  int32\n\tTxIn     []*TxIn\n\tTxOut    []*TxOut\n\tLockTime uint32\n}\n\n// AddTxIn adds a transaction input to the message.\nfunc (msg *MsgTx) AddTxIn(ti *TxIn) {\n\tmsg.TxIn = append(msg.TxIn, ti)\n}\n\n// AddTxOut adds a transaction output to the message.\nfunc (msg *MsgTx) AddTxOut(to *TxOut) {\n\tmsg.TxOut = append(msg.TxOut, to)\n}\n\n// TxHash generates the Hash for the transaction.\nfunc (msg *MsgTx) TxHash() chainhash.Hash {\n\t// Encode the transaction and calculate double sha256 on the result.\n\t// Ignore the error returns since the only way the encode could fail\n\t// is being out of memory or due to nil pointers, both of which would\n\t// cause a run-time panic.\n\tbuf := bytes.NewBuffer(make([]byte, 0, msg.SerializeSizeStripped()))\n\t_ = msg.SerializeNoWitness(buf)\n\treturn chainhash.DoubleHashH(buf.Bytes())\n}\n\n// WitnessHash generates the hash of the transaction serialized according to\n// the new witness serialization defined in BIP0141 and BIP0144. The final\n// output is used within the Segregated Witness commitment of all the witnesses\n// within a block. If a transaction has no witness data, then the witness hash,\n// is the same as its txid.\nfunc (msg *MsgTx) WitnessHash() chainhash.Hash {\n\tif msg.HasWitness() {\n\t\tbuf := bytes.NewBuffer(make([]byte, 0, msg.SerializeSize()))\n\t\t_ = msg.Serialize(buf)\n\t\treturn chainhash.DoubleHashH(buf.Bytes())\n\t}\n\n\treturn msg.TxHash()\n}\n\n// Copy creates a deep copy of a transaction so that the original does not get\n// modified when the copy is manipulated.\nfunc (msg *MsgTx) Copy() *MsgTx {\n\t// Create new tx and start by copying primitive values and making space\n\t// for the transaction inputs and outputs.\n\tnewTx := MsgTx{\n\t\tVersion:  msg.Version,\n\t\tTxIn:     make([]*TxIn, 0, len(msg.TxIn)),\n\t\tTxOut:    make([]*TxOut, 0, len(msg.TxOut)),\n\t\tLockTime: msg.LockTime,\n\t}\n\n\t// Deep copy the old TxIn data.\n\tfor _, oldTxIn := range msg.TxIn {\n\t\t// Deep copy the old previous outpoint.\n\t\toldOutPoint := oldTxIn.PreviousOutPoint\n\t\tnewOutPoint := OutPoint{}\n\t\tnewOutPoint.Hash.SetBytes(oldOutPoint.Hash[:])\n\t\tnewOutPoint.Index = oldOutPoint.Index\n\n\t\t// Deep copy the old signature script.\n\t\tvar newScript []byte\n\t\toldScript := oldTxIn.SignatureScript\n\t\toldScriptLen := len(oldScript)\n\t\tif oldScriptLen > 0 {\n\t\t\tnewScript = make([]byte, oldScriptLen)\n\t\t\tcopy(newScript, oldScript[:oldScriptLen])\n\t\t}\n\n\t\t// Create new txIn with the deep copied data.\n\t\tnewTxIn := TxIn{\n\t\t\tPreviousOutPoint: newOutPoint,\n\t\t\tSignatureScript:  newScript,\n\t\t\tSequence:         oldTxIn.Sequence,\n\t\t}\n\n\t\t// If the transaction is witnessy, then also copy the\n\t\t// witnesses.\n\t\tif len(oldTxIn.Witness) != 0 {\n\t\t\t// Deep copy the old witness data.\n\t\t\tnewTxIn.Witness = make([][]byte, len(oldTxIn.Witness))\n\t\t\tfor i, oldItem := range oldTxIn.Witness {\n\t\t\t\tnewItem := make([]byte, len(oldItem))\n\t\t\t\tcopy(newItem, oldItem)\n\t\t\t\tnewTxIn.Witness[i] = newItem\n\t\t\t}\n\t\t}\n\n\t\t// Finally, append this fully copied txin.\n\t\tnewTx.TxIn = append(newTx.TxIn, &newTxIn)\n\t}\n\n\t// Deep copy the old TxOut data.\n\tfor _, oldTxOut := range msg.TxOut {\n\t\t// Deep copy the old PkScript\n\t\tvar newScript []byte\n\t\toldScript := oldTxOut.PkScript\n\t\toldScriptLen := len(oldScript)\n\t\tif oldScriptLen > 0 {\n\t\t\tnewScript = make([]byte, oldScriptLen)\n\t\t\tcopy(newScript, oldScript[:oldScriptLen])\n\t\t}\n\n\t\t// Create new txOut with the deep copied data and append it to\n\t\t// new Tx.\n\t\tnewTxOut := TxOut{\n\t\t\tValue:    oldTxOut.Value,\n\t\t\tPkScript: newScript,\n\t\t}\n\t\tnewTx.TxOut = append(newTx.TxOut, &newTxOut)\n\t}\n\n\treturn &newTx\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\n// See Deserialize for decoding transactions stored to disk, such as in a\n// database, as opposed to decoding transactions from the wire.\nfunc (msg *MsgTx) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error {\n\tversion, err := binarySerializer.Uint32(r, littleEndian)\n\tif err != nil {\n\t\treturn err\n\t}\n\tmsg.Version = int32(version)\n\n\tcount, err := ReadVarInt(r, pver)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// A count of zero (meaning no TxIn's to the uninitiated) indicates\n\t// this is a transaction with witness data.\n\tvar flag [1]byte\n\tif count == 0 && enc == WitnessEncoding {\n\t\t// Next, we need to read the flag, which is a single byte.\n\t\tif _, err = io.ReadFull(r, flag[:]); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// At the moment, the flag MUST be 0x01. In the future other\n\t\t// flag types may be supported.\n\t\tif flag[0] != 0x01 {\n\t\t\tstr := fmt.Sprintf(\"witness tx but flag byte is %x\", flag)\n\t\t\treturn messageError(\"MsgTx.BtcDecode\", str)\n\t\t}\n\n\t\t// With the Segregated Witness specific fields decoded, we can\n\t\t// now read in the actual txin count.\n\t\tcount, err = ReadVarInt(r, pver)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Prevent more input transactions than could possibly fit into a\n\t// message.  It would be possible to cause memory exhaustion and panics\n\t// without a sane upper bound on this count.\n\tif count > uint64(maxTxInPerMessage) {\n\t\tstr := fmt.Sprintf(\"too many input transactions to fit into \"+\n\t\t\t\"max message size [count %d, max %d]\", count,\n\t\t\tmaxTxInPerMessage)\n\t\treturn messageError(\"MsgTx.BtcDecode\", str)\n\t}\n\n\t// returnScriptBuffers is a closure that returns any script buffers that\n\t// were borrowed from the pool when there are any deserialization\n\t// errors.  This is only valid to call before the final step which\n\t// replaces the scripts with the location in a contiguous buffer and\n\t// returns them.\n\treturnScriptBuffers := func() {\n\t\tfor _, txIn := range msg.TxIn {\n\t\t\tif txIn == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif txIn.SignatureScript != nil {\n\t\t\t\tscriptPool.Return(txIn.SignatureScript)\n\t\t\t}\n\n\t\t\tfor _, witnessElem := range txIn.Witness {\n\t\t\t\tif witnessElem != nil {\n\t\t\t\t\tscriptPool.Return(witnessElem)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor _, txOut := range msg.TxOut {\n\t\t\tif txOut == nil || txOut.PkScript == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tscriptPool.Return(txOut.PkScript)\n\t\t}\n\t}\n\n\t// Deserialize the inputs.\n\tvar totalScriptSize uint64\n\ttxIns := make([]TxIn, count)\n\tmsg.TxIn = make([]*TxIn, count)\n\tfor i := uint64(0); i < count; i++ {\n\t\t// The pointer is set now in case a script buffer is borrowed\n\t\t// and needs to be returned to the pool on error.\n\t\tti := &txIns[i]\n\t\tmsg.TxIn[i] = ti\n\t\terr = readTxIn(r, pver, msg.Version, ti)\n\t\tif err != nil {\n\t\t\treturnScriptBuffers()\n\t\t\treturn err\n\t\t}\n\t\ttotalScriptSize += uint64(len(ti.SignatureScript))\n\t}\n\n\tcount, err = ReadVarInt(r, pver)\n\tif err != nil {\n\t\treturnScriptBuffers()\n\t\treturn err\n\t}\n\n\t// Prevent more output transactions than could possibly fit into a\n\t// message.  It would be possible to cause memory exhaustion and panics\n\t// without a sane upper bound on this count.\n\tif count > uint64(maxTxOutPerMessage) {\n\t\treturnScriptBuffers()\n\t\tstr := fmt.Sprintf(\"too many output transactions to fit into \"+\n\t\t\t\"max message size [count %d, max %d]\", count,\n\t\t\tmaxTxOutPerMessage)\n\t\treturn messageError(\"MsgTx.BtcDecode\", str)\n\t}\n\n\t// Deserialize the outputs.\n\ttxOuts := make([]TxOut, count)\n\tmsg.TxOut = make([]*TxOut, count)\n\tfor i := uint64(0); i < count; i++ {\n\t\t// The pointer is set now in case a script buffer is borrowed\n\t\t// and needs to be returned to the pool on error.\n\t\tto := &txOuts[i]\n\t\tmsg.TxOut[i] = to\n\t\terr = readTxOut(r, pver, msg.Version, to)\n\t\tif err != nil {\n\t\t\treturnScriptBuffers()\n\t\t\treturn err\n\t\t}\n\t\ttotalScriptSize += uint64(len(to.PkScript))\n\t}\n\n\t// If the transaction's flag byte isn't 0x00 at this point, then one or\n\t// more of its inputs has accompanying witness data.\n\tif flag[0] != 0 && enc == WitnessEncoding {\n\t\tfor _, txin := range msg.TxIn {\n\t\t\t// For each input, the witness is encoded as a stack\n\t\t\t// with one or more items. Therefore, we first read a\n\t\t\t// varint which encodes the number of stack items.\n\t\t\twitCount, err := ReadVarInt(r, pver)\n\t\t\tif err != nil {\n\t\t\t\treturnScriptBuffers()\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\t// Prevent a possible memory exhaustion attack by\n\t\t\t// limiting the witCount value to a sane upper bound.\n\t\t\tif witCount > maxWitnessItemsPerInput {\n\t\t\t\treturnScriptBuffers()\n\t\t\t\tstr := fmt.Sprintf(\"too many witness items to fit \"+\n\t\t\t\t\t\"into max message size [count %d, max %d]\",\n\t\t\t\t\twitCount, maxWitnessItemsPerInput)\n\t\t\t\treturn messageError(\"MsgTx.BtcDecode\", str)\n\t\t\t}\n\n\t\t\t// Then for witCount number of stack items, each item\n\t\t\t// has a varint length prefix, followed by the witness\n\t\t\t// item itself.\n\t\t\ttxin.Witness = make([][]byte, witCount)\n\t\t\tfor j := uint64(0); j < witCount; j++ {\n\t\t\t\ttxin.Witness[j], err = readScript(r, pver,\n\t\t\t\t\tmaxWitnessItemSize, \"script witness item\")\n\t\t\t\tif err != nil {\n\t\t\t\t\treturnScriptBuffers()\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\ttotalScriptSize += uint64(len(txin.Witness[j]))\n\t\t\t}\n\t\t}\n\t}\n\n\tmsg.LockTime, err = binarySerializer.Uint32(r, littleEndian)\n\tif err != nil {\n\t\treturnScriptBuffers()\n\t\treturn err\n\t}\n\n\t// Create a single allocation to house all of the scripts and set each\n\t// input signature script and output public key script to the\n\t// appropriate subslice of the overall contiguous buffer.  Then, return\n\t// each individual script buffer back to the pool so they can be reused\n\t// for future deserializations.  This is done because it significantly\n\t// reduces the number of allocations the garbage collector needs to\n\t// track, which in turn improves performance and drastically reduces the\n\t// amount of runtime overhead that would otherwise be needed to keep\n\t// track of millions of small allocations.\n\t//\n\t// NOTE: It is no longer valid to call the returnScriptBuffers closure\n\t// after these blocks of code run because it is already done and the\n\t// scripts in the transaction inputs and outputs no longer point to the\n\t// buffers.\n\tvar offset uint64\n\tscripts := make([]byte, totalScriptSize)\n\tfor i := 0; i < len(msg.TxIn); i++ {\n\t\t// Copy the signature script into the contiguous buffer at the\n\t\t// appropriate offset.\n\t\tsignatureScript := msg.TxIn[i].SignatureScript\n\t\tcopy(scripts[offset:], signatureScript)\n\n\t\t// Reset the signature script of the transaction input to the\n\t\t// slice of the contiguous buffer where the script lives.\n\t\tscriptSize := uint64(len(signatureScript))\n\t\tend := offset + scriptSize\n\t\tmsg.TxIn[i].SignatureScript = scripts[offset:end:end]\n\t\toffset += scriptSize\n\n\t\t// Return the temporary script buffer to the pool.\n\t\tscriptPool.Return(signatureScript)\n\n\t\tfor j := 0; j < len(msg.TxIn[i].Witness); j++ {\n\t\t\t// Copy each item within the witness stack for this\n\t\t\t// input into the contiguous buffer at the appropriate\n\t\t\t// offset.\n\t\t\twitnessElem := msg.TxIn[i].Witness[j]\n\t\t\tcopy(scripts[offset:], witnessElem)\n\n\t\t\t// Reset the witness item within the stack to the slice\n\t\t\t// of the contiguous buffer where the witness lives.\n\t\t\twitnessElemSize := uint64(len(witnessElem))\n\t\t\tend := offset + witnessElemSize\n\t\t\tmsg.TxIn[i].Witness[j] = scripts[offset:end:end]\n\t\t\toffset += witnessElemSize\n\n\t\t\t// Return the temporary buffer used for the witness stack\n\t\t\t// item to the pool.\n\t\t\tscriptPool.Return(witnessElem)\n\t\t}\n\t}\n\tfor i := 0; i < len(msg.TxOut); i++ {\n\t\t// Copy the public key script into the contiguous buffer at the\n\t\t// appropriate offset.\n\t\tpkScript := msg.TxOut[i].PkScript\n\t\tcopy(scripts[offset:], pkScript)\n\n\t\t// Reset the public key script of the transaction output to the\n\t\t// slice of the contiguous buffer where the script lives.\n\t\tscriptSize := uint64(len(pkScript))\n\t\tend := offset + scriptSize\n\t\tmsg.TxOut[i].PkScript = scripts[offset:end:end]\n\t\toffset += scriptSize\n\n\t\t// Return the temporary script buffer to the pool.\n\t\tscriptPool.Return(pkScript)\n\t}\n\n\treturn nil\n}\n\n// Deserialize decodes a transaction from r into the receiver using a format\n// that is suitable for long-term storage such as a database while respecting\n// the Version field in the transaction.  This function differs from BtcDecode\n// in that BtcDecode decodes from the bitcoin wire protocol as it was sent\n// across the network.  The wire encoding can technically differ depending on\n// the protocol version and doesn't even really need to match the format of a\n// stored transaction at all.  As of the time this comment was written, the\n// encoded transaction is the same in both instances, but there is a distinct\n// difference and separating the two allows the API to be flexible enough to\n// deal with changes.\nfunc (msg *MsgTx) Deserialize(r io.Reader) error {\n\t// At the current time, there is no difference between the wire encoding\n\t// at protocol version 0 and the stable long-term storage format.  As\n\t// a result, make use of BtcDecode.\n\treturn msg.BtcDecode(r, 0, WitnessEncoding)\n}\n\n// DeserializeNoWitness decodes a transaction from r into the receiver, where\n// the transaction encoding format within r MUST NOT utilize the new\n// serialization format created to encode transaction bearing witness data\n// within inputs.\nfunc (msg *MsgTx) DeserializeNoWitness(r io.Reader) error {\n\treturn msg.BtcDecode(r, 0, BaseEncoding)\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\n// See Serialize for encoding transactions to be stored to disk, such as in a\n// database, as opposed to encoding transactions for the wire.\nfunc (msg *MsgTx) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error {\n\terr := binarySerializer.PutUint32(w, littleEndian, uint32(msg.Version))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// If the encoding version is set to WitnessEncoding, and the Flags\n\t// field for the MsgTx aren't 0x00, then this indicates the transaction\n\t// is to be encoded using the new witness inclusionary structure\n\t// defined in BIP0144.\n\tdoWitness := enc == WitnessEncoding && msg.HasWitness()\n\tif doWitness {\n\t\t// After the txn's Version field, we include two additional\n\t\t// bytes specific to the witness encoding. The first byte is an\n\t\t// always 0x00 marker byte, which allows decoders to\n\t\t// distinguish a serialized transaction with witnesses from a\n\t\t// regular (legacy) one. The second byte is the Flag field,\n\t\t// which at the moment is always 0x01, but may be extended in\n\t\t// the future to accommodate auxiliary non-committed fields.\n\t\tif _, err := w.Write(witessMarkerBytes); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tcount := uint64(len(msg.TxIn))\n\terr = WriteVarInt(w, pver, count)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, ti := range msg.TxIn {\n\t\terr = writeTxIn(w, pver, msg.Version, ti)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tcount = uint64(len(msg.TxOut))\n\terr = WriteVarInt(w, pver, count)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, to := range msg.TxOut {\n\t\terr = WriteTxOut(w, pver, msg.Version, to)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// If this transaction is a witness transaction, and the witness\n\t// encoded is desired, then encode the witness for each of the inputs\n\t// within the transaction.\n\tif doWitness {\n\t\tfor _, ti := range msg.TxIn {\n\t\t\terr = writeTxWitness(w, pver, msg.Version, ti.Witness)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\n\treturn binarySerializer.PutUint32(w, littleEndian, msg.LockTime)\n}\n\n// HasWitness returns false if none of the inputs within the transaction\n// contain witness data, true false otherwise.\nfunc (msg *MsgTx) HasWitness() bool {\n\tfor _, txIn := range msg.TxIn {\n\t\tif len(txIn.Witness) != 0 {\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}\n\n// Serialize encodes the transaction to w using a format that suitable for\n// long-term storage such as a database while respecting the Version field in\n// the transaction.  This function differs from BtcEncode in that BtcEncode\n// encodes the transaction to the bitcoin wire protocol in order to be sent\n// across the network.  The wire encoding can technically differ depending on\n// the protocol version and doesn't even really need to match the format of a\n// stored transaction at all.  As of the time this comment was written, the\n// encoded transaction is the same in both instances, but there is a distinct\n// difference and separating the two allows the API to be flexible enough to\n// deal with changes.\nfunc (msg *MsgTx) Serialize(w io.Writer) error {\n\t// At the current time, there is no difference between the wire encoding\n\t// at protocol version 0 and the stable long-term storage format.  As\n\t// a result, make use of BtcEncode.\n\t//\n\t// Passing a encoding type of WitnessEncoding to BtcEncode for MsgTx\n\t// indicates that the transaction's witnesses (if any) should be\n\t// serialized according to the new serialization structure defined in\n\t// BIP0144.\n\treturn msg.BtcEncode(w, 0, WitnessEncoding)\n}\n\n// SerializeNoWitness encodes the transaction to w in an identical manner to\n// Serialize, however even if the source transaction has inputs with witness\n// data, the old serialization format will still be used.\nfunc (msg *MsgTx) SerializeNoWitness(w io.Writer) error {\n\treturn msg.BtcEncode(w, 0, BaseEncoding)\n}\n\n// baseSize returns the serialized size of the transaction without accounting\n// for any witness data.\nfunc (msg *MsgTx) baseSize() int {\n\t// Version 4 bytes + LockTime 4 bytes + Serialized varint size for the\n\t// number of transaction inputs and outputs.\n\tn := 8 + VarIntSerializeSize(uint64(len(msg.TxIn))) +\n\t\tVarIntSerializeSize(uint64(len(msg.TxOut)))\n\n\tfor _, txIn := range msg.TxIn {\n\t\tn += txIn.SerializeSize()\n\t}\n\n\tfor _, txOut := range msg.TxOut {\n\t\tn += txOut.SerializeSize()\n\t}\n\n\treturn n\n}\n\n// SerializeSize returns the number of bytes it would take to serialize the\n// the transaction.\nfunc (msg *MsgTx) SerializeSize() int {\n\tn := msg.baseSize()\n\n\tif msg.HasWitness() {\n\t\t// The marker, and flag fields take up two additional bytes.\n\t\tn += 2\n\n\t\t// Additionally, factor in the serialized size of each of the\n\t\t// witnesses for each txin.\n\t\tfor _, txin := range msg.TxIn {\n\t\t\tn += txin.Witness.SerializeSize()\n\t\t}\n\t}\n\n\treturn n\n}\n\n// SerializeSizeStripped returns the number of bytes it would take to serialize\n// the transaction, excluding any included witness data.\nfunc (msg *MsgTx) SerializeSizeStripped() int {\n\treturn msg.baseSize()\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgTx) Command() string {\n\treturn CmdTx\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgTx) MaxPayloadLength(pver uint32) uint32 {\n\treturn MaxBlockPayload\n}\n\n// PkScriptLocs returns a slice containing the start of each public key script\n// within the raw serialized transaction.  The caller can easily obtain the\n// length of each script by using len on the script available via the\n// appropriate transaction output entry.\nfunc (msg *MsgTx) PkScriptLocs() []int {\n\tnumTxOut := len(msg.TxOut)\n\tif numTxOut == 0 {\n\t\treturn nil\n\t}\n\n\t// The starting offset in the serialized transaction of the first\n\t// transaction output is:\n\t//\n\t// Version 4 bytes + serialized varint size for the number of\n\t// transaction inputs and outputs + serialized size of each transaction\n\t// input.\n\tn := 4 + VarIntSerializeSize(uint64(len(msg.TxIn))) +\n\t\tVarIntSerializeSize(uint64(numTxOut))\n\n\t// If this transaction has a witness input, the an additional two bytes\n\t// for the marker, and flag byte need to be taken into account.\n\tif len(msg.TxIn) > 0 && msg.TxIn[0].Witness != nil {\n\t\tn += 2\n\t}\n\n\tfor _, txIn := range msg.TxIn {\n\t\tn += txIn.SerializeSize()\n\t}\n\n\t// Calculate and set the appropriate offset for each public key script.\n\tpkScriptLocs := make([]int, numTxOut)\n\tfor i, txOut := range msg.TxOut {\n\t\t// The offset of the script in the transaction output is:\n\t\t//\n\t\t// Value 8 bytes + serialized varint size for the length of\n\t\t// PkScript.\n\t\tn += 8 + VarIntSerializeSize(uint64(len(txOut.PkScript)))\n\t\tpkScriptLocs[i] = n\n\t\tn += len(txOut.PkScript)\n\t}\n\n\treturn pkScriptLocs\n}\n\n// NewMsgTx returns a new bitcoin tx message that conforms to the Message\n// interface.  The return instance has a default version of TxVersion and there\n// are no transaction inputs or outputs.  Also, the lock time is set to zero\n// to indicate the transaction is valid immediately as opposed to some time in\n// future.\nfunc NewMsgTx(version int32) *MsgTx {\n\treturn &MsgTx{\n\t\tVersion: version,\n\t\tTxIn:    make([]*TxIn, 0, defaultTxInOutAlloc),\n\t\tTxOut:   make([]*TxOut, 0, defaultTxInOutAlloc),\n\t}\n}\n\n// readOutPoint reads the next sequence of bytes from r as an OutPoint.\nfunc readOutPoint(r io.Reader, pver uint32, version int32, op *OutPoint) error {\n\t_, err := io.ReadFull(r, op.Hash[:])\n\tif err != nil {\n\t\treturn err\n\t}\n\n\top.Index, err = binarySerializer.Uint32(r, littleEndian)\n\treturn err\n}\n\n// writeOutPoint encodes op to the bitcoin protocol encoding for an OutPoint\n// to w.\nfunc writeOutPoint(w io.Writer, pver uint32, version int32, op *OutPoint) error {\n\t_, err := w.Write(op.Hash[:])\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn binarySerializer.PutUint32(w, littleEndian, op.Index)\n}\n\n// readScript reads a variable length byte array that represents a transaction\n// script.  It is encoded as a varInt containing the length of the array\n// followed by the bytes themselves.  An error is returned if the length is\n// greater than the passed maxAllowed parameter which helps protect against\n// memory exhaustion attacks and forced panics through malformed messages.  The\n// fieldName parameter is only used for the error message so it provides more\n// context in the error.\nfunc readScript(r io.Reader, pver uint32, maxAllowed uint32, fieldName string) ([]byte, error) {\n\tcount, err := ReadVarInt(r, pver)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Prevent byte array larger than the max message size.  It would\n\t// be possible to cause memory exhaustion and panics without a sane\n\t// upper bound on this count.\n\tif count > uint64(maxAllowed) {\n\t\tstr := fmt.Sprintf(\"%s is larger than the max allowed size \"+\n\t\t\t\"[count %d, max %d]\", fieldName, count, maxAllowed)\n\t\treturn nil, messageError(\"readScript\", str)\n\t}\n\n\tb := scriptPool.Borrow(count)\n\t_, err = io.ReadFull(r, b)\n\tif err != nil {\n\t\tscriptPool.Return(b)\n\t\treturn nil, err\n\t}\n\treturn b, nil\n}\n\n// readTxIn reads the next sequence of bytes from r as a transaction input\n// (TxIn).\nfunc readTxIn(r io.Reader, pver uint32, version int32, ti *TxIn) error {\n\terr := readOutPoint(r, pver, version, &ti.PreviousOutPoint)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tti.SignatureScript, err = readScript(r, pver, MaxMessagePayload,\n\t\t\"transaction input signature script\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn readElement(r, &ti.Sequence)\n}\n\n// writeTxIn encodes ti to the bitcoin protocol encoding for a transaction\n// input (TxIn) to w.\nfunc writeTxIn(w io.Writer, pver uint32, version int32, ti *TxIn) error {\n\terr := writeOutPoint(w, pver, version, &ti.PreviousOutPoint)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = WriteVarBytes(w, pver, ti.SignatureScript)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn binarySerializer.PutUint32(w, littleEndian, ti.Sequence)\n}\n\n// readTxOut reads the next sequence of bytes from r as a transaction output\n// (TxOut).\nfunc readTxOut(r io.Reader, pver uint32, version int32, to *TxOut) error {\n\terr := readElement(r, &to.Value)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tto.PkScript, err = readScript(r, pver, MaxMessagePayload,\n\t\t\"transaction output public key script\")\n\treturn err\n}\n\n// WriteTxOut encodes to into the bitcoin protocol encoding for a transaction\n// output (TxOut) to w.\n//\n// NOTE: This function is exported in order to allow txscript to compute the\n// new sighashes for witness transactions (BIP0143).\nfunc WriteTxOut(w io.Writer, pver uint32, version int32, to *TxOut) error {\n\terr := binarySerializer.PutUint64(w, littleEndian, uint64(to.Value))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn WriteVarBytes(w, pver, to.PkScript)\n}\n\n// writeTxWitness encodes the bitcoin protocol encoding for a transaction\n// input's witness into to w.\nfunc writeTxWitness(w io.Writer, pver uint32, version int32, wit [][]byte) error {\n\terr := WriteVarInt(w, pver, uint64(len(wit)))\n\tif err != nil {\n\t\treturn err\n\t}\n\tfor _, item := range wit {\n\t\terr = WriteVarBytes(w, pver, item)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/msgverack.go",
    "content": "// Copyright (c) 2013-2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"io\"\n)\n\n// MsgVerAck defines a bitcoin verack message which is used for a peer to\n// acknowledge a version message (MsgVersion) after it has used the information\n// to negotiate parameters.  It implements the Message interface.\n//\n// This message has no payload.\ntype MsgVerAck struct{}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// This is part of the Message interface implementation.\nfunc (msg *MsgVerAck) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error {\n\treturn nil\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgVerAck) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error {\n\treturn nil\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgVerAck) Command() string {\n\treturn CmdVerAck\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgVerAck) MaxPayloadLength(pver uint32) uint32 {\n\treturn 0\n}\n\n// NewMsgVerAck returns a new bitcoin verack message that conforms to the\n// Message interface.\nfunc NewMsgVerAck() *MsgVerAck {\n\treturn &MsgVerAck{}\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/msgversion.go",
    "content": "// Copyright (c) 2013-2016 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"strings\"\n\t\"time\"\n)\n\n// MaxUserAgentLen is the maximum allowed length for the user agent field in a\n// version message (MsgVersion).\nconst MaxUserAgentLen = 256\n\n// DefaultUserAgent for wire in the stack\nconst DefaultUserAgent = \"/btcwire:0.5.0/\"\n\n// MsgVersion implements the Message interface and represents a bitcoin version\n// message.  It is used for a peer to advertise itself as soon as an outbound\n// connection is made.  The remote peer then uses this information along with\n// its own to negotiate.  The remote peer must then respond with a version\n// message of its own containing the negotiated values followed by a verack\n// message (MsgVerAck).  This exchange must take place before any further\n// communication is allowed to proceed.\ntype MsgVersion struct {\n\t// Version of the protocol the node is using.\n\tProtocolVersion int32\n\n\t// Bitfield which identifies the enabled services.\n\tServices ServiceFlag\n\n\t// Time the message was generated.  This is encoded as an int64 on the wire.\n\tTimestamp time.Time\n\n\t// Address of the remote peer.\n\tAddrYou NetAddress\n\n\t// Address of the local peer.\n\tAddrMe NetAddress\n\n\t// Unique value associated with message that is used to detect self\n\t// connections.\n\tNonce uint64\n\n\t// The user agent that generated messsage.  This is a encoded as a varString\n\t// on the wire.  This has a max length of MaxUserAgentLen.\n\tUserAgent string\n\n\t// Last block seen by the generator of the version message.\n\tLastBlock int32\n\n\t// Don't announce transactions to peer.\n\tDisableRelayTx bool\n}\n\n// HasService returns whether the specified service is supported by the peer\n// that generated the message.\nfunc (msg *MsgVersion) HasService(service ServiceFlag) bool {\n\treturn msg.Services&service == service\n}\n\n// AddService adds service as a supported service by the peer generating the\n// message.\nfunc (msg *MsgVersion) AddService(service ServiceFlag) {\n\tmsg.Services |= service\n}\n\n// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.\n// The version message is special in that the protocol version hasn't been\n// negotiated yet.  As a result, the pver field is ignored and any fields which\n// are added in new versions are optional.  This also mean that r must be a\n// *bytes.Buffer so the number of remaining bytes can be ascertained.\n//\n// This is part of the Message interface implementation.\nfunc (msg *MsgVersion) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error {\n\tbuf, ok := r.(*bytes.Buffer)\n\tif !ok {\n\t\treturn fmt.Errorf(\"MsgVersion.BtcDecode reader is not a \" +\n\t\t\t\"*bytes.Buffer\")\n\t}\n\n\terr := readElements(buf, &msg.ProtocolVersion, &msg.Services,\n\t\t(*int64Time)(&msg.Timestamp))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = readNetAddress(buf, pver, &msg.AddrYou, false)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Protocol versions >= 106 added a from address, nonce, and user agent\n\t// field and they are only considered present if there are bytes\n\t// remaining in the message.\n\tif buf.Len() > 0 {\n\t\terr = readNetAddress(buf, pver, &msg.AddrMe, false)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif buf.Len() > 0 {\n\t\terr = readElement(buf, &msg.Nonce)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif buf.Len() > 0 {\n\t\tuserAgent, err := ReadVarString(buf, pver)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\terr = validateUserAgent(userAgent)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmsg.UserAgent = userAgent\n\t}\n\n\t// Protocol versions >= 209 added a last known block field.  It is only\n\t// considered present if there are bytes remaining in the message.\n\tif buf.Len() > 0 {\n\t\terr = readElement(buf, &msg.LastBlock)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// There was no relay transactions field before BIP0037Version, but\n\t// the default behavior prior to the addition of the field was to always\n\t// relay transactions.\n\tif buf.Len() > 0 {\n\t\t// It's safe to ignore the error here since the buffer has at\n\t\t// least one byte and that byte will result in a boolean value\n\t\t// regardless of its value.  Also, the wire encoding for the\n\t\t// field is true when transactions should be relayed, so reverse\n\t\t// it for the DisableRelayTx field.\n\t\tvar relayTx bool\n\t\treadElement(r, &relayTx)\n\t\tmsg.DisableRelayTx = !relayTx\n\t}\n\n\treturn nil\n}\n\n// BtcEncode encodes the receiver to w using the bitcoin protocol encoding.\n// This is part of the Message interface implementation.\nfunc (msg *MsgVersion) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error {\n\terr := validateUserAgent(msg.UserAgent)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = writeElements(w, msg.ProtocolVersion, msg.Services,\n\t\tmsg.Timestamp.Unix())\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = writeNetAddress(w, pver, &msg.AddrYou, false)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = writeNetAddress(w, pver, &msg.AddrMe, false)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = writeElement(w, msg.Nonce)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = WriteVarString(w, pver, msg.UserAgent)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = writeElement(w, msg.LastBlock)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// There was no relay transactions field before BIP0037Version.  Also,\n\t// the wire encoding for the field is true when transactions should be\n\t// relayed, so reverse it from the DisableRelayTx field.\n\tif pver >= BIP0037Version {\n\t\terr = writeElement(w, !msg.DisableRelayTx)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// Command returns the protocol command string for the message.  This is part\n// of the Message interface implementation.\nfunc (msg *MsgVersion) Command() string {\n\treturn CmdVersion\n}\n\n// MaxPayloadLength returns the maximum length the payload can be for the\n// receiver.  This is part of the Message interface implementation.\nfunc (msg *MsgVersion) MaxPayloadLength(pver uint32) uint32 {\n\t// XXX: <= 106 different\n\n\t// Protocol version 4 bytes + services 8 bytes + timestamp 8 bytes +\n\t// remote and local net addresses + nonce 8 bytes + length of user\n\t// agent (varInt) + max allowed useragent length + last block 4 bytes +\n\t// relay transactions flag 1 byte.\n\treturn 33 + (maxNetAddressPayload(pver) * 2) + MaxVarIntPayload +\n\t\tMaxUserAgentLen\n}\n\n// NewMsgVersion returns a new bitcoin version message that conforms to the\n// Message interface using the passed parameters and defaults for the remaining\n// fields.\nfunc NewMsgVersion(me *NetAddress, you *NetAddress, nonce uint64,\n\tlastBlock int32) *MsgVersion {\n\n\t// Limit the timestamp to one second precision since the protocol\n\t// doesn't support better.\n\treturn &MsgVersion{\n\t\tProtocolVersion: int32(ProtocolVersion),\n\t\tServices:        0,\n\t\tTimestamp:       time.Unix(time.Now().Unix(), 0),\n\t\tAddrYou:         *you,\n\t\tAddrMe:          *me,\n\t\tNonce:           nonce,\n\t\tUserAgent:       DefaultUserAgent,\n\t\tLastBlock:       lastBlock,\n\t\tDisableRelayTx:  false,\n\t}\n}\n\n// validateUserAgent checks userAgent length against MaxUserAgentLen\nfunc validateUserAgent(userAgent string) error {\n\tif len(userAgent) > MaxUserAgentLen {\n\t\tstr := fmt.Sprintf(\"user agent too long [len %v, max %v]\",\n\t\t\tlen(userAgent), MaxUserAgentLen)\n\t\treturn messageError(\"MsgVersion\", str)\n\t}\n\treturn nil\n}\n\n// AddUserAgent adds a user agent to the user agent string for the version\n// message.  The version string is not defined to any strict format, although\n// it is recommended to use the form \"major.minor.revision\" e.g. \"2.6.41\".\nfunc (msg *MsgVersion) AddUserAgent(name string, version string,\n\tcomments ...string) error {\n\n\tnewUserAgent := fmt.Sprintf(\"%s:%s\", name, version)\n\tif len(comments) != 0 {\n\t\tnewUserAgent = fmt.Sprintf(\"%s(%s)\", newUserAgent,\n\t\t\tstrings.Join(comments, \"; \"))\n\t}\n\tnewUserAgent = fmt.Sprintf(\"%s%s/\", msg.UserAgent, newUserAgent)\n\terr := validateUserAgent(newUserAgent)\n\tif err != nil {\n\t\treturn err\n\t}\n\tmsg.UserAgent = newUserAgent\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/netaddress.go",
    "content": "// Copyright (c) 2013-2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"encoding/binary\"\n\t\"io\"\n\t\"net\"\n\t\"time\"\n)\n\n// maxNetAddressPayload returns the max payload size for a bitcoin NetAddress\n// based on the protocol version.\nfunc maxNetAddressPayload(pver uint32) uint32 {\n\t// Services 8 bytes + ip 16 bytes + port 2 bytes.\n\tplen := uint32(26)\n\n\t// NetAddressTimeVersion added a timestamp field.\n\tif pver >= NetAddressTimeVersion {\n\t\t// Timestamp 4 bytes.\n\t\tplen += 4\n\t}\n\n\treturn plen\n}\n\n// NetAddress defines information about a peer on the network including the time\n// it was last seen, the services it supports, its IP address, and port.\ntype NetAddress struct {\n\t// Last time the address was seen.  This is, unfortunately, encoded as a\n\t// uint32 on the wire and therefore is limited to 2106.  This field is\n\t// not present in the bitcoin version message (MsgVersion) nor was it\n\t// added until protocol version >= NetAddressTimeVersion.\n\tTimestamp time.Time\n\n\t// Bitfield which identifies the services supported by the address.\n\tServices ServiceFlag\n\n\t// IP address of the peer.\n\tIP net.IP\n\n\t// Port the peer is using.  This is encoded in big endian on the wire\n\t// which differs from most everything else.\n\tPort uint16\n}\n\n// HasService returns whether the specified service is supported by the address.\nfunc (na *NetAddress) HasService(service ServiceFlag) bool {\n\treturn na.Services&service == service\n}\n\n// AddService adds service as a supported service by the peer generating the\n// message.\nfunc (na *NetAddress) AddService(service ServiceFlag) {\n\tna.Services |= service\n}\n\n// NewNetAddressIPPort returns a new NetAddress using the provided IP, port, and\n// supported services with defaults for the remaining fields.\nfunc NewNetAddressIPPort(ip net.IP, port uint16, services ServiceFlag) *NetAddress {\n\treturn NewNetAddressTimestamp(time.Now(), services, ip, port)\n}\n\n// NewNetAddressTimestamp returns a new NetAddress using the provided\n// timestamp, IP, port, and supported services. The timestamp is rounded to\n// single second precision.\nfunc NewNetAddressTimestamp(\n\ttimestamp time.Time, services ServiceFlag, ip net.IP, port uint16) *NetAddress {\n\t// Limit the timestamp to one second precision since the protocol\n\t// doesn't support better.\n\tna := NetAddress{\n\t\tTimestamp: time.Unix(timestamp.Unix(), 0),\n\t\tServices:  services,\n\t\tIP:        ip,\n\t\tPort:      port,\n\t}\n\treturn &na\n}\n\n// NewNetAddress returns a new NetAddress using the provided TCP address and\n// supported services with defaults for the remaining fields.\nfunc NewNetAddress(addr *net.TCPAddr, services ServiceFlag) *NetAddress {\n\treturn NewNetAddressIPPort(addr.IP, uint16(addr.Port), services)\n}\n\n// readNetAddress reads an encoded NetAddress from r depending on the protocol\n// version and whether or not the timestamp is included per ts.  Some messages\n// like version do not include the timestamp.\nfunc readNetAddress(r io.Reader, pver uint32, na *NetAddress, ts bool) error {\n\tvar ip [16]byte\n\n\t// NOTE: The bitcoin protocol uses a uint32 for the timestamp so it will\n\t// stop working somewhere around 2106.  Also timestamp wasn't added until\n\t// protocol version >= NetAddressTimeVersion\n\tif ts && pver >= NetAddressTimeVersion {\n\t\terr := readElement(r, (*uint32Time)(&na.Timestamp))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\terr := readElements(r, &na.Services, &ip)\n\tif err != nil {\n\t\treturn err\n\t}\n\t// Sigh.  Bitcoin protocol mixes little and big endian.\n\tport, err := binarySerializer.Uint16(r, bigEndian)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t*na = NetAddress{\n\t\tTimestamp: na.Timestamp,\n\t\tServices:  na.Services,\n\t\tIP:        net.IP(ip[:]),\n\t\tPort:      port,\n\t}\n\treturn nil\n}\n\n// writeNetAddress serializes a NetAddress to w depending on the protocol\n// version and whether or not the timestamp is included per ts.  Some messages\n// like version do not include the timestamp.\nfunc writeNetAddress(w io.Writer, pver uint32, na *NetAddress, ts bool) error {\n\t// NOTE: The bitcoin protocol uses a uint32 for the timestamp so it will\n\t// stop working somewhere around 2106.  Also timestamp wasn't added until\n\t// until protocol version >= NetAddressTimeVersion.\n\tif ts && pver >= NetAddressTimeVersion {\n\t\terr := writeElement(w, uint32(na.Timestamp.Unix()))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Ensure to always write 16 bytes even if the ip is nil.\n\tvar ip [16]byte\n\tif na.IP != nil {\n\t\tcopy(ip[:], na.IP.To16())\n\t}\n\terr := writeElements(w, na.Services, ip)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Sigh.  Bitcoin protocol mixes little and big endian.\n\treturn binary.Write(w, bigEndian, na.Port)\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcd/wire/protocol.go",
    "content": "// Copyright (c) 2013-2016 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage wire\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// XXX pedro: we will probably need to bump this.\nconst (\n\t// ProtocolVersion is the latest protocol version this package supports.\n\tProtocolVersion uint32 = 70013\n\n\t// MultipleAddressVersion is the protocol version which added multiple\n\t// addresses per message (pver >= MultipleAddressVersion).\n\tMultipleAddressVersion uint32 = 209\n\n\t// NetAddressTimeVersion is the protocol version which added the\n\t// timestamp field (pver >= NetAddressTimeVersion).\n\tNetAddressTimeVersion uint32 = 31402\n\n\t// BIP0031Version is the protocol version AFTER which a pong message\n\t// and nonce field in ping were added (pver > BIP0031Version).\n\tBIP0031Version uint32 = 60000\n\n\t// BIP0035Version is the protocol version which added the mempool\n\t// message (pver >= BIP0035Version).\n\tBIP0035Version uint32 = 60002\n\n\t// BIP0037Version is the protocol version which added new connection\n\t// bloom filtering related messages and extended the version message\n\t// with a relay flag (pver >= BIP0037Version).\n\tBIP0037Version uint32 = 70001\n\n\t// RejectVersion is the protocol version which added a new reject\n\t// message.\n\tRejectVersion uint32 = 70002\n\n\t// BIP0111Version is the protocol version which added the SFNodeBloom\n\t// service flag.\n\tBIP0111Version uint32 = 70011\n\n\t// SendHeadersVersion is the protocol version which added a new\n\t// sendheaders message.\n\tSendHeadersVersion uint32 = 70012\n\n\t// FeeFilterVersion is the protocol version which added a new\n\t// feefilter message.\n\tFeeFilterVersion uint32 = 70013\n)\n\n// ServiceFlag identifies services supported by a bitcoin peer.\ntype ServiceFlag uint64\n\nconst (\n\t// SFNodeNetwork is a flag used to indicate a peer is a full node.\n\tSFNodeNetwork ServiceFlag = 1 << iota\n\n\t// SFNodeGetUTXO is a flag used to indicate a peer supports the\n\t// getutxos and utxos commands (BIP0064).\n\tSFNodeGetUTXO\n\n\t// SFNodeBloom is a flag used to indicate a peer supports bloom\n\t// filtering.\n\tSFNodeBloom\n\n\t// SFNodeWitness is a flag used to indicate a peer supports blocks\n\t// and transactions including witness data (BIP0144).\n\tSFNodeWitness\n\n\t// SFNodeXthin is a flag used to indicate a peer supports xthin blocks.\n\tSFNodeXthin\n\n\t// SFNodeBit5 is a flag used to indicate a peer supports a service\n\t// defined by bit 5.\n\tSFNodeBit5\n\n\t// SFNodeCF is a flag used to indicate a peer supports committed\n\t// filters (CFs).\n\tSFNodeCF\n\n\t// SFNode2X is a flag used to indicate a peer is running the Segwit2X\n\t// software.\n\tSFNode2X\n)\n\n// Map of service flags back to their constant names for pretty printing.\nvar sfStrings = map[ServiceFlag]string{\n\tSFNodeNetwork: \"SFNodeNetwork\",\n\tSFNodeGetUTXO: \"SFNodeGetUTXO\",\n\tSFNodeBloom:   \"SFNodeBloom\",\n\tSFNodeWitness: \"SFNodeWitness\",\n\tSFNodeXthin:   \"SFNodeXthin\",\n\tSFNodeBit5:    \"SFNodeBit5\",\n\tSFNodeCF:      \"SFNodeCF\",\n\tSFNode2X:      \"SFNode2X\",\n}\n\n// orderedSFStrings is an ordered list of service flags from highest to\n// lowest.\nvar orderedSFStrings = []ServiceFlag{\n\tSFNodeNetwork,\n\tSFNodeGetUTXO,\n\tSFNodeBloom,\n\tSFNodeWitness,\n\tSFNodeXthin,\n\tSFNodeBit5,\n\tSFNodeCF,\n\tSFNode2X,\n}\n\n// String returns the ServiceFlag in human-readable form.\nfunc (f ServiceFlag) String() string {\n\t// No flags are set.\n\tif f == 0 {\n\t\treturn \"0x0\"\n\t}\n\n\t// Add individual bit flags.\n\ts := \"\"\n\tfor _, flag := range orderedSFStrings {\n\t\tif f&flag == flag {\n\t\t\ts += sfStrings[flag] + \"|\"\n\t\t\tf -= flag\n\t\t}\n\t}\n\n\t// Add any remaining flags which aren't accounted for as hex.\n\ts = strings.TrimRight(s, \"|\")\n\tif f != 0 {\n\t\ts += \"|0x\" + strconv.FormatUint(uint64(f), 16)\n\t}\n\ts = strings.TrimLeft(s, \"|\")\n\treturn s\n}\n\n// BitcoinNet represents which bitcoin network a message belongs to.\ntype BitcoinNet uint32\n\n// Constants used to indicate the message bitcoin network.  They can also be\n// used to seek to the next message when a stream's state is unknown, but\n// this package does not provide that functionality since it's generally a\n// better idea to simply disconnect clients that are misbehaving over TCP.\nconst (\n\t// MainNet represents the main bitcoin network.\n\tMainNet BitcoinNet = 0xd9b4bef9\n\n\t// TestNet represents the regression test network.\n\tTestNet BitcoinNet = 0xdab5bffa\n\n\t// TestNet3 represents the test network (version 3).\n\tTestNet3 BitcoinNet = 0x0709110b\n\n\t// SimNet represents the simulation test network.\n\tSimNet BitcoinNet = 0x12141c16\n)\n\n// bnStrings is a map of bitcoin networks back to their constant names for\n// pretty printing.\nvar bnStrings = map[BitcoinNet]string{\n\tMainNet:  \"MainNet\",\n\tTestNet:  \"TestNet\",\n\tTestNet3: \"TestNet3\",\n\tSimNet:   \"SimNet\",\n}\n\n// String returns the BitcoinNet in human-readable form.\nfunc (n BitcoinNet) String() string {\n\tif s, ok := bnStrings[n]; ok {\n\t\treturn s\n\t}\n\n\treturn fmt.Sprintf(\"Unknown BitcoinNet (%d)\", uint32(n))\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btclog/.gitignore",
    "content": "# Temp files\n*~\n\n# Log files\n*.log\n\n# Compiled Object files, Static and Dynamic libs (Shared Objects)\n*.o\n*.a\n*.so\n\n# Folders\n_obj\n_test\n\n# Architecture specific extensions/prefixes\n*.[568vq]\n[568vq].out\n\n*.cgo1.go\n*.cgo2.c\n_cgo_defun.c\n_cgo_gotypes.go\n_cgo_export.*\n\n_testmain.go\n\n*.exe\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btclog/.travis.yml",
    "content": "language: go\ngo:\n  - 1.7.x\n  - 1.8.x\nsudo: false\ninstall:\n  - go get -d -t -v ./...\n  - go get -v golang.org/x/tools/cmd/cover\n  - go get -v github.com/bradfitz/goimports\n  - go get -v github.com/golang/lint/golint\nscript:\n  - export PATH=$PATH:$HOME/gopath/bin\n  - ./goclean.sh\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btclog/LICENSE",
    "content": "ISC License\n\nCopyright (c) 2013-2014 Conformal Systems LLC.\n\nPermission to use, copy, modify, and distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\nOR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btclog/README.md",
    "content": "btclog\n======\n\n[![Build Status](http://img.shields.io/travis/btcsuite/btclog.svg)](https://travis-ci.org/btcsuite/btclog)\n[![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org)\n[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](http://godoc.org/github.com/btcsuite/btclog)\n\nPackage btclog defines a logger interface and provides a default implementation\nof a subsystem-aware leveled logger implementing the same interface.\n\n## Installation\n\n```bash\n$ go get github.com/btcsuite/btclog\n```\n\n## GPG Verification Key\n\nAll official release tags are signed by Conformal so users can ensure the code\nhas not been tampered with and is coming from the btcsuite developers.  To\nverify the signature perform the following:\n\n- Download the public key from the Conformal website at\n  https://opensource.conformal.com/GIT-GPG-KEY-conformal.txt\n\n- Import the public key into your GPG keyring:\n  ```bash\n  gpg --import GIT-GPG-KEY-conformal.txt\n  ```\n\n- Verify the release tag with the following command where `TAG_NAME` is a\n  placeholder for the specific tag:\n  ```bash\n  git tag -v TAG_NAME\n  ```\n\n## License\n\nPackage btclog is licensed under the [copyfree](http://copyfree.org) ISC\nLicense.\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btclog/doc.go",
    "content": "// Copyright (c) 2013-2017 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\n/*\nPackage btclog defines an interface and default implementation for subsystem\nlogging.\n\nLog level verbosity may be modified at runtime for each individual subsystem\nlogger.\n\nThe default implementation in this package must be created by the Backend type.\nBackends can write to any io.Writer, including multi-writers created by\nio.MultiWriter.  Multi-writers allow log output to be written to many writers,\nincluding standard output and log files.\n\nOptional logging behavior can be specified by using the LOGFLAGS environment\nvariable and overridden per-Backend by using the WithFlags call option. Multiple\nLOGFLAGS options can be specified, separated by commas.  The following options\nare recognized:\n\n  longfile: Include the full filepath and line number in all log messages\n\n  shortfile: Include the filename and line number in all log messages.\n  Overrides longfile.\n*/\npackage btclog\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btclog/goclean.sh",
    "content": "#!/bin/bash\n# The script does automatic checking on a Go package and its sub-packages, including:\n# 1. gofmt         (http://golang.org/cmd/gofmt/)\n# 2. goimports     (https://github.com/bradfitz/goimports)\n# 3. golint        (https://github.com/golang/lint)\n# 4. go vet        (http://golang.org/cmd/vet)\n# 5. race detector (http://blog.golang.org/race-detector)\n# 6. test coverage (http://blog.golang.org/cover)\n\nset -e\n\n# Automatic checks\ntest -z $(gofmt -l -w . | tee /dev/stderr)\ntest -z $(goimports -l -w . | tee /dev/stderr)\ntest -z $(golint ./... | tee /dev/stderr)\ngo vet ./...\nenv GORACE=\"halt_on_error=1\" go test -v -race ./...\n\n# Run test coverage on each subdirectories and merge the coverage profile.\n\necho \"mode: count\" > profile.cov\n\n# Standard go tooling behavior is to ignore dirs with leading underscores.\nfor dir in $(find . -maxdepth 10 -not -path './.git*' -not -path '*/_*' -type d)\ndo\nif ls $dir/*.go &> /dev/null; then\n  go test -covermode=count -coverprofile=$dir/profile.tmp $dir\n  if [ -f $dir/profile.tmp ]; then\n    cat $dir/profile.tmp | tail -n +2 >> profile.cov\n    rm $dir/profile.tmp\n  fi\nfi\ndone\n\n# To submit the test coverage result to coveralls.io,\n# use goveralls (https://github.com/mattn/goveralls)\n# goveralls -coverprofile=profile.cov -service=travis-ci\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btclog/interface.go",
    "content": "// Copyright (c) 2013-2017 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btclog\n\n// Logger is an interface which describes a level-based logger.  A default\n// implementation of Logger is implemented by this package and can be created\n// by calling (*Backend).Logger.\ntype Logger interface {\n\t// Tracef formats message according to format specifier and writes to\n\t// to log with LevelTrace.\n\tTracef(format string, params ...interface{})\n\n\t// Debugf formats message according to format specifier and writes to\n\t// log with LevelDebug.\n\tDebugf(format string, params ...interface{})\n\n\t// Infof formats message according to format specifier and writes to\n\t// log with LevelInfo.\n\tInfof(format string, params ...interface{})\n\n\t// Warnf formats message according to format specifier and writes to\n\t// to log with LevelWarn.\n\tWarnf(format string, params ...interface{})\n\n\t// Errorf formats message according to format specifier and writes to\n\t// to log with LevelError.\n\tErrorf(format string, params ...interface{})\n\n\t// Criticalf formats message according to format specifier and writes to\n\t// log with LevelCritical.\n\tCriticalf(format string, params ...interface{})\n\n\t// Trace formats message using the default formats for its operands\n\t// and writes to log with LevelTrace.\n\tTrace(v ...interface{})\n\n\t// Debug formats message using the default formats for its operands\n\t// and writes to log with LevelDebug.\n\tDebug(v ...interface{})\n\n\t// Info formats message using the default formats for its operands\n\t// and writes to log with LevelInfo.\n\tInfo(v ...interface{})\n\n\t// Warn formats message using the default formats for its operands\n\t// and writes to log with LevelWarn.\n\tWarn(v ...interface{})\n\n\t// Error formats message using the default formats for its operands\n\t// and writes to log with LevelError.\n\tError(v ...interface{})\n\n\t// Critical formats message using the default formats for its operands\n\t// and writes to log with LevelCritical.\n\tCritical(v ...interface{})\n\n\t// Level returns the current logging level.\n\tLevel() Level\n\n\t// SetLevel changes the logging level to the passed level.\n\tSetLevel(level Level)\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btclog/log.go",
    "content": "// Copyright (c) 2017 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n//\n// Copyright (c) 2009 The Go Authors. All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//    * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//    * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//    * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage btclog\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"runtime\"\n\t\"strings\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"time\"\n)\n\n// defaultFlags specifies changes to the default logger behavior.  It is set\n// during package init and configured using the LOGFLAGS environment variable.\n// New logger backends can override these default flags using WithFlags.\nvar defaultFlags uint32\n\n// Flags to modify Backend's behavior.\nconst (\n\t// Llongfile modifies the logger output to include full path and line number\n\t// of the logging callsite, e.g. /a/b/c/main.go:123.\n\tLlongfile uint32 = 1 << iota\n\n\t// Lshortfile modifies the logger output to include filename and line number\n\t// of the logging callsite, e.g. main.go:123.  Overrides Llongfile.\n\tLshortfile\n)\n\n// Read logger flags from the LOGFLAGS environment variable.  Multiple flags can\n// be set at once, separated by commas.\nfunc init() {\n\tfor _, f := range strings.Split(os.Getenv(\"LOGFLAGS\"), \",\") {\n\t\tswitch f {\n\t\tcase \"longfile\":\n\t\t\tdefaultFlags |= Llongfile\n\t\tcase \"shortfile\":\n\t\t\tdefaultFlags |= Lshortfile\n\t\t}\n\t}\n}\n\n// Level is the level at which a logger is configured.  All messages sent\n// to a level which is below the current level are filtered.\ntype Level uint32\n\n// Level constants.\nconst (\n\tLevelTrace Level = iota\n\tLevelDebug\n\tLevelInfo\n\tLevelWarn\n\tLevelError\n\tLevelCritical\n\tLevelOff\n)\n\n// levelStrs defines the human-readable names for each logging level.\nvar levelStrs = [...]string{\"TRC\", \"DBG\", \"INF\", \"WRN\", \"ERR\", \"CRT\", \"OFF\"}\n\n// LevelFromString returns a level based on the input string s.  If the input\n// can't be interpreted as a valid log level, the info level and false is\n// returned.\nfunc LevelFromString(s string) (l Level, ok bool) {\n\tswitch strings.ToLower(s) {\n\tcase \"trace\", \"trc\":\n\t\treturn LevelTrace, true\n\tcase \"debug\", \"dbg\":\n\t\treturn LevelDebug, true\n\tcase \"info\", \"inf\":\n\t\treturn LevelInfo, true\n\tcase \"warn\", \"wrn\":\n\t\treturn LevelWarn, true\n\tcase \"error\", \"err\":\n\t\treturn LevelError, true\n\tcase \"critical\", \"crt\":\n\t\treturn LevelCritical, true\n\tcase \"off\":\n\t\treturn LevelOff, true\n\tdefault:\n\t\treturn LevelInfo, false\n\t}\n}\n\n// String returns the tag of the logger used in log messages, or \"OFF\" if\n// the level will not produce any log output.\nfunc (l Level) String() string {\n\tif l >= LevelOff {\n\t\treturn \"OFF\"\n\t}\n\treturn levelStrs[l]\n}\n\n// NewBackend creates a logger backend from a Writer.\nfunc NewBackend(w io.Writer, opts ...BackendOption) *Backend {\n\tb := &Backend{w: w, flag: defaultFlags}\n\tfor _, o := range opts {\n\t\to(b)\n\t}\n\treturn b\n}\n\n// Backend is a logging backend.  Subsystems created from the backend write to\n// the backend's Writer.  Backend provides atomic writes to the Writer from all\n// subsystems.\ntype Backend struct {\n\tw    io.Writer\n\tmu   sync.Mutex // ensures atomic writes\n\tflag uint32\n}\n\n// BackendOption is a function used to modify the behavior of a Backend.\ntype BackendOption func(b *Backend)\n\n// WithFlags configures a Backend to use the specified flags rather than using\n// the package's defaults as determined through the LOGFLAGS environment\n// variable.\nfunc WithFlags(flags uint32) BackendOption {\n\treturn func(b *Backend) {\n\t\tb.flag = flags\n\t}\n}\n\n// bufferPool defines a concurrent safe free list of byte slices used to provide\n// temporary buffers for formatting log messages prior to outputting them.\nvar bufferPool = sync.Pool{\n\tNew: func() interface{} {\n\t\tb := make([]byte, 0, 120)\n\t\treturn &b // pointer to slice to avoid boxing alloc\n\t},\n}\n\n// buffer returns a byte slice from the free list.  A new buffer is allocated if\n// there are not any available on the free list.  The returned byte slice should\n// be returned to the fee list by using the recycleBuffer function when the\n// caller is done with it.\nfunc buffer() *[]byte {\n\treturn bufferPool.Get().(*[]byte)\n}\n\n// recycleBuffer puts the provided byte slice, which should have been obtain via\n// the buffer function, back on the free list.\nfunc recycleBuffer(b *[]byte) {\n\t*b = (*b)[:0]\n\tbufferPool.Put(b)\n}\n\n// From stdlib log package.\n// Cheap integer to fixed-width decimal ASCII.  Give a negative width to avoid\n// zero-padding.\nfunc itoa(buf *[]byte, i int, wid int) {\n\t// Assemble decimal in reverse order.\n\tvar b [20]byte\n\tbp := len(b) - 1\n\tfor i >= 10 || wid > 1 {\n\t\twid--\n\t\tq := i / 10\n\t\tb[bp] = byte('0' + i - q*10)\n\t\tbp--\n\t\ti = q\n\t}\n\t// i < 10\n\tb[bp] = byte('0' + i)\n\t*buf = append(*buf, b[bp:]...)\n}\n\n// Appends a header in the default format 'YYYY-MM-DD hh:mm:ss.sss [LVL] TAG: '.\n// If either of the Lshortfile or Llongfile flags are specified, the file named\n// and line number are included after the tag and before the final colon.\nfunc formatHeader(buf *[]byte, t time.Time, lvl, tag string, file string, line int) {\n\tyear, month, day := t.Date()\n\thour, min, sec := t.Clock()\n\tms := t.Nanosecond() / 1e6\n\n\titoa(buf, year, 4)\n\t*buf = append(*buf, '-')\n\titoa(buf, int(month), 2)\n\t*buf = append(*buf, '-')\n\titoa(buf, day, 2)\n\t*buf = append(*buf, ' ')\n\titoa(buf, hour, 2)\n\t*buf = append(*buf, ':')\n\titoa(buf, min, 2)\n\t*buf = append(*buf, ':')\n\titoa(buf, sec, 2)\n\t*buf = append(*buf, '.')\n\titoa(buf, ms, 3)\n\t*buf = append(*buf, \" [\"...)\n\t*buf = append(*buf, lvl...)\n\t*buf = append(*buf, \"] \"...)\n\t*buf = append(*buf, tag...)\n\tif file != \"\" {\n\t\t*buf = append(*buf, ' ')\n\t\t*buf = append(*buf, file...)\n\t\t*buf = append(*buf, ':')\n\t\titoa(buf, line, -1)\n\t}\n\t*buf = append(*buf, \": \"...)\n}\n\n// calldepth is the call depth of the callsite function relative to the\n// caller of the subsystem logger.  It is used to recover the filename and line\n// number of the logging call if either the short or long file flags are\n// specified.\nconst calldepth = 3\n\n// callsite returns the file name and line number of the callsite to the\n// subsystem logger.\nfunc callsite(flag uint32) (string, int) {\n\t_, file, line, ok := runtime.Caller(calldepth)\n\tif !ok {\n\t\treturn \"???\", 0\n\t}\n\tif flag&Lshortfile != 0 {\n\t\tshort := file\n\t\tfor i := len(file) - 1; i > 0; i-- {\n\t\t\tif os.IsPathSeparator(file[i]) {\n\t\t\t\tshort = file[i+1:]\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfile = short\n\t}\n\treturn file, line\n}\n\n// print outputs a log message to the writer associated with the backend after\n// creating a prefix for the given level and tag according to the formatHeader\n// function and formatting the provided arguments using the default formatting\n// rules.\nfunc (b *Backend) print(lvl, tag string, args ...interface{}) {\n\tt := time.Now() // get as early as possible\n\n\tbytebuf := buffer()\n\n\tvar file string\n\tvar line int\n\tif b.flag&(Lshortfile|Llongfile) != 0 {\n\t\tfile, line = callsite(b.flag)\n\t}\n\n\tformatHeader(bytebuf, t, lvl, tag, file, line)\n\tbuf := bytes.NewBuffer(*bytebuf)\n\tfmt.Fprintln(buf, args...)\n\t*bytebuf = buf.Bytes()\n\n\tb.mu.Lock()\n\tb.w.Write(*bytebuf)\n\tb.mu.Unlock()\n\n\trecycleBuffer(bytebuf)\n}\n\n// printf outputs a log message to the writer associated with the backend after\n// creating a prefix for the given level and tag according to the formatHeader\n// function and formatting the provided arguments according to the given format\n// specifier.\nfunc (b *Backend) printf(lvl, tag string, format string, args ...interface{}) {\n\tt := time.Now() // get as early as possible\n\n\tbytebuf := buffer()\n\n\tvar file string\n\tvar line int\n\tif b.flag&(Lshortfile|Llongfile) != 0 {\n\t\tfile, line = callsite(b.flag)\n\t}\n\n\tformatHeader(bytebuf, t, lvl, tag, file, line)\n\tbuf := bytes.NewBuffer(*bytebuf)\n\tfmt.Fprintf(buf, format, args...)\n\t*bytebuf = append(buf.Bytes(), '\\n')\n\n\tb.mu.Lock()\n\tb.w.Write(*bytebuf)\n\tb.mu.Unlock()\n\n\trecycleBuffer(bytebuf)\n}\n\n// Logger returns a new logger for a particular subsystem that writes to the\n// Backend b.  A tag describes the subsystem and is included in all log\n// messages.  The logger uses the info verbosity level by default.\nfunc (b *Backend) Logger(subsystemTag string) Logger {\n\treturn &slog{LevelInfo, subsystemTag, b}\n}\n\n// slog is a subsystem logger for a Backend.  Implements the Logger interface.\ntype slog struct {\n\tlvl Level // atomic\n\ttag string\n\tb   *Backend\n}\n\n// Trace formats message using the default formats for its operands, prepends\n// the prefix as necessary, and writes to log with LevelTrace.\n//\n// This is part of the Logger interface implementation.\nfunc (l *slog) Trace(args ...interface{}) {\n\tlvl := l.Level()\n\tif lvl <= LevelTrace {\n\t\tl.b.print(\"TRC\", l.tag, args...)\n\t}\n}\n\n// Tracef formats message according to format specifier, prepends the prefix as\n// necessary, and writes to log with LevelTrace.\n//\n// This is part of the Logger interface implementation.\nfunc (l *slog) Tracef(format string, args ...interface{}) {\n\tlvl := l.Level()\n\tif lvl <= LevelTrace {\n\t\tl.b.printf(\"TRC\", l.tag, format, args...)\n\t}\n}\n\n// Debug formats message using the default formats for its operands, prepends\n// the prefix as necessary, and writes to log with LevelDebug.\n//\n// This is part of the Logger interface implementation.\nfunc (l *slog) Debug(args ...interface{}) {\n\tlvl := l.Level()\n\tif lvl <= LevelDebug {\n\t\tl.b.print(\"DBG\", l.tag, args...)\n\t}\n}\n\n// Debugf formats message according to format specifier, prepends the prefix as\n// necessary, and writes to log with LevelDebug.\n//\n// This is part of the Logger interface implementation.\nfunc (l *slog) Debugf(format string, args ...interface{}) {\n\tlvl := l.Level()\n\tif lvl <= LevelDebug {\n\t\tl.b.printf(\"DBG\", l.tag, format, args...)\n\t}\n}\n\n// Info formats message using the default formats for its operands, prepends\n// the prefix as necessary, and writes to log with LevelInfo.\n//\n// This is part of the Logger interface implementation.\nfunc (l *slog) Info(args ...interface{}) {\n\tlvl := l.Level()\n\tif lvl <= LevelInfo {\n\t\tl.b.print(\"INF\", l.tag, args...)\n\t}\n}\n\n// Infof formats message according to format specifier, prepends the prefix as\n// necessary, and writes to log with LevelInfo.\n//\n// This is part of the Logger interface implementation.\nfunc (l *slog) Infof(format string, args ...interface{}) {\n\tlvl := l.Level()\n\tif lvl <= LevelInfo {\n\t\tl.b.printf(\"INF\", l.tag, format, args...)\n\t}\n}\n\n// Warn formats message using the default formats for its operands, prepends\n// the prefix as necessary, and writes to log with LevelWarn.\n//\n// This is part of the Logger interface implementation.\nfunc (l *slog) Warn(args ...interface{}) {\n\tlvl := l.Level()\n\tif lvl <= LevelWarn {\n\t\tl.b.print(\"WRN\", l.tag, args...)\n\t}\n}\n\n// Warnf formats message according to format specifier, prepends the prefix as\n// necessary, and writes to log with LevelWarn.\n//\n// This is part of the Logger interface implementation.\nfunc (l *slog) Warnf(format string, args ...interface{}) {\n\tlvl := l.Level()\n\tif lvl <= LevelWarn {\n\t\tl.b.printf(\"WRN\", l.tag, format, args...)\n\t}\n}\n\n// Error formats message using the default formats for its operands, prepends\n// the prefix as necessary, and writes to log with LevelError.\n//\n// This is part of the Logger interface implementation.\nfunc (l *slog) Error(args ...interface{}) {\n\tlvl := l.Level()\n\tif lvl <= LevelError {\n\t\tl.b.print(\"ERR\", l.tag, args...)\n\t}\n}\n\n// Errorf formats message according to format specifier, prepends the prefix as\n// necessary, and writes to log with LevelError.\n//\n// This is part of the Logger interface implementation.\nfunc (l *slog) Errorf(format string, args ...interface{}) {\n\tlvl := l.Level()\n\tif lvl <= LevelError {\n\t\tl.b.printf(\"ERR\", l.tag, format, args...)\n\t}\n}\n\n// Critical formats message using the default formats for its operands, prepends\n// the prefix as necessary, and writes to log with LevelCritical.\n//\n// This is part of the Logger interface implementation.\nfunc (l *slog) Critical(args ...interface{}) {\n\tlvl := l.Level()\n\tif lvl <= LevelCritical {\n\t\tl.b.print(\"CRT\", l.tag, args...)\n\t}\n}\n\n// Criticalf formats message according to format specifier, prepends the prefix\n// as necessary, and writes to log with LevelCritical.\n//\n// This is part of the Logger interface implementation.\nfunc (l *slog) Criticalf(format string, args ...interface{}) {\n\tlvl := l.Level()\n\tif lvl <= LevelCritical {\n\t\tl.b.printf(\"CRT\", l.tag, format, args...)\n\t}\n}\n\n// Level returns the current logging level\n//\n// This is part of the Logger interface implementation.\nfunc (l *slog) Level() Level {\n\treturn Level(atomic.LoadUint32((*uint32)(&l.lvl)))\n}\n\n// SetLevel changes the logging level to the passed level.\n//\n// This is part of the Logger interface implementation.\nfunc (l *slog) SetLevel(level Level) {\n\tatomic.StoreUint32((*uint32)(&l.lvl), uint32(level))\n}\n\n// Disabled is a Logger that will never output anything.\nvar Disabled Logger\n\nfunc init() {\n\tDisabled = &slog{lvl: LevelOff, b: NewBackend(ioutil.Discard)}\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcutil/.gitignore",
    "content": "# Temp files\r\n*~\r\n\r\n# Log files\r\n*.log\r\n\r\n# Compiled Object files, Static and Dynamic libs (Shared Objects)\r\n*.o\r\n*.a\r\n*.so\r\n\r\n# Folders\r\n_obj\r\n_test\r\n\r\n# Architecture specific extensions/prefixes\r\n*.[568vq]\r\n[568vq].out\r\n\r\n*.cgo1.go\r\n*.cgo2.c\r\n_cgo_defun.c\r\n_cgo_gotypes.go\r\n_cgo_export.*\r\n\r\n_testmain.go\r\n\r\n*.exe \r\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcutil/.travis.yml",
    "content": "language: go\ngo:\n  - \"1.9.4\"\n  - \"1.10\"\nsudo: false\ninstall:\n  - go get -d -t -v ./...\n  - go get -v github.com/alecthomas/gometalinter\n  - gometalinter --install\nscript:\n  - export PATH=$PATH:$HOME/gopath/bin\n  - ./goclean.sh\nafter_success:\n  - go get -v github.com/mattn/goveralls\n  - goveralls -coverprofile=profile.cov -service=travis-ci\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcutil/LICENSE",
    "content": "ISC License\n\nCopyright (c) 2013-2017 The btcsuite developers\nCopyright (c) 2016-2017 The Lightning Network Developers\n\nPermission to use, copy, modify, and distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\nOR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcutil/README.md",
    "content": "btcutil\n=======\n\n[![Build Status](http://img.shields.io/travis/btcsuite/btcutil.svg)](https://travis-ci.org/btcsuite/btcutil)\n[![Coverage Status](http://img.shields.io/coveralls/btcsuite/btcutil.svg)](https://coveralls.io/r/btcsuite/btcutil?branch=master)\n[![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org)\n[![GoDoc](http://img.shields.io/badge/godoc-reference-blue.svg)](http://godoc.org/github.com/btcsuite/btcutil)\n\nPackage btcutil provides bitcoin-specific convenience functions and types.\nA comprehensive suite of tests is provided to ensure proper functionality.  See\n`test_coverage.txt` for the gocov coverage report.  Alternatively, if you are\nrunning a POSIX OS, you can run the `cov_report.sh` script for a real-time\nreport.\n\nThis package was developed for btcd, an alternative full-node implementation of\nbitcoin which is under active development by Conformal.  Although it was\nprimarily written for btcd, this package has intentionally been designed so it\ncan be used as a standalone package for any projects needing the functionality\nprovided.\n\n## Installation and Updating\n\n```bash\n$ go get -u github.com/btcsuite/btcutil\n```\n\n## GPG Verification Key\n\nAll official release tags are signed by Conformal so users can ensure the code\nhas not been tampered with and is coming from the btcsuite developers.  To\nverify the signature perform the following:\n\n- Download the public key from the Conformal website at\n  https://opensource.conformal.com/GIT-GPG-KEY-conformal.txt\n\n- Import the public key into your GPG keyring:\n  ```bash\n  gpg --import GIT-GPG-KEY-conformal.txt\n  ```\n\n- Verify the release tag with the following command where `TAG_NAME` is a\n  placeholder for the specific tag:\n  ```bash\n  git tag -v TAG_NAME\n  ```\n\n## License\n\nPackage btcutil is licensed under the [copyfree](http://copyfree.org) ISC\nLicense.\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcutil/address.go",
    "content": "// Copyright (c) 2013-2017 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcutil\n\nimport (\n\t\"bytes\"\n\t\"encoding/hex\"\n\t\"errors\"\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/btcsuite/btcd/btcec\"\n\t\"github.com/btcsuite/btcd/chaincfg\"\n\t\"github.com/btcsuite/btcutil/base58\"\n\t\"github.com/btcsuite/btcutil/bech32\"\n\t\"golang.org/x/crypto/ripemd160\"\n)\n\n// UnsupportedWitnessVerError describes an error where a segwit address being\n// decoded has an unsupported witness version.\ntype UnsupportedWitnessVerError byte\n\nfunc (e UnsupportedWitnessVerError) Error() string {\n\treturn \"unsupported witness version: \" + string(e)\n}\n\n// UnsupportedWitnessProgLenError describes an error where a segwit address\n// being decoded has an unsupported witness program length.\ntype UnsupportedWitnessProgLenError int\n\nfunc (e UnsupportedWitnessProgLenError) Error() string {\n\treturn \"unsupported witness program length: \" + string(e)\n}\n\nvar (\n\t// ErrChecksumMismatch describes an error where decoding failed due\n\t// to a bad checksum.\n\tErrChecksumMismatch = errors.New(\"checksum mismatch\")\n\n\t// ErrUnknownAddressType describes an error where an address can not\n\t// decoded as a specific address type due to the string encoding\n\t// begining with an identifier byte unknown to any standard or\n\t// registered (via chaincfg.Register) network.\n\tErrUnknownAddressType = errors.New(\"unknown address type\")\n\n\t// ErrAddressCollision describes an error where an address can not\n\t// be uniquely determined as either a pay-to-pubkey-hash or\n\t// pay-to-script-hash address since the leading identifier is used for\n\t// describing both address kinds, but for different networks.  Rather\n\t// than assuming or defaulting to one or the other, this error is\n\t// returned and the caller must decide how to decode the address.\n\tErrAddressCollision = errors.New(\"address collision\")\n)\n\n// encodeAddress returns a human-readable payment address given a ripemd160 hash\n// and netID which encodes the bitcoin network and address type.  It is used\n// in both pay-to-pubkey-hash (P2PKH) and pay-to-script-hash (P2SH) address\n// encoding.\nfunc encodeAddress(hash160 []byte, netID byte) string {\n\t// Format is 1 byte for a network and address class (i.e. P2PKH vs\n\t// P2SH), 20 bytes for a RIPEMD160 hash, and 4 bytes of checksum.\n\treturn base58.CheckEncode(hash160[:ripemd160.Size], netID)\n}\n\n// encodeSegWitAddress creates a bech32 encoded address string representation\n// from witness version and witness program.\nfunc encodeSegWitAddress(hrp string, witnessVersion byte, witnessProgram []byte) (string, error) {\n\t// Group the address bytes into 5 bit groups, as this is what is used to\n\t// encode each character in the address string.\n\tconverted, err := bech32.ConvertBits(witnessProgram, 8, 5, true)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\t// Concatenate the witness version and program, and encode the resulting\n\t// bytes using bech32 encoding.\n\tcombined := make([]byte, len(converted)+1)\n\tcombined[0] = witnessVersion\n\tcopy(combined[1:], converted)\n\tbech, err := bech32.Encode(hrp, combined)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\t// Check validity by decoding the created address.\n\tversion, program, err := decodeSegWitAddress(bech)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"invalid segwit address: %v\", err)\n\t}\n\n\tif version != witnessVersion || !bytes.Equal(program, witnessProgram) {\n\t\treturn \"\", fmt.Errorf(\"invalid segwit address\")\n\t}\n\n\treturn bech, nil\n}\n\n// Address is an interface type for any type of destination a transaction\n// output may spend to.  This includes pay-to-pubkey (P2PK), pay-to-pubkey-hash\n// (P2PKH), and pay-to-script-hash (P2SH).  Address is designed to be generic\n// enough that other kinds of addresses may be added in the future without\n// changing the decoding and encoding API.\ntype Address interface {\n\t// String returns the string encoding of the transaction output\n\t// destination.\n\t//\n\t// Please note that String differs subtly from EncodeAddress: String\n\t// will return the value as a string without any conversion, while\n\t// EncodeAddress may convert destination types (for example,\n\t// converting pubkeys to P2PKH addresses) before encoding as a\n\t// payment address string.\n\tString() string\n\n\t// EncodeAddress returns the string encoding of the payment address\n\t// associated with the Address value.  See the comment on String\n\t// for how this method differs from String.\n\tEncodeAddress() string\n\n\t// ScriptAddress returns the raw bytes of the address to be used\n\t// when inserting the address into a txout's script.\n\tScriptAddress() []byte\n\n\t// IsForNet returns whether or not the address is associated with the\n\t// passed bitcoin network.\n\tIsForNet(*chaincfg.Params) bool\n}\n\n// DecodeAddress decodes the string encoding of an address and returns\n// the Address if addr is a valid encoding for a known address type.\n//\n// The bitcoin network the address is associated with is extracted if possible.\n// When the address does not encode the network, such as in the case of a raw\n// public key, the address will be associated with the passed defaultNet.\nfunc DecodeAddress(addr string, defaultNet *chaincfg.Params) (Address, error) {\n\t// Bech32 encoded segwit addresses start with a human-readable part\n\t// (hrp) followed by '1'. For Bitcoin mainnet the hrp is \"bc\", and for\n\t// testnet it is \"tb\". If the address string has a prefix that matches\n\t// one of the prefixes for the known networks, we try to decode it as\n\t// a segwit address.\n\toneIndex := strings.LastIndexByte(addr, '1')\n\tif oneIndex > 1 {\n\t\tprefix := addr[:oneIndex+1]\n\t\tif chaincfg.IsBech32SegwitPrefix(prefix) {\n\t\t\twitnessVer, witnessProg, err := decodeSegWitAddress(addr)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\t// We currently only support P2WPKH and P2WSH, which is\n\t\t\t// witness version 0.\n\t\t\tif witnessVer != 0 {\n\t\t\t\treturn nil, UnsupportedWitnessVerError(witnessVer)\n\t\t\t}\n\n\t\t\t// The HRP is everything before the found '1'.\n\t\t\thrp := prefix[:len(prefix)-1]\n\n\t\t\tswitch len(witnessProg) {\n\t\t\tcase 20:\n\t\t\t\treturn newAddressWitnessPubKeyHash(hrp, witnessProg)\n\t\t\tcase 32:\n\t\t\t\treturn newAddressWitnessScriptHash(hrp, witnessProg)\n\t\t\tdefault:\n\t\t\t\treturn nil, UnsupportedWitnessProgLenError(len(witnessProg))\n\t\t\t}\n\t\t}\n\t}\n\n\t// Serialized public keys are either 65 bytes (130 hex chars) if\n\t// uncompressed/hybrid or 33 bytes (66 hex chars) if compressed.\n\tif len(addr) == 130 || len(addr) == 66 {\n\t\tserializedPubKey, err := hex.DecodeString(addr)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn NewAddressPubKey(serializedPubKey, defaultNet)\n\t}\n\n\t// Switch on decoded length to determine the type.\n\tdecoded, netID, err := base58.CheckDecode(addr)\n\tif err != nil {\n\t\tif err == base58.ErrChecksum {\n\t\t\treturn nil, ErrChecksumMismatch\n\t\t}\n\t\treturn nil, errors.New(\"decoded address is of unknown format\")\n\t}\n\tswitch len(decoded) {\n\tcase ripemd160.Size: // P2PKH or P2SH\n\t\tisP2PKH := chaincfg.IsPubKeyHashAddrID(netID)\n\t\tisP2SH := chaincfg.IsScriptHashAddrID(netID)\n\t\tswitch hash160 := decoded; {\n\t\tcase isP2PKH && isP2SH:\n\t\t\treturn nil, ErrAddressCollision\n\t\tcase isP2PKH:\n\t\t\treturn newAddressPubKeyHash(hash160, netID)\n\t\tcase isP2SH:\n\t\t\treturn newAddressScriptHashFromHash(hash160, netID)\n\t\tdefault:\n\t\t\treturn nil, ErrUnknownAddressType\n\t\t}\n\n\tdefault:\n\t\treturn nil, errors.New(\"decoded address is of unknown size\")\n\t}\n}\n\n// decodeSegWitAddress parses a bech32 encoded segwit address string and\n// returns the witness version and witness program byte representation.\nfunc decodeSegWitAddress(address string) (byte, []byte, error) {\n\t// Decode the bech32 encoded address.\n\t_, data, err := bech32.Decode(address)\n\tif err != nil {\n\t\treturn 0, nil, err\n\t}\n\n\t// The first byte of the decoded address is the witness version, it must\n\t// exist.\n\tif len(data) < 1 {\n\t\treturn 0, nil, fmt.Errorf(\"no witness version\")\n\t}\n\n\t// ...and be <= 16.\n\tversion := data[0]\n\tif version > 16 {\n\t\treturn 0, nil, fmt.Errorf(\"invalid witness version: %v\", version)\n\t}\n\n\t// The remaining characters of the address returned are grouped into\n\t// words of 5 bits. In order to restore the original witness program\n\t// bytes, we'll need to regroup into 8 bit words.\n\tregrouped, err := bech32.ConvertBits(data[1:], 5, 8, false)\n\tif err != nil {\n\t\treturn 0, nil, err\n\t}\n\n\t// The regrouped data must be between 2 and 40 bytes.\n\tif len(regrouped) < 2 || len(regrouped) > 40 {\n\t\treturn 0, nil, fmt.Errorf(\"invalid data length\")\n\t}\n\n\t// For witness version 0, address MUST be exactly 20 or 32 bytes.\n\tif version == 0 && len(regrouped) != 20 && len(regrouped) != 32 {\n\t\treturn 0, nil, fmt.Errorf(\"invalid data length for witness \"+\n\t\t\t\"version 0: %v\", len(regrouped))\n\t}\n\n\treturn version, regrouped, nil\n}\n\n// AddressPubKeyHash is an Address for a pay-to-pubkey-hash (P2PKH)\n// transaction.\ntype AddressPubKeyHash struct {\n\thash  [ripemd160.Size]byte\n\tnetID byte\n}\n\n// NewAddressPubKeyHash returns a new AddressPubKeyHash.  pkHash mustbe 20\n// bytes.\nfunc NewAddressPubKeyHash(pkHash []byte, net *chaincfg.Params) (*AddressPubKeyHash, error) {\n\treturn newAddressPubKeyHash(pkHash, net.PubKeyHashAddrID)\n}\n\n// newAddressPubKeyHash is the internal API to create a pubkey hash address\n// with a known leading identifier byte for a network, rather than looking\n// it up through its parameters.  This is useful when creating a new address\n// structure from a string encoding where the identifer byte is already\n// known.\nfunc newAddressPubKeyHash(pkHash []byte, netID byte) (*AddressPubKeyHash, error) {\n\t// Check for a valid pubkey hash length.\n\tif len(pkHash) != ripemd160.Size {\n\t\treturn nil, errors.New(\"pkHash must be 20 bytes\")\n\t}\n\n\taddr := &AddressPubKeyHash{netID: netID}\n\tcopy(addr.hash[:], pkHash)\n\treturn addr, nil\n}\n\n// EncodeAddress returns the string encoding of a pay-to-pubkey-hash\n// address.  Part of the Address interface.\nfunc (a *AddressPubKeyHash) EncodeAddress() string {\n\treturn encodeAddress(a.hash[:], a.netID)\n}\n\n// ScriptAddress returns the bytes to be included in a txout script to pay\n// to a pubkey hash.  Part of the Address interface.\nfunc (a *AddressPubKeyHash) ScriptAddress() []byte {\n\treturn a.hash[:]\n}\n\n// IsForNet returns whether or not the pay-to-pubkey-hash address is associated\n// with the passed bitcoin network.\nfunc (a *AddressPubKeyHash) IsForNet(net *chaincfg.Params) bool {\n\treturn a.netID == net.PubKeyHashAddrID\n}\n\n// String returns a human-readable string for the pay-to-pubkey-hash address.\n// This is equivalent to calling EncodeAddress, but is provided so the type can\n// be used as a fmt.Stringer.\nfunc (a *AddressPubKeyHash) String() string {\n\treturn a.EncodeAddress()\n}\n\n// Hash160 returns the underlying array of the pubkey hash.  This can be useful\n// when an array is more appropiate than a slice (for example, when used as map\n// keys).\nfunc (a *AddressPubKeyHash) Hash160() *[ripemd160.Size]byte {\n\treturn &a.hash\n}\n\n// AddressScriptHash is an Address for a pay-to-script-hash (P2SH)\n// transaction.\ntype AddressScriptHash struct {\n\thash  [ripemd160.Size]byte\n\tnetID byte\n}\n\n// NewAddressScriptHash returns a new AddressScriptHash.\nfunc NewAddressScriptHash(serializedScript []byte, net *chaincfg.Params) (*AddressScriptHash, error) {\n\tscriptHash := Hash160(serializedScript)\n\treturn newAddressScriptHashFromHash(scriptHash, net.ScriptHashAddrID)\n}\n\n// NewAddressScriptHashFromHash returns a new AddressScriptHash.  scriptHash\n// must be 20 bytes.\nfunc NewAddressScriptHashFromHash(scriptHash []byte, net *chaincfg.Params) (*AddressScriptHash, error) {\n\treturn newAddressScriptHashFromHash(scriptHash, net.ScriptHashAddrID)\n}\n\n// newAddressScriptHashFromHash is the internal API to create a script hash\n// address with a known leading identifier byte for a network, rather than\n// looking it up through its parameters.  This is useful when creating a new\n// address structure from a string encoding where the identifer byte is already\n// known.\nfunc newAddressScriptHashFromHash(scriptHash []byte, netID byte) (*AddressScriptHash, error) {\n\t// Check for a valid script hash length.\n\tif len(scriptHash) != ripemd160.Size {\n\t\treturn nil, errors.New(\"scriptHash must be 20 bytes\")\n\t}\n\n\taddr := &AddressScriptHash{netID: netID}\n\tcopy(addr.hash[:], scriptHash)\n\treturn addr, nil\n}\n\n// EncodeAddress returns the string encoding of a pay-to-script-hash\n// address.  Part of the Address interface.\nfunc (a *AddressScriptHash) EncodeAddress() string {\n\treturn encodeAddress(a.hash[:], a.netID)\n}\n\n// ScriptAddress returns the bytes to be included in a txout script to pay\n// to a script hash.  Part of the Address interface.\nfunc (a *AddressScriptHash) ScriptAddress() []byte {\n\treturn a.hash[:]\n}\n\n// IsForNet returns whether or not the pay-to-script-hash address is associated\n// with the passed bitcoin network.\nfunc (a *AddressScriptHash) IsForNet(net *chaincfg.Params) bool {\n\treturn a.netID == net.ScriptHashAddrID\n}\n\n// String returns a human-readable string for the pay-to-script-hash address.\n// This is equivalent to calling EncodeAddress, but is provided so the type can\n// be used as a fmt.Stringer.\nfunc (a *AddressScriptHash) String() string {\n\treturn a.EncodeAddress()\n}\n\n// Hash160 returns the underlying array of the script hash.  This can be useful\n// when an array is more appropiate than a slice (for example, when used as map\n// keys).\nfunc (a *AddressScriptHash) Hash160() *[ripemd160.Size]byte {\n\treturn &a.hash\n}\n\n// PubKeyFormat describes what format to use for a pay-to-pubkey address.\ntype PubKeyFormat int\n\nconst (\n\t// PKFUncompressed indicates the pay-to-pubkey address format is an\n\t// uncompressed public key.\n\tPKFUncompressed PubKeyFormat = iota\n\n\t// PKFCompressed indicates the pay-to-pubkey address format is a\n\t// compressed public key.\n\tPKFCompressed\n\n\t// PKFHybrid indicates the pay-to-pubkey address format is a hybrid\n\t// public key.\n\tPKFHybrid\n)\n\n// AddressPubKey is an Address for a pay-to-pubkey transaction.\ntype AddressPubKey struct {\n\tpubKeyFormat PubKeyFormat\n\tpubKey       *btcec.PublicKey\n\tpubKeyHashID byte\n}\n\n// NewAddressPubKey returns a new AddressPubKey which represents a pay-to-pubkey\n// address.  The serializedPubKey parameter must be a valid pubkey and can be\n// uncompressed, compressed, or hybrid.\nfunc NewAddressPubKey(serializedPubKey []byte, net *chaincfg.Params) (*AddressPubKey, error) {\n\tpubKey, err := btcec.ParsePubKey(serializedPubKey, btcec.S256())\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Set the format of the pubkey.  This probably should be returned\n\t// from btcec, but do it here to avoid API churn.  We already know the\n\t// pubkey is valid since it parsed above, so it's safe to simply examine\n\t// the leading byte to get the format.\n\tpkFormat := PKFUncompressed\n\tswitch serializedPubKey[0] {\n\tcase 0x02, 0x03:\n\t\tpkFormat = PKFCompressed\n\tcase 0x06, 0x07:\n\t\tpkFormat = PKFHybrid\n\t}\n\n\treturn &AddressPubKey{\n\t\tpubKeyFormat: pkFormat,\n\t\tpubKey:       pubKey,\n\t\tpubKeyHashID: net.PubKeyHashAddrID,\n\t}, nil\n}\n\n// serialize returns the serialization of the public key according to the\n// format associated with the address.\nfunc (a *AddressPubKey) serialize() []byte {\n\tswitch a.pubKeyFormat {\n\tdefault:\n\t\tfallthrough\n\tcase PKFUncompressed:\n\t\treturn a.pubKey.SerializeUncompressed()\n\n\tcase PKFCompressed:\n\t\treturn a.pubKey.SerializeCompressed()\n\n\tcase PKFHybrid:\n\t\treturn a.pubKey.SerializeHybrid()\n\t}\n}\n\n// EncodeAddress returns the string encoding of the public key as a\n// pay-to-pubkey-hash.  Note that the public key format (uncompressed,\n// compressed, etc) will change the resulting address.  This is expected since\n// pay-to-pubkey-hash is a hash of the serialized public key which obviously\n// differs with the format.  At the time of this writing, most Bitcoin addresses\n// are pay-to-pubkey-hash constructed from the uncompressed public key.\n//\n// Part of the Address interface.\nfunc (a *AddressPubKey) EncodeAddress() string {\n\treturn encodeAddress(Hash160(a.serialize()), a.pubKeyHashID)\n}\n\n// ScriptAddress returns the bytes to be included in a txout script to pay\n// to a public key.  Setting the public key format will affect the output of\n// this function accordingly.  Part of the Address interface.\nfunc (a *AddressPubKey) ScriptAddress() []byte {\n\treturn a.serialize()\n}\n\n// IsForNet returns whether or not the pay-to-pubkey address is associated\n// with the passed bitcoin network.\nfunc (a *AddressPubKey) IsForNet(net *chaincfg.Params) bool {\n\treturn a.pubKeyHashID == net.PubKeyHashAddrID\n}\n\n// String returns the hex-encoded human-readable string for the pay-to-pubkey\n// address.  This is not the same as calling EncodeAddress.\nfunc (a *AddressPubKey) String() string {\n\treturn hex.EncodeToString(a.serialize())\n}\n\n// Format returns the format (uncompressed, compressed, etc) of the\n// pay-to-pubkey address.\nfunc (a *AddressPubKey) Format() PubKeyFormat {\n\treturn a.pubKeyFormat\n}\n\n// SetFormat sets the format (uncompressed, compressed, etc) of the\n// pay-to-pubkey address.\nfunc (a *AddressPubKey) SetFormat(pkFormat PubKeyFormat) {\n\ta.pubKeyFormat = pkFormat\n}\n\n// AddressPubKeyHash returns the pay-to-pubkey address converted to a\n// pay-to-pubkey-hash address.  Note that the public key format (uncompressed,\n// compressed, etc) will change the resulting address.  This is expected since\n// pay-to-pubkey-hash is a hash of the serialized public key which obviously\n// differs with the format.  At the time of this writing, most Bitcoin addresses\n// are pay-to-pubkey-hash constructed from the uncompressed public key.\nfunc (a *AddressPubKey) AddressPubKeyHash() *AddressPubKeyHash {\n\taddr := &AddressPubKeyHash{netID: a.pubKeyHashID}\n\tcopy(addr.hash[:], Hash160(a.serialize()))\n\treturn addr\n}\n\n// PubKey returns the underlying public key for the address.\nfunc (a *AddressPubKey) PubKey() *btcec.PublicKey {\n\treturn a.pubKey\n}\n\n// AddressWitnessPubKeyHash is an Address for a pay-to-witness-pubkey-hash\n// (P2WPKH) output. See BIP 173 for further details regarding native segregated\n// witness address encoding:\n// https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki\ntype AddressWitnessPubKeyHash struct {\n\thrp            string\n\twitnessVersion byte\n\twitnessProgram [20]byte\n}\n\n// NewAddressWitnessPubKeyHash returns a new AddressWitnessPubKeyHash.\nfunc NewAddressWitnessPubKeyHash(witnessProg []byte, net *chaincfg.Params) (*AddressWitnessPubKeyHash, error) {\n\treturn newAddressWitnessPubKeyHash(net.Bech32HRPSegwit, witnessProg)\n}\n\n// newAddressWitnessPubKeyHash is an internal helper function to create an\n// AddressWitnessPubKeyHash with a known human-readable part, rather than\n// looking it up through its parameters.\nfunc newAddressWitnessPubKeyHash(hrp string, witnessProg []byte) (*AddressWitnessPubKeyHash, error) {\n\t// Check for valid program length for witness version 0, which is 20\n\t// for P2WPKH.\n\tif len(witnessProg) != 20 {\n\t\treturn nil, errors.New(\"witness program must be 20 \" +\n\t\t\t\"bytes for p2wpkh\")\n\t}\n\n\taddr := &AddressWitnessPubKeyHash{\n\t\thrp:            strings.ToLower(hrp),\n\t\twitnessVersion: 0x00,\n\t}\n\n\tcopy(addr.witnessProgram[:], witnessProg)\n\n\treturn addr, nil\n}\n\n// EncodeAddress returns the bech32 string encoding of an\n// AddressWitnessPubKeyHash.\n// Part of the Address interface.\nfunc (a *AddressWitnessPubKeyHash) EncodeAddress() string {\n\tstr, err := encodeSegWitAddress(a.hrp, a.witnessVersion,\n\t\ta.witnessProgram[:])\n\tif err != nil {\n\t\treturn \"\"\n\t}\n\treturn str\n}\n\n// ScriptAddress returns the witness program for this address.\n// Part of the Address interface.\nfunc (a *AddressWitnessPubKeyHash) ScriptAddress() []byte {\n\treturn a.witnessProgram[:]\n}\n\n// IsForNet returns whether or not the AddressWitnessPubKeyHash is associated\n// with the passed bitcoin network.\n// Part of the Address interface.\nfunc (a *AddressWitnessPubKeyHash) IsForNet(net *chaincfg.Params) bool {\n\treturn a.hrp == net.Bech32HRPSegwit\n}\n\n// String returns a human-readable string for the AddressWitnessPubKeyHash.\n// This is equivalent to calling EncodeAddress, but is provided so the type\n// can be used as a fmt.Stringer.\n// Part of the Address interface.\nfunc (a *AddressWitnessPubKeyHash) String() string {\n\treturn a.EncodeAddress()\n}\n\n// Hrp returns the human-readable part of the bech32 encoded\n// AddressWitnessPubKeyHash.\nfunc (a *AddressWitnessPubKeyHash) Hrp() string {\n\treturn a.hrp\n}\n\n// WitnessVersion returns the witness version of the AddressWitnessPubKeyHash.\nfunc (a *AddressWitnessPubKeyHash) WitnessVersion() byte {\n\treturn a.witnessVersion\n}\n\n// WitnessProgram returns the witness program of the AddressWitnessPubKeyHash.\nfunc (a *AddressWitnessPubKeyHash) WitnessProgram() []byte {\n\treturn a.witnessProgram[:]\n}\n\n// Hash160 returns the witness program of the AddressWitnessPubKeyHash as a\n// byte array.\nfunc (a *AddressWitnessPubKeyHash) Hash160() *[20]byte {\n\treturn &a.witnessProgram\n}\n\n// AddressWitnessScriptHash is an Address for a pay-to-witness-script-hash\n// (P2WSH) output. See BIP 173 for further details regarding native segregated\n// witness address encoding:\n// https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki\ntype AddressWitnessScriptHash struct {\n\thrp            string\n\twitnessVersion byte\n\twitnessProgram [32]byte\n}\n\n// NewAddressWitnessScriptHash returns a new AddressWitnessPubKeyHash.\nfunc NewAddressWitnessScriptHash(witnessProg []byte, net *chaincfg.Params) (*AddressWitnessScriptHash, error) {\n\treturn newAddressWitnessScriptHash(net.Bech32HRPSegwit, witnessProg)\n}\n\n// newAddressWitnessScriptHash is an internal helper function to create an\n// AddressWitnessScriptHash with a known human-readable part, rather than\n// looking it up through its parameters.\nfunc newAddressWitnessScriptHash(hrp string, witnessProg []byte) (*AddressWitnessScriptHash, error) {\n\t// Check for valid program length for witness version 0, which is 32\n\t// for P2WSH.\n\tif len(witnessProg) != 32 {\n\t\treturn nil, errors.New(\"witness program must be 32 \" +\n\t\t\t\"bytes for p2wsh\")\n\t}\n\n\taddr := &AddressWitnessScriptHash{\n\t\thrp:            strings.ToLower(hrp),\n\t\twitnessVersion: 0x00,\n\t}\n\n\tcopy(addr.witnessProgram[:], witnessProg)\n\n\treturn addr, nil\n}\n\n// EncodeAddress returns the bech32 string encoding of an\n// AddressWitnessScriptHash.\n// Part of the Address interface.\nfunc (a *AddressWitnessScriptHash) EncodeAddress() string {\n\tstr, err := encodeSegWitAddress(a.hrp, a.witnessVersion,\n\t\ta.witnessProgram[:])\n\tif err != nil {\n\t\treturn \"\"\n\t}\n\treturn str\n}\n\n// ScriptAddress returns the witness program for this address.\n// Part of the Address interface.\nfunc (a *AddressWitnessScriptHash) ScriptAddress() []byte {\n\treturn a.witnessProgram[:]\n}\n\n// IsForNet returns whether or not the AddressWitnessScriptHash is associated\n// with the passed bitcoin network.\n// Part of the Address interface.\nfunc (a *AddressWitnessScriptHash) IsForNet(net *chaincfg.Params) bool {\n\treturn a.hrp == net.Bech32HRPSegwit\n}\n\n// String returns a human-readable string for the AddressWitnessScriptHash.\n// This is equivalent to calling EncodeAddress, but is provided so the type\n// can be used as a fmt.Stringer.\n// Part of the Address interface.\nfunc (a *AddressWitnessScriptHash) String() string {\n\treturn a.EncodeAddress()\n}\n\n// Hrp returns the human-readable part of the bech32 encoded\n// AddressWitnessScriptHash.\nfunc (a *AddressWitnessScriptHash) Hrp() string {\n\treturn a.hrp\n}\n\n// WitnessVersion returns the witness version of the AddressWitnessScriptHash.\nfunc (a *AddressWitnessScriptHash) WitnessVersion() byte {\n\treturn a.witnessVersion\n}\n\n// WitnessProgram returns the witness program of the AddressWitnessScriptHash.\nfunc (a *AddressWitnessScriptHash) WitnessProgram() []byte {\n\treturn a.witnessProgram[:]\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcutil/amount.go",
    "content": "// Copyright (c) 2013, 2014 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcutil\n\nimport (\n\t\"errors\"\n\t\"math\"\n\t\"strconv\"\n)\n\n// AmountUnit describes a method of converting an Amount to something\n// other than the base unit of a bitcoin.  The value of the AmountUnit\n// is the exponent component of the decadic multiple to convert from\n// an amount in bitcoin to an amount counted in units.\ntype AmountUnit int\n\n// These constants define various units used when describing a bitcoin\n// monetary amount.\nconst (\n\tAmountMegaBTC  AmountUnit = 6\n\tAmountKiloBTC  AmountUnit = 3\n\tAmountBTC      AmountUnit = 0\n\tAmountMilliBTC AmountUnit = -3\n\tAmountMicroBTC AmountUnit = -6\n\tAmountSatoshi  AmountUnit = -8\n)\n\n// String returns the unit as a string.  For recognized units, the SI\n// prefix is used, or \"Satoshi\" for the base unit.  For all unrecognized\n// units, \"1eN BTC\" is returned, where N is the AmountUnit.\nfunc (u AmountUnit) String() string {\n\tswitch u {\n\tcase AmountMegaBTC:\n\t\treturn \"MBTC\"\n\tcase AmountKiloBTC:\n\t\treturn \"kBTC\"\n\tcase AmountBTC:\n\t\treturn \"BTC\"\n\tcase AmountMilliBTC:\n\t\treturn \"mBTC\"\n\tcase AmountMicroBTC:\n\t\treturn \"μBTC\"\n\tcase AmountSatoshi:\n\t\treturn \"Satoshi\"\n\tdefault:\n\t\treturn \"1e\" + strconv.FormatInt(int64(u), 10) + \" BTC\"\n\t}\n}\n\n// Amount represents the base bitcoin monetary unit (colloquially referred\n// to as a `Satoshi').  A single Amount is equal to 1e-8 of a bitcoin.\ntype Amount int64\n\n// round converts a floating point number, which may or may not be representable\n// as an integer, to the Amount integer type by rounding to the nearest integer.\n// This is performed by adding or subtracting 0.5 depending on the sign, and\n// relying on integer truncation to round the value to the nearest Amount.\nfunc round(f float64) Amount {\n\tif f < 0 {\n\t\treturn Amount(f - 0.5)\n\t}\n\treturn Amount(f + 0.5)\n}\n\n// NewAmount creates an Amount from a floating point value representing\n// some value in bitcoin.  NewAmount errors if f is NaN or +-Infinity, but\n// does not check that the amount is within the total amount of bitcoin\n// producible as f may not refer to an amount at a single moment in time.\n//\n// NewAmount is for specifically for converting BTC to Satoshi.\n// For creating a new Amount with an int64 value which denotes a quantity of Satoshi,\n// do a simple type conversion from type int64 to Amount.\n// See GoDoc for example: http://godoc.org/github.com/btcsuite/btcutil#example-Amount\nfunc NewAmount(f float64) (Amount, error) {\n\t// The amount is only considered invalid if it cannot be represented\n\t// as an integer type.  This may happen if f is NaN or +-Infinity.\n\tswitch {\n\tcase math.IsNaN(f):\n\t\tfallthrough\n\tcase math.IsInf(f, 1):\n\t\tfallthrough\n\tcase math.IsInf(f, -1):\n\t\treturn 0, errors.New(\"invalid bitcoin amount\")\n\t}\n\n\treturn round(f * SatoshiPerBitcoin), nil\n}\n\n// ToUnit converts a monetary amount counted in bitcoin base units to a\n// floating point value representing an amount of bitcoin.\nfunc (a Amount) ToUnit(u AmountUnit) float64 {\n\treturn float64(a) / math.Pow10(int(u+8))\n}\n\n// ToBTC is the equivalent of calling ToUnit with AmountBTC.\nfunc (a Amount) ToBTC() float64 {\n\treturn a.ToUnit(AmountBTC)\n}\n\n// Format formats a monetary amount counted in bitcoin base units as a\n// string for a given unit.  The conversion will succeed for any unit,\n// however, known units will be formated with an appended label describing\n// the units with SI notation, or \"Satoshi\" for the base unit.\nfunc (a Amount) Format(u AmountUnit) string {\n\tunits := \" \" + u.String()\n\treturn strconv.FormatFloat(a.ToUnit(u), 'f', -int(u+8), 64) + units\n}\n\n// String is the equivalent of calling Format with AmountBTC.\nfunc (a Amount) String() string {\n\treturn a.Format(AmountBTC)\n}\n\n// MulF64 multiplies an Amount by a floating point value.  While this is not\n// an operation that must typically be done by a full node or wallet, it is\n// useful for services that build on top of bitcoin (for example, calculating\n// a fee by multiplying by a percentage).\nfunc (a Amount) MulF64(f float64) Amount {\n\treturn round(float64(a) * f)\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcutil/appdata.go",
    "content": "// Copyright (c) 2013-2017 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcutil\n\nimport (\n\t\"os\"\n\t\"os/user\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strings\"\n\t\"unicode\"\n)\n\n// appDataDir returns an operating system specific directory to be used for\n// storing application data for an application.  See AppDataDir for more\n// details.  This unexported version takes an operating system argument\n// primarily to enable the testing package to properly test the function by\n// forcing an operating system that is not the currently one.\nfunc appDataDir(goos, appName string, roaming bool) string {\n\tif appName == \"\" || appName == \".\" {\n\t\treturn \".\"\n\t}\n\n\t// The caller really shouldn't prepend the appName with a period, but\n\t// if they do, handle it gracefully by trimming it.\n\tappName = strings.TrimPrefix(appName, \".\")\n\tappNameUpper := string(unicode.ToUpper(rune(appName[0]))) + appName[1:]\n\tappNameLower := string(unicode.ToLower(rune(appName[0]))) + appName[1:]\n\n\t// Get the OS specific home directory via the Go standard lib.\n\tvar homeDir string\n\tusr, err := user.Current()\n\tif err == nil {\n\t\thomeDir = usr.HomeDir\n\t}\n\n\t// Fall back to standard HOME environment variable that works\n\t// for most POSIX OSes if the directory from the Go standard\n\t// lib failed.\n\tif err != nil || homeDir == \"\" {\n\t\thomeDir = os.Getenv(\"HOME\")\n\t}\n\n\tswitch goos {\n\t// Attempt to use the LOCALAPPDATA or APPDATA environment variable on\n\t// Windows.\n\tcase \"windows\":\n\t\t// Windows XP and before didn't have a LOCALAPPDATA, so fallback\n\t\t// to regular APPDATA when LOCALAPPDATA is not set.\n\t\tappData := os.Getenv(\"LOCALAPPDATA\")\n\t\tif roaming || appData == \"\" {\n\t\t\tappData = os.Getenv(\"APPDATA\")\n\t\t}\n\n\t\tif appData != \"\" {\n\t\t\treturn filepath.Join(appData, appNameUpper)\n\t\t}\n\n\tcase \"darwin\":\n\t\tif homeDir != \"\" {\n\t\t\treturn filepath.Join(homeDir, \"Library\",\n\t\t\t\t\"Application Support\", appNameUpper)\n\t\t}\n\n\tcase \"plan9\":\n\t\tif homeDir != \"\" {\n\t\t\treturn filepath.Join(homeDir, appNameLower)\n\t\t}\n\n\tdefault:\n\t\tif homeDir != \"\" {\n\t\t\treturn filepath.Join(homeDir, \".\"+appNameLower)\n\t\t}\n\t}\n\n\t// Fall back to the current directory if all else fails.\n\treturn \".\"\n}\n\n// AppDataDir returns an operating system specific directory to be used for\n// storing application data for an application.\n//\n// The appName parameter is the name of the application the data directory is\n// being requested for.  This function will prepend a period to the appName for\n// POSIX style operating systems since that is standard practice.  An empty\n// appName or one with a single dot is treated as requesting the current\n// directory so only \".\" will be returned.  Further, the first character\n// of appName will be made lowercase for POSIX style operating systems and\n// uppercase for Mac and Windows since that is standard practice.\n//\n// The roaming parameter only applies to Windows where it specifies the roaming\n// application data profile (%APPDATA%) should be used instead of the local one\n// (%LOCALAPPDATA%) that is used by default.\n//\n// Example results:\n//  dir := AppDataDir(\"myapp\", false)\n//   POSIX (Linux/BSD): ~/.myapp\n//   Mac OS: $HOME/Library/Application Support/Myapp\n//   Windows: %LOCALAPPDATA%\\Myapp\n//   Plan 9: $home/myapp\nfunc AppDataDir(appName string, roaming bool) string {\n\treturn appDataDir(runtime.GOOS, appName, roaming)\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcutil/base58/README.md",
    "content": "base58\n==========\n\n[![Build Status](http://img.shields.io/travis/btcsuite/btcutil.svg)](https://travis-ci.org/btcsuite/btcutil)\n[![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org)\n[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](http://godoc.org/github.com/btcsuite/btcutil/base58)\n\nPackage base58 provides an API for encoding and decoding to and from the\nmodified base58 encoding.  It also provides an API to do Base58Check encoding,\nas described [here](https://en.bitcoin.it/wiki/Base58Check_encoding).\n\nA comprehensive suite of tests is provided to ensure proper functionality.\n\n## Installation and Updating\n\n```bash\n$ go get -u github.com/btcsuite/btcutil/base58\n```\n\n## Examples\n\n* [Decode Example](http://godoc.org/github.com/btcsuite/btcutil/base58#example-Decode)  \n  Demonstrates how to decode modified base58 encoded data.\n* [Encode Example](http://godoc.org/github.com/btcsuite/btcutil/base58#example-Encode)  \n  Demonstrates how to encode data using the modified base58 encoding scheme.\n* [CheckDecode Example](http://godoc.org/github.com/btcsuite/btcutil/base58#example-CheckDecode)  \n  Demonstrates how to decode Base58Check encoded data.\n* [CheckEncode Example](http://godoc.org/github.com/btcsuite/btcutil/base58#example-CheckEncode)  \n  Demonstrates how to encode data using the Base58Check encoding scheme.\n\n## License\n\nPackage base58 is licensed under the [copyfree](http://copyfree.org) ISC\nLicense.\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcutil/base58/alphabet.go",
    "content": "// Copyright (c) 2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\n// AUTOGENERATED by genalphabet.go; do not edit.\n\npackage base58\n\nconst (\n\t// alphabet is the modified base58 alphabet used by Bitcoin.\n\talphabet = \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\"\n\n\talphabetIdx0 = '1'\n)\n\nvar b58 = [256]byte{\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 0, 1, 2, 3, 4, 5, 6,\n\t7, 8, 255, 255, 255, 255, 255, 255,\n\t255, 9, 10, 11, 12, 13, 14, 15,\n\t16, 255, 17, 18, 19, 20, 21, 255,\n\t22, 23, 24, 25, 26, 27, 28, 29,\n\t30, 31, 32, 255, 255, 255, 255, 255,\n\t255, 33, 34, 35, 36, 37, 38, 39,\n\t40, 41, 42, 43, 255, 44, 45, 46,\n\t47, 48, 49, 50, 51, 52, 53, 54,\n\t55, 56, 57, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255,\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcutil/base58/base58.go",
    "content": "// Copyright (c) 2013-2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage base58\n\nimport (\n\t\"math/big\"\n)\n\n//go:generate go run genalphabet.go\n\nvar bigRadix = big.NewInt(58)\nvar bigZero = big.NewInt(0)\n\n// Decode decodes a modified base58 string to a byte slice.\nfunc Decode(b string) []byte {\n\tanswer := big.NewInt(0)\n\tj := big.NewInt(1)\n\n\tscratch := new(big.Int)\n\tfor i := len(b) - 1; i >= 0; i-- {\n\t\ttmp := b58[b[i]]\n\t\tif tmp == 255 {\n\t\t\treturn []byte(\"\")\n\t\t}\n\t\tscratch.SetInt64(int64(tmp))\n\t\tscratch.Mul(j, scratch)\n\t\tanswer.Add(answer, scratch)\n\t\tj.Mul(j, bigRadix)\n\t}\n\n\ttmpval := answer.Bytes()\n\n\tvar numZeros int\n\tfor numZeros = 0; numZeros < len(b); numZeros++ {\n\t\tif b[numZeros] != alphabetIdx0 {\n\t\t\tbreak\n\t\t}\n\t}\n\tflen := numZeros + len(tmpval)\n\tval := make([]byte, flen)\n\tcopy(val[numZeros:], tmpval)\n\n\treturn val\n}\n\n// Encode encodes a byte slice to a modified base58 string.\nfunc Encode(b []byte) string {\n\tx := new(big.Int)\n\tx.SetBytes(b)\n\n\tanswer := make([]byte, 0, len(b)*136/100)\n\tfor x.Cmp(bigZero) > 0 {\n\t\tmod := new(big.Int)\n\t\tx.DivMod(x, bigRadix, mod)\n\t\tanswer = append(answer, alphabet[mod.Int64()])\n\t}\n\n\t// leading zero bytes\n\tfor _, i := range b {\n\t\tif i != 0 {\n\t\t\tbreak\n\t\t}\n\t\tanswer = append(answer, alphabetIdx0)\n\t}\n\n\t// reverse\n\talen := len(answer)\n\tfor i := 0; i < alen/2; i++ {\n\t\tanswer[i], answer[alen-1-i] = answer[alen-1-i], answer[i]\n\t}\n\n\treturn string(answer)\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcutil/base58/base58check.go",
    "content": "// Copyright (c) 2013-2014 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage base58\n\nimport (\n\t\"crypto/sha256\"\n\t\"errors\"\n)\n\n// ErrChecksum indicates that the checksum of a check-encoded string does not verify against\n// the checksum.\nvar ErrChecksum = errors.New(\"checksum error\")\n\n// ErrInvalidFormat indicates that the check-encoded string has an invalid format.\nvar ErrInvalidFormat = errors.New(\"invalid format: version and/or checksum bytes missing\")\n\n// checksum: first four bytes of sha256^2\nfunc checksum(input []byte) (cksum [4]byte) {\n\th := sha256.Sum256(input)\n\th2 := sha256.Sum256(h[:])\n\tcopy(cksum[:], h2[:4])\n\treturn\n}\n\n// CheckEncode prepends a version byte and appends a four byte checksum.\nfunc CheckEncode(input []byte, version byte) string {\n\tb := make([]byte, 0, 1+len(input)+4)\n\tb = append(b, version)\n\tb = append(b, input[:]...)\n\tcksum := checksum(b)\n\tb = append(b, cksum[:]...)\n\treturn Encode(b)\n}\n\n// CheckDecode decodes a string that was encoded with CheckEncode and verifies the checksum.\nfunc CheckDecode(input string) (result []byte, version byte, err error) {\n\tdecoded := Decode(input)\n\tif len(decoded) < 5 {\n\t\treturn nil, 0, ErrInvalidFormat\n\t}\n\tversion = decoded[0]\n\tvar cksum [4]byte\n\tcopy(cksum[:], decoded[len(decoded)-4:])\n\tif checksum(decoded[:len(decoded)-4]) != cksum {\n\t\treturn nil, 0, ErrChecksum\n\t}\n\tpayload := decoded[1 : len(decoded)-4]\n\tresult = append(result, payload...)\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcutil/base58/cov_report.sh",
    "content": "#!/bin/sh\n\n# This script uses gocov to generate a test coverage report.\n# The gocov tool my be obtained with the following command:\n#   go get github.com/axw/gocov/gocov\n#\n# It will be installed to $GOPATH/bin, so ensure that location is in your $PATH.\n\n# Check for gocov.\ntype gocov >/dev/null 2>&1\nif [ $? -ne 0 ]; then\n\techo >&2 \"This script requires the gocov tool.\"\n\techo >&2 \"You may obtain it with the following command:\"\n\techo >&2 \"go get github.com/axw/gocov/gocov\"\n\texit 1\nfi\ngocov test | gocov report\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcutil/base58/doc.go",
    "content": "// Copyright (c) 2014 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\n/*\nPackage base58 provides an API for working with modified base58 and Base58Check\nencodings.\n\nModified Base58 Encoding\n\nStandard base58 encoding is similar to standard base64 encoding except, as the\nname implies, it uses a 58 character alphabet which results in an alphanumeric\nstring and allows some characters which are problematic for humans to be\nexcluded.  Due to this, there can be various base58 alphabets.\n\nThe modified base58 alphabet used by Bitcoin, and hence this package, omits the\n0, O, I, and l characters that look the same in many fonts and are therefore\nhard to humans to distinguish.\n\nBase58Check Encoding Scheme\n\nThe Base58Check encoding scheme is primarily used for Bitcoin addresses at the\ntime of this writing, however it can be used to generically encode arbitrary\nbyte arrays into human-readable strings along with a version byte that can be\nused to differentiate the same payload.  For Bitcoin addresses, the extra\nversion is used to differentiate the network of otherwise identical public keys\nwhich helps prevent using an address intended for one network on another.\n*/\npackage base58\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcutil/base58/genalphabet.go",
    "content": "// Copyright (c) 2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\n//+build ignore\n\npackage main\n\nimport (\n\t\"bytes\"\n\t\"io\"\n\t\"log\"\n\t\"os\"\n\t\"strconv\"\n)\n\nvar (\n\tstart = []byte(`// Copyright (c) 2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\n// AUTOGENERATED by genalphabet.go; do not edit.\n\npackage base58\n\nconst (\n\t// alphabet is the modified base58 alphabet used by Bitcoin.\n\talphabet = \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\"\n\n\talphabetIdx0 = '1'\n)\n\nvar b58 = [256]byte{`)\n\n\tend = []byte(`}`)\n\n\talphabet = []byte(\"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\")\n\ttab      = []byte(\"\\t\")\n\tinvalid  = []byte(\"255\")\n\tcomma    = []byte(\",\")\n\tspace    = []byte(\" \")\n\tnl       = []byte(\"\\n\")\n)\n\nfunc write(w io.Writer, b []byte) {\n\t_, err := w.Write(b)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n}\n\nfunc main() {\n\tfi, err := os.Create(\"alphabet.go\")\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tdefer fi.Close()\n\n\twrite(fi, start)\n\twrite(fi, nl)\n\tfor i := byte(0); i < 32; i++ {\n\t\twrite(fi, tab)\n\t\tfor j := byte(0); j < 8; j++ {\n\t\t\tidx := bytes.IndexByte(alphabet, i*8+j)\n\t\t\tif idx == -1 {\n\t\t\t\twrite(fi, invalid)\n\t\t\t} else {\n\t\t\t\twrite(fi, strconv.AppendInt(nil, int64(idx), 10))\n\t\t\t}\n\t\t\twrite(fi, comma)\n\t\t\tif j != 7 {\n\t\t\t\twrite(fi, space)\n\t\t\t}\n\t\t}\n\t\twrite(fi, nl)\n\t}\n\twrite(fi, end)\n\twrite(fi, nl)\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcutil/bech32/README.md",
    "content": "bech32\n==========\n\n[![Build Status](http://img.shields.io/travis/btcsuite/btcutil.svg)](https://travis-ci.org/btcsuite/btcutil)\n[![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org)\n[![GoDoc](https://godoc.org/github.com/btcsuite/btcutil/bech32?status.png)](http://godoc.org/github.com/btcsuite/btcutil/bech32)\n\nPackage bech32 provides a Go implementation of the bech32 format specified in\n[BIP 173](https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki).\n\nTest vectors from BIP 173 are added to ensure compatibility with the BIP.\n\n## Installation and Updating\n\n```bash\n$ go get -u github.com/btcsuite/btcutil/bech32\n```\n\n## Examples\n\n* [Bech32 decode Example](http://godoc.org/github.com/btcsuite/btcutil/bech32#example-Bech32Decode)\n  Demonstrates how to decode a bech32 encoded string.\n* [Bech32 encode Example](http://godoc.org/github.com/btcsuite/btcutil/bech32#example-BechEncode)\n  Demonstrates how to encode data into a bech32 string.\n\n## License\n\nPackage bech32 is licensed under the [copyfree](http://copyfree.org) ISC\nLicense.\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcutil/bech32/bech32.go",
    "content": "// Copyright (c) 2017 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage bech32\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\nconst charset = \"qpzry9x8gf2tvdw0s3jn54khce6mua7l\"\n\nvar gen = []int{0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3}\n\n// Decode decodes a bech32 encoded string, returning the human-readable\n// part and the data part excluding the checksum.\nfunc Decode(bech string) (string, []byte, error) {\n\t// The maximum allowed length for a bech32 string is 90. It must also\n\t// be at least 8 characters, since it needs a non-empty HRP, a\n\t// separator, and a 6 character checksum.\n\tif len(bech) < 8 || len(bech) > 90 {\n\t\treturn \"\", nil, fmt.Errorf(\"invalid bech32 string length %d\",\n\t\t\tlen(bech))\n\t}\n\t// Only\tASCII characters between 33 and 126 are allowed.\n\tfor i := 0; i < len(bech); i++ {\n\t\tif bech[i] < 33 || bech[i] > 126 {\n\t\t\treturn \"\", nil, fmt.Errorf(\"invalid character in \"+\n\t\t\t\t\"string: '%c'\", bech[i])\n\t\t}\n\t}\n\n\t// The characters must be either all lowercase or all uppercase.\n\tlower := strings.ToLower(bech)\n\tupper := strings.ToUpper(bech)\n\tif bech != lower && bech != upper {\n\t\treturn \"\", nil, fmt.Errorf(\"string not all lowercase or all \" +\n\t\t\t\"uppercase\")\n\t}\n\n\t// We'll work with the lowercase string from now on.\n\tbech = lower\n\n\t// The string is invalid if the last '1' is non-existent, it is the\n\t// first character of the string (no human-readable part) or one of the\n\t// last 6 characters of the string (since checksum cannot contain '1'),\n\t// or if the string is more than 90 characters in total.\n\tone := strings.LastIndexByte(bech, '1')\n\tif one < 1 || one+7 > len(bech) {\n\t\treturn \"\", nil, fmt.Errorf(\"invalid index of 1\")\n\t}\n\n\t// The human-readable part is everything before the last '1'.\n\thrp := bech[:one]\n\tdata := bech[one+1:]\n\n\t// Each character corresponds to the byte with value of the index in\n\t// 'charset'.\n\tdecoded, err := toBytes(data)\n\tif err != nil {\n\t\treturn \"\", nil, fmt.Errorf(\"failed converting data to bytes: \"+\n\t\t\t\"%v\", err)\n\t}\n\n\tif !bech32VerifyChecksum(hrp, decoded) {\n\t\tmoreInfo := \"\"\n\t\tchecksum := bech[len(bech)-6:]\n\t\texpected, err := toChars(bech32Checksum(hrp,\n\t\t\tdecoded[:len(decoded)-6]))\n\t\tif err == nil {\n\t\t\tmoreInfo = fmt.Sprintf(\"Expected %v, got %v.\",\n\t\t\t\texpected, checksum)\n\t\t}\n\t\treturn \"\", nil, fmt.Errorf(\"checksum failed. \" + moreInfo)\n\t}\n\n\t// We exclude the last 6 bytes, which is the checksum.\n\treturn hrp, decoded[:len(decoded)-6], nil\n}\n\n// Encode encodes a byte slice into a bech32 string with the\n// human-readable part hrb. Note that the bytes must each encode 5 bits\n// (base32).\nfunc Encode(hrp string, data []byte) (string, error) {\n\t// Calculate the checksum of the data and append it at the end.\n\tchecksum := bech32Checksum(hrp, data)\n\tcombined := append(data, checksum...)\n\n\t// The resulting bech32 string is the concatenation of the hrp, the\n\t// separator 1, data and checksum. Everything after the separator is\n\t// represented using the specified charset.\n\tdataChars, err := toChars(combined)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"unable to convert data bytes to chars: \"+\n\t\t\t\"%v\", err)\n\t}\n\treturn hrp + \"1\" + dataChars, nil\n}\n\n// toBytes converts each character in the string 'chars' to the value of the\n// index of the correspoding character in 'charset'.\nfunc toBytes(chars string) ([]byte, error) {\n\tdecoded := make([]byte, 0, len(chars))\n\tfor i := 0; i < len(chars); i++ {\n\t\tindex := strings.IndexByte(charset, chars[i])\n\t\tif index < 0 {\n\t\t\treturn nil, fmt.Errorf(\"invalid character not part of \"+\n\t\t\t\t\"charset: %v\", chars[i])\n\t\t}\n\t\tdecoded = append(decoded, byte(index))\n\t}\n\treturn decoded, nil\n}\n\n// toChars converts the byte slice 'data' to a string where each byte in 'data'\n// encodes the index of a character in 'charset'.\nfunc toChars(data []byte) (string, error) {\n\tresult := make([]byte, 0, len(data))\n\tfor _, b := range data {\n\t\tif int(b) >= len(charset) {\n\t\t\treturn \"\", fmt.Errorf(\"invalid data byte: %v\", b)\n\t\t}\n\t\tresult = append(result, charset[b])\n\t}\n\treturn string(result), nil\n}\n\n// ConvertBits converts a byte slice where each byte is encoding fromBits bits,\n// to a byte slice where each byte is encoding toBits bits.\nfunc ConvertBits(data []byte, fromBits, toBits uint8, pad bool) ([]byte, error) {\n\tif fromBits < 1 || fromBits > 8 || toBits < 1 || toBits > 8 {\n\t\treturn nil, fmt.Errorf(\"only bit groups between 1 and 8 allowed\")\n\t}\n\n\t// The final bytes, each byte encoding toBits bits.\n\tvar regrouped []byte\n\n\t// Keep track of the next byte we create and how many bits we have\n\t// added to it out of the toBits goal.\n\tnextByte := byte(0)\n\tfilledBits := uint8(0)\n\n\tfor _, b := range data {\n\n\t\t// Discard unused bits.\n\t\tb = b << (8 - fromBits)\n\n\t\t// How many bits remaining to extract from the input data.\n\t\tremFromBits := fromBits\n\t\tfor remFromBits > 0 {\n\t\t\t// How many bits remaining to be added to the next byte.\n\t\t\tremToBits := toBits - filledBits\n\n\t\t\t// The number of bytes to next extract is the minimum of\n\t\t\t// remFromBits and remToBits.\n\t\t\ttoExtract := remFromBits\n\t\t\tif remToBits < toExtract {\n\t\t\t\ttoExtract = remToBits\n\t\t\t}\n\n\t\t\t// Add the next bits to nextByte, shifting the already\n\t\t\t// added bits to the left.\n\t\t\tnextByte = (nextByte << toExtract) | (b >> (8 - toExtract))\n\n\t\t\t// Discard the bits we just extracted and get ready for\n\t\t\t// next iteration.\n\t\t\tb = b << toExtract\n\t\t\tremFromBits -= toExtract\n\t\t\tfilledBits += toExtract\n\n\t\t\t// If the nextByte is completely filled, we add it to\n\t\t\t// our regrouped bytes and start on the next byte.\n\t\t\tif filledBits == toBits {\n\t\t\t\tregrouped = append(regrouped, nextByte)\n\t\t\t\tfilledBits = 0\n\t\t\t\tnextByte = 0\n\t\t\t}\n\t\t}\n\t}\n\n\t// We pad any unfinished group if specified.\n\tif pad && filledBits > 0 {\n\t\tnextByte = nextByte << (toBits - filledBits)\n\t\tregrouped = append(regrouped, nextByte)\n\t\tfilledBits = 0\n\t\tnextByte = 0\n\t}\n\n\t// Any incomplete group must be <= 4 bits, and all zeroes.\n\tif filledBits > 0 && (filledBits > 4 || nextByte != 0) {\n\t\treturn nil, fmt.Errorf(\"invalid incomplete group\")\n\t}\n\n\treturn regrouped, nil\n}\n\n// For more details on the checksum calculation, please refer to BIP 173.\nfunc bech32Checksum(hrp string, data []byte) []byte {\n\t// Convert the bytes to list of integers, as this is needed for the\n\t// checksum calculation.\n\tintegers := make([]int, len(data))\n\tfor i, b := range data {\n\t\tintegers[i] = int(b)\n\t}\n\tvalues := append(bech32HrpExpand(hrp), integers...)\n\tvalues = append(values, []int{0, 0, 0, 0, 0, 0}...)\n\tpolymod := bech32Polymod(values) ^ 1\n\tvar res []byte\n\tfor i := 0; i < 6; i++ {\n\t\tres = append(res, byte((polymod>>uint(5*(5-i)))&31))\n\t}\n\treturn res\n}\n\n// For more details on the polymod calculation, please refer to BIP 173.\nfunc bech32Polymod(values []int) int {\n\tchk := 1\n\tfor _, v := range values {\n\t\tb := chk >> 25\n\t\tchk = (chk&0x1ffffff)<<5 ^ v\n\t\tfor i := 0; i < 5; i++ {\n\t\t\tif (b>>uint(i))&1 == 1 {\n\t\t\t\tchk ^= gen[i]\n\t\t\t}\n\t\t}\n\t}\n\treturn chk\n}\n\n// For more details on HRP expansion, please refer to BIP 173.\nfunc bech32HrpExpand(hrp string) []int {\n\tv := make([]int, 0, len(hrp)*2+1)\n\tfor i := 0; i < len(hrp); i++ {\n\t\tv = append(v, int(hrp[i]>>5))\n\t}\n\tv = append(v, 0)\n\tfor i := 0; i < len(hrp); i++ {\n\t\tv = append(v, int(hrp[i]&31))\n\t}\n\treturn v\n}\n\n// For more details on the checksum verification, please refer to BIP 173.\nfunc bech32VerifyChecksum(hrp string, data []byte) bool {\n\tintegers := make([]int, len(data))\n\tfor i, b := range data {\n\t\tintegers[i] = int(b)\n\t}\n\tconcat := append(bech32HrpExpand(hrp), integers...)\n\treturn bech32Polymod(concat) == 1\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcutil/bech32/doc.go",
    "content": "// Copyright (c) 2017 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\n/*\nPackage bech32 provides a Go implementation of the bech32 format specified in\nBIP 173.\n\nBech32 strings consist of a human-readable part (hrp), followed by the\nseparator 1, then a checksummed data part encoded using the 32 characters\n\"qpzry9x8gf2tvdw0s3jn54khce6mua7l\".\n\nMore info: https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki\n*/\npackage bech32\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcutil/block.go",
    "content": "// Copyright (c) 2013-2016 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcutil\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/btcsuite/btcd/chaincfg/chainhash\"\n\t\"github.com/btcsuite/btcd/wire\"\n)\n\n// OutOfRangeError describes an error due to accessing an element that is out\n// of range.\ntype OutOfRangeError string\n\n// BlockHeightUnknown is the value returned for a block height that is unknown.\n// This is typically because the block has not been inserted into the main chain\n// yet.\nconst BlockHeightUnknown = int32(-1)\n\n// Error satisfies the error interface and prints human-readable errors.\nfunc (e OutOfRangeError) Error() string {\n\treturn string(e)\n}\n\n// Block defines a bitcoin block that provides easier and more efficient\n// manipulation of raw blocks.  It also memoizes hashes for the block and its\n// transactions on their first access so subsequent accesses don't have to\n// repeat the relatively expensive hashing operations.\ntype Block struct {\n\tmsgBlock                 *wire.MsgBlock  // Underlying MsgBlock\n\tserializedBlock          []byte          // Serialized bytes for the block\n\tserializedBlockNoWitness []byte          // Serialized bytes for block w/o witness data\n\tblockHash                *chainhash.Hash // Cached block hash\n\tblockHeight              int32           // Height in the main block chain\n\ttransactions             []*Tx           // Transactions\n\ttxnsGenerated            bool            // ALL wrapped transactions generated\n}\n\n// MsgBlock returns the underlying wire.MsgBlock for the Block.\nfunc (b *Block) MsgBlock() *wire.MsgBlock {\n\t// Return the cached block.\n\treturn b.msgBlock\n}\n\n// Bytes returns the serialized bytes for the Block.  This is equivalent to\n// calling Serialize on the underlying wire.MsgBlock, however it caches the\n// result so subsequent calls are more efficient.\nfunc (b *Block) Bytes() ([]byte, error) {\n\t// Return the cached serialized bytes if it has already been generated.\n\tif len(b.serializedBlock) != 0 {\n\t\treturn b.serializedBlock, nil\n\t}\n\n\t// Serialize the MsgBlock.\n\tw := bytes.NewBuffer(make([]byte, 0, b.msgBlock.SerializeSize()))\n\terr := b.msgBlock.Serialize(w)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tserializedBlock := w.Bytes()\n\n\t// Cache the serialized bytes and return them.\n\tb.serializedBlock = serializedBlock\n\treturn serializedBlock, nil\n}\n\n// BytesNoWitness returns the serialized bytes for the block with transactions\n// encoded without any witness data.\nfunc (b *Block) BytesNoWitness() ([]byte, error) {\n\t// Return the cached serialized bytes if it has already been generated.\n\tif len(b.serializedBlockNoWitness) != 0 {\n\t\treturn b.serializedBlockNoWitness, nil\n\t}\n\n\t// Serialize the MsgBlock.\n\tvar w bytes.Buffer\n\terr := b.msgBlock.SerializeNoWitness(&w)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tserializedBlock := w.Bytes()\n\n\t// Cache the serialized bytes and return them.\n\tb.serializedBlockNoWitness = serializedBlock\n\treturn serializedBlock, nil\n}\n\n// Hash returns the block identifier hash for the Block.  This is equivalent to\n// calling BlockHash on the underlying wire.MsgBlock, however it caches the\n// result so subsequent calls are more efficient.\nfunc (b *Block) Hash() *chainhash.Hash {\n\t// Return the cached block hash if it has already been generated.\n\tif b.blockHash != nil {\n\t\treturn b.blockHash\n\t}\n\n\t// Cache the block hash and return it.\n\thash := b.msgBlock.BlockHash()\n\tb.blockHash = &hash\n\treturn &hash\n}\n\n// Tx returns a wrapped transaction (btcutil.Tx) for the transaction at the\n// specified index in the Block.  The supplied index is 0 based.  That is to\n// say, the first transaction in the block is txNum 0.  This is nearly\n// equivalent to accessing the raw transaction (wire.MsgTx) from the\n// underlying wire.MsgBlock, however the wrapped transaction has some helpful\n// properties such as caching the hash so subsequent calls are more efficient.\nfunc (b *Block) Tx(txNum int) (*Tx, error) {\n\t// Ensure the requested transaction is in range.\n\tnumTx := uint64(len(b.msgBlock.Transactions))\n\tif txNum < 0 || uint64(txNum) > numTx {\n\t\tstr := fmt.Sprintf(\"transaction index %d is out of range - max %d\",\n\t\t\ttxNum, numTx-1)\n\t\treturn nil, OutOfRangeError(str)\n\t}\n\n\t// Generate slice to hold all of the wrapped transactions if needed.\n\tif len(b.transactions) == 0 {\n\t\tb.transactions = make([]*Tx, numTx)\n\t}\n\n\t// Return the wrapped transaction if it has already been generated.\n\tif b.transactions[txNum] != nil {\n\t\treturn b.transactions[txNum], nil\n\t}\n\n\t// Generate and cache the wrapped transaction and return it.\n\tnewTx := NewTx(b.msgBlock.Transactions[txNum])\n\tnewTx.SetIndex(txNum)\n\tb.transactions[txNum] = newTx\n\treturn newTx, nil\n}\n\n// Transactions returns a slice of wrapped transactions (btcutil.Tx) for all\n// transactions in the Block.  This is nearly equivalent to accessing the raw\n// transactions (wire.MsgTx) in the underlying wire.MsgBlock, however it\n// instead provides easy access to wrapped versions (btcutil.Tx) of them.\nfunc (b *Block) Transactions() []*Tx {\n\t// Return transactions if they have ALL already been generated.  This\n\t// flag is necessary because the wrapped transactions are lazily\n\t// generated in a sparse fashion.\n\tif b.txnsGenerated {\n\t\treturn b.transactions\n\t}\n\n\t// Generate slice to hold all of the wrapped transactions if needed.\n\tif len(b.transactions) == 0 {\n\t\tb.transactions = make([]*Tx, len(b.msgBlock.Transactions))\n\t}\n\n\t// Generate and cache the wrapped transactions for all that haven't\n\t// already been done.\n\tfor i, tx := range b.transactions {\n\t\tif tx == nil {\n\t\t\tnewTx := NewTx(b.msgBlock.Transactions[i])\n\t\t\tnewTx.SetIndex(i)\n\t\t\tb.transactions[i] = newTx\n\t\t}\n\t}\n\n\tb.txnsGenerated = true\n\treturn b.transactions\n}\n\n// TxHash returns the hash for the requested transaction number in the Block.\n// The supplied index is 0 based.  That is to say, the first transaction in the\n// block is txNum 0.  This is equivalent to calling TxHash on the underlying\n// wire.MsgTx, however it caches the result so subsequent calls are more\n// efficient.\nfunc (b *Block) TxHash(txNum int) (*chainhash.Hash, error) {\n\t// Attempt to get a wrapped transaction for the specified index.  It\n\t// will be created lazily if needed or simply return the cached version\n\t// if it has already been generated.\n\ttx, err := b.Tx(txNum)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Defer to the wrapped transaction which will return the cached hash if\n\t// it has already been generated.\n\treturn tx.Hash(), nil\n}\n\n// TxLoc returns the offsets and lengths of each transaction in a raw block.\n// It is used to allow fast indexing into transactions within the raw byte\n// stream.\nfunc (b *Block) TxLoc() ([]wire.TxLoc, error) {\n\trawMsg, err := b.Bytes()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\trbuf := bytes.NewBuffer(rawMsg)\n\n\tvar mblock wire.MsgBlock\n\ttxLocs, err := mblock.DeserializeTxLoc(rbuf)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn txLocs, err\n}\n\n// Height returns the saved height of the block in the block chain.  This value\n// will be BlockHeightUnknown if it hasn't already explicitly been set.\nfunc (b *Block) Height() int32 {\n\treturn b.blockHeight\n}\n\n// SetHeight sets the height of the block in the block chain.\nfunc (b *Block) SetHeight(height int32) {\n\tb.blockHeight = height\n}\n\n// NewBlock returns a new instance of a bitcoin block given an underlying\n// wire.MsgBlock.  See Block.\nfunc NewBlock(msgBlock *wire.MsgBlock) *Block {\n\treturn &Block{\n\t\tmsgBlock:    msgBlock,\n\t\tblockHeight: BlockHeightUnknown,\n\t}\n}\n\n// NewBlockFromBytes returns a new instance of a bitcoin block given the\n// serialized bytes.  See Block.\nfunc NewBlockFromBytes(serializedBlock []byte) (*Block, error) {\n\tbr := bytes.NewReader(serializedBlock)\n\tb, err := NewBlockFromReader(br)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tb.serializedBlock = serializedBlock\n\treturn b, nil\n}\n\n// NewBlockFromReader returns a new instance of a bitcoin block given a\n// Reader to deserialize the block.  See Block.\nfunc NewBlockFromReader(r io.Reader) (*Block, error) {\n\t// Deserialize the bytes into a MsgBlock.\n\tvar msgBlock wire.MsgBlock\n\terr := msgBlock.Deserialize(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tb := Block{\n\t\tmsgBlock:    &msgBlock,\n\t\tblockHeight: BlockHeightUnknown,\n\t}\n\treturn &b, nil\n}\n\n// NewBlockFromBlockAndBytes returns a new instance of a bitcoin block given\n// an underlying wire.MsgBlock and the serialized bytes for it.  See Block.\nfunc NewBlockFromBlockAndBytes(msgBlock *wire.MsgBlock, serializedBlock []byte) *Block {\n\treturn &Block{\n\t\tmsgBlock:        msgBlock,\n\t\tserializedBlock: serializedBlock,\n\t\tblockHeight:     BlockHeightUnknown,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcutil/certgen.go",
    "content": "// Copyright (c) 2013-2015 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcutil\n\nimport (\n\t\"bytes\"\n\t\"crypto/ecdsa\"\n\t\"crypto/elliptic\"\n\t\"crypto/rand\"\n\t_ \"crypto/sha512\" // Needed for RegisterHash in init\n\t\"crypto/x509\"\n\t\"crypto/x509/pkix\"\n\t\"encoding/pem\"\n\t\"errors\"\n\t\"fmt\"\n\t\"math/big\"\n\t\"net\"\n\t\"os\"\n\t\"time\"\n)\n\n// NewTLSCertPair returns a new PEM-encoded x.509 certificate pair\n// based on a 521-bit ECDSA private key.  The machine's local interface\n// addresses and all variants of IPv4 and IPv6 localhost are included as\n// valid IP addresses.\nfunc NewTLSCertPair(organization string, validUntil time.Time, extraHosts []string) (cert, key []byte, err error) {\n\tnow := time.Now()\n\tif validUntil.Before(now) {\n\t\treturn nil, nil, errors.New(\"validUntil would create an already-expired certificate\")\n\t}\n\n\tpriv, err := ecdsa.GenerateKey(elliptic.P521(), rand.Reader)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\t// end of ASN.1 time\n\tendOfTime := time.Date(2049, 12, 31, 23, 59, 59, 0, time.UTC)\n\tif validUntil.After(endOfTime) {\n\t\tvalidUntil = endOfTime\n\t}\n\n\tserialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128)\n\tserialNumber, err := rand.Int(rand.Reader, serialNumberLimit)\n\tif err != nil {\n\t\treturn nil, nil, fmt.Errorf(\"failed to generate serial number: %s\", err)\n\t}\n\n\thost, err := os.Hostname()\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tipAddresses := []net.IP{net.ParseIP(\"127.0.0.1\"), net.ParseIP(\"::1\")}\n\tdnsNames := []string{host}\n\tif host != \"localhost\" {\n\t\tdnsNames = append(dnsNames, \"localhost\")\n\t}\n\n\taddIP := func(ipAddr net.IP) {\n\t\tfor _, ip := range ipAddresses {\n\t\t\tif bytes.Equal(ip, ipAddr) {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t\tipAddresses = append(ipAddresses, ipAddr)\n\t}\n\taddHost := func(host string) {\n\t\tfor _, dnsName := range dnsNames {\n\t\t\tif host == dnsName {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t\tdnsNames = append(dnsNames, host)\n\t}\n\n\taddrs, err := interfaceAddrs()\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tfor _, a := range addrs {\n\t\tipAddr, _, err := net.ParseCIDR(a.String())\n\t\tif err == nil {\n\t\t\taddIP(ipAddr)\n\t\t}\n\t}\n\n\tfor _, hostStr := range extraHosts {\n\t\thost, _, err := net.SplitHostPort(hostStr)\n\t\tif err != nil {\n\t\t\thost = hostStr\n\t\t}\n\t\tif ip := net.ParseIP(host); ip != nil {\n\t\t\taddIP(ip)\n\t\t} else {\n\t\t\taddHost(host)\n\t\t}\n\t}\n\n\ttemplate := x509.Certificate{\n\t\tSerialNumber: serialNumber,\n\t\tSubject: pkix.Name{\n\t\t\tOrganization: []string{organization},\n\t\t\tCommonName:   host,\n\t\t},\n\t\tNotBefore: now.Add(-time.Hour * 24),\n\t\tNotAfter:  validUntil,\n\n\t\tKeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature |\n\t\t\tx509.KeyUsageCertSign,\n\t\tIsCA: true, // so can sign self.\n\t\tBasicConstraintsValid: true,\n\n\t\tDNSNames:    dnsNames,\n\t\tIPAddresses: ipAddresses,\n\t}\n\n\tderBytes, err := x509.CreateCertificate(rand.Reader, &template,\n\t\t&template, &priv.PublicKey, priv)\n\tif err != nil {\n\t\treturn nil, nil, fmt.Errorf(\"failed to create certificate: %v\", err)\n\t}\n\n\tcertBuf := &bytes.Buffer{}\n\terr = pem.Encode(certBuf, &pem.Block{Type: \"CERTIFICATE\", Bytes: derBytes})\n\tif err != nil {\n\t\treturn nil, nil, fmt.Errorf(\"failed to encode certificate: %v\", err)\n\t}\n\n\tkeybytes, err := x509.MarshalECPrivateKey(priv)\n\tif err != nil {\n\t\treturn nil, nil, fmt.Errorf(\"failed to marshal private key: %v\", err)\n\t}\n\n\tkeyBuf := &bytes.Buffer{}\n\terr = pem.Encode(keyBuf, &pem.Block{Type: \"EC PRIVATE KEY\", Bytes: keybytes})\n\tif err != nil {\n\t\treturn nil, nil, fmt.Errorf(\"failed to encode private key: %v\", err)\n\t}\n\n\treturn certBuf.Bytes(), keyBuf.Bytes(), nil\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcutil/const.go",
    "content": "// Copyright (c) 2013-2014 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcutil\n\nconst (\n\t// SatoshiPerBitcent is the number of satoshi in one bitcoin cent.\n\tSatoshiPerBitcent = 1e6\n\n\t// SatoshiPerBitcoin is the number of satoshi in one bitcoin (1 BTC).\n\tSatoshiPerBitcoin = 1e8\n\n\t// MaxSatoshi is the maximum transaction amount allowed in satoshi.\n\tMaxSatoshi = 21e6 * SatoshiPerBitcoin\n)\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcutil/cov_report.sh",
    "content": "#!/bin/sh\n\n# This script uses gocov to generate a test coverage report.\n# The gocov tool my be obtained with the following command:\n#   go get github.com/axw/gocov/gocov\n#\n# It will be installed to $GOPATH/bin, so ensure that location is in your $PATH.\n\n# Check for gocov.\ntype gocov >/dev/null 2>&1\nif [ $? -ne 0 ]; then\n\techo >&2 \"This script requires the gocov tool.\"\n\techo >&2 \"You may obtain it with the following command:\"\n\techo >&2 \"go get github.com/axw/gocov/gocov\"\n\texit 1\nfi\ngocov test | gocov report\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcutil/doc.go",
    "content": "// Copyright (c) 2013-2014 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\n/*\nPackage btcutil provides bitcoin-specific convenience functions and types.\n\nBlock Overview\n\nA Block defines a bitcoin block that provides easier and more efficient\nmanipulation of raw wire protocol blocks.  It also memoizes hashes for the\nblock and its transactions on their first access so subsequent accesses don't\nhave to repeat the relatively expensive hashing operations.\n\nTx Overview\n\nA Tx defines a bitcoin transaction that provides more efficient manipulation of\nraw wire protocol transactions.  It memoizes the hash for the transaction on its\nfirst access so subsequent accesses don't have to repeat the relatively\nexpensive hashing operations.\n\nAddress Overview\n\nThe Address interface provides an abstraction for a Bitcoin address.  While the\nmost common type is a pay-to-pubkey-hash, Bitcoin already supports others and\nmay well support more in the future.  This package currently provides\nimplementations for the pay-to-pubkey, pay-to-pubkey-hash, and\npay-to-script-hash address types.\n\nTo decode/encode an address:\n\n\t// NOTE: The default network is only used for address types which do not\n\t// already contain that information.  At this time, that is only\n\t// pay-to-pubkey addresses.\n\taddrString := \"04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962\" +\n\t\t\"e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d57\" +\n\t\t\"8a4c702b6bf11d5f\"\n\tdefaultNet := &chaincfg.MainNetParams\n\taddr, err := btcutil.DecodeAddress(addrString, defaultNet)\n\tif err != nil {\n\t\tfmt.Println(err)\n\t\treturn\n\t}\n\tfmt.Println(addr.EncodeAddress())\n*/\npackage btcutil\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcutil/goclean.sh",
    "content": "#!/bin/bash\n# The script does automatic checking on a Go package and its sub-packages, including:\n# 1. gofmt         (http://golang.org/cmd/gofmt/)\n# 2. goimports     (https://github.com/bradfitz/goimports)\n# 3. golint        (https://github.com/golang/lint)\n# 4. go vet        (http://golang.org/cmd/vet)\n# 5. gosimple      (https://github.com/dominikh/go-simple)\n# 6. unconvert     (https://github.com/mdempsky/unconvert)\n# 7. race detector (http://blog.golang.org/race-detector)\n# 8. test coverage (http://blog.golang.org/cover)\n#\n# gometalint (github.com/alecthomas/gometalinter) is used to run each each\n# static checker.\n\nset -ex\n\n# Automatic checks\ntest -z \"$(gometalinter --disable-all \\\n--enable=gofmt \\\n--enable=goimports \\\n--enable=golint \\\n--enable=vet \\\n--enable=gosimple \\\n--enable=unconvert \\\n--deadline=120s ./... | grep -v 'ExampleNew' 2>&1 | tee /dev/stderr)\"\nenv GORACE=\"halt_on_error=1\" go test -race ./...\n\n# Run test coverage on each subdirectories and merge the coverage profile.\n\necho \"mode: count\" > profile.cov\n\n# Standard go tooling behavior is to ignore dirs with leading underscores.\nfor dir in $(find . -maxdepth 10 -not -path './.git*' -not -path '*/_*' -type d);\ndo\nif ls $dir/*.go &> /dev/null; then\n  go test -covermode=count -coverprofile=$dir/profile.tmp $dir\n  if [ -f $dir/profile.tmp ]; then\n    cat $dir/profile.tmp | tail -n +2 >> profile.cov\n    rm $dir/profile.tmp\n  fi\nfi\ndone\n\ngo tool cover -func profile.cov\n\n# To submit the test coverage result to coveralls.io,\n# use goveralls (https://github.com/mattn/goveralls)\n# goveralls -coverprofile=profile.cov -service=travis-ci\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcutil/hash160.go",
    "content": "// Copyright (c) 2013-2017 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcutil\n\nimport (\n\t\"crypto/sha256\"\n\t\"hash\"\n\n\t\"golang.org/x/crypto/ripemd160\"\n)\n\n// Calculate the hash of hasher over buf.\nfunc calcHash(buf []byte, hasher hash.Hash) []byte {\n\thasher.Write(buf)\n\treturn hasher.Sum(nil)\n}\n\n// Hash160 calculates the hash ripemd160(sha256(b)).\nfunc Hash160(buf []byte) []byte {\n\treturn calcHash(calcHash(buf, sha256.New()), ripemd160.New())\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcutil/hdkeychain/README.md",
    "content": "hdkeychain\n==========\n\n[![Build Status](http://img.shields.io/travis/btcsuite/btcutil.svg)](https://travis-ci.org/btcsuite/btcutil)\n[![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org)\n[![GoDoc](http://img.shields.io/badge/godoc-reference-blue.svg)](http://godoc.org/github.com/btcsuite/btcutil/hdkeychain)\n\nPackage hdkeychain provides an API for bitcoin hierarchical deterministic\nextended keys (BIP0032).\n\nA comprehensive suite of tests is provided to ensure proper functionality.  See\n`test_coverage.txt` for the gocov coverage report.  Alternatively, if you are\nrunning a POSIX OS, you can run the `cov_report.sh` script for a real-time\nreport.\n\n## Feature Overview\n\n- Full BIP0032 implementation\n- Single type for private and public extended keys\n- Convenient cryptograpically secure seed generation\n- Simple creation of master nodes\n- Support for multi-layer derivation\n- Easy serialization and deserialization for both private and public extended\n  keys\n- Support for custom networks by registering them with chaincfg\n- Obtaining the underlying EC pubkeys, EC privkeys, and associated bitcoin\n  addresses ties in seamlessly with existing btcec and btcutil types which\n  provide powerful tools for working with them to do things like sign\n  transations and generate payment scripts\n- Uses the btcec package which is highly optimized for secp256k1\n- Code examples including:\n  - Generating a cryptographically secure random seed and deriving a\n    master node from it\n  - Default HD wallet layout as described by BIP0032\n  - Audits use case as described by BIP0032\n- Comprehensive test coverage including the BIP0032 test vectors\n- Benchmarks\n\n## Installation and Updating\n\n```bash\n$ go get -u github.com/btcsuite/btcutil/hdkeychain\n```\n\n## Examples\n\n* [NewMaster Example](http://godoc.org/github.com/btcsuite/btcutil/hdkeychain#example-NewMaster)  \n  Demonstrates how to generate a cryptographically random seed then use it to\n  create a new master node (extended key).\n* [Default Wallet Layout Example](http://godoc.org/github.com/btcsuite/btcutil/hdkeychain#example-package--DefaultWalletLayout)  \n  Demonstrates the default hierarchical deterministic wallet layout as described\n  in BIP0032.\n* [Audits Use Case Example](http://godoc.org/github.com/btcsuite/btcutil/hdkeychain#example-package--Audits)  \n  Demonstrates the audits use case in BIP0032.\n\n## License\n\nPackage hdkeychain is licensed under the [copyfree](http://copyfree.org) ISC\nLicense.\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcutil/hdkeychain/cov_report.sh",
    "content": "#!/bin/sh\n\n# This script uses gocov to generate a test coverage report.\n# The gocov tool my be obtained with the following command:\n#   go get github.com/axw/gocov/gocov\n#\n# It will be installed to $GOPATH/bin, so ensure that location is in your $PATH.\n\n# Check for gocov.\ntype gocov >/dev/null 2>&1\nif [ $? -ne 0 ]; then\n\techo >&2 \"This script requires the gocov tool.\"\n\techo >&2 \"You may obtain it with the following command:\"\n\techo >&2 \"go get github.com/axw/gocov/gocov\"\n\texit 1\nfi\ngocov test | gocov report\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcutil/hdkeychain/doc.go",
    "content": "// Copyright (c) 2014 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\n/*\nPackage hdkeychain provides an API for bitcoin hierarchical deterministic\nextended keys (BIP0032).\n\nOverview\n\nThe ability to implement hierarchical deterministic wallets depends on the\nability to create and derive hierarchical deterministic extended keys.\n\nAt a high level, this package provides support for those hierarchical\ndeterministic extended keys by providing an ExtendedKey type and supporting\nfunctions.  Each extended key can either be a private or public extended key\nwhich itself is capable of deriving a child extended key.\n\nDetermining the Extended Key Type\n\nWhether an extended key is a private or public extended key can be determined\nwith the IsPrivate function.\n\nTransaction Signing Keys and Payment Addresses\n\nIn order to create and sign transactions, or provide others with addresses to\nsend funds to, the underlying key and address material must be accessible.  This\npackage provides the ECPubKey, ECPrivKey, and Address functions for this\npurpose.\n\nThe Master Node\n\nAs previously mentioned, the extended keys are hierarchical meaning they are\nused to form a tree.  The root of that tree is called the master node and this\npackage provides the NewMaster function to create it from a cryptographically\nrandom seed.  The GenerateSeed function is provided as a convenient way to\ncreate a random seed for use with the NewMaster function.\n\nDeriving Children\n\nOnce you have created a tree root (or have deserialized an extended key as\ndiscussed later), the child extended keys can be derived by using the Child\nfunction.  The Child function supports deriving both normal (non-hardened) and\nhardened child extended keys.  In order to derive a hardened extended key, use\nthe HardenedKeyStart constant + the hardened key number as the index to the\nChild function.  This provides the ability to cascade the keys into a tree and\nhence generate the hierarchical deterministic key chains.\n\nNormal vs Hardened Child Extended Keys\n\nA private extended key can be used to derive both hardened and non-hardened\n(normal) child private and public extended keys.  A public extended key can only\nbe used to derive non-hardened child public extended keys.  As enumerated in\nBIP0032 \"knowledge of the extended public key plus any non-hardened private key\ndescending from it is equivalent to knowing the extended private key (and thus\nevery private and public key descending from it).  This means that extended\npublic keys must be treated more carefully than regular public keys. It is also\nthe reason for the existence of hardened keys, and why they are used for the\naccount level in the tree. This way, a leak of an account-specific (or below)\nprivate key never risks compromising the master or other accounts.\"\n\nNeutering a Private Extended Key\n\nA private extended key can be converted to a new instance of the corresponding\npublic extended key with the Neuter function.  The original extended key is not\nmodified.  A public extended key is still capable of deriving non-hardened child\npublic extended keys.\n\nSerializing and Deserializing Extended Keys\n\nExtended keys are serialized and deserialized with the String and\nNewKeyFromString functions.  The serialized key is a Base58-encoded string which\nlooks like the following:\n\tpublic key:   xpub68Gmy5EdvgibQVfPdqkBBCHxA5htiqg55crXYuXoQRKfDBFA1WEjWgP6LHhwBZeNK1VTsfTFUHCdrfp1bgwQ9xv5ski8PX9rL2dZXvgGDnw\n\tprivate key:  xprv9uHRZZhk6KAJC1avXpDAp4MDc3sQKNxDiPvvkX8Br5ngLNv1TxvUxt4cV1rGL5hj6KCesnDYUhd7oWgT11eZG7XnxHrnYeSvkzY7d2bhkJ7\n\nNetwork\n\nExtended keys are much like normal Bitcoin addresses in that they have version\nbytes which tie them to a specific network.  The SetNet and IsForNet functions\nare provided to set and determinine which network an extended key is associated\nwith.\n*/\npackage hdkeychain\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcutil/hdkeychain/extendedkey.go",
    "content": "// Copyright (c) 2014-2016 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage hdkeychain\n\n// References:\n//   [BIP32]: BIP0032 - Hierarchical Deterministic Wallets\n//   https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki\n\nimport (\n\t\"bytes\"\n\t\"crypto/hmac\"\n\t\"crypto/rand\"\n\t\"crypto/sha512\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"math/big\"\n\n\t\"github.com/btcsuite/btcd/btcec\"\n\t\"github.com/btcsuite/btcd/chaincfg\"\n\t\"github.com/btcsuite/btcd/chaincfg/chainhash\"\n\t\"github.com/btcsuite/btcutil\"\n\t\"github.com/btcsuite/btcutil/base58\"\n)\n\nconst (\n\t// RecommendedSeedLen is the recommended length in bytes for a seed\n\t// to a master node.\n\tRecommendedSeedLen = 32 // 256 bits\n\n\t// HardenedKeyStart is the index at which a hardended key starts.  Each\n\t// extended key has 2^31 normal child keys and 2^31 hardned child keys.\n\t// Thus the range for normal child keys is [0, 2^31 - 1] and the range\n\t// for hardened child keys is [2^31, 2^32 - 1].\n\tHardenedKeyStart = 0x80000000 // 2^31\n\n\t// MinSeedBytes is the minimum number of bytes allowed for a seed to\n\t// a master node.\n\tMinSeedBytes = 16 // 128 bits\n\n\t// MaxSeedBytes is the maximum number of bytes allowed for a seed to\n\t// a master node.\n\tMaxSeedBytes = 64 // 512 bits\n\n\t// serializedKeyLen is the length of a serialized public or private\n\t// extended key.  It consists of 4 bytes version, 1 byte depth, 4 bytes\n\t// fingerprint, 4 bytes child number, 32 bytes chain code, and 33 bytes\n\t// public/private key data.\n\tserializedKeyLen = 4 + 1 + 4 + 4 + 32 + 33 // 78 bytes\n\n\t// maxUint8 is the max positive integer which can be serialized in a uint8\n\tmaxUint8 = 1<<8 - 1\n)\n\nvar (\n\t// ErrDeriveHardFromPublic describes an error in which the caller\n\t// attempted to derive a hardened extended key from a public key.\n\tErrDeriveHardFromPublic = errors.New(\"cannot derive a hardened key \" +\n\t\t\"from a public key\")\n\n\t// ErrDeriveBeyondMaxDepth describes an error in which the caller\n\t// has attempted to derive more than 255 keys from a root key.\n\tErrDeriveBeyondMaxDepth = errors.New(\"cannot derive a key with more than \" +\n\t\t\"255 indices in its path\")\n\n\t// ErrNotPrivExtKey describes an error in which the caller attempted\n\t// to extract a private key from a public extended key.\n\tErrNotPrivExtKey = errors.New(\"unable to create private keys from a \" +\n\t\t\"public extended key\")\n\n\t// ErrInvalidChild describes an error in which the child at a specific\n\t// index is invalid due to the derived key falling outside of the valid\n\t// range for secp256k1 private keys.  This error indicates the caller\n\t// should simply ignore the invalid child extended key at this index and\n\t// increment to the next index.\n\tErrInvalidChild = errors.New(\"the extended key at this index is invalid\")\n\n\t// ErrUnusableSeed describes an error in which the provided seed is not\n\t// usable due to the derived key falling outside of the valid range for\n\t// secp256k1 private keys.  This error indicates the caller must choose\n\t// another seed.\n\tErrUnusableSeed = errors.New(\"unusable seed\")\n\n\t// ErrInvalidSeedLen describes an error in which the provided seed or\n\t// seed length is not in the allowed range.\n\tErrInvalidSeedLen = fmt.Errorf(\"seed length must be between %d and %d \"+\n\t\t\"bits\", MinSeedBytes*8, MaxSeedBytes*8)\n\n\t// ErrBadChecksum describes an error in which the checksum encoded with\n\t// a serialized extended key does not match the calculated value.\n\tErrBadChecksum = errors.New(\"bad extended key checksum\")\n\n\t// ErrInvalidKeyLen describes an error in which the provided serialized\n\t// key is not the expected length.\n\tErrInvalidKeyLen = errors.New(\"the provided serialized extended key \" +\n\t\t\"length is invalid\")\n)\n\n// masterKey is the master key used along with a random seed used to generate\n// the master node in the hierarchical tree.\nvar masterKey = []byte(\"Bitcoin seed\")\n\n// ExtendedKey houses all the information needed to support a hierarchical\n// deterministic extended key.  See the package overview documentation for\n// more details on how to use extended keys.\ntype ExtendedKey struct {\n\tkey       []byte // This will be the pubkey for extended pub keys\n\tpubKey    []byte // This will only be set for extended priv keys\n\tchainCode []byte\n\tdepth     uint8\n\tparentFP  []byte\n\tchildNum  uint32\n\tversion   []byte\n\tisPrivate bool\n}\n\n// NewExtendedKey returns a new instance of an extended key with the given\n// fields.  No error checking is performed here as it's only intended to be a\n// convenience method used to create a populated struct. This function should\n// only by used by applications that need to create custom ExtendedKeys. All\n// other applications should just use NewMaster, Child, or Neuter.\nfunc NewExtendedKey(version, key, chainCode, parentFP []byte, depth uint8,\n\tchildNum uint32, isPrivate bool) *ExtendedKey {\n\n\t// NOTE: The pubKey field is intentionally left nil so it is only\n\t// computed and memoized as required.\n\treturn &ExtendedKey{\n\t\tkey:       key,\n\t\tchainCode: chainCode,\n\t\tdepth:     depth,\n\t\tparentFP:  parentFP,\n\t\tchildNum:  childNum,\n\t\tversion:   version,\n\t\tisPrivate: isPrivate,\n\t}\n}\n\n// pubKeyBytes returns bytes for the serialized compressed public key associated\n// with this extended key in an efficient manner including memoization as\n// necessary.\n//\n// When the extended key is already a public key, the key is simply returned as\n// is since it's already in the correct form.  However, when the extended key is\n// a private key, the public key will be calculated and memoized so future\n// accesses can simply return the cached result.\nfunc (k *ExtendedKey) pubKeyBytes() []byte {\n\t// Just return the key if it's already an extended public key.\n\tif !k.isPrivate {\n\t\treturn k.key\n\t}\n\n\t// This is a private extended key, so calculate and memoize the public\n\t// key if needed.\n\tif len(k.pubKey) == 0 {\n\t\tpkx, pky := btcec.S256().ScalarBaseMult(k.key)\n\t\tpubKey := btcec.PublicKey{Curve: btcec.S256(), X: pkx, Y: pky}\n\t\tk.pubKey = pubKey.SerializeCompressed()\n\t}\n\n\treturn k.pubKey\n}\n\n// IsPrivate returns whether or not the extended key is a private extended key.\n//\n// A private extended key can be used to derive both hardened and non-hardened\n// child private and public extended keys.  A public extended key can only be\n// used to derive non-hardened child public extended keys.\nfunc (k *ExtendedKey) IsPrivate() bool {\n\treturn k.isPrivate\n}\n\n// Depth returns the current derivation level with respect to the root.\n//\n// The root key has depth zero, and the field has a maximum of 255 due to\n// how depth is serialized.\nfunc (k *ExtendedKey) Depth() uint8 {\n\treturn k.depth\n}\n\n// ParentFingerprint returns a fingerprint of the parent extended key from which\n// this one was derived.\nfunc (k *ExtendedKey) ParentFingerprint() uint32 {\n\treturn binary.BigEndian.Uint32(k.parentFP)\n}\n\n// Child returns a derived child extended key at the given index.  When this\n// extended key is a private extended key (as determined by the IsPrivate\n// function), a private extended key will be derived.  Otherwise, the derived\n// extended key will be also be a public extended key.\n//\n// When the index is greater to or equal than the HardenedKeyStart constant, the\n// derived extended key will be a hardened extended key.  It is only possible to\n// derive a hardended extended key from a private extended key.  Consequently,\n// this function will return ErrDeriveHardFromPublic if a hardened child\n// extended key is requested from a public extended key.\n//\n// A hardened extended key is useful since, as previously mentioned, it requires\n// a parent private extended key to derive.  In other words, normal child\n// extended public keys can be derived from a parent public extended key (no\n// knowledge of the parent private key) whereas hardened extended keys may not\n// be.\n//\n// NOTE: There is an extremely small chance (< 1 in 2^127) the specific child\n// index does not derive to a usable child.  The ErrInvalidChild error will be\n// returned if this should occur, and the caller is expected to ignore the\n// invalid child and simply increment to the next index.\nfunc (k *ExtendedKey) Child(i uint32) (*ExtendedKey, error) {\n\t// Prevent derivation of children beyond the max allowed depth.\n\tif k.depth == maxUint8 {\n\t\treturn nil, ErrDeriveBeyondMaxDepth\n\t}\n\n\t// There are four scenarios that could happen here:\n\t// 1) Private extended key -> Hardened child private extended key\n\t// 2) Private extended key -> Non-hardened child private extended key\n\t// 3) Public extended key -> Non-hardened child public extended key\n\t// 4) Public extended key -> Hardened child public extended key (INVALID!)\n\n\t// Case #4 is invalid, so error out early.\n\t// A hardened child extended key may not be created from a public\n\t// extended key.\n\tisChildHardened := i >= HardenedKeyStart\n\tif !k.isPrivate && isChildHardened {\n\t\treturn nil, ErrDeriveHardFromPublic\n\t}\n\n\t// The data used to derive the child key depends on whether or not the\n\t// child is hardened per [BIP32].\n\t//\n\t// For hardened children:\n\t//   0x00 || ser256(parentKey) || ser32(i)\n\t//\n\t// For normal children:\n\t//   serP(parentPubKey) || ser32(i)\n\tkeyLen := 33\n\tdata := make([]byte, keyLen+4)\n\tif isChildHardened {\n\t\t// Case #1.\n\t\t// When the child is a hardened child, the key is known to be a\n\t\t// private key due to the above early return.  Pad it with a\n\t\t// leading zero as required by [BIP32] for deriving the child.\n\t\tcopy(data[1:], k.key)\n\t} else {\n\t\t// Case #2 or #3.\n\t\t// This is either a public or private extended key, but in\n\t\t// either case, the data which is used to derive the child key\n\t\t// starts with the secp256k1 compressed public key bytes.\n\t\tcopy(data, k.pubKeyBytes())\n\t}\n\tbinary.BigEndian.PutUint32(data[keyLen:], i)\n\n\t// Take the HMAC-SHA512 of the current key's chain code and the derived\n\t// data:\n\t//   I = HMAC-SHA512(Key = chainCode, Data = data)\n\thmac512 := hmac.New(sha512.New, k.chainCode)\n\thmac512.Write(data)\n\tilr := hmac512.Sum(nil)\n\n\t// Split \"I\" into two 32-byte sequences Il and Ir where:\n\t//   Il = intermediate key used to derive the child\n\t//   Ir = child chain code\n\til := ilr[:len(ilr)/2]\n\tchildChainCode := ilr[len(ilr)/2:]\n\n\t// Both derived public or private keys rely on treating the left 32-byte\n\t// sequence calculated above (Il) as a 256-bit integer that must be\n\t// within the valid range for a secp256k1 private key.  There is a small\n\t// chance (< 1 in 2^127) this condition will not hold, and in that case,\n\t// a child extended key can't be created for this index and the caller\n\t// should simply increment to the next index.\n\tilNum := new(big.Int).SetBytes(il)\n\tif ilNum.Cmp(btcec.S256().N) >= 0 || ilNum.Sign() == 0 {\n\t\treturn nil, ErrInvalidChild\n\t}\n\n\t// The algorithm used to derive the child key depends on whether or not\n\t// a private or public child is being derived.\n\t//\n\t// For private children:\n\t//   childKey = parse256(Il) + parentKey\n\t//\n\t// For public children:\n\t//   childKey = serP(point(parse256(Il)) + parentKey)\n\tvar isPrivate bool\n\tvar childKey []byte\n\tif k.isPrivate {\n\t\t// Case #1 or #2.\n\t\t// Add the parent private key to the intermediate private key to\n\t\t// derive the final child key.\n\t\t//\n\t\t// childKey = parse256(Il) + parenKey\n\t\tkeyNum := new(big.Int).SetBytes(k.key)\n\t\tilNum.Add(ilNum, keyNum)\n\t\tilNum.Mod(ilNum, btcec.S256().N)\n\t\tchildKey = ilNum.Bytes()\n\t\tisPrivate = true\n\t} else {\n\t\t// Case #3.\n\t\t// Calculate the corresponding intermediate public key for\n\t\t// intermediate private key.\n\t\tilx, ily := btcec.S256().ScalarBaseMult(il)\n\t\tif ilx.Sign() == 0 || ily.Sign() == 0 {\n\t\t\treturn nil, ErrInvalidChild\n\t\t}\n\n\t\t// Convert the serialized compressed parent public key into X\n\t\t// and Y coordinates so it can be added to the intermediate\n\t\t// public key.\n\t\tpubKey, err := btcec.ParsePubKey(k.key, btcec.S256())\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// Add the intermediate public key to the parent public key to\n\t\t// derive the final child key.\n\t\t//\n\t\t// childKey = serP(point(parse256(Il)) + parentKey)\n\t\tchildX, childY := btcec.S256().Add(ilx, ily, pubKey.X, pubKey.Y)\n\t\tpk := btcec.PublicKey{Curve: btcec.S256(), X: childX, Y: childY}\n\t\tchildKey = pk.SerializeCompressed()\n\t}\n\n\t// The fingerprint of the parent for the derived child is the first 4\n\t// bytes of the RIPEMD160(SHA256(parentPubKey)).\n\tparentFP := btcutil.Hash160(k.pubKeyBytes())[:4]\n\treturn NewExtendedKey(k.version, childKey, childChainCode, parentFP,\n\t\tk.depth+1, i, isPrivate), nil\n}\n\n// Neuter returns a new extended public key from this extended private key.  The\n// same extended key will be returned unaltered if it is already an extended\n// public key.\n//\n// As the name implies, an extended public key does not have access to the\n// private key, so it is not capable of signing transactions or deriving\n// child extended private keys.  However, it is capable of deriving further\n// child extended public keys.\nfunc (k *ExtendedKey) Neuter() (*ExtendedKey, error) {\n\t// Already an extended public key.\n\tif !k.isPrivate {\n\t\treturn k, nil\n\t}\n\n\t// Get the associated public extended key version bytes.\n\tversion, err := chaincfg.HDPrivateKeyToPublicKeyID(k.version)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Convert it to an extended public key.  The key for the new extended\n\t// key will simply be the pubkey of the current extended private key.\n\t//\n\t// This is the function N((k,c)) -> (K, c) from [BIP32].\n\treturn NewExtendedKey(version, k.pubKeyBytes(), k.chainCode, k.parentFP,\n\t\tk.depth, k.childNum, false), nil\n}\n\n// ECPubKey converts the extended key to a btcec public key and returns it.\nfunc (k *ExtendedKey) ECPubKey() (*btcec.PublicKey, error) {\n\treturn btcec.ParsePubKey(k.pubKeyBytes(), btcec.S256())\n}\n\n// ECPrivKey converts the extended key to a btcec private key and returns it.\n// As you might imagine this is only possible if the extended key is a private\n// extended key (as determined by the IsPrivate function).  The ErrNotPrivExtKey\n// error will be returned if this function is called on a public extended key.\nfunc (k *ExtendedKey) ECPrivKey() (*btcec.PrivateKey, error) {\n\tif !k.isPrivate {\n\t\treturn nil, ErrNotPrivExtKey\n\t}\n\n\tprivKey, _ := btcec.PrivKeyFromBytes(btcec.S256(), k.key)\n\treturn privKey, nil\n}\n\n// Address converts the extended key to a standard bitcoin pay-to-pubkey-hash\n// address for the passed network.\nfunc (k *ExtendedKey) Address(net *chaincfg.Params) (*btcutil.AddressPubKeyHash, error) {\n\tpkHash := btcutil.Hash160(k.pubKeyBytes())\n\treturn btcutil.NewAddressPubKeyHash(pkHash, net)\n}\n\n// paddedAppend appends the src byte slice to dst, returning the new slice.\n// If the length of the source is smaller than the passed size, leading zero\n// bytes are appended to the dst slice before appending src.\nfunc paddedAppend(size uint, dst, src []byte) []byte {\n\tfor i := 0; i < int(size)-len(src); i++ {\n\t\tdst = append(dst, 0)\n\t}\n\treturn append(dst, src...)\n}\n\n// String returns the extended key as a human-readable base58-encoded string.\nfunc (k *ExtendedKey) String() string {\n\tif len(k.key) == 0 {\n\t\treturn \"zeroed extended key\"\n\t}\n\n\tvar childNumBytes [4]byte\n\tbinary.BigEndian.PutUint32(childNumBytes[:], k.childNum)\n\n\t// The serialized format is:\n\t//   version (4) || depth (1) || parent fingerprint (4)) ||\n\t//   child num (4) || chain code (32) || key data (33) || checksum (4)\n\tserializedBytes := make([]byte, 0, serializedKeyLen+4)\n\tserializedBytes = append(serializedBytes, k.version...)\n\tserializedBytes = append(serializedBytes, k.depth)\n\tserializedBytes = append(serializedBytes, k.parentFP...)\n\tserializedBytes = append(serializedBytes, childNumBytes[:]...)\n\tserializedBytes = append(serializedBytes, k.chainCode...)\n\tif k.isPrivate {\n\t\tserializedBytes = append(serializedBytes, 0x00)\n\t\tserializedBytes = paddedAppend(32, serializedBytes, k.key)\n\t} else {\n\t\tserializedBytes = append(serializedBytes, k.pubKeyBytes()...)\n\t}\n\n\tcheckSum := chainhash.DoubleHashB(serializedBytes)[:4]\n\tserializedBytes = append(serializedBytes, checkSum...)\n\treturn base58.Encode(serializedBytes)\n}\n\n// IsForNet returns whether or not the extended key is associated with the\n// passed bitcoin network.\nfunc (k *ExtendedKey) IsForNet(net *chaincfg.Params) bool {\n\treturn bytes.Equal(k.version, net.HDPrivateKeyID[:]) ||\n\t\tbytes.Equal(k.version, net.HDPublicKeyID[:])\n}\n\n// SetNet associates the extended key, and any child keys yet to be derived from\n// it, with the passed network.\nfunc (k *ExtendedKey) SetNet(net *chaincfg.Params) {\n\tif k.isPrivate {\n\t\tk.version = net.HDPrivateKeyID[:]\n\t} else {\n\t\tk.version = net.HDPublicKeyID[:]\n\t}\n}\n\n// zero sets all bytes in the passed slice to zero.  This is used to\n// explicitly clear private key material from memory.\nfunc zero(b []byte) {\n\tlenb := len(b)\n\tfor i := 0; i < lenb; i++ {\n\t\tb[i] = 0\n\t}\n}\n\n// Zero manually clears all fields and bytes in the extended key.  This can be\n// used to explicitly clear key material from memory for enhanced security\n// against memory scraping.  This function only clears this particular key and\n// not any children that have already been derived.\nfunc (k *ExtendedKey) Zero() {\n\tzero(k.key)\n\tzero(k.pubKey)\n\tzero(k.chainCode)\n\tzero(k.parentFP)\n\tk.version = nil\n\tk.key = nil\n\tk.depth = 0\n\tk.childNum = 0\n\tk.isPrivate = false\n}\n\n// NewMaster creates a new master node for use in creating a hierarchical\n// deterministic key chain.  The seed must be between 128 and 512 bits and\n// should be generated by a cryptographically secure random generation source.\n//\n// NOTE: There is an extremely small chance (< 1 in 2^127) the provided seed\n// will derive to an unusable secret key.  The ErrUnusable error will be\n// returned if this should occur, so the caller must check for it and generate a\n// new seed accordingly.\nfunc NewMaster(seed []byte, net *chaincfg.Params) (*ExtendedKey, error) {\n\t// Per [BIP32], the seed must be in range [MinSeedBytes, MaxSeedBytes].\n\tif len(seed) < MinSeedBytes || len(seed) > MaxSeedBytes {\n\t\treturn nil, ErrInvalidSeedLen\n\t}\n\n\t// First take the HMAC-SHA512 of the master key and the seed data:\n\t//   I = HMAC-SHA512(Key = \"Bitcoin seed\", Data = S)\n\thmac512 := hmac.New(sha512.New, masterKey)\n\thmac512.Write(seed)\n\tlr := hmac512.Sum(nil)\n\n\t// Split \"I\" into two 32-byte sequences Il and Ir where:\n\t//   Il = master secret key\n\t//   Ir = master chain code\n\tsecretKey := lr[:len(lr)/2]\n\tchainCode := lr[len(lr)/2:]\n\n\t// Ensure the key in usable.\n\tsecretKeyNum := new(big.Int).SetBytes(secretKey)\n\tif secretKeyNum.Cmp(btcec.S256().N) >= 0 || secretKeyNum.Sign() == 0 {\n\t\treturn nil, ErrUnusableSeed\n\t}\n\n\tparentFP := []byte{0x00, 0x00, 0x00, 0x00}\n\treturn NewExtendedKey(net.HDPrivateKeyID[:], secretKey, chainCode,\n\t\tparentFP, 0, 0, true), nil\n}\n\n// NewKeyFromString returns a new extended key instance from a base58-encoded\n// extended key.\nfunc NewKeyFromString(key string) (*ExtendedKey, error) {\n\t// The base58-decoded extended key must consist of a serialized payload\n\t// plus an additional 4 bytes for the checksum.\n\tdecoded := base58.Decode(key)\n\tif len(decoded) != serializedKeyLen+4 {\n\t\treturn nil, ErrInvalidKeyLen\n\t}\n\n\t// The serialized format is:\n\t//   version (4) || depth (1) || parent fingerprint (4)) ||\n\t//   child num (4) || chain code (32) || key data (33) || checksum (4)\n\n\t// Split the payload and checksum up and ensure the checksum matches.\n\tpayload := decoded[:len(decoded)-4]\n\tcheckSum := decoded[len(decoded)-4:]\n\texpectedCheckSum := chainhash.DoubleHashB(payload)[:4]\n\tif !bytes.Equal(checkSum, expectedCheckSum) {\n\t\treturn nil, ErrBadChecksum\n\t}\n\n\t// Deserialize each of the payload fields.\n\tversion := payload[:4]\n\tdepth := payload[4:5][0]\n\tparentFP := payload[5:9]\n\tchildNum := binary.BigEndian.Uint32(payload[9:13])\n\tchainCode := payload[13:45]\n\tkeyData := payload[45:78]\n\n\t// The key data is a private key if it starts with 0x00.  Serialized\n\t// compressed pubkeys either start with 0x02 or 0x03.\n\tisPrivate := keyData[0] == 0x00\n\tif isPrivate {\n\t\t// Ensure the private key is valid.  It must be within the range\n\t\t// of the order of the secp256k1 curve and not be 0.\n\t\tkeyData = keyData[1:]\n\t\tkeyNum := new(big.Int).SetBytes(keyData)\n\t\tif keyNum.Cmp(btcec.S256().N) >= 0 || keyNum.Sign() == 0 {\n\t\t\treturn nil, ErrUnusableSeed\n\t\t}\n\t} else {\n\t\t// Ensure the public key parses correctly and is actually on the\n\t\t// secp256k1 curve.\n\t\t_, err := btcec.ParsePubKey(keyData, btcec.S256())\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn NewExtendedKey(version, keyData, chainCode, parentFP, depth,\n\t\tchildNum, isPrivate), nil\n}\n\n// GenerateSeed returns a cryptographically secure random seed that can be used\n// as the input for the NewMaster function to generate a new master node.\n//\n// The length is in bytes and it must be between 16 and 64 (128 to 512 bits).\n// The recommended length is 32 (256 bits) as defined by the RecommendedSeedLen\n// constant.\nfunc GenerateSeed(length uint8) ([]byte, error) {\n\t// Per [BIP32], the seed must be in range [MinSeedBytes, MaxSeedBytes].\n\tif length < MinSeedBytes || length > MaxSeedBytes {\n\t\treturn nil, ErrInvalidSeedLen\n\t}\n\n\tbuf := make([]byte, length)\n\t_, err := rand.Read(buf)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn buf, nil\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcutil/hdkeychain/test_coverage.txt",
    "content": "\ngithub.com/conformal/btcutil/hdkeychain/extendedkey.go\t ExtendedKey.String\t\t 100.00% (18/18)\ngithub.com/conformal/btcutil/hdkeychain/extendedkey.go\t ExtendedKey.Zero\t\t 100.00% (9/9)\ngithub.com/conformal/btcutil/hdkeychain/extendedkey.go\t ExtendedKey.pubKeyBytes\t 100.00% (7/7)\ngithub.com/conformal/btcutil/hdkeychain/extendedkey.go\t ExtendedKey.Neuter\t\t 100.00% (6/6)\ngithub.com/conformal/btcutil/hdkeychain/extendedkey.go\t ExtendedKey.ECPrivKey\t\t 100.00% (4/4)\ngithub.com/conformal/btcutil/hdkeychain/extendedkey.go\t zero\t\t\t\t 100.00% (3/3)\ngithub.com/conformal/btcutil/hdkeychain/extendedkey.go\t ExtendedKey.SetNet\t\t 100.00% (3/3)\ngithub.com/conformal/btcutil/hdkeychain/extendedkey.go\t ExtendedKey.Address\t\t 100.00% (2/2)\ngithub.com/conformal/btcutil/hdkeychain/extendedkey.go\t newExtendedKey\t\t\t 100.00% (1/1)\ngithub.com/conformal/btcutil/hdkeychain/extendedkey.go\t ExtendedKey.IsPrivate\t\t 100.00% (1/1)\ngithub.com/conformal/btcutil/hdkeychain/extendedkey.go\t ExtendedKey.ParentFingerprint\t 100.00% (1/1)\ngithub.com/conformal/btcutil/hdkeychain/extendedkey.go\t ExtendedKey.ECPubKey\t\t 100.00% (1/1)\ngithub.com/conformal/btcutil/hdkeychain/extendedkey.go\t ExtendedKey.IsForNet\t\t 100.00% (1/1)\ngithub.com/conformal/btcutil/hdkeychain/extendedkey.go\t NewKeyFromString\t\t 95.83% (23/24)\ngithub.com/conformal/btcutil/hdkeychain/extendedkey.go\t ExtendedKey.Child\t\t 91.67% (33/36)\ngithub.com/conformal/btcutil/hdkeychain/extendedkey.go\t NewMaster\t\t\t 91.67% (11/12)\ngithub.com/conformal/btcutil/hdkeychain/extendedkey.go\t GenerateSeed\t\t\t 85.71% (6/7)\ngithub.com/conformal/btcutil/hdkeychain\t\t\t -----------------------------\t 95.59% (130/136)\n\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcutil/net.go",
    "content": "// Copyright (c) 2013-2014 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\n// +build !appengine\n\npackage btcutil\n\nimport (\n\t\"net\"\n)\n\n// interfaceAddrs returns a list of the system's network interface addresses.\n// It is wrapped here so that we can substitute it for other functions when\n// building for systems that do not allow access to net.InterfaceAddrs().\nfunc interfaceAddrs() ([]net.Addr, error) {\n\treturn net.InterfaceAddrs()\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcutil/net_noop.go",
    "content": "// Copyright (c) 2013-2014 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\n// +build appengine\n\npackage btcutil\n\nimport (\n\t\"net\"\n)\n\n// interfaceAddrs returns a list of the system's network interface addresses.\n// It is wrapped here so that we can substitute it for a no-op function that\n// returns an empty slice of net.Addr when building for systems that do not\n// allow access to net.InterfaceAddrs().\nfunc interfaceAddrs() ([]net.Addr, error) {\n\treturn []net.Addr{}, nil\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcutil/test_coverage.txt",
    "content": "\ngithub.com/conformal/btcutil/base58.go\t Base58Decode\t\t\t 100.00% (20/20)\ngithub.com/conformal/btcutil/base58.go\t Base58Encode\t\t\t 100.00% (15/15)\ngithub.com/conformal/btcutil/block.go\t Block.Tx\t\t\t 100.00% (12/12)\ngithub.com/conformal/btcutil/wif.go\t WIF.String\t\t\t 100.00% (11/11)\ngithub.com/conformal/btcutil/block.go\t Block.Transactions\t\t 100.00% (11/11)\ngithub.com/conformal/btcutil/amount.go\t AmountUnit.String\t\t 100.00% (8/8)\ngithub.com/conformal/btcutil/tx.go\t NewTxFromReader\t\t 100.00% (6/6)\ngithub.com/conformal/btcutil/block.go\t NewBlockFromBytes\t\t 100.00% (6/6)\ngithub.com/conformal/btcutil/block.go\t NewBlockFromReader\t\t 100.00% (6/6)\ngithub.com/conformal/btcutil/address.go\t encodeAddress\t\t\t 100.00% (6/6)\ngithub.com/conformal/btcutil/address.go\t newAddressPubKeyHash\t\t 100.00% (5/5)\ngithub.com/conformal/btcutil/address.go\t newAddressScriptHashFromHash\t 100.00% (5/5)\ngithub.com/conformal/btcutil/tx.go\t Tx.Sha\t\t\t\t 100.00% (5/5)\ngithub.com/conformal/btcutil/block.go\t Block.Sha\t\t\t 100.00% (5/5)\ngithub.com/conformal/btcutil/amount.go\t NewAmount\t\t\t 100.00% (5/5)\ngithub.com/conformal/btcutil/amount.go\t round\t\t\t\t 100.00% (3/3)\ngithub.com/conformal/btcutil/address.go\t NewAddressScriptHash\t\t 100.00% (2/2)\ngithub.com/conformal/btcutil/amount.go\t Amount.Format\t\t\t 100.00% (2/2)\ngithub.com/conformal/btcutil/tx.go\t NewTxFromBytes\t\t\t 100.00% (2/2)\ngithub.com/conformal/btcutil/hash160.go\t calcHash\t\t\t 100.00% (2/2)\ngithub.com/conformal/btcutil/address.go\t AddressPubKeyHash.Hash160\t 100.00% (1/1)\ngithub.com/conformal/btcutil/block.go\t OutOfRangeError.Error\t\t 100.00% (1/1)\ngithub.com/conformal/btcutil/block.go\t Block.MsgBlock\t\t\t 100.00% (1/1)\ngithub.com/conformal/btcutil/tx.go\t Tx.MsgTx\t\t\t 100.00% (1/1)\ngithub.com/conformal/btcutil/hash160.go\t Hash160\t\t\t 100.00% (1/1)\ngithub.com/conformal/btcutil/block.go\t NewBlockFromBlockAndBytes\t 100.00% (1/1)\ngithub.com/conformal/btcutil/block.go\t Block.Height\t\t\t 100.00% (1/1)\ngithub.com/conformal/btcutil/block.go\t Block.SetHeight\t\t 100.00% (1/1)\ngithub.com/conformal/btcutil/block.go\t NewBlock\t\t\t 100.00% (1/1)\ngithub.com/conformal/btcutil/address.go\t AddressPubKeyHash.IsForNet\t 100.00% (1/1)\ngithub.com/conformal/btcutil/address.go\t AddressPubKey.EncodeAddress\t 100.00% (1/1)\ngithub.com/conformal/btcutil/address.go\t NewAddressPubKeyHash\t\t 100.00% (1/1)\ngithub.com/conformal/btcutil/address.go\t AddressPubKeyHash.EncodeAddress 100.00% (1/1)\ngithub.com/conformal/btcutil/address.go\t AddressPubKeyHash.ScriptAddress 100.00% (1/1)\ngithub.com/conformal/btcutil/address.go\t AddressPubKeyHash.String\t 100.00% (1/1)\ngithub.com/conformal/btcutil/address.go\t NewAddressScriptHashFromHash\t 100.00% (1/1)\ngithub.com/conformal/btcutil/address.go\t AddressScriptHash.EncodeAddress 100.00% (1/1)\ngithub.com/conformal/btcutil/address.go\t AddressScriptHash.ScriptAddress 100.00% (1/1)\ngithub.com/conformal/btcutil/address.go\t AddressScriptHash.IsForNet\t 100.00% (1/1)\ngithub.com/conformal/btcutil/address.go\t AddressScriptHash.String\t 100.00% (1/1)\ngithub.com/conformal/btcutil/address.go\t AddressScriptHash.Hash160\t 100.00% (1/1)\ngithub.com/conformal/btcutil/address.go\t AddressPubKey.ScriptAddress\t 100.00% (1/1)\ngithub.com/conformal/btcutil/address.go\t AddressPubKey.IsForNet\t\t 100.00% (1/1)\ngithub.com/conformal/btcutil/address.go\t AddressPubKey.String\t\t 100.00% (1/1)\ngithub.com/conformal/btcutil/tx.go\t NewTx\t\t\t\t 100.00% (1/1)\ngithub.com/conformal/btcutil/tx.go\t Tx.SetIndex\t\t\t 100.00% (1/1)\ngithub.com/conformal/btcutil/amount.go\t Amount.ToUnit\t\t\t 100.00% (1/1)\ngithub.com/conformal/btcutil/tx.go\t Tx.Index\t\t\t 100.00% (1/1)\ngithub.com/conformal/btcutil/amount.go\t Amount.String\t\t\t 100.00% (1/1)\ngithub.com/conformal/btcutil/amount.go\t Amount.MulF64\t\t\t 100.00% (1/1)\ngithub.com/conformal/btcutil/appdata.go\t appDataDir\t\t\t 92.00% (23/25)\ngithub.com/conformal/btcutil/block.go\t Block.TxLoc\t\t\t 88.89% (8/9)\ngithub.com/conformal/btcutil/block.go\t Block.Bytes\t\t\t 88.89% (8/9)\ngithub.com/conformal/btcutil/address.go\t NewAddressPubKey\t\t 87.50% (7/8)\ngithub.com/conformal/btcutil/address.go\t DecodeAddress\t\t\t 85.00% (17/20)\ngithub.com/conformal/btcutil/wif.go\t DecodeWIF\t\t\t 85.00% (17/20)\ngithub.com/conformal/btcutil/address.go\t AddressPubKey.serialize\t 80.00% (4/5)\ngithub.com/conformal/btcutil/block.go\t Block.TxSha\t\t\t 75.00% (3/4)\ngithub.com/conformal/btcutil/wif.go\t paddedAppend\t\t\t 66.67% (2/3)\ngithub.com/conformal/btcutil/wif.go\t NewWIF\t\t\t\t 66.67% (2/3)\ngithub.com/conformal/btcutil/certgen.go\t NewTLSCertPair\t\t\t 0.00% (0/54)\ngithub.com/conformal/btcutil/wif.go\t WIF.SerializePubKey\t\t 0.00% (0/4)\ngithub.com/conformal/btcutil/address.go\t AddressPubKey.AddressPubKeyHash 0.00% (0/3)\ngithub.com/conformal/btcutil/address.go\t AddressPubKey.Format\t\t 0.00% (0/1)\ngithub.com/conformal/btcutil/address.go\t AddressPubKey.PubKey\t\t 0.00% (0/1)\ngithub.com/conformal/btcutil/address.go\t AddressPubKey.SetFormat\t 0.00% (0/1)\ngithub.com/conformal/btcutil/wif.go\t WIF.IsForNet\t\t\t 0.00% (0/1)\ngithub.com/conformal/btcutil/appdata.go\t AppDataDir\t\t\t 0.00% (0/1)\ngithub.com/conformal/btcutil/net.go\t interfaceAddrs\t\t\t 0.00% (0/1)\ngithub.com/conformal/btcutil\t\t ------------------------------- 75.88% (258/340)\n\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcutil/tx.go",
    "content": "// Copyright (c) 2013-2016 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcutil\n\nimport (\n\t\"bytes\"\n\t\"io\"\n\n\t\"github.com/btcsuite/btcd/chaincfg/chainhash\"\n\t\"github.com/btcsuite/btcd/wire\"\n)\n\n// TxIndexUnknown is the value returned for a transaction index that is unknown.\n// This is typically because the transaction has not been inserted into a block\n// yet.\nconst TxIndexUnknown = -1\n\n// Tx defines a bitcoin transaction that provides easier and more efficient\n// manipulation of raw transactions.  It also memoizes the hash for the\n// transaction on its first access so subsequent accesses don't have to repeat\n// the relatively expensive hashing operations.\ntype Tx struct {\n\tmsgTx         *wire.MsgTx     // Underlying MsgTx\n\ttxHash        *chainhash.Hash // Cached transaction hash\n\ttxHashWitness *chainhash.Hash // Cached transaction witness hash\n\ttxHasWitness  *bool           // If the transaction has witness data\n\ttxIndex       int             // Position within a block or TxIndexUnknown\n}\n\n// MsgTx returns the underlying wire.MsgTx for the transaction.\nfunc (t *Tx) MsgTx() *wire.MsgTx {\n\t// Return the cached transaction.\n\treturn t.msgTx\n}\n\n// Hash returns the hash of the transaction.  This is equivalent to\n// calling TxHash on the underlying wire.MsgTx, however it caches the\n// result so subsequent calls are more efficient.\nfunc (t *Tx) Hash() *chainhash.Hash {\n\t// Return the cached hash if it has already been generated.\n\tif t.txHash != nil {\n\t\treturn t.txHash\n\t}\n\n\t// Cache the hash and return it.\n\thash := t.msgTx.TxHash()\n\tt.txHash = &hash\n\treturn &hash\n}\n\n// WitnessHash returns the witness hash (wtxid) of the transaction.  This is\n// equivalent to calling WitnessHash on the underlying wire.MsgTx, however it\n// caches the result so subsequent calls are more efficient.\nfunc (t *Tx) WitnessHash() *chainhash.Hash {\n\t// Return the cached hash if it has already been generated.\n\tif t.txHashWitness != nil {\n\t\treturn t.txHashWitness\n\t}\n\n\t// Cache the hash and return it.\n\thash := t.msgTx.WitnessHash()\n\tt.txHashWitness = &hash\n\treturn &hash\n}\n\n// HasWitness returns false if none of the inputs within the transaction\n// contain witness data, true false otherwise. This equivalent to calling\n// HasWitness on the underlying wire.MsgTx, however it caches the result so\n// subsequent calls are more efficient.\nfunc (t *Tx) HasWitness() bool {\n\tif t.txHashWitness != nil {\n\t\treturn *t.txHasWitness\n\t}\n\n\thasWitness := t.msgTx.HasWitness()\n\tt.txHasWitness = &hasWitness\n\treturn hasWitness\n}\n\n// Index returns the saved index of the transaction within a block.  This value\n// will be TxIndexUnknown if it hasn't already explicitly been set.\nfunc (t *Tx) Index() int {\n\treturn t.txIndex\n}\n\n// SetIndex sets the index of the transaction in within a block.\nfunc (t *Tx) SetIndex(index int) {\n\tt.txIndex = index\n}\n\n// NewTx returns a new instance of a bitcoin transaction given an underlying\n// wire.MsgTx.  See Tx.\nfunc NewTx(msgTx *wire.MsgTx) *Tx {\n\treturn &Tx{\n\t\tmsgTx:   msgTx,\n\t\ttxIndex: TxIndexUnknown,\n\t}\n}\n\n// NewTxFromBytes returns a new instance of a bitcoin transaction given the\n// serialized bytes.  See Tx.\nfunc NewTxFromBytes(serializedTx []byte) (*Tx, error) {\n\tbr := bytes.NewReader(serializedTx)\n\treturn NewTxFromReader(br)\n}\n\n// NewTxFromReader returns a new instance of a bitcoin transaction given a\n// Reader to deserialize the transaction.  See Tx.\nfunc NewTxFromReader(r io.Reader) (*Tx, error) {\n\t// Deserialize the bytes into a MsgTx.\n\tvar msgTx wire.MsgTx\n\terr := msgTx.Deserialize(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tt := Tx{\n\t\tmsgTx:   &msgTx,\n\t\ttxIndex: TxIndexUnknown,\n\t}\n\treturn &t, nil\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/btcutil/wif.go",
    "content": "// Copyright (c) 2013-2016 The btcsuite developers\n// Use of this source code is governed by an ISC\n// license that can be found in the LICENSE file.\n\npackage btcutil\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\n\t\"github.com/btcsuite/btcd/btcec\"\n\t\"github.com/btcsuite/btcd/chaincfg\"\n\t\"github.com/btcsuite/btcd/chaincfg/chainhash\"\n\t\"github.com/btcsuite/btcutil/base58\"\n)\n\n// ErrMalformedPrivateKey describes an error where a WIF-encoded private\n// key cannot be decoded due to being improperly formatted.  This may occur\n// if the byte length is incorrect or an unexpected magic number was\n// encountered.\nvar ErrMalformedPrivateKey = errors.New(\"malformed private key\")\n\n// compressMagic is the magic byte used to identify a WIF encoding for\n// an address created from a compressed serialized public key.\nconst compressMagic byte = 0x01\n\n// WIF contains the individual components described by the Wallet Import Format\n// (WIF).  A WIF string is typically used to represent a private key and its\n// associated address in a way that  may be easily copied and imported into or\n// exported from wallet software.  WIF strings may be decoded into this\n// structure by calling DecodeWIF or created with a user-provided private key\n// by calling NewWIF.\ntype WIF struct {\n\t// PrivKey is the private key being imported or exported.\n\tPrivKey *btcec.PrivateKey\n\n\t// CompressPubKey specifies whether the address controlled by the\n\t// imported or exported private key was created by hashing a\n\t// compressed (33-byte) serialized public key, rather than an\n\t// uncompressed (65-byte) one.\n\tCompressPubKey bool\n\n\t// netID is the bitcoin network identifier byte used when\n\t// WIF encoding the private key.\n\tnetID byte\n}\n\n// NewWIF creates a new WIF structure to export an address and its private key\n// as a string encoded in the Wallet Import Format.  The compress argument\n// specifies whether the address intended to be imported or exported was created\n// by serializing the public key compressed rather than uncompressed.\nfunc NewWIF(privKey *btcec.PrivateKey, net *chaincfg.Params, compress bool) (*WIF, error) {\n\tif net == nil {\n\t\treturn nil, errors.New(\"no network\")\n\t}\n\treturn &WIF{privKey, compress, net.PrivateKeyID}, nil\n}\n\n// IsForNet returns whether or not the decoded WIF structure is associated\n// with the passed bitcoin network.\nfunc (w *WIF) IsForNet(net *chaincfg.Params) bool {\n\treturn w.netID == net.PrivateKeyID\n}\n\n// DecodeWIF creates a new WIF structure by decoding the string encoding of\n// the import format.\n//\n// The WIF string must be a base58-encoded string of the following byte\n// sequence:\n//\n//  * 1 byte to identify the network, must be 0x80 for mainnet or 0xef for\n//    either testnet3 or the regression test network\n//  * 32 bytes of a binary-encoded, big-endian, zero-padded private key\n//  * Optional 1 byte (equal to 0x01) if the address being imported or exported\n//    was created by taking the RIPEMD160 after SHA256 hash of a serialized\n//    compressed (33-byte) public key\n//  * 4 bytes of checksum, must equal the first four bytes of the double SHA256\n//    of every byte before the checksum in this sequence\n//\n// If the base58-decoded byte sequence does not match this, DecodeWIF will\n// return a non-nil error.  ErrMalformedPrivateKey is returned when the WIF\n// is of an impossible length or the expected compressed pubkey magic number\n// does not equal the expected value of 0x01.  ErrChecksumMismatch is returned\n// if the expected WIF checksum does not match the calculated checksum.\nfunc DecodeWIF(wif string) (*WIF, error) {\n\tdecoded := base58.Decode(wif)\n\tdecodedLen := len(decoded)\n\tvar compress bool\n\n\t// Length of base58 decoded WIF must be 32 bytes + an optional 1 byte\n\t// (0x01) if compressed, plus 1 byte for netID + 4 bytes of checksum.\n\tswitch decodedLen {\n\tcase 1 + btcec.PrivKeyBytesLen + 1 + 4:\n\t\tif decoded[33] != compressMagic {\n\t\t\treturn nil, ErrMalformedPrivateKey\n\t\t}\n\t\tcompress = true\n\tcase 1 + btcec.PrivKeyBytesLen + 4:\n\t\tcompress = false\n\tdefault:\n\t\treturn nil, ErrMalformedPrivateKey\n\t}\n\n\t// Checksum is first four bytes of double SHA256 of the identifier byte\n\t// and privKey.  Verify this matches the final 4 bytes of the decoded\n\t// private key.\n\tvar tosum []byte\n\tif compress {\n\t\ttosum = decoded[:1+btcec.PrivKeyBytesLen+1]\n\t} else {\n\t\ttosum = decoded[:1+btcec.PrivKeyBytesLen]\n\t}\n\tcksum := chainhash.DoubleHashB(tosum)[:4]\n\tif !bytes.Equal(cksum, decoded[decodedLen-4:]) {\n\t\treturn nil, ErrChecksumMismatch\n\t}\n\n\tnetID := decoded[0]\n\tprivKeyBytes := decoded[1 : 1+btcec.PrivKeyBytesLen]\n\tprivKey, _ := btcec.PrivKeyFromBytes(btcec.S256(), privKeyBytes)\n\treturn &WIF{privKey, compress, netID}, nil\n}\n\n// String creates the Wallet Import Format string encoding of a WIF structure.\n// See DecodeWIF for a detailed breakdown of the format and requirements of\n// a valid WIF string.\nfunc (w *WIF) String() string {\n\t// Precalculate size.  Maximum number of bytes before base58 encoding\n\t// is one byte for the network, 32 bytes of private key, possibly one\n\t// extra byte if the pubkey is to be compressed, and finally four\n\t// bytes of checksum.\n\tencodeLen := 1 + btcec.PrivKeyBytesLen + 4\n\tif w.CompressPubKey {\n\t\tencodeLen++\n\t}\n\n\ta := make([]byte, 0, encodeLen)\n\ta = append(a, w.netID)\n\t// Pad and append bytes manually, instead of using Serialize, to\n\t// avoid another call to make.\n\ta = paddedAppend(btcec.PrivKeyBytesLen, a, w.PrivKey.D.Bytes())\n\tif w.CompressPubKey {\n\t\ta = append(a, compressMagic)\n\t}\n\tcksum := chainhash.DoubleHashB(a)[:4]\n\ta = append(a, cksum...)\n\treturn base58.Encode(a)\n}\n\n// SerializePubKey serializes the associated public key of the imported or\n// exported private key in either a compressed or uncompressed format.  The\n// serialization format chosen depends on the value of w.CompressPubKey.\nfunc (w *WIF) SerializePubKey() []byte {\n\tpk := (*btcec.PublicKey)(&w.PrivKey.PublicKey)\n\tif w.CompressPubKey {\n\t\treturn pk.SerializeCompressed()\n\t}\n\treturn pk.SerializeUncompressed()\n}\n\n// paddedAppend appends the src byte slice to dst, returning the new slice.\n// If the length of the source is smaller than the passed size, leading zero\n// bytes are appended to the dst slice before appending src.\nfunc paddedAppend(size uint, dst, src []byte) []byte {\n\tfor i := 0; i < int(size)-len(src); i++ {\n\t\tdst = append(dst, 0)\n\t}\n\treturn append(dst, src...)\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/go-socks/LICENSE",
    "content": "Copyright (c) 2012, Samuel Stauffer <samuel@descolada.com>\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright\n  notice, this list of conditions and the following disclaimer.\n* Redistributions in binary form must reproduce the above copyright\n  notice, this list of conditions and the following disclaimer in the\n  documentation and/or other materials provided with the distribution.\n* Neither the name of the author nor the\n  names of its contributors may be used to endorse or promote products\n  derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\nDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "vendor/github.com/btcsuite/go-socks/socks/addr.go",
    "content": "// Copyright 2012 Samuel Stauffer. All rights reserved.\n// Use of this source code is governed by a 3-clause BSD\n// license that can be found in the LICENSE file.\n\npackage socks\n\nimport \"fmt\"\n\ntype ProxiedAddr struct {\n\tNet  string\n\tHost string\n\tPort int\n}\n\nfunc (a *ProxiedAddr) Network() string {\n\treturn a.Net\n}\n\nfunc (a *ProxiedAddr) String() string {\n\treturn fmt.Sprintf(\"%s:%d\", a.Host, a.Port)\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/go-socks/socks/conn.go",
    "content": "// Copyright 2012 Samuel Stauffer. All rights reserved.\n// Use of this source code is governed by a 3-clause BSD\n// license that can be found in the LICENSE file.\n\npackage socks\n\nimport (\n\t\"net\"\n\t\"time\"\n)\n\ntype proxiedConn struct {\n\tconn       net.Conn\n\tremoteAddr *ProxiedAddr\n\tboundAddr  *ProxiedAddr\n}\n\nfunc (c *proxiedConn) Read(b []byte) (int, error) {\n\treturn c.conn.Read(b)\n}\n\nfunc (c *proxiedConn) Write(b []byte) (int, error) {\n\treturn c.conn.Write(b)\n}\n\nfunc (c *proxiedConn) Close() error {\n\treturn c.conn.Close()\n}\n\nfunc (c *proxiedConn) LocalAddr() net.Addr {\n\tif c.boundAddr != nil {\n\t\treturn c.boundAddr\n\t}\n\treturn c.conn.LocalAddr()\n}\n\nfunc (c *proxiedConn) RemoteAddr() net.Addr {\n\tif c.remoteAddr != nil {\n\t\treturn c.remoteAddr\n\t}\n\treturn c.conn.RemoteAddr()\n}\n\nfunc (c *proxiedConn) SetDeadline(t time.Time) error {\n\treturn c.conn.SetDeadline(t)\n}\n\nfunc (c *proxiedConn) SetReadDeadline(t time.Time) error {\n\treturn c.conn.SetReadDeadline(t)\n}\n\nfunc (c *proxiedConn) SetWriteDeadline(t time.Time) error {\n\treturn c.conn.SetWriteDeadline(t)\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/go-socks/socks/dial.go",
    "content": "// Copyright 2012 Samuel Stauffer. All rights reserved.\n// Use of this source code is governed by a 3-clause BSD\n// license that can be found in the LICENSE file.\n\n/*\nCurrent limitations:\n\n\t- GSS-API authentication is not supported\n\t- only SOCKS version 5 is supported\n\t- TCP bind and UDP not yet supported\n\nExample http client over SOCKS5:\n\n\tproxy := &socks.Proxy{\"127.0.0.1:1080\"}\n\ttr := &http.Transport{\n\t\tDial: proxy.Dial,\n\t}\n\tclient := &http.Client{Transport: tr}\n\tresp, err := client.Get(\"https://example.com\")\n*/\npackage socks\n\nimport (\n\t\"crypto/rand\"\n\t\"encoding/hex\"\n\t\"errors\"\n\t\"io\"\n\t\"net\"\n\t\"strconv\"\n\t\"time\"\n)\n\nconst (\n\tprotocolVersion = 5\n\n\tdefaultPort = 1080\n\n\tauthNone             = 0\n\tauthGssApi           = 1\n\tauthUsernamePassword = 2\n\tauthUnavailable      = 0xff\n\n\tcommandTcpConnect   = 1\n\tcommandTcpBind      = 2\n\tcommandUdpAssociate = 3\n\n\taddressTypeIPv4   = 1\n\taddressTypeDomain = 3\n\taddressTypeIPv6   = 4\n\n\tstatusRequestGranted          = 0\n\tstatusGeneralFailure          = 1\n\tstatusConnectionNotAllowed    = 2\n\tstatusNetworkUnreachable      = 3\n\tstatusHostUnreachable         = 4\n\tstatusConnectionRefused       = 5\n\tstatusTtlExpired              = 6\n\tstatusCommandNotSupport       = 7\n\tstatusAddressTypeNotSupported = 8\n)\n\nvar (\n\tErrAuthFailed             = errors.New(\"authentication failed\")\n\tErrInvalidProxyResponse   = errors.New(\"invalid proxy response\")\n\tErrNoAcceptableAuthMethod = errors.New(\"no acceptable authentication method\")\n\n\tstatusErrors = map[byte]error{\n\t\tstatusGeneralFailure:          errors.New(\"general failure\"),\n\t\tstatusConnectionNotAllowed:    errors.New(\"connection not allowed by ruleset\"),\n\t\tstatusNetworkUnreachable:      errors.New(\"network unreachable\"),\n\t\tstatusHostUnreachable:         errors.New(\"host unreachable\"),\n\t\tstatusConnectionRefused:       errors.New(\"connection refused by destination host\"),\n\t\tstatusTtlExpired:              errors.New(\"TTL expired\"),\n\t\tstatusCommandNotSupport:       errors.New(\"command not supported / protocol error\"),\n\t\tstatusAddressTypeNotSupported: errors.New(\"address type not supported\"),\n\t}\n)\n\ntype Proxy struct {\n\tAddr         string\n\tUsername     string\n\tPassword     string\n\tTorIsolation bool\n}\n\nfunc (p *Proxy) Dial(network, addr string) (net.Conn, error) {\n\treturn p.dial(network, addr, 0)\n}\n\nfunc (p *Proxy) DialTimeout(network, addr string, timeout time.Duration) (net.Conn, error) {\n\treturn p.dial(network, addr, timeout)\n}\n\nfunc (p *Proxy) dial(network, addr string, timeout time.Duration) (net.Conn, error) {\n\thost, strPort, err := net.SplitHostPort(addr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tport, err := strconv.Atoi(strPort)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tconn, err := net.DialTimeout(\"tcp\", p.Addr, timeout)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar user, pass string\n\tif p.TorIsolation {\n\t\tvar b [16]byte\n\t\t_, err := io.ReadFull(rand.Reader, b[:])\n\t\tif err != nil {\n\t\t\tconn.Close()\n\t\t\treturn nil, err\n\t\t}\n\t\tuser = hex.EncodeToString(b[0:8])\n\t\tpass = hex.EncodeToString(b[8:16])\n\t} else {\n\t\tuser = p.Username\n\t\tpass = p.Password\n\t}\n\tbuf := make([]byte, 32+len(host)+len(user)+len(pass))\n\n\t// Initial greeting\n\tbuf[0] = protocolVersion\n\tif user != \"\" {\n\t\tbuf = buf[:4]\n\t\tbuf[1] = 2 // num auth methods\n\t\tbuf[2] = authNone\n\t\tbuf[3] = authUsernamePassword\n\t} else {\n\t\tbuf = buf[:3]\n\t\tbuf[1] = 1 // num auth methods\n\t\tbuf[2] = authNone\n\t}\n\n\t_, err = conn.Write(buf)\n\tif err != nil {\n\t\tconn.Close()\n\t\treturn nil, err\n\t}\n\n\t// Server's auth choice\n\n\tif _, err := io.ReadFull(conn, buf[:2]); err != nil {\n\t\tconn.Close()\n\t\treturn nil, err\n\t}\n\tif buf[0] != protocolVersion {\n\t\tconn.Close()\n\t\treturn nil, ErrInvalidProxyResponse\n\t}\n\terr = nil\n\tswitch buf[1] {\n\tdefault:\n\t\terr = ErrInvalidProxyResponse\n\tcase authUnavailable:\n\t\terr = ErrNoAcceptableAuthMethod\n\tcase authGssApi:\n\t\terr = ErrNoAcceptableAuthMethod\n\tcase authUsernamePassword:\n\t\tbuf = buf[:3+len(user)+len(pass)]\n\t\tbuf[0] = 1 // version\n\t\tbuf[1] = byte(len(user))\n\t\tcopy(buf[2:], user)\n\t\tbuf[2+len(user)] = byte(len(pass))\n\t\tcopy(buf[3+len(user):], pass)\n\t\tif _, err = conn.Write(buf); err != nil {\n\t\t\tconn.Close()\n\t\t\treturn nil, err\n\t\t}\n\t\tif _, err = io.ReadFull(conn, buf[:2]); err != nil {\n\t\t\tconn.Close()\n\t\t\treturn nil, err\n\t\t}\n\t\tif buf[0] != 1 { // version\n\t\t\terr = ErrInvalidProxyResponse\n\t\t} else if buf[1] != 0 { // 0 = succes, else auth failed\n\t\t\terr = ErrAuthFailed\n\t\t}\n\tcase authNone:\n\t\t// Do nothing\n\t}\n\tif err != nil {\n\t\tconn.Close()\n\t\treturn nil, err\n\t}\n\n\t// Command / connection request\n\n\tbuf = buf[:7+len(host)]\n\tbuf[0] = protocolVersion\n\tbuf[1] = commandTcpConnect\n\tbuf[2] = 0 // reserved\n\tbuf[3] = addressTypeDomain\n\tbuf[4] = byte(len(host))\n\tcopy(buf[5:], host)\n\tbuf[5+len(host)] = byte(port >> 8)\n\tbuf[6+len(host)] = byte(port & 0xff)\n\tif _, err := conn.Write(buf); err != nil {\n\t\tconn.Close()\n\t\treturn nil, err\n\t}\n\n\t// Server response\n\n\tif _, err := io.ReadFull(conn, buf[:4]); err != nil {\n\t\tconn.Close()\n\t\treturn nil, err\n\t}\n\n\tif buf[0] != protocolVersion {\n\t\tconn.Close()\n\t\treturn nil, ErrInvalidProxyResponse\n\t}\n\n\tif buf[1] != statusRequestGranted {\n\t\tconn.Close()\n\t\terr := statusErrors[buf[1]]\n\t\tif err == nil {\n\t\t\terr = ErrInvalidProxyResponse\n\t\t}\n\t\treturn nil, err\n\t}\n\n\tpaddr := &ProxiedAddr{Net: network}\n\n\tswitch buf[3] {\n\tdefault:\n\t\tconn.Close()\n\t\treturn nil, ErrInvalidProxyResponse\n\tcase addressTypeIPv4:\n\t\tif _, err := io.ReadFull(conn, buf[:4]); err != nil {\n\t\t\tconn.Close()\n\t\t\treturn nil, err\n\t\t}\n\t\tpaddr.Host = net.IP(buf).String()\n\tcase addressTypeIPv6:\n\t\tif _, err := io.ReadFull(conn, buf[:16]); err != nil {\n\t\t\tconn.Close()\n\t\t\treturn nil, err\n\t\t}\n\t\tpaddr.Host = net.IP(buf).String()\n\tcase addressTypeDomain:\n\t\tif _, err := io.ReadFull(conn, buf[:1]); err != nil {\n\t\t\tconn.Close()\n\t\t\treturn nil, err\n\t\t}\n\t\tdomainLen := buf[0]\n\t\tif _, err := io.ReadFull(conn, buf[:domainLen]); err != nil {\n\t\t\tconn.Close()\n\t\t\treturn nil, err\n\t\t}\n\t\tpaddr.Host = string(buf[:domainLen])\n\t}\n\n\tif _, err := io.ReadFull(conn, buf[:2]); err != nil {\n\t\tconn.Close()\n\t\treturn nil, err\n\t}\n\tpaddr.Port = int(buf[0])<<8 | int(buf[1])\n\n\treturn &proxiedConn{\n\t\tconn:       conn,\n\t\tboundAddr:  paddr,\n\t\tremoteAddr: &ProxiedAddr{network, host, port},\n\t}, nil\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/websocket/.gitignore",
    "content": "# Compiled Object files, Static and Dynamic libs (Shared Objects)\n*.o\n*.a\n*.so\n\n# Folders\n_obj\n_test\n\n# Architecture specific extensions/prefixes\n*.[568vq]\n[568vq].out\n\n*.cgo1.go\n*.cgo2.c\n_cgo_defun.c\n_cgo_gotypes.go\n_cgo_export.*\n\n_testmain.go\n\n*.exe\n"
  },
  {
    "path": "vendor/github.com/btcsuite/websocket/.travis.yml",
    "content": "language: go\n\ngo:\n  - 1.1\n  - 1.2\n  - tip\n"
  },
  {
    "path": "vendor/github.com/btcsuite/websocket/AUTHORS",
    "content": "# This is the official list of Gorilla WebSocket authors for copyright\n# purposes.\n#\n# Please keep the list sorted.\n\nGary Burd <gary@beagledreams.com>\nJoachim Bauch <mail@joachim-bauch.de>\n\n"
  },
  {
    "path": "vendor/github.com/btcsuite/websocket/LICENSE",
    "content": "Copyright (c) 2013 The Gorilla WebSocket Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n  Redistributions of source code must retain the above copyright notice, this\n  list of conditions and the following disclaimer.\n\n  Redistributions in binary form must reproduce the above copyright notice,\n  this list of conditions and the following disclaimer in the documentation\n  and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "vendor/github.com/btcsuite/websocket/README.md",
    "content": "# Gorilla WebSocket\n\nGorilla WebSocket is a [Go](http://golang.org/) implementation of the\n[WebSocket](http://www.rfc-editor.org/rfc/rfc6455.txt) protocol.\n\n**NOTE:** This is a fork/vendoring of http://github.com/gorilla/websocket\nThe following documentation has been modified to point at this fork for\nconvenience.\n\n### Documentation\n\n* [API Reference](http://godoc.org/github.com/btcsuite/websocket)\n* [Chat example](https://github.com/btcsuite/websocket/tree/master/examples/chat)\n* [File watch example](https://github.com/btcsuite/websocket/tree/master/examples/filewatch)\n\n### Status\n\nThe Gorilla WebSocket package provides a complete and tested implementation of\nthe [WebSocket](http://www.rfc-editor.org/rfc/rfc6455.txt) protocol. The\npackage API is stable.\n\n### Installation\n\n    go get github.com/btcsuite/websocket\n\n### Protocol Compliance\n\nThe Gorilla WebSocket package passes the server tests in the [Autobahn Test\nSuite](http://autobahn.ws/testsuite) using the application in the [examples/autobahn\nsubdirectory](https://github.com/btcsuite/websocket/tree/master/examples/autobahn).\n\n### Gorilla WebSocket compared with other packages\n\n<table>\n<tr>\n<th></th>\n<th><a href=\"http://godoc.org/github.com/btcsuite/websocket\">gorilla</a></th>\n<th><a href=\"http://godoc.org/golang.org/x/net/websocket\">golang.org/x/net</a></th>\n</tr>\n<tr>\n<tr><td colspan=\"3\"><a href=\"http://tools.ietf.org/html/rfc6455\">RFC 6455</a> Features</td></tr>\n<tr><td>Passes <a href=\"http://autobahn.ws/testsuite/\">Autobahn Test Suite</a></td><td><a href=\"https://github.com/btcsuite/websocket/tree/master/examples/autobahn\">Yes</a></td><td>No</td></tr>\n<tr><td>Receive <a href=\"https://tools.ietf.org/html/rfc6455#section-5.4\">fragmented</a> message<td>Yes</td><td><a href=\"https://code.google.com/p/go/issues/detail?id=7632\">No</a>, see note 1</td></tr>\n<tr><td>Send <a href=\"https://tools.ietf.org/html/rfc6455#section-5.5.1\">close</a> message</td><td><a href=\"http://godoc.org/github.com/btcsuite/websocket#hdr-Control_Messages\">Yes</a></td><td><a href=\"https://code.google.com/p/go/issues/detail?id=4588\">No</a></td></tr>\n<tr><td>Send <a href=\"https://tools.ietf.org/html/rfc6455#section-5.5.2\">pings</a> and receive <a href=\"https://tools.ietf.org/html/rfc6455#section-5.5.3\">pongs</a></td><td><a href=\"http://godoc.org/github.com/btcsuite/websocket#hdr-Control_Messages\">Yes</a></td><td>No</td></tr>\n<tr><td>Get the <a href=\"https://tools.ietf.org/html/rfc6455#section-5.6\">type</a> of a received data message</td><td>Yes</td><td>Yes, see note 2</td></tr>\n<tr><td colspan=\"3\">Other Features</tr></td>\n<tr><td>Limit size of received message</td><td><a href=\"http://godoc.org/github.com/btcsuite/websocket#Conn.SetReadLimit\">Yes</a></td><td><a href=\"https://code.google.com/p/go/issues/detail?id=5082\">No</a></td></tr>\n<tr><td>Read message using io.Reader</td><td><a href=\"http://godoc.org/github.com/btcsuite/websocket#Conn.NextReader\">Yes</a></td><td>No, see note 3</td></tr>\n<tr><td>Write message using io.WriteCloser</td><td><a href=\"http://godoc.org/github.com/btcsuite/websocket#Conn.NextWriter\">Yes</a></td><td>No, see note 3</td></tr>\n</table>\n\nNotes: \n\n1. Large messages are fragmented in [Chrome's new WebSocket implementation](http://www.ietf.org/mail-archive/web/hybi/current/msg10503.html).\n2. The application can get the type of a received data message by implementing\n   a [Codec marshal](http://godoc.org/golang.org/x/net/websocket#Codec.Marshal)\n   function.\n3. The go.net io.Reader and io.Writer operate across WebSocket frame boundaries.\n  Read returns when the input buffer is full or a frame boundary is\n  encountered. Each call to Write sends a single frame message. The Gorilla\n  io.Reader and io.WriteCloser operate on a single WebSocket message.\n\n"
  },
  {
    "path": "vendor/github.com/btcsuite/websocket/client.go",
    "content": "// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage websocket\n\nimport (\n\t\"crypto/tls\"\n\t\"errors\"\n\t\"net\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strings\"\n\t\"time\"\n)\n\n// ErrBadHandshake is returned when the server response to opening handshake is\n// invalid.\nvar ErrBadHandshake = errors.New(\"websocket: bad handshake\")\n\n// NewClient creates a new client connection using the given net connection.\n// The URL u specifies the host and request URI. Use requestHeader to specify\n// the origin (Origin), subprotocols (Sec-WebSocket-Protocol) and cookies\n// (Cookie). Use the response.Header to get the selected subprotocol\n// (Sec-WebSocket-Protocol) and cookies (Set-Cookie).\n//\n// If the WebSocket handshake fails, ErrBadHandshake is returned along with a\n// non-nil *http.Response so that callers can handle redirects, authentication,\n// etc.\nfunc NewClient(netConn net.Conn, u *url.URL, requestHeader http.Header, readBufSize, writeBufSize int) (c *Conn, response *http.Response, err error) {\n\tchallengeKey, err := generateChallengeKey()\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tacceptKey := computeAcceptKey(challengeKey)\n\n\tc = newConn(netConn, false, readBufSize, writeBufSize)\n\tp := c.writeBuf[:0]\n\tp = append(p, \"GET \"...)\n\tp = append(p, u.RequestURI()...)\n\tp = append(p, \" HTTP/1.1\\r\\nHost: \"...)\n\tp = append(p, u.Host...)\n\t// \"Upgrade\" is capitalized for servers that do not use case insensitive\n\t// comparisons on header tokens.\n\tp = append(p, \"\\r\\nUpgrade: websocket\\r\\nConnection: Upgrade\\r\\nSec-WebSocket-Version: 13\\r\\nSec-WebSocket-Key: \"...)\n\tp = append(p, challengeKey...)\n\tp = append(p, \"\\r\\n\"...)\n\tfor k, vs := range requestHeader {\n\t\tfor _, v := range vs {\n\t\t\tp = append(p, k...)\n\t\t\tp = append(p, \": \"...)\n\t\t\tp = append(p, v...)\n\t\t\tp = append(p, \"\\r\\n\"...)\n\t\t}\n\t}\n\tp = append(p, \"\\r\\n\"...)\n\n\tif _, err := netConn.Write(p); err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tresp, err := http.ReadResponse(c.br, &http.Request{Method: \"GET\", URL: u})\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tif resp.StatusCode != 101 ||\n\t\t!strings.EqualFold(resp.Header.Get(\"Upgrade\"), \"websocket\") ||\n\t\t!strings.EqualFold(resp.Header.Get(\"Connection\"), \"upgrade\") ||\n\t\tresp.Header.Get(\"Sec-Websocket-Accept\") != acceptKey {\n\t\treturn nil, resp, ErrBadHandshake\n\t}\n\tc.subprotocol = resp.Header.Get(\"Sec-Websocket-Protocol\")\n\treturn c, resp, nil\n}\n\n// A Dialer contains options for connecting to WebSocket server.\ntype Dialer struct {\n\t// NetDial specifies the dial function for creating TCP connections. If\n\t// NetDial is nil, net.Dial is used.\n\tNetDial func(network, addr string) (net.Conn, error)\n\n\t// TLSClientConfig specifies the TLS configuration to use with tls.Client.\n\t// If nil, the default configuration is used.\n\tTLSClientConfig *tls.Config\n\n\t// HandshakeTimeout specifies the duration for the handshake to complete.\n\tHandshakeTimeout time.Duration\n\n\t// Input and output buffer sizes. If the buffer size is zero, then a\n\t// default value of 4096 is used.\n\tReadBufferSize, WriteBufferSize int\n\n\t// Subprotocols specifies the client's requested subprotocols.\n\tSubprotocols []string\n}\n\nvar errMalformedURL = errors.New(\"malformed ws or wss URL\")\n\n// parseURL parses the URL. The url.Parse function is not used here because\n// url.Parse mangles the path.\nfunc parseURL(s string) (*url.URL, error) {\n\t// From the RFC:\n\t//\n\t// ws-URI = \"ws:\" \"//\" host [ \":\" port ] path [ \"?\" query ]\n\t// wss-URI = \"wss:\" \"//\" host [ \":\" port ] path [ \"?\" query ]\n\t//\n\t// We don't use the net/url parser here because the dialer interface does\n\t// not provide a way for applications to work around percent deocding in\n\t// the net/url parser.\n\n\tvar u url.URL\n\tswitch {\n\tcase strings.HasPrefix(s, \"ws://\"):\n\t\tu.Scheme = \"ws\"\n\t\ts = s[len(\"ws://\"):]\n\tcase strings.HasPrefix(s, \"wss://\"):\n\t\tu.Scheme = \"wss\"\n\t\ts = s[len(\"wss://\"):]\n\tdefault:\n\t\treturn nil, errMalformedURL\n\t}\n\n\tu.Host = s\n\tu.Opaque = \"/\"\n\tif i := strings.Index(s, \"/\"); i >= 0 {\n\t\tu.Host = s[:i]\n\t\tu.Opaque = s[i:]\n\t}\n\n\treturn &u, nil\n}\n\nfunc hostPortNoPort(u *url.URL) (hostPort, hostNoPort string) {\n\thostPort = u.Host\n\thostNoPort = u.Host\n\tif i := strings.LastIndex(u.Host, \":\"); i > strings.LastIndex(u.Host, \"]\") {\n\t\thostNoPort = hostNoPort[:i]\n\t} else {\n\t\tif u.Scheme == \"wss\" {\n\t\t\thostPort += \":443\"\n\t\t} else {\n\t\t\thostPort += \":80\"\n\t\t}\n\t}\n\treturn hostPort, hostNoPort\n}\n\n// DefaultDialer is a dialer with all fields set to the default zero values.\nvar DefaultDialer *Dialer\n\n// Dial creates a new client connection. Use requestHeader to specify the\n// origin (Origin), subprotocols (Sec-WebSocket-Protocol) and cookies (Cookie).\n// Use the response.Header to get the selected subprotocol\n// (Sec-WebSocket-Protocol) and cookies (Set-Cookie).\n//\n// If the WebSocket handshake fails, ErrBadHandshake is returned along with a\n// non-nil *http.Response so that callers can handle redirects, authentication,\n// etc.\nfunc (d *Dialer) Dial(urlStr string, requestHeader http.Header) (*Conn, *http.Response, error) {\n\tu, err := parseURL(urlStr)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\thostPort, hostNoPort := hostPortNoPort(u)\n\n\tif d == nil {\n\t\td = &Dialer{}\n\t}\n\n\tvar deadline time.Time\n\tif d.HandshakeTimeout != 0 {\n\t\tdeadline = time.Now().Add(d.HandshakeTimeout)\n\t}\n\n\tnetDial := d.NetDial\n\tif netDial == nil {\n\t\tnetDialer := &net.Dialer{Deadline: deadline}\n\t\tnetDial = netDialer.Dial\n\t}\n\n\tnetConn, err := netDial(\"tcp\", hostPort)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tdefer func() {\n\t\tif netConn != nil {\n\t\t\tnetConn.Close()\n\t\t}\n\t}()\n\n\tif err := netConn.SetDeadline(deadline); err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tif u.Scheme == \"wss\" {\n\t\tcfg := d.TLSClientConfig\n\t\tif cfg == nil {\n\t\t\tcfg = &tls.Config{ServerName: hostNoPort}\n\t\t} else if cfg.ServerName == \"\" {\n\t\t\tshallowCopy := *cfg\n\t\t\tcfg = &shallowCopy\n\t\t\tcfg.ServerName = hostNoPort\n\t\t}\n\t\ttlsConn := tls.Client(netConn, cfg)\n\t\tnetConn = tlsConn\n\t\tif err := tlsConn.Handshake(); err != nil {\n\t\t\treturn nil, nil, err\n\t\t}\n\t\tif !cfg.InsecureSkipVerify {\n\t\t\tif err := tlsConn.VerifyHostname(cfg.ServerName); err != nil {\n\t\t\t\treturn nil, nil, err\n\t\t\t}\n\t\t}\n\t}\n\n\tif len(d.Subprotocols) > 0 {\n\t\th := http.Header{}\n\t\tfor k, v := range requestHeader {\n\t\t\th[k] = v\n\t\t}\n\t\th.Set(\"Sec-Websocket-Protocol\", strings.Join(d.Subprotocols, \", \"))\n\t\trequestHeader = h\n\t}\n\n\tconn, resp, err := NewClient(netConn, u, requestHeader, d.ReadBufferSize, d.WriteBufferSize)\n\tif err != nil {\n\t\treturn nil, resp, err\n\t}\n\n\tnetConn.SetDeadline(time.Time{})\n\tnetConn = nil // to avoid close in defer.\n\treturn conn, resp, nil\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/websocket/conn.go",
    "content": "// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage websocket\n\nimport (\n\t\"bufio\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"math/rand\"\n\t\"net\"\n\t\"strconv\"\n\t\"time\"\n)\n\nconst (\n\tmaxFrameHeaderSize         = 2 + 8 + 4 // Fixed header + length + mask\n\tmaxControlFramePayloadSize = 125\n\tfinalBit                   = 1 << 7\n\tmaskBit                    = 1 << 7\n\twriteWait                  = time.Second\n\n\tdefaultReadBufferSize  = 4096\n\tdefaultWriteBufferSize = 4096\n\n\tcontinuationFrame = 0\n\tnoFrame           = -1\n)\n\n// Close codes defined in RFC 6455, section 11.7.\nconst (\n\tCloseNormalClosure           = 1000\n\tCloseGoingAway               = 1001\n\tCloseProtocolError           = 1002\n\tCloseUnsupportedData         = 1003\n\tCloseNoStatusReceived        = 1005\n\tCloseAbnormalClosure         = 1006\n\tCloseInvalidFramePayloadData = 1007\n\tClosePolicyViolation         = 1008\n\tCloseMessageTooBig           = 1009\n\tCloseMandatoryExtension      = 1010\n\tCloseInternalServerErr       = 1011\n\tCloseTLSHandshake            = 1015\n)\n\n// The message types are defined in RFC 6455, section 11.8.\nconst (\n\t// TextMessage denotes a text data message. The text message payload is\n\t// interpreted as UTF-8 encoded text data.\n\tTextMessage = 1\n\n\t// BinaryMessage denotes a binary data message.\n\tBinaryMessage = 2\n\n\t// CloseMessage denotes a close control message. The optional message\n\t// payload contains a numeric code and text. Use the FormatCloseMessage\n\t// function to format a close message payload.\n\tCloseMessage = 8\n\n\t// PingMessage denotes a ping control message. The optional message payload\n\t// is UTF-8 encoded text.\n\tPingMessage = 9\n\n\t// PongMessage denotes a ping control message. The optional message payload\n\t// is UTF-8 encoded text.\n\tPongMessage = 10\n)\n\n// ErrCloseSent is returned when the application writes a message to the\n// connection after sending a close message.\nvar ErrCloseSent = errors.New(\"websocket: close sent\")\n\n// ErrReadLimit is returned when reading a message that is larger than the\n// read limit set for the connection.\nvar ErrReadLimit = errors.New(\"websocket: read limit exceeded\")\n\n// netError satisfies the net Error interface.\ntype netError struct {\n\tmsg       string\n\ttemporary bool\n\ttimeout   bool\n}\n\nfunc (e *netError) Error() string   { return e.msg }\nfunc (e *netError) Temporary() bool { return e.temporary }\nfunc (e *netError) Timeout() bool   { return e.timeout }\n\n// closeError represents close frame.\ntype closeError struct {\n\tcode int\n\ttext string\n}\n\nfunc (e *closeError) Error() string {\n\treturn \"websocket: close \" + strconv.Itoa(e.code) + \" \" + e.text\n}\n\nvar (\n\terrWriteTimeout        = &netError{msg: \"websocket: write timeout\", timeout: true}\n\terrUnexpectedEOF       = &closeError{code: CloseAbnormalClosure, text: io.ErrUnexpectedEOF.Error()}\n\terrBadWriteOpCode      = errors.New(\"websocket: bad write message type\")\n\terrWriteClosed         = errors.New(\"websocket: write closed\")\n\terrInvalidControlFrame = errors.New(\"websocket: invalid control frame\")\n)\n\nfunc hideTempErr(err error) error {\n\tif e, ok := err.(net.Error); ok && e.Temporary() {\n\t\terr = &netError{msg: e.Error(), timeout: e.Timeout()}\n\t}\n\treturn err\n}\n\nfunc isControl(frameType int) bool {\n\treturn frameType == CloseMessage || frameType == PingMessage || frameType == PongMessage\n}\n\nfunc isData(frameType int) bool {\n\treturn frameType == TextMessage || frameType == BinaryMessage\n}\n\nfunc maskBytes(key [4]byte, pos int, b []byte) int {\n\tfor i := range b {\n\t\tb[i] ^= key[pos&3]\n\t\tpos++\n\t}\n\treturn pos & 3\n}\n\nfunc newMaskKey() [4]byte {\n\tn := rand.Uint32()\n\treturn [4]byte{byte(n), byte(n >> 8), byte(n >> 16), byte(n >> 24)}\n}\n\n// Conn represents a WebSocket connection.\ntype Conn struct {\n\tconn        net.Conn\n\tisServer    bool\n\tsubprotocol string\n\n\t// Write fields\n\tmu        chan bool // used as mutex to protect write to conn and closeSent\n\tcloseSent bool      // true if close message was sent\n\n\t// Message writer fields.\n\twriteErr       error\n\twriteBuf       []byte // frame is constructed in this buffer.\n\twritePos       int    // end of data in writeBuf.\n\twriteFrameType int    // type of the current frame.\n\twriteSeq       int    // incremented to invalidate message writers.\n\twriteDeadline  time.Time\n\n\t// Read fields\n\treadErr       error\n\tbr            *bufio.Reader\n\treadRemaining int64 // bytes remaining in current frame.\n\treadFinal     bool  // true the current message has more frames.\n\treadSeq       int   // incremented to invalidate message readers.\n\treadLength    int64 // Message size.\n\treadLimit     int64 // Maximum message size.\n\treadMaskPos   int\n\treadMaskKey   [4]byte\n\thandlePong    func(string) error\n\thandlePing    func(string) error\n}\n\nfunc newConn(conn net.Conn, isServer bool, readBufferSize, writeBufferSize int) *Conn {\n\tmu := make(chan bool, 1)\n\tmu <- true\n\n\tif readBufferSize == 0 {\n\t\treadBufferSize = defaultReadBufferSize\n\t}\n\tif writeBufferSize == 0 {\n\t\twriteBufferSize = defaultWriteBufferSize\n\t}\n\n\tc := &Conn{\n\t\tisServer:       isServer,\n\t\tbr:             bufio.NewReaderSize(conn, readBufferSize),\n\t\tconn:           conn,\n\t\tmu:             mu,\n\t\treadFinal:      true,\n\t\twriteBuf:       make([]byte, writeBufferSize+maxFrameHeaderSize),\n\t\twriteFrameType: noFrame,\n\t\twritePos:       maxFrameHeaderSize,\n\t}\n\tc.SetPingHandler(nil)\n\tc.SetPongHandler(nil)\n\treturn c\n}\n\n// Subprotocol returns the negotiated protocol for the connection.\nfunc (c *Conn) Subprotocol() string {\n\treturn c.subprotocol\n}\n\n// Close closes the underlying network connection without sending or waiting for a close frame.\nfunc (c *Conn) Close() error {\n\treturn c.conn.Close()\n}\n\n// LocalAddr returns the local network address.\nfunc (c *Conn) LocalAddr() net.Addr {\n\treturn c.conn.LocalAddr()\n}\n\n// RemoteAddr returns the remote network address.\nfunc (c *Conn) RemoteAddr() net.Addr {\n\treturn c.conn.RemoteAddr()\n}\n\n// Write methods\n\nfunc (c *Conn) write(frameType int, deadline time.Time, bufs ...[]byte) error {\n\t<-c.mu\n\tdefer func() { c.mu <- true }()\n\n\tif c.closeSent {\n\t\treturn ErrCloseSent\n\t} else if frameType == CloseMessage {\n\t\tc.closeSent = true\n\t}\n\n\tc.conn.SetWriteDeadline(deadline)\n\tfor _, buf := range bufs {\n\t\tif len(buf) > 0 {\n\t\t\tn, err := c.conn.Write(buf)\n\t\t\tif n != len(buf) {\n\t\t\t\t// Close on partial write.\n\t\t\t\tc.conn.Close()\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\n// WriteControl writes a control message with the given deadline. The allowed\n// message types are CloseMessage, PingMessage and PongMessage.\nfunc (c *Conn) WriteControl(messageType int, data []byte, deadline time.Time) error {\n\tif !isControl(messageType) {\n\t\treturn errBadWriteOpCode\n\t}\n\tif len(data) > maxControlFramePayloadSize {\n\t\treturn errInvalidControlFrame\n\t}\n\n\tb0 := byte(messageType) | finalBit\n\tb1 := byte(len(data))\n\tif !c.isServer {\n\t\tb1 |= maskBit\n\t}\n\n\tbuf := make([]byte, 0, maxFrameHeaderSize+maxControlFramePayloadSize)\n\tbuf = append(buf, b0, b1)\n\n\tif c.isServer {\n\t\tbuf = append(buf, data...)\n\t} else {\n\t\tkey := newMaskKey()\n\t\tbuf = append(buf, key[:]...)\n\t\tbuf = append(buf, data...)\n\t\tmaskBytes(key, 0, buf[6:])\n\t}\n\n\td := time.Hour * 1000\n\tif !deadline.IsZero() {\n\t\td = deadline.Sub(time.Now())\n\t\tif d < 0 {\n\t\t\treturn errWriteTimeout\n\t\t}\n\t}\n\n\ttimer := time.NewTimer(d)\n\tselect {\n\tcase <-c.mu:\n\t\ttimer.Stop()\n\tcase <-timer.C:\n\t\treturn errWriteTimeout\n\t}\n\tdefer func() { c.mu <- true }()\n\n\tif c.closeSent {\n\t\treturn ErrCloseSent\n\t} else if messageType == CloseMessage {\n\t\tc.closeSent = true\n\t}\n\n\tc.conn.SetWriteDeadline(deadline)\n\tn, err := c.conn.Write(buf)\n\tif n != 0 && n != len(buf) {\n\t\tc.conn.Close()\n\t}\n\treturn err\n}\n\n// NextWriter returns a writer for the next message to send.  The writer's\n// Close method flushes the complete message to the network.\n//\n// There can be at most one open writer on a connection. NextWriter closes the\n// previous writer if the application has not already done so.\n//\n// The NextWriter method and the writers returned from the method cannot be\n// accessed by more than one goroutine at a time.\nfunc (c *Conn) NextWriter(messageType int) (io.WriteCloser, error) {\n\tif c.writeErr != nil {\n\t\treturn nil, c.writeErr\n\t}\n\n\tif c.writeFrameType != noFrame {\n\t\tif err := c.flushFrame(true, nil); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tif !isControl(messageType) && !isData(messageType) {\n\t\treturn nil, errBadWriteOpCode\n\t}\n\n\tc.writeFrameType = messageType\n\treturn messageWriter{c, c.writeSeq}, nil\n}\n\nfunc (c *Conn) flushFrame(final bool, extra []byte) error {\n\tlength := c.writePos - maxFrameHeaderSize + len(extra)\n\n\t// Check for invalid control frames.\n\tif isControl(c.writeFrameType) &&\n\t\t(!final || length > maxControlFramePayloadSize) {\n\t\tc.writeSeq++\n\t\tc.writeFrameType = noFrame\n\t\tc.writePos = maxFrameHeaderSize\n\t\treturn errInvalidControlFrame\n\t}\n\n\tb0 := byte(c.writeFrameType)\n\tif final {\n\t\tb0 |= finalBit\n\t}\n\tb1 := byte(0)\n\tif !c.isServer {\n\t\tb1 |= maskBit\n\t}\n\n\t// Assume that the frame starts at beginning of c.writeBuf.\n\tframePos := 0\n\tif c.isServer {\n\t\t// Adjust up if mask not included in the header.\n\t\tframePos = 4\n\t}\n\n\tswitch {\n\tcase length >= 65536:\n\t\tc.writeBuf[framePos] = b0\n\t\tc.writeBuf[framePos+1] = b1 | 127\n\t\tbinary.BigEndian.PutUint64(c.writeBuf[framePos+2:], uint64(length))\n\tcase length > 125:\n\t\tframePos += 6\n\t\tc.writeBuf[framePos] = b0\n\t\tc.writeBuf[framePos+1] = b1 | 126\n\t\tbinary.BigEndian.PutUint16(c.writeBuf[framePos+2:], uint16(length))\n\tdefault:\n\t\tframePos += 8\n\t\tc.writeBuf[framePos] = b0\n\t\tc.writeBuf[framePos+1] = b1 | byte(length)\n\t}\n\n\tif !c.isServer {\n\t\tkey := newMaskKey()\n\t\tcopy(c.writeBuf[maxFrameHeaderSize-4:], key[:])\n\t\tmaskBytes(key, 0, c.writeBuf[maxFrameHeaderSize:c.writePos])\n\t\tif len(extra) > 0 {\n\t\t\tc.writeErr = errors.New(\"websocket: internal error, extra used in client mode\")\n\t\t\treturn c.writeErr\n\t\t}\n\t}\n\n\t// Write the buffers to the connection.\n\tc.writeErr = c.write(c.writeFrameType, c.writeDeadline, c.writeBuf[framePos:c.writePos], extra)\n\n\t// Setup for next frame.\n\tc.writePos = maxFrameHeaderSize\n\tc.writeFrameType = continuationFrame\n\tif final {\n\t\tc.writeSeq++\n\t\tc.writeFrameType = noFrame\n\t}\n\treturn c.writeErr\n}\n\ntype messageWriter struct {\n\tc   *Conn\n\tseq int\n}\n\nfunc (w messageWriter) err() error {\n\tc := w.c\n\tif c.writeSeq != w.seq {\n\t\treturn errWriteClosed\n\t}\n\tif c.writeErr != nil {\n\t\treturn c.writeErr\n\t}\n\treturn nil\n}\n\nfunc (w messageWriter) ncopy(max int) (int, error) {\n\tn := len(w.c.writeBuf) - w.c.writePos\n\tif n <= 0 {\n\t\tif err := w.c.flushFrame(false, nil); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tn = len(w.c.writeBuf) - w.c.writePos\n\t}\n\tif n > max {\n\t\tn = max\n\t}\n\treturn n, nil\n}\n\nfunc (w messageWriter) write(final bool, p []byte) (int, error) {\n\tif err := w.err(); err != nil {\n\t\treturn 0, err\n\t}\n\n\tif len(p) > 2*len(w.c.writeBuf) && w.c.isServer {\n\t\t// Don't buffer large messages.\n\t\terr := w.c.flushFrame(final, p)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\treturn len(p), nil\n\t}\n\n\tnn := len(p)\n\tfor len(p) > 0 {\n\t\tn, err := w.ncopy(len(p))\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tcopy(w.c.writeBuf[w.c.writePos:], p[:n])\n\t\tw.c.writePos += n\n\t\tp = p[n:]\n\t}\n\treturn nn, nil\n}\n\nfunc (w messageWriter) Write(p []byte) (int, error) {\n\treturn w.write(false, p)\n}\n\nfunc (w messageWriter) WriteString(p string) (int, error) {\n\tif err := w.err(); err != nil {\n\t\treturn 0, err\n\t}\n\n\tnn := len(p)\n\tfor len(p) > 0 {\n\t\tn, err := w.ncopy(len(p))\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tcopy(w.c.writeBuf[w.c.writePos:], p[:n])\n\t\tw.c.writePos += n\n\t\tp = p[n:]\n\t}\n\treturn nn, nil\n}\n\nfunc (w messageWriter) ReadFrom(r io.Reader) (nn int64, err error) {\n\tif err := w.err(); err != nil {\n\t\treturn 0, err\n\t}\n\tfor {\n\t\tif w.c.writePos == len(w.c.writeBuf) {\n\t\t\terr = w.c.flushFrame(false, nil)\n\t\t\tif err != nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tvar n int\n\t\tn, err = r.Read(w.c.writeBuf[w.c.writePos:])\n\t\tw.c.writePos += n\n\t\tnn += int64(n)\n\t\tif err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\terr = nil\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t}\n\treturn nn, err\n}\n\nfunc (w messageWriter) Close() error {\n\tif err := w.err(); err != nil {\n\t\treturn err\n\t}\n\treturn w.c.flushFrame(true, nil)\n}\n\n// WriteMessage is a helper method for getting a writer using NextWriter,\n// writing the message and closing the writer.\nfunc (c *Conn) WriteMessage(messageType int, data []byte) error {\n\twr, err := c.NextWriter(messageType)\n\tif err != nil {\n\t\treturn err\n\t}\n\tw := wr.(messageWriter)\n\tif _, err := w.write(true, data); err != nil {\n\t\treturn err\n\t}\n\tif c.writeSeq == w.seq {\n\t\tif err := c.flushFrame(true, nil); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// SetWriteDeadline sets the write deadline on the underlying network\n// connection. After a write has timed out, the websocket state is corrupt and\n// all future writes will return an error. A zero value for t means writes will\n// not time out.\nfunc (c *Conn) SetWriteDeadline(t time.Time) error {\n\tc.writeDeadline = t\n\treturn nil\n}\n\n// Read methods\n\n// readFull is like io.ReadFull except that io.EOF is never returned.\nfunc (c *Conn) readFull(p []byte) (err error) {\n\tvar n int\n\tfor n < len(p) && err == nil {\n\t\tvar nn int\n\t\tnn, err = c.br.Read(p[n:])\n\t\tn += nn\n\t}\n\tif n == len(p) {\n\t\terr = nil\n\t} else if err == io.EOF {\n\t\terr = errUnexpectedEOF\n\t}\n\treturn\n}\n\nfunc (c *Conn) advanceFrame() (int, error) {\n\n\t// 1. Skip remainder of previous frame.\n\n\tif c.readRemaining > 0 {\n\t\tif _, err := io.CopyN(ioutil.Discard, c.br, c.readRemaining); err != nil {\n\t\t\treturn noFrame, err\n\t\t}\n\t}\n\n\t// 2. Read and parse first two bytes of frame header.\n\n\tvar b [8]byte\n\tif err := c.readFull(b[:2]); err != nil {\n\t\treturn noFrame, err\n\t}\n\n\tfinal := b[0]&finalBit != 0\n\tframeType := int(b[0] & 0xf)\n\treserved := int((b[0] >> 4) & 0x7)\n\tmask := b[1]&maskBit != 0\n\tc.readRemaining = int64(b[1] & 0x7f)\n\n\tif reserved != 0 {\n\t\treturn noFrame, c.handleProtocolError(\"unexpected reserved bits \" + strconv.Itoa(reserved))\n\t}\n\n\tswitch frameType {\n\tcase CloseMessage, PingMessage, PongMessage:\n\t\tif c.readRemaining > maxControlFramePayloadSize {\n\t\t\treturn noFrame, c.handleProtocolError(\"control frame length > 125\")\n\t\t}\n\t\tif !final {\n\t\t\treturn noFrame, c.handleProtocolError(\"control frame not final\")\n\t\t}\n\tcase TextMessage, BinaryMessage:\n\t\tif !c.readFinal {\n\t\t\treturn noFrame, c.handleProtocolError(\"message start before final message frame\")\n\t\t}\n\t\tc.readFinal = final\n\tcase continuationFrame:\n\t\tif c.readFinal {\n\t\t\treturn noFrame, c.handleProtocolError(\"continuation after final message frame\")\n\t\t}\n\t\tc.readFinal = final\n\tdefault:\n\t\treturn noFrame, c.handleProtocolError(\"unknown opcode \" + strconv.Itoa(frameType))\n\t}\n\n\t// 3. Read and parse frame length.\n\n\tswitch c.readRemaining {\n\tcase 126:\n\t\tif err := c.readFull(b[:2]); err != nil {\n\t\t\treturn noFrame, err\n\t\t}\n\t\tc.readRemaining = int64(binary.BigEndian.Uint16(b[:2]))\n\tcase 127:\n\t\tif err := c.readFull(b[:8]); err != nil {\n\t\t\treturn noFrame, err\n\t\t}\n\t\tc.readRemaining = int64(binary.BigEndian.Uint64(b[:8]))\n\t}\n\n\t// 4. Handle frame masking.\n\n\tif mask != c.isServer {\n\t\treturn noFrame, c.handleProtocolError(\"incorrect mask flag\")\n\t}\n\n\tif mask {\n\t\tc.readMaskPos = 0\n\t\tif err := c.readFull(c.readMaskKey[:]); err != nil {\n\t\t\treturn noFrame, err\n\t\t}\n\t}\n\n\t// 5. For text and binary messages, enforce read limit and return.\n\n\tif frameType == continuationFrame || frameType == TextMessage || frameType == BinaryMessage {\n\n\t\tc.readLength += c.readRemaining\n\t\tif c.readLimit > 0 && c.readLength > c.readLimit {\n\t\t\tc.WriteControl(CloseMessage, FormatCloseMessage(CloseMessageTooBig, \"\"), time.Now().Add(writeWait))\n\t\t\treturn noFrame, ErrReadLimit\n\t\t}\n\n\t\treturn frameType, nil\n\t}\n\n\t// 6. Read control frame payload.\n\n\tvar payload []byte\n\tif c.readRemaining > 0 {\n\t\tpayload = make([]byte, c.readRemaining)\n\t\tc.readRemaining = 0\n\t\tif err := c.readFull(payload); err != nil {\n\t\t\treturn noFrame, err\n\t\t}\n\t\tif c.isServer {\n\t\t\tmaskBytes(c.readMaskKey, 0, payload)\n\t\t}\n\t}\n\n\t// 7. Process control frame payload.\n\n\tswitch frameType {\n\tcase PongMessage:\n\t\tif err := c.handlePong(string(payload)); err != nil {\n\t\t\treturn noFrame, err\n\t\t}\n\tcase PingMessage:\n\t\tif err := c.handlePing(string(payload)); err != nil {\n\t\t\treturn noFrame, err\n\t\t}\n\tcase CloseMessage:\n\t\tc.WriteControl(CloseMessage, []byte{}, time.Now().Add(writeWait))\n\t\tcloseCode := CloseNoStatusReceived\n\t\tcloseText := \"\"\n\t\tif len(payload) >= 2 {\n\t\t\tcloseCode = int(binary.BigEndian.Uint16(payload))\n\t\t\tcloseText = string(payload[2:])\n\t\t}\n\t\tswitch closeCode {\n\t\tcase CloseNormalClosure, CloseGoingAway:\n\t\t\treturn noFrame, io.EOF\n\t\tdefault:\n\t\t\treturn noFrame, &closeError{code: closeCode, text: closeText}\n\t\t}\n\t}\n\n\treturn frameType, nil\n}\n\nfunc (c *Conn) handleProtocolError(message string) error {\n\tc.WriteControl(CloseMessage, FormatCloseMessage(CloseProtocolError, message), time.Now().Add(writeWait))\n\treturn errors.New(\"websocket: \" + message)\n}\n\n// NextReader returns the next data message received from the peer. The\n// returned messageType is either TextMessage or BinaryMessage.\n//\n// There can be at most one open reader on a connection. NextReader discards\n// the previous message if the application has not already consumed it.\n//\n// The NextReader method and the readers returned from the method cannot be\n// accessed by more than one goroutine at a time.\nfunc (c *Conn) NextReader() (messageType int, r io.Reader, err error) {\n\n\tc.readSeq++\n\tc.readLength = 0\n\n\tfor c.readErr == nil {\n\t\tframeType, err := c.advanceFrame()\n\t\tif err != nil {\n\t\t\tc.readErr = hideTempErr(err)\n\t\t\tbreak\n\t\t}\n\t\tif frameType == TextMessage || frameType == BinaryMessage {\n\t\t\treturn frameType, messageReader{c, c.readSeq}, nil\n\t\t}\n\t}\n\treturn noFrame, nil, c.readErr\n}\n\ntype messageReader struct {\n\tc   *Conn\n\tseq int\n}\n\nfunc (r messageReader) Read(b []byte) (int, error) {\n\n\tif r.seq != r.c.readSeq {\n\t\treturn 0, io.EOF\n\t}\n\n\tfor r.c.readErr == nil {\n\n\t\tif r.c.readRemaining > 0 {\n\t\t\tif int64(len(b)) > r.c.readRemaining {\n\t\t\t\tb = b[:r.c.readRemaining]\n\t\t\t}\n\t\t\tn, err := r.c.br.Read(b)\n\t\t\tr.c.readErr = hideTempErr(err)\n\t\t\tif r.c.isServer {\n\t\t\t\tr.c.readMaskPos = maskBytes(r.c.readMaskKey, r.c.readMaskPos, b[:n])\n\t\t\t}\n\t\t\tr.c.readRemaining -= int64(n)\n\t\t\treturn n, r.c.readErr\n\t\t}\n\n\t\tif r.c.readFinal {\n\t\t\tr.c.readSeq++\n\t\t\treturn 0, io.EOF\n\t\t}\n\n\t\tframeType, err := r.c.advanceFrame()\n\t\tswitch {\n\t\tcase err != nil:\n\t\t\tr.c.readErr = hideTempErr(err)\n\t\tcase frameType == TextMessage || frameType == BinaryMessage:\n\t\t\tr.c.readErr = errors.New(\"websocket: internal error, unexpected text or binary in Reader\")\n\t\t}\n\t}\n\n\terr := r.c.readErr\n\tif err == io.EOF && r.seq == r.c.readSeq {\n\t\terr = errUnexpectedEOF\n\t}\n\treturn 0, err\n}\n\n// ReadMessage is a helper method for getting a reader using NextReader and\n// reading from that reader to a buffer.\nfunc (c *Conn) ReadMessage() (messageType int, p []byte, err error) {\n\tvar r io.Reader\n\tmessageType, r, err = c.NextReader()\n\tif err != nil {\n\t\treturn messageType, nil, err\n\t}\n\tp, err = ioutil.ReadAll(r)\n\treturn messageType, p, err\n}\n\n// SetReadDeadline sets the read deadline on the underlying network connection.\n// After a read has timed out, the websocket connection state is corrupt and\n// all future reads will return an error. A zero value for t means reads will\n// not time out.\nfunc (c *Conn) SetReadDeadline(t time.Time) error {\n\treturn c.conn.SetReadDeadline(t)\n}\n\n// SetReadLimit sets the maximum size for a message read from the peer. If a\n// message exceeds the limit, the connection sends a close frame to the peer\n// and returns ErrReadLimit to the application.\nfunc (c *Conn) SetReadLimit(limit int64) {\n\tc.readLimit = limit\n}\n\n// SetPingHandler sets the handler for ping messages received from the peer.\n// The default ping handler sends a pong to the peer.\nfunc (c *Conn) SetPingHandler(h func(string) error) {\n\tif h == nil {\n\t\th = func(message string) error {\n\t\t\tc.WriteControl(PongMessage, []byte(message), time.Now().Add(writeWait))\n\t\t\treturn nil\n\t\t}\n\t}\n\tc.handlePing = h\n}\n\n// SetPongHandler sets then handler for pong messages received from the peer.\n// The default pong handler does nothing.\nfunc (c *Conn) SetPongHandler(h func(string) error) {\n\tif h == nil {\n\t\th = func(string) error { return nil }\n\t}\n\tc.handlePong = h\n}\n\n// UnderlyingConn returns the internal net.Conn. This can be used to further\n// modifications to connection specific flags.\nfunc (c *Conn) UnderlyingConn() net.Conn {\n\treturn c.conn\n}\n\n// FormatCloseMessage formats closeCode and text as a WebSocket close message.\nfunc FormatCloseMessage(closeCode int, text string) []byte {\n\tbuf := make([]byte, 2+len(text))\n\tbinary.BigEndian.PutUint16(buf, uint16(closeCode))\n\tcopy(buf[2:], text)\n\treturn buf\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/websocket/doc.go",
    "content": "// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package websocket implements the WebSocket protocol defined in RFC 6455.\n//\n// Overview\n//\n// The Conn type represents a WebSocket connection. A server application uses\n// the Upgrade function from an Upgrader object with a HTTP request handler\n// to get a pointer to a Conn:\n//\n//  var upgrader = websocket.Upgrader{\n//      ReadBufferSize:  1024,\n//      WriteBufferSize: 1024,\n//  }\n//\n//  func handler(w http.ResponseWriter, r *http.Request) {\n//      conn, err := upgrader.Upgrade(w, r, nil)\n//      if err != nil {\n//          log.Println(err)\n//          return\n//      }\n//      ... Use conn to send and receive messages.\n//  }\n//\n// Call the connection WriteMessage and ReadMessages methods to send and\n// receive messages as a slice of bytes. This snippet of code shows how to echo\n// messages using these methods:\n//\n//  for {\n//      messageType, p, err := conn.ReadMessage()\n//      if err != nil {\n//          return\n//      }\n//      if err = conn.WriteMessage(messageType, p); err != nil {\n//          return err\n//      }\n//  }\n//\n// In above snippet of code, p is a []byte and messageType is an int with value\n// websocket.BinaryMessage or websocket.TextMessage.\n//\n// An application can also send and receive messages using the io.WriteCloser\n// and io.Reader interfaces. To send a message, call the connection NextWriter\n// method to get an io.WriteCloser, write the message to the writer and close\n// the writer when done. To receive a message, call the connection NextReader\n// method to get an io.Reader and read until io.EOF is returned. This snippet\n// snippet shows how to echo messages using the NextWriter and NextReader\n// methods:\n//\n//  for {\n//      messageType, r, err := conn.NextReader()\n//      if err != nil {\n//          return\n//      }\n//      w, err := conn.NextWriter(messageType)\n//      if err != nil {\n//          return err\n//      }\n//      if _, err := io.Copy(w, r); err != nil {\n//          return err\n//      }\n//      if err := w.Close(); err != nil {\n//          return err\n//      }\n//  }\n//\n// Data Messages\n//\n// The WebSocket protocol distinguishes between text and binary data messages.\n// Text messages are interpreted as UTF-8 encoded text. The interpretation of\n// binary messages is left to the application.\n//\n// This package uses the TextMessage and BinaryMessage integer constants to\n// identify the two data message types. The ReadMessage and NextReader methods\n// return the type of the received message. The messageType argument to the\n// WriteMessage and NextWriter methods specifies the type of a sent message.\n//\n// It is the application's responsibility to ensure that text messages are\n// valid UTF-8 encoded text.\n//\n// Control Messages\n//\n// The WebSocket protocol defines three types of control messages: close, ping\n// and pong. Call the connection WriteControl, WriteMessage or NextWriter\n// methods to send a control message to the peer.\n//\n// Connections handle received ping and pong messages by invoking a callback\n// function set with SetPingHandler and SetPongHandler methods. These callback\n// functions can be invoked from the ReadMessage method, the NextReader method\n// or from a call to the data message reader returned from NextReader.\n//\n// Connections handle received close messages by returning an error from the\n// ReadMessage method, the NextReader method or from a call to the data message\n// reader returned from NextReader.\n//\n// Concurrency\n//\n// Connections do not support concurrent calls to the write methods\n// (NextWriter, SetWriteDeadline, WriteMessage) or concurrent calls to the read\n// methods methods (NextReader, SetReadDeadline, ReadMessage).  Connections do\n// support a concurrent reader and writer.\n//\n// The Close and WriteControl methods can be called concurrently with all other\n// methods.\n//\n// Read is Required\n//\n// The application must read the connection to process ping and close messages\n// sent from the peer. If the application is not otherwise interested in\n// messages from the peer, then the application should start a goroutine to read\n// and discard messages from the peer. A simple example is:\n//\n//  func readLoop(c *websocket.Conn) {\n//      for {\n//          if _, _, err := c.NextReader(); err != nil {\n//              c.Close()\n//              break\n//          }\n//      }\n//  }\n//\n// Origin Considerations\n//\n// Web browsers allow Javascript applications to open a WebSocket connection to\n// any host. It's up to the server to enforce an origin policy using the Origin\n// request header sent by the browser.\n//\n// The Upgrader calls the function specified in the CheckOrigin field to check\n// the origin. If the CheckOrigin function returns false, then the Upgrade\n// method fails the WebSocket handshake with HTTP status 403.\n//\n// If the CheckOrigin field is nil, then the Upgrader uses a safe default: fail\n// the handshake if the Origin request header is present and not equal to the\n// Host request header.\n//\n// An application can allow connections from any origin by specifying a\n// function that always returns true:\n//\n//    var upgrader = websocket.Upgrader{\n//      CheckOrigin: func(r *http.Request) bool { return true },\n//   }\n//\n// The deprecated Upgrade function does not enforce an origin policy. It's the\n// application's responsibility to check the Origin header before calling\n// Upgrade.\npackage websocket\n"
  },
  {
    "path": "vendor/github.com/btcsuite/websocket/json.go",
    "content": "// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage websocket\n\nimport (\n\t\"encoding/json\"\n)\n\n// WriteJSON is deprecated, use c.WriteJSON instead.\nfunc WriteJSON(c *Conn, v interface{}) error {\n\treturn c.WriteJSON(v)\n}\n\n// WriteJSON writes the JSON encoding of v to the connection.\n//\n// See the documentation for encoding/json Marshal for details about the\n// conversion of Go values to JSON.\nfunc (c *Conn) WriteJSON(v interface{}) error {\n\tw, err := c.NextWriter(TextMessage)\n\tif err != nil {\n\t\treturn err\n\t}\n\terr1 := json.NewEncoder(w).Encode(v)\n\terr2 := w.Close()\n\tif err1 != nil {\n\t\treturn err1\n\t}\n\treturn err2\n}\n\n// ReadJSON is deprecated, use c.ReadJSON instead.\nfunc ReadJSON(c *Conn, v interface{}) error {\n\treturn c.ReadJSON(v)\n}\n\n// ReadJSON reads the next JSON-encoded message from the connection and stores\n// it in the value pointed to by v.\n//\n// See the documentation for the encoding/json Unmarshal function for details\n// about the conversion of JSON to a Go value.\nfunc (c *Conn) ReadJSON(v interface{}) error {\n\t_, r, err := c.NextReader()\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn json.NewDecoder(r).Decode(v)\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/websocket/server.go",
    "content": "// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage websocket\n\nimport (\n\t\"bufio\"\n\t\"errors\"\n\t\"net\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strings\"\n\t\"time\"\n)\n\n// HandshakeError describes an error with the handshake from the peer.\ntype HandshakeError struct {\n\tmessage string\n}\n\nfunc (e HandshakeError) Error() string { return e.message }\n\n// Upgrader specifies parameters for upgrading an HTTP connection to a\n// WebSocket connection.\ntype Upgrader struct {\n\t// HandshakeTimeout specifies the duration for the handshake to complete.\n\tHandshakeTimeout time.Duration\n\n\t// ReadBufferSize and WriteBufferSize specify I/O buffer sizes. If a buffer\n\t// size is zero, then a default value of 4096 is used. The I/O buffer sizes\n\t// do not limit the size of the messages that can be sent or received.\n\tReadBufferSize, WriteBufferSize int\n\n\t// Subprotocols specifies the server's supported protocols in order of\n\t// preference. If this field is set, then the Upgrade method negotiates a\n\t// subprotocol by selecting the first match in this list with a protocol\n\t// requested by the client.\n\tSubprotocols []string\n\n\t// Error specifies the function for generating HTTP error responses. If Error\n\t// is nil, then http.Error is used to generate the HTTP response.\n\tError func(w http.ResponseWriter, r *http.Request, status int, reason error)\n\n\t// CheckOrigin returns true if the request Origin header is acceptable. If\n\t// CheckOrigin is nil, the host in the Origin header must not be set or\n\t// must match the host of the request.\n\tCheckOrigin func(r *http.Request) bool\n}\n\nfunc (u *Upgrader) returnError(w http.ResponseWriter, r *http.Request, status int, reason string) (*Conn, error) {\n\terr := HandshakeError{reason}\n\tif u.Error != nil {\n\t\tu.Error(w, r, status, err)\n\t} else {\n\t\thttp.Error(w, http.StatusText(status), status)\n\t}\n\treturn nil, err\n}\n\n// checkSameOrigin returns true if the origin is not set or is equal to the request host.\nfunc checkSameOrigin(r *http.Request) bool {\n\torigin := r.Header[\"Origin\"]\n\tif len(origin) == 0 {\n\t\treturn true\n\t}\n\tu, err := url.Parse(origin[0])\n\tif err != nil {\n\t\treturn false\n\t}\n\treturn u.Host == r.Host\n}\n\nfunc (u *Upgrader) selectSubprotocol(r *http.Request, responseHeader http.Header) string {\n\tif u.Subprotocols != nil {\n\t\tclientProtocols := Subprotocols(r)\n\t\tfor _, serverProtocol := range u.Subprotocols {\n\t\t\tfor _, clientProtocol := range clientProtocols {\n\t\t\t\tif clientProtocol == serverProtocol {\n\t\t\t\t\treturn clientProtocol\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else if responseHeader != nil {\n\t\treturn responseHeader.Get(\"Sec-Websocket-Protocol\")\n\t}\n\treturn \"\"\n}\n\n// Upgrade upgrades the HTTP server connection to the WebSocket protocol.\n//\n// The responseHeader is included in the response to the client's upgrade\n// request. Use the responseHeader to specify cookies (Set-Cookie) and the\n// application negotiated subprotocol (Sec-Websocket-Protocol).\nfunc (u *Upgrader) Upgrade(w http.ResponseWriter, r *http.Request, responseHeader http.Header) (*Conn, error) {\n\tif values := r.Header[\"Sec-Websocket-Version\"]; len(values) == 0 || values[0] != \"13\" {\n\t\treturn u.returnError(w, r, http.StatusBadRequest, \"websocket: version != 13\")\n\t}\n\n\tif !tokenListContainsValue(r.Header, \"Connection\", \"upgrade\") {\n\t\treturn u.returnError(w, r, http.StatusBadRequest, \"websocket: could not find connection header with token 'upgrade'\")\n\t}\n\n\tif !tokenListContainsValue(r.Header, \"Upgrade\", \"websocket\") {\n\t\treturn u.returnError(w, r, http.StatusBadRequest, \"websocket: could not find upgrade header with token 'websocket'\")\n\t}\n\n\tcheckOrigin := u.CheckOrigin\n\tif checkOrigin == nil {\n\t\tcheckOrigin = checkSameOrigin\n\t}\n\tif !checkOrigin(r) {\n\t\treturn u.returnError(w, r, http.StatusForbidden, \"websocket: origin not allowed\")\n\t}\n\n\tchallengeKey := r.Header.Get(\"Sec-Websocket-Key\")\n\tif challengeKey == \"\" {\n\t\treturn u.returnError(w, r, http.StatusBadRequest, \"websocket: key missing or blank\")\n\t}\n\n\tsubprotocol := u.selectSubprotocol(r, responseHeader)\n\n\tvar (\n\t\tnetConn net.Conn\n\t\tbr      *bufio.Reader\n\t\terr     error\n\t)\n\n\th, ok := w.(http.Hijacker)\n\tif !ok {\n\t\treturn u.returnError(w, r, http.StatusInternalServerError, \"websocket: response does not implement http.Hijacker\")\n\t}\n\tvar rw *bufio.ReadWriter\n\tnetConn, rw, err = h.Hijack()\n\tif err != nil {\n\t\treturn u.returnError(w, r, http.StatusInternalServerError, err.Error())\n\t}\n\tbr = rw.Reader\n\n\tif br.Buffered() > 0 {\n\t\tnetConn.Close()\n\t\treturn nil, errors.New(\"websocket: client sent data before handshake is complete\")\n\t}\n\n\tc := newConn(netConn, true, u.ReadBufferSize, u.WriteBufferSize)\n\tc.subprotocol = subprotocol\n\n\tp := c.writeBuf[:0]\n\tp = append(p, \"HTTP/1.1 101 Switching Protocols\\r\\nUpgrade: websocket\\r\\nConnection: Upgrade\\r\\nSec-WebSocket-Accept: \"...)\n\tp = append(p, computeAcceptKey(challengeKey)...)\n\tp = append(p, \"\\r\\n\"...)\n\tif c.subprotocol != \"\" {\n\t\tp = append(p, \"Sec-Websocket-Protocol: \"...)\n\t\tp = append(p, c.subprotocol...)\n\t\tp = append(p, \"\\r\\n\"...)\n\t}\n\tfor k, vs := range responseHeader {\n\t\tif k == \"Sec-Websocket-Protocol\" {\n\t\t\tcontinue\n\t\t}\n\t\tfor _, v := range vs {\n\t\t\tp = append(p, k...)\n\t\t\tp = append(p, \": \"...)\n\t\t\tfor i := 0; i < len(v); i++ {\n\t\t\t\tb := v[i]\n\t\t\t\tif b <= 31 {\n\t\t\t\t\t// prevent response splitting.\n\t\t\t\t\tb = ' '\n\t\t\t\t}\n\t\t\t\tp = append(p, b)\n\t\t\t}\n\t\t\tp = append(p, \"\\r\\n\"...)\n\t\t}\n\t}\n\tp = append(p, \"\\r\\n\"...)\n\n\t// Clear deadlines set by HTTP server.\n\tnetConn.SetDeadline(time.Time{})\n\n\tif u.HandshakeTimeout > 0 {\n\t\tnetConn.SetWriteDeadline(time.Now().Add(u.HandshakeTimeout))\n\t}\n\tif _, err = netConn.Write(p); err != nil {\n\t\tnetConn.Close()\n\t\treturn nil, err\n\t}\n\tif u.HandshakeTimeout > 0 {\n\t\tnetConn.SetWriteDeadline(time.Time{})\n\t}\n\n\treturn c, nil\n}\n\n// Upgrade upgrades the HTTP server connection to the WebSocket protocol.\n//\n// This function is deprecated, use websocket.Upgrader instead.\n//\n// The application is responsible for checking the request origin before\n// calling Upgrade. An example implementation of the same origin policy is:\n//\n//\tif req.Header.Get(\"Origin\") != \"http://\"+req.Host {\n//\t\thttp.Error(w, \"Origin not allowed\", 403)\n//\t\treturn\n//\t}\n//\n// If the endpoint supports subprotocols, then the application is responsible\n// for negotiating the protocol used on the connection. Use the Subprotocols()\n// function to get the subprotocols requested by the client. Use the\n// Sec-Websocket-Protocol response header to specify the subprotocol selected\n// by the application.\n//\n// The responseHeader is included in the response to the client's upgrade\n// request. Use the responseHeader to specify cookies (Set-Cookie) and the\n// negotiated subprotocol (Sec-Websocket-Protocol).\n//\n// The connection buffers IO to the underlying network connection. The\n// readBufSize and writeBufSize parameters specify the size of the buffers to\n// use. Messages can be larger than the buffers.\n//\n// If the request is not a valid WebSocket handshake, then Upgrade returns an\n// error of type HandshakeError. Applications should handle this error by\n// replying to the client with an HTTP error response.\nfunc Upgrade(w http.ResponseWriter, r *http.Request, responseHeader http.Header, readBufSize, writeBufSize int) (*Conn, error) {\n\tu := Upgrader{ReadBufferSize: readBufSize, WriteBufferSize: writeBufSize}\n\tu.Error = func(w http.ResponseWriter, r *http.Request, status int, reason error) {\n\t\t// don't return errors to maintain backwards compatibility\n\t}\n\tu.CheckOrigin = func(r *http.Request) bool {\n\t\t// allow all connections by default\n\t\treturn true\n\t}\n\treturn u.Upgrade(w, r, responseHeader)\n}\n\n// Subprotocols returns the subprotocols requested by the client in the\n// Sec-Websocket-Protocol header.\nfunc Subprotocols(r *http.Request) []string {\n\th := strings.TrimSpace(r.Header.Get(\"Sec-Websocket-Protocol\"))\n\tif h == \"\" {\n\t\treturn nil\n\t}\n\tprotocols := strings.Split(h, \",\")\n\tfor i := range protocols {\n\t\tprotocols[i] = strings.TrimSpace(protocols[i])\n\t}\n\treturn protocols\n}\n"
  },
  {
    "path": "vendor/github.com/btcsuite/websocket/util.go",
    "content": "// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage websocket\n\nimport (\n\t\"crypto/rand\"\n\t\"crypto/sha1\"\n\t\"encoding/base64\"\n\t\"io\"\n\t\"net/http\"\n\t\"strings\"\n)\n\n// tokenListContainsValue returns true if the 1#token header with the given\n// name contains token.\nfunc tokenListContainsValue(header http.Header, name string, value string) bool {\n\tfor _, v := range header[name] {\n\t\tfor _, s := range strings.Split(v, \",\") {\n\t\t\tif strings.EqualFold(value, strings.TrimSpace(s)) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t}\n\treturn false\n}\n\nvar keyGUID = []byte(\"258EAFA5-E914-47DA-95CA-C5AB0DC85B11\")\n\nfunc computeAcceptKey(challengeKey string) string {\n\th := sha1.New()\n\th.Write([]byte(challengeKey))\n\th.Write(keyGUID)\n\treturn base64.StdEncoding.EncodeToString(h.Sum(nil))\n}\n\nfunc generateChallengeKey() (string, error) {\n\tp := make([]byte, 16)\n\tif _, err := io.ReadFull(rand.Reader, p); err != nil {\n\t\treturn \"\", err\n\t}\n\treturn base64.StdEncoding.EncodeToString(p), nil\n}\n"
  },
  {
    "path": "vendor/github.com/davecgh/go-spew/LICENSE",
    "content": "ISC License\n\nCopyright (c) 2012-2016 Dave Collins <dave@davec.name>\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\nOR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/davecgh/go-spew/spew/bypass.go",
    "content": "// Copyright (c) 2015-2016 Dave Collins <dave@davec.name>\n//\n// Permission to use, copy, modify, and distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n\n// NOTE: Due to the following build constraints, this file will only be compiled\n// when the code is not running on Google App Engine, compiled by GopherJS, and\n// \"-tags safe\" is not added to the go build command line.  The \"disableunsafe\"\n// tag is deprecated and thus should not be used.\n// Go versions prior to 1.4 are disabled because they use a different layout\n// for interfaces which make the implementation of unsafeReflectValue more complex.\n// +build !js,!appengine,!safe,!disableunsafe,go1.4\n\npackage spew\n\nimport (\n\t\"reflect\"\n\t\"unsafe\"\n)\n\nconst (\n\t// UnsafeDisabled is a build-time constant which specifies whether or\n\t// not access to the unsafe package is available.\n\tUnsafeDisabled = false\n\n\t// ptrSize is the size of a pointer on the current arch.\n\tptrSize = unsafe.Sizeof((*byte)(nil))\n)\n\ntype flag uintptr\n\nvar (\n\t// flagRO indicates whether the value field of a reflect.Value\n\t// is read-only.\n\tflagRO flag\n\n\t// flagAddr indicates whether the address of the reflect.Value's\n\t// value may be taken.\n\tflagAddr flag\n)\n\n// flagKindMask holds the bits that make up the kind\n// part of the flags field. In all the supported versions,\n// it is in the lower 5 bits.\nconst flagKindMask = flag(0x1f)\n\n// Different versions of Go have used different\n// bit layouts for the flags type. This table\n// records the known combinations.\nvar okFlags = []struct {\n\tro, addr flag\n}{{\n\t// From Go 1.4 to 1.5\n\tro:   1 << 5,\n\taddr: 1 << 7,\n}, {\n\t// Up to Go tip.\n\tro:   1<<5 | 1<<6,\n\taddr: 1 << 8,\n}}\n\nvar flagValOffset = func() uintptr {\n\tfield, ok := reflect.TypeOf(reflect.Value{}).FieldByName(\"flag\")\n\tif !ok {\n\t\tpanic(\"reflect.Value has no flag field\")\n\t}\n\treturn field.Offset\n}()\n\n// flagField returns a pointer to the flag field of a reflect.Value.\nfunc flagField(v *reflect.Value) *flag {\n\treturn (*flag)(unsafe.Pointer(uintptr(unsafe.Pointer(v)) + flagValOffset))\n}\n\n// unsafeReflectValue converts the passed reflect.Value into a one that bypasses\n// the typical safety restrictions preventing access to unaddressable and\n// unexported data.  It works by digging the raw pointer to the underlying\n// value out of the protected value and generating a new unprotected (unsafe)\n// reflect.Value to it.\n//\n// This allows us to check for implementations of the Stringer and error\n// interfaces to be used for pretty printing ordinarily unaddressable and\n// inaccessible values such as unexported struct fields.\nfunc unsafeReflectValue(v reflect.Value) reflect.Value {\n\tif !v.IsValid() || (v.CanInterface() && v.CanAddr()) {\n\t\treturn v\n\t}\n\tflagFieldPtr := flagField(&v)\n\t*flagFieldPtr &^= flagRO\n\t*flagFieldPtr |= flagAddr\n\treturn v\n}\n\n// Sanity checks against future reflect package changes\n// to the type or semantics of the Value.flag field.\nfunc init() {\n\tfield, ok := reflect.TypeOf(reflect.Value{}).FieldByName(\"flag\")\n\tif !ok {\n\t\tpanic(\"reflect.Value has no flag field\")\n\t}\n\tif field.Type.Kind() != reflect.TypeOf(flag(0)).Kind() {\n\t\tpanic(\"reflect.Value flag field has changed kind\")\n\t}\n\ttype t0 int\n\tvar t struct {\n\t\tA t0\n\t\t// t0 will have flagEmbedRO set.\n\t\tt0\n\t\t// a will have flagStickyRO set\n\t\ta t0\n\t}\n\tvA := reflect.ValueOf(t).FieldByName(\"A\")\n\tva := reflect.ValueOf(t).FieldByName(\"a\")\n\tvt0 := reflect.ValueOf(t).FieldByName(\"t0\")\n\n\t// Infer flagRO from the difference between the flags\n\t// for the (otherwise identical) fields in t.\n\tflagPublic := *flagField(&vA)\n\tflagWithRO := *flagField(&va) | *flagField(&vt0)\n\tflagRO = flagPublic ^ flagWithRO\n\n\t// Infer flagAddr from the difference between a value\n\t// taken from a pointer and not.\n\tvPtrA := reflect.ValueOf(&t).Elem().FieldByName(\"A\")\n\tflagNoPtr := *flagField(&vA)\n\tflagPtr := *flagField(&vPtrA)\n\tflagAddr = flagNoPtr ^ flagPtr\n\n\t// Check that the inferred flags tally with one of the known versions.\n\tfor _, f := range okFlags {\n\t\tif flagRO == f.ro && flagAddr == f.addr {\n\t\t\treturn\n\t\t}\n\t}\n\tpanic(\"reflect.Value read-only flag has changed semantics\")\n}\n"
  },
  {
    "path": "vendor/github.com/davecgh/go-spew/spew/bypasssafe.go",
    "content": "// Copyright (c) 2015-2016 Dave Collins <dave@davec.name>\n//\n// Permission to use, copy, modify, and distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n\n// NOTE: Due to the following build constraints, this file will only be compiled\n// when the code is running on Google App Engine, compiled by GopherJS, or\n// \"-tags safe\" is added to the go build command line.  The \"disableunsafe\"\n// tag is deprecated and thus should not be used.\n// +build js appengine safe disableunsafe !go1.4\n\npackage spew\n\nimport \"reflect\"\n\nconst (\n\t// UnsafeDisabled is a build-time constant which specifies whether or\n\t// not access to the unsafe package is available.\n\tUnsafeDisabled = true\n)\n\n// unsafeReflectValue typically converts the passed reflect.Value into a one\n// that bypasses the typical safety restrictions preventing access to\n// unaddressable and unexported data.  However, doing this relies on access to\n// the unsafe package.  This is a stub version which simply returns the passed\n// reflect.Value when the unsafe package is not available.\nfunc unsafeReflectValue(v reflect.Value) reflect.Value {\n\treturn v\n}\n"
  },
  {
    "path": "vendor/github.com/davecgh/go-spew/spew/common.go",
    "content": "/*\n * Copyright (c) 2013-2016 Dave Collins <dave@davec.name>\n *\n * Permission to use, copy, modify, and distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n */\n\npackage spew\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strconv\"\n)\n\n// Some constants in the form of bytes to avoid string overhead.  This mirrors\n// the technique used in the fmt package.\nvar (\n\tpanicBytes            = []byte(\"(PANIC=\")\n\tplusBytes             = []byte(\"+\")\n\tiBytes                = []byte(\"i\")\n\ttrueBytes             = []byte(\"true\")\n\tfalseBytes            = []byte(\"false\")\n\tinterfaceBytes        = []byte(\"(interface {})\")\n\tcommaNewlineBytes     = []byte(\",\\n\")\n\tnewlineBytes          = []byte(\"\\n\")\n\topenBraceBytes        = []byte(\"{\")\n\topenBraceNewlineBytes = []byte(\"{\\n\")\n\tcloseBraceBytes       = []byte(\"}\")\n\tasteriskBytes         = []byte(\"*\")\n\tcolonBytes            = []byte(\":\")\n\tcolonSpaceBytes       = []byte(\": \")\n\topenParenBytes        = []byte(\"(\")\n\tcloseParenBytes       = []byte(\")\")\n\tspaceBytes            = []byte(\" \")\n\tpointerChainBytes     = []byte(\"->\")\n\tnilAngleBytes         = []byte(\"<nil>\")\n\tmaxNewlineBytes       = []byte(\"<max depth reached>\\n\")\n\tmaxShortBytes         = []byte(\"<max>\")\n\tcircularBytes         = []byte(\"<already shown>\")\n\tcircularShortBytes    = []byte(\"<shown>\")\n\tinvalidAngleBytes     = []byte(\"<invalid>\")\n\topenBracketBytes      = []byte(\"[\")\n\tcloseBracketBytes     = []byte(\"]\")\n\tpercentBytes          = []byte(\"%\")\n\tprecisionBytes        = []byte(\".\")\n\topenAngleBytes        = []byte(\"<\")\n\tcloseAngleBytes       = []byte(\">\")\n\topenMapBytes          = []byte(\"map[\")\n\tcloseMapBytes         = []byte(\"]\")\n\tlenEqualsBytes        = []byte(\"len=\")\n\tcapEqualsBytes        = []byte(\"cap=\")\n)\n\n// hexDigits is used to map a decimal value to a hex digit.\nvar hexDigits = \"0123456789abcdef\"\n\n// catchPanic handles any panics that might occur during the handleMethods\n// calls.\nfunc catchPanic(w io.Writer, v reflect.Value) {\n\tif err := recover(); err != nil {\n\t\tw.Write(panicBytes)\n\t\tfmt.Fprintf(w, \"%v\", err)\n\t\tw.Write(closeParenBytes)\n\t}\n}\n\n// handleMethods attempts to call the Error and String methods on the underlying\n// type the passed reflect.Value represents and outputes the result to Writer w.\n//\n// It handles panics in any called methods by catching and displaying the error\n// as the formatted value.\nfunc handleMethods(cs *ConfigState, w io.Writer, v reflect.Value) (handled bool) {\n\t// We need an interface to check if the type implements the error or\n\t// Stringer interface.  However, the reflect package won't give us an\n\t// interface on certain things like unexported struct fields in order\n\t// to enforce visibility rules.  We use unsafe, when it's available,\n\t// to bypass these restrictions since this package does not mutate the\n\t// values.\n\tif !v.CanInterface() {\n\t\tif UnsafeDisabled {\n\t\t\treturn false\n\t\t}\n\n\t\tv = unsafeReflectValue(v)\n\t}\n\n\t// Choose whether or not to do error and Stringer interface lookups against\n\t// the base type or a pointer to the base type depending on settings.\n\t// Technically calling one of these methods with a pointer receiver can\n\t// mutate the value, however, types which choose to satisify an error or\n\t// Stringer interface with a pointer receiver should not be mutating their\n\t// state inside these interface methods.\n\tif !cs.DisablePointerMethods && !UnsafeDisabled && !v.CanAddr() {\n\t\tv = unsafeReflectValue(v)\n\t}\n\tif v.CanAddr() {\n\t\tv = v.Addr()\n\t}\n\n\t// Is it an error or Stringer?\n\tswitch iface := v.Interface().(type) {\n\tcase error:\n\t\tdefer catchPanic(w, v)\n\t\tif cs.ContinueOnMethod {\n\t\t\tw.Write(openParenBytes)\n\t\t\tw.Write([]byte(iface.Error()))\n\t\t\tw.Write(closeParenBytes)\n\t\t\tw.Write(spaceBytes)\n\t\t\treturn false\n\t\t}\n\n\t\tw.Write([]byte(iface.Error()))\n\t\treturn true\n\n\tcase fmt.Stringer:\n\t\tdefer catchPanic(w, v)\n\t\tif cs.ContinueOnMethod {\n\t\t\tw.Write(openParenBytes)\n\t\t\tw.Write([]byte(iface.String()))\n\t\t\tw.Write(closeParenBytes)\n\t\t\tw.Write(spaceBytes)\n\t\t\treturn false\n\t\t}\n\t\tw.Write([]byte(iface.String()))\n\t\treturn true\n\t}\n\treturn false\n}\n\n// printBool outputs a boolean value as true or false to Writer w.\nfunc printBool(w io.Writer, val bool) {\n\tif val {\n\t\tw.Write(trueBytes)\n\t} else {\n\t\tw.Write(falseBytes)\n\t}\n}\n\n// printInt outputs a signed integer value to Writer w.\nfunc printInt(w io.Writer, val int64, base int) {\n\tw.Write([]byte(strconv.FormatInt(val, base)))\n}\n\n// printUint outputs an unsigned integer value to Writer w.\nfunc printUint(w io.Writer, val uint64, base int) {\n\tw.Write([]byte(strconv.FormatUint(val, base)))\n}\n\n// printFloat outputs a floating point value using the specified precision,\n// which is expected to be 32 or 64bit, to Writer w.\nfunc printFloat(w io.Writer, val float64, precision int) {\n\tw.Write([]byte(strconv.FormatFloat(val, 'g', -1, precision)))\n}\n\n// printComplex outputs a complex value using the specified float precision\n// for the real and imaginary parts to Writer w.\nfunc printComplex(w io.Writer, c complex128, floatPrecision int) {\n\tr := real(c)\n\tw.Write(openParenBytes)\n\tw.Write([]byte(strconv.FormatFloat(r, 'g', -1, floatPrecision)))\n\ti := imag(c)\n\tif i >= 0 {\n\t\tw.Write(plusBytes)\n\t}\n\tw.Write([]byte(strconv.FormatFloat(i, 'g', -1, floatPrecision)))\n\tw.Write(iBytes)\n\tw.Write(closeParenBytes)\n}\n\n// printHexPtr outputs a uintptr formatted as hexadecimal with a leading '0x'\n// prefix to Writer w.\nfunc printHexPtr(w io.Writer, p uintptr) {\n\t// Null pointer.\n\tnum := uint64(p)\n\tif num == 0 {\n\t\tw.Write(nilAngleBytes)\n\t\treturn\n\t}\n\n\t// Max uint64 is 16 bytes in hex + 2 bytes for '0x' prefix\n\tbuf := make([]byte, 18)\n\n\t// It's simpler to construct the hex string right to left.\n\tbase := uint64(16)\n\ti := len(buf) - 1\n\tfor num >= base {\n\t\tbuf[i] = hexDigits[num%base]\n\t\tnum /= base\n\t\ti--\n\t}\n\tbuf[i] = hexDigits[num]\n\n\t// Add '0x' prefix.\n\ti--\n\tbuf[i] = 'x'\n\ti--\n\tbuf[i] = '0'\n\n\t// Strip unused leading bytes.\n\tbuf = buf[i:]\n\tw.Write(buf)\n}\n\n// valuesSorter implements sort.Interface to allow a slice of reflect.Value\n// elements to be sorted.\ntype valuesSorter struct {\n\tvalues  []reflect.Value\n\tstrings []string // either nil or same len and values\n\tcs      *ConfigState\n}\n\n// newValuesSorter initializes a valuesSorter instance, which holds a set of\n// surrogate keys on which the data should be sorted.  It uses flags in\n// ConfigState to decide if and how to populate those surrogate keys.\nfunc newValuesSorter(values []reflect.Value, cs *ConfigState) sort.Interface {\n\tvs := &valuesSorter{values: values, cs: cs}\n\tif canSortSimply(vs.values[0].Kind()) {\n\t\treturn vs\n\t}\n\tif !cs.DisableMethods {\n\t\tvs.strings = make([]string, len(values))\n\t\tfor i := range vs.values {\n\t\t\tb := bytes.Buffer{}\n\t\t\tif !handleMethods(cs, &b, vs.values[i]) {\n\t\t\t\tvs.strings = nil\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tvs.strings[i] = b.String()\n\t\t}\n\t}\n\tif vs.strings == nil && cs.SpewKeys {\n\t\tvs.strings = make([]string, len(values))\n\t\tfor i := range vs.values {\n\t\t\tvs.strings[i] = Sprintf(\"%#v\", vs.values[i].Interface())\n\t\t}\n\t}\n\treturn vs\n}\n\n// canSortSimply tests whether a reflect.Kind is a primitive that can be sorted\n// directly, or whether it should be considered for sorting by surrogate keys\n// (if the ConfigState allows it).\nfunc canSortSimply(kind reflect.Kind) bool {\n\t// This switch parallels valueSortLess, except for the default case.\n\tswitch kind {\n\tcase reflect.Bool:\n\t\treturn true\n\tcase reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int:\n\t\treturn true\n\tcase reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint:\n\t\treturn true\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn true\n\tcase reflect.String:\n\t\treturn true\n\tcase reflect.Uintptr:\n\t\treturn true\n\tcase reflect.Array:\n\t\treturn true\n\t}\n\treturn false\n}\n\n// Len returns the number of values in the slice.  It is part of the\n// sort.Interface implementation.\nfunc (s *valuesSorter) Len() int {\n\treturn len(s.values)\n}\n\n// Swap swaps the values at the passed indices.  It is part of the\n// sort.Interface implementation.\nfunc (s *valuesSorter) Swap(i, j int) {\n\ts.values[i], s.values[j] = s.values[j], s.values[i]\n\tif s.strings != nil {\n\t\ts.strings[i], s.strings[j] = s.strings[j], s.strings[i]\n\t}\n}\n\n// valueSortLess returns whether the first value should sort before the second\n// value.  It is used by valueSorter.Less as part of the sort.Interface\n// implementation.\nfunc valueSortLess(a, b reflect.Value) bool {\n\tswitch a.Kind() {\n\tcase reflect.Bool:\n\t\treturn !a.Bool() && b.Bool()\n\tcase reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int:\n\t\treturn a.Int() < b.Int()\n\tcase reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint:\n\t\treturn a.Uint() < b.Uint()\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn a.Float() < b.Float()\n\tcase reflect.String:\n\t\treturn a.String() < b.String()\n\tcase reflect.Uintptr:\n\t\treturn a.Uint() < b.Uint()\n\tcase reflect.Array:\n\t\t// Compare the contents of both arrays.\n\t\tl := a.Len()\n\t\tfor i := 0; i < l; i++ {\n\t\t\tav := a.Index(i)\n\t\t\tbv := b.Index(i)\n\t\t\tif av.Interface() == bv.Interface() {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn valueSortLess(av, bv)\n\t\t}\n\t}\n\treturn a.String() < b.String()\n}\n\n// Less returns whether the value at index i should sort before the\n// value at index j.  It is part of the sort.Interface implementation.\nfunc (s *valuesSorter) Less(i, j int) bool {\n\tif s.strings == nil {\n\t\treturn valueSortLess(s.values[i], s.values[j])\n\t}\n\treturn s.strings[i] < s.strings[j]\n}\n\n// sortValues is a sort function that handles both native types and any type that\n// can be converted to error or Stringer.  Other inputs are sorted according to\n// their Value.String() value to ensure display stability.\nfunc sortValues(values []reflect.Value, cs *ConfigState) {\n\tif len(values) == 0 {\n\t\treturn\n\t}\n\tsort.Sort(newValuesSorter(values, cs))\n}\n"
  },
  {
    "path": "vendor/github.com/davecgh/go-spew/spew/config.go",
    "content": "/*\n * Copyright (c) 2013-2016 Dave Collins <dave@davec.name>\n *\n * Permission to use, copy, modify, and distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n */\n\npackage spew\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n)\n\n// ConfigState houses the configuration options used by spew to format and\n// display values.  There is a global instance, Config, that is used to control\n// all top-level Formatter and Dump functionality.  Each ConfigState instance\n// provides methods equivalent to the top-level functions.\n//\n// The zero value for ConfigState provides no indentation.  You would typically\n// want to set it to a space or a tab.\n//\n// Alternatively, you can use NewDefaultConfig to get a ConfigState instance\n// with default settings.  See the documentation of NewDefaultConfig for default\n// values.\ntype ConfigState struct {\n\t// Indent specifies the string to use for each indentation level.  The\n\t// global config instance that all top-level functions use set this to a\n\t// single space by default.  If you would like more indentation, you might\n\t// set this to a tab with \"\\t\" or perhaps two spaces with \"  \".\n\tIndent string\n\n\t// MaxDepth controls the maximum number of levels to descend into nested\n\t// data structures.  The default, 0, means there is no limit.\n\t//\n\t// NOTE: Circular data structures are properly detected, so it is not\n\t// necessary to set this value unless you specifically want to limit deeply\n\t// nested data structures.\n\tMaxDepth int\n\n\t// DisableMethods specifies whether or not error and Stringer interfaces are\n\t// invoked for types that implement them.\n\tDisableMethods bool\n\n\t// DisablePointerMethods specifies whether or not to check for and invoke\n\t// error and Stringer interfaces on types which only accept a pointer\n\t// receiver when the current type is not a pointer.\n\t//\n\t// NOTE: This might be an unsafe action since calling one of these methods\n\t// with a pointer receiver could technically mutate the value, however,\n\t// in practice, types which choose to satisify an error or Stringer\n\t// interface with a pointer receiver should not be mutating their state\n\t// inside these interface methods.  As a result, this option relies on\n\t// access to the unsafe package, so it will not have any effect when\n\t// running in environments without access to the unsafe package such as\n\t// Google App Engine or with the \"safe\" build tag specified.\n\tDisablePointerMethods bool\n\n\t// DisablePointerAddresses specifies whether to disable the printing of\n\t// pointer addresses. This is useful when diffing data structures in tests.\n\tDisablePointerAddresses bool\n\n\t// DisableCapacities specifies whether to disable the printing of capacities\n\t// for arrays, slices, maps and channels. This is useful when diffing\n\t// data structures in tests.\n\tDisableCapacities bool\n\n\t// ContinueOnMethod specifies whether or not recursion should continue once\n\t// a custom error or Stringer interface is invoked.  The default, false,\n\t// means it will print the results of invoking the custom error or Stringer\n\t// interface and return immediately instead of continuing to recurse into\n\t// the internals of the data type.\n\t//\n\t// NOTE: This flag does not have any effect if method invocation is disabled\n\t// via the DisableMethods or DisablePointerMethods options.\n\tContinueOnMethod bool\n\n\t// SortKeys specifies map keys should be sorted before being printed. Use\n\t// this to have a more deterministic, diffable output.  Note that only\n\t// native types (bool, int, uint, floats, uintptr and string) and types\n\t// that support the error or Stringer interfaces (if methods are\n\t// enabled) are supported, with other types sorted according to the\n\t// reflect.Value.String() output which guarantees display stability.\n\tSortKeys bool\n\n\t// SpewKeys specifies that, as a last resort attempt, map keys should\n\t// be spewed to strings and sorted by those strings.  This is only\n\t// considered if SortKeys is true.\n\tSpewKeys bool\n}\n\n// Config is the active configuration of the top-level functions.\n// The configuration can be changed by modifying the contents of spew.Config.\nvar Config = ConfigState{Indent: \" \"}\n\n// Errorf is a wrapper for fmt.Errorf that treats each argument as if it were\n// passed with a Formatter interface returned by c.NewFormatter.  It returns\n// the formatted string as a value that satisfies error.  See NewFormatter\n// for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Errorf(format, c.NewFormatter(a), c.NewFormatter(b))\nfunc (c *ConfigState) Errorf(format string, a ...interface{}) (err error) {\n\treturn fmt.Errorf(format, c.convertArgs(a)...)\n}\n\n// Fprint is a wrapper for fmt.Fprint that treats each argument as if it were\n// passed with a Formatter interface returned by c.NewFormatter.  It returns\n// the number of bytes written and any write error encountered.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Fprint(w, c.NewFormatter(a), c.NewFormatter(b))\nfunc (c *ConfigState) Fprint(w io.Writer, a ...interface{}) (n int, err error) {\n\treturn fmt.Fprint(w, c.convertArgs(a)...)\n}\n\n// Fprintf is a wrapper for fmt.Fprintf that treats each argument as if it were\n// passed with a Formatter interface returned by c.NewFormatter.  It returns\n// the number of bytes written and any write error encountered.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Fprintf(w, format, c.NewFormatter(a), c.NewFormatter(b))\nfunc (c *ConfigState) Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) {\n\treturn fmt.Fprintf(w, format, c.convertArgs(a)...)\n}\n\n// Fprintln is a wrapper for fmt.Fprintln that treats each argument as if it\n// passed with a Formatter interface returned by c.NewFormatter.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Fprintln(w, c.NewFormatter(a), c.NewFormatter(b))\nfunc (c *ConfigState) Fprintln(w io.Writer, a ...interface{}) (n int, err error) {\n\treturn fmt.Fprintln(w, c.convertArgs(a)...)\n}\n\n// Print is a wrapper for fmt.Print that treats each argument as if it were\n// passed with a Formatter interface returned by c.NewFormatter.  It returns\n// the number of bytes written and any write error encountered.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Print(c.NewFormatter(a), c.NewFormatter(b))\nfunc (c *ConfigState) Print(a ...interface{}) (n int, err error) {\n\treturn fmt.Print(c.convertArgs(a)...)\n}\n\n// Printf is a wrapper for fmt.Printf that treats each argument as if it were\n// passed with a Formatter interface returned by c.NewFormatter.  It returns\n// the number of bytes written and any write error encountered.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Printf(format, c.NewFormatter(a), c.NewFormatter(b))\nfunc (c *ConfigState) Printf(format string, a ...interface{}) (n int, err error) {\n\treturn fmt.Printf(format, c.convertArgs(a)...)\n}\n\n// Println is a wrapper for fmt.Println that treats each argument as if it were\n// passed with a Formatter interface returned by c.NewFormatter.  It returns\n// the number of bytes written and any write error encountered.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Println(c.NewFormatter(a), c.NewFormatter(b))\nfunc (c *ConfigState) Println(a ...interface{}) (n int, err error) {\n\treturn fmt.Println(c.convertArgs(a)...)\n}\n\n// Sprint is a wrapper for fmt.Sprint that treats each argument as if it were\n// passed with a Formatter interface returned by c.NewFormatter.  It returns\n// the resulting string.  See NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Sprint(c.NewFormatter(a), c.NewFormatter(b))\nfunc (c *ConfigState) Sprint(a ...interface{}) string {\n\treturn fmt.Sprint(c.convertArgs(a)...)\n}\n\n// Sprintf is a wrapper for fmt.Sprintf that treats each argument as if it were\n// passed with a Formatter interface returned by c.NewFormatter.  It returns\n// the resulting string.  See NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Sprintf(format, c.NewFormatter(a), c.NewFormatter(b))\nfunc (c *ConfigState) Sprintf(format string, a ...interface{}) string {\n\treturn fmt.Sprintf(format, c.convertArgs(a)...)\n}\n\n// Sprintln is a wrapper for fmt.Sprintln that treats each argument as if it\n// were passed with a Formatter interface returned by c.NewFormatter.  It\n// returns the resulting string.  See NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Sprintln(c.NewFormatter(a), c.NewFormatter(b))\nfunc (c *ConfigState) Sprintln(a ...interface{}) string {\n\treturn fmt.Sprintln(c.convertArgs(a)...)\n}\n\n/*\nNewFormatter returns a custom formatter that satisfies the fmt.Formatter\ninterface.  As a result, it integrates cleanly with standard fmt package\nprinting functions.  The formatter is useful for inline printing of smaller data\ntypes similar to the standard %v format specifier.\n\nThe custom formatter only responds to the %v (most compact), %+v (adds pointer\naddresses), %#v (adds types), and %#+v (adds types and pointer addresses) verb\ncombinations.  Any other verbs such as %x and %q will be sent to the the\nstandard fmt package for formatting.  In addition, the custom formatter ignores\nthe width and precision arguments (however they will still work on the format\nspecifiers not handled by the custom formatter).\n\nTypically this function shouldn't be called directly.  It is much easier to make\nuse of the custom formatter by calling one of the convenience functions such as\nc.Printf, c.Println, or c.Printf.\n*/\nfunc (c *ConfigState) NewFormatter(v interface{}) fmt.Formatter {\n\treturn newFormatter(c, v)\n}\n\n// Fdump formats and displays the passed arguments to io.Writer w.  It formats\n// exactly the same as Dump.\nfunc (c *ConfigState) Fdump(w io.Writer, a ...interface{}) {\n\tfdump(c, w, a...)\n}\n\n/*\nDump displays the passed parameters to standard out with newlines, customizable\nindentation, and additional debug information such as complete types and all\npointer addresses used to indirect to the final value.  It provides the\nfollowing features over the built-in printing facilities provided by the fmt\npackage:\n\n\t* Pointers are dereferenced and followed\n\t* Circular data structures are detected and handled properly\n\t* Custom Stringer/error interfaces are optionally invoked, including\n\t  on unexported types\n\t* Custom types which only implement the Stringer/error interfaces via\n\t  a pointer receiver are optionally invoked when passing non-pointer\n\t  variables\n\t* Byte arrays and slices are dumped like the hexdump -C command which\n\t  includes offsets, byte values in hex, and ASCII output\n\nThe configuration options are controlled by modifying the public members\nof c.  See ConfigState for options documentation.\n\nSee Fdump if you would prefer dumping to an arbitrary io.Writer or Sdump to\nget the formatted result as a string.\n*/\nfunc (c *ConfigState) Dump(a ...interface{}) {\n\tfdump(c, os.Stdout, a...)\n}\n\n// Sdump returns a string with the passed arguments formatted exactly the same\n// as Dump.\nfunc (c *ConfigState) Sdump(a ...interface{}) string {\n\tvar buf bytes.Buffer\n\tfdump(c, &buf, a...)\n\treturn buf.String()\n}\n\n// convertArgs accepts a slice of arguments and returns a slice of the same\n// length with each argument converted to a spew Formatter interface using\n// the ConfigState associated with s.\nfunc (c *ConfigState) convertArgs(args []interface{}) (formatters []interface{}) {\n\tformatters = make([]interface{}, len(args))\n\tfor index, arg := range args {\n\t\tformatters[index] = newFormatter(c, arg)\n\t}\n\treturn formatters\n}\n\n// NewDefaultConfig returns a ConfigState with the following default settings.\n//\n// \tIndent: \" \"\n// \tMaxDepth: 0\n// \tDisableMethods: false\n// \tDisablePointerMethods: false\n// \tContinueOnMethod: false\n// \tSortKeys: false\nfunc NewDefaultConfig() *ConfigState {\n\treturn &ConfigState{Indent: \" \"}\n}\n"
  },
  {
    "path": "vendor/github.com/davecgh/go-spew/spew/doc.go",
    "content": "/*\n * Copyright (c) 2013-2016 Dave Collins <dave@davec.name>\n *\n * Permission to use, copy, modify, and distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n */\n\n/*\nPackage spew implements a deep pretty printer for Go data structures to aid in\ndebugging.\n\nA quick overview of the additional features spew provides over the built-in\nprinting facilities for Go data types are as follows:\n\n\t* Pointers are dereferenced and followed\n\t* Circular data structures are detected and handled properly\n\t* Custom Stringer/error interfaces are optionally invoked, including\n\t  on unexported types\n\t* Custom types which only implement the Stringer/error interfaces via\n\t  a pointer receiver are optionally invoked when passing non-pointer\n\t  variables\n\t* Byte arrays and slices are dumped like the hexdump -C command which\n\t  includes offsets, byte values in hex, and ASCII output (only when using\n\t  Dump style)\n\nThere are two different approaches spew allows for dumping Go data structures:\n\n\t* Dump style which prints with newlines, customizable indentation,\n\t  and additional debug information such as types and all pointer addresses\n\t  used to indirect to the final value\n\t* A custom Formatter interface that integrates cleanly with the standard fmt\n\t  package and replaces %v, %+v, %#v, and %#+v to provide inline printing\n\t  similar to the default %v while providing the additional functionality\n\t  outlined above and passing unsupported format verbs such as %x and %q\n\t  along to fmt\n\nQuick Start\n\nThis section demonstrates how to quickly get started with spew.  See the\nsections below for further details on formatting and configuration options.\n\nTo dump a variable with full newlines, indentation, type, and pointer\ninformation use Dump, Fdump, or Sdump:\n\tspew.Dump(myVar1, myVar2, ...)\n\tspew.Fdump(someWriter, myVar1, myVar2, ...)\n\tstr := spew.Sdump(myVar1, myVar2, ...)\n\nAlternatively, if you would prefer to use format strings with a compacted inline\nprinting style, use the convenience wrappers Printf, Fprintf, etc with\n%v (most compact), %+v (adds pointer addresses), %#v (adds types), or\n%#+v (adds types and pointer addresses):\n\tspew.Printf(\"myVar1: %v -- myVar2: %+v\", myVar1, myVar2)\n\tspew.Printf(\"myVar3: %#v -- myVar4: %#+v\", myVar3, myVar4)\n\tspew.Fprintf(someWriter, \"myVar1: %v -- myVar2: %+v\", myVar1, myVar2)\n\tspew.Fprintf(someWriter, \"myVar3: %#v -- myVar4: %#+v\", myVar3, myVar4)\n\nConfiguration Options\n\nConfiguration of spew is handled by fields in the ConfigState type.  For\nconvenience, all of the top-level functions use a global state available\nvia the spew.Config global.\n\nIt is also possible to create a ConfigState instance that provides methods\nequivalent to the top-level functions.  This allows concurrent configuration\noptions.  See the ConfigState documentation for more details.\n\nThe following configuration options are available:\n\t* Indent\n\t\tString to use for each indentation level for Dump functions.\n\t\tIt is a single space by default.  A popular alternative is \"\\t\".\n\n\t* MaxDepth\n\t\tMaximum number of levels to descend into nested data structures.\n\t\tThere is no limit by default.\n\n\t* DisableMethods\n\t\tDisables invocation of error and Stringer interface methods.\n\t\tMethod invocation is enabled by default.\n\n\t* DisablePointerMethods\n\t\tDisables invocation of error and Stringer interface methods on types\n\t\twhich only accept pointer receivers from non-pointer variables.\n\t\tPointer method invocation is enabled by default.\n\n\t* DisablePointerAddresses\n\t\tDisablePointerAddresses specifies whether to disable the printing of\n\t\tpointer addresses. This is useful when diffing data structures in tests.\n\n\t* DisableCapacities\n\t\tDisableCapacities specifies whether to disable the printing of\n\t\tcapacities for arrays, slices, maps and channels. This is useful when\n\t\tdiffing data structures in tests.\n\n\t* ContinueOnMethod\n\t\tEnables recursion into types after invoking error and Stringer interface\n\t\tmethods. Recursion after method invocation is disabled by default.\n\n\t* SortKeys\n\t\tSpecifies map keys should be sorted before being printed. Use\n\t\tthis to have a more deterministic, diffable output.  Note that\n\t\tonly native types (bool, int, uint, floats, uintptr and string)\n\t\tand types which implement error or Stringer interfaces are\n\t\tsupported with other types sorted according to the\n\t\treflect.Value.String() output which guarantees display\n\t\tstability.  Natural map order is used by default.\n\n\t* SpewKeys\n\t\tSpecifies that, as a last resort attempt, map keys should be\n\t\tspewed to strings and sorted by those strings.  This is only\n\t\tconsidered if SortKeys is true.\n\nDump Usage\n\nSimply call spew.Dump with a list of variables you want to dump:\n\n\tspew.Dump(myVar1, myVar2, ...)\n\nYou may also call spew.Fdump if you would prefer to output to an arbitrary\nio.Writer.  For example, to dump to standard error:\n\n\tspew.Fdump(os.Stderr, myVar1, myVar2, ...)\n\nA third option is to call spew.Sdump to get the formatted output as a string:\n\n\tstr := spew.Sdump(myVar1, myVar2, ...)\n\nSample Dump Output\n\nSee the Dump example for details on the setup of the types and variables being\nshown here.\n\n\t(main.Foo) {\n\t unexportedField: (*main.Bar)(0xf84002e210)({\n\t  flag: (main.Flag) flagTwo,\n\t  data: (uintptr) <nil>\n\t }),\n\t ExportedField: (map[interface {}]interface {}) (len=1) {\n\t  (string) (len=3) \"one\": (bool) true\n\t }\n\t}\n\nByte (and uint8) arrays and slices are displayed uniquely like the hexdump -C\ncommand as shown.\n\t([]uint8) (len=32 cap=32) {\n\t 00000000  11 12 13 14 15 16 17 18  19 1a 1b 1c 1d 1e 1f 20  |............... |\n\t 00000010  21 22 23 24 25 26 27 28  29 2a 2b 2c 2d 2e 2f 30  |!\"#$%&'()*+,-./0|\n\t 00000020  31 32                                             |12|\n\t}\n\nCustom Formatter\n\nSpew provides a custom formatter that implements the fmt.Formatter interface\nso that it integrates cleanly with standard fmt package printing functions. The\nformatter is useful for inline printing of smaller data types similar to the\nstandard %v format specifier.\n\nThe custom formatter only responds to the %v (most compact), %+v (adds pointer\naddresses), %#v (adds types), or %#+v (adds types and pointer addresses) verb\ncombinations.  Any other verbs such as %x and %q will be sent to the the\nstandard fmt package for formatting.  In addition, the custom formatter ignores\nthe width and precision arguments (however they will still work on the format\nspecifiers not handled by the custom formatter).\n\nCustom Formatter Usage\n\nThe simplest way to make use of the spew custom formatter is to call one of the\nconvenience functions such as spew.Printf, spew.Println, or spew.Printf.  The\nfunctions have syntax you are most likely already familiar with:\n\n\tspew.Printf(\"myVar1: %v -- myVar2: %+v\", myVar1, myVar2)\n\tspew.Printf(\"myVar3: %#v -- myVar4: %#+v\", myVar3, myVar4)\n\tspew.Println(myVar, myVar2)\n\tspew.Fprintf(os.Stderr, \"myVar1: %v -- myVar2: %+v\", myVar1, myVar2)\n\tspew.Fprintf(os.Stderr, \"myVar3: %#v -- myVar4: %#+v\", myVar3, myVar4)\n\nSee the Index for the full list convenience functions.\n\nSample Formatter Output\n\nDouble pointer to a uint8:\n\t  %v: <**>5\n\t %+v: <**>(0xf8400420d0->0xf8400420c8)5\n\t %#v: (**uint8)5\n\t%#+v: (**uint8)(0xf8400420d0->0xf8400420c8)5\n\nPointer to circular struct with a uint8 field and a pointer to itself:\n\t  %v: <*>{1 <*><shown>}\n\t %+v: <*>(0xf84003e260){ui8:1 c:<*>(0xf84003e260)<shown>}\n\t %#v: (*main.circular){ui8:(uint8)1 c:(*main.circular)<shown>}\n\t%#+v: (*main.circular)(0xf84003e260){ui8:(uint8)1 c:(*main.circular)(0xf84003e260)<shown>}\n\nSee the Printf example for details on the setup of variables being shown\nhere.\n\nErrors\n\nSince it is possible for custom Stringer/error interfaces to panic, spew\ndetects them and handles them internally by printing the panic information\ninline with the output.  Since spew is intended to provide deep pretty printing\ncapabilities on structures, it intentionally does not return any errors.\n*/\npackage spew\n"
  },
  {
    "path": "vendor/github.com/davecgh/go-spew/spew/dump.go",
    "content": "/*\n * Copyright (c) 2013-2016 Dave Collins <dave@davec.name>\n *\n * Permission to use, copy, modify, and distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n */\n\npackage spew\n\nimport (\n\t\"bytes\"\n\t\"encoding/hex\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n)\n\nvar (\n\t// uint8Type is a reflect.Type representing a uint8.  It is used to\n\t// convert cgo types to uint8 slices for hexdumping.\n\tuint8Type = reflect.TypeOf(uint8(0))\n\n\t// cCharRE is a regular expression that matches a cgo char.\n\t// It is used to detect character arrays to hexdump them.\n\tcCharRE = regexp.MustCompile(`^.*\\._Ctype_char$`)\n\n\t// cUnsignedCharRE is a regular expression that matches a cgo unsigned\n\t// char.  It is used to detect unsigned character arrays to hexdump\n\t// them.\n\tcUnsignedCharRE = regexp.MustCompile(`^.*\\._Ctype_unsignedchar$`)\n\n\t// cUint8tCharRE is a regular expression that matches a cgo uint8_t.\n\t// It is used to detect uint8_t arrays to hexdump them.\n\tcUint8tCharRE = regexp.MustCompile(`^.*\\._Ctype_uint8_t$`)\n)\n\n// dumpState contains information about the state of a dump operation.\ntype dumpState struct {\n\tw                io.Writer\n\tdepth            int\n\tpointers         map[uintptr]int\n\tignoreNextType   bool\n\tignoreNextIndent bool\n\tcs               *ConfigState\n}\n\n// indent performs indentation according to the depth level and cs.Indent\n// option.\nfunc (d *dumpState) indent() {\n\tif d.ignoreNextIndent {\n\t\td.ignoreNextIndent = false\n\t\treturn\n\t}\n\td.w.Write(bytes.Repeat([]byte(d.cs.Indent), d.depth))\n}\n\n// unpackValue returns values inside of non-nil interfaces when possible.\n// This is useful for data types like structs, arrays, slices, and maps which\n// can contain varying types packed inside an interface.\nfunc (d *dumpState) unpackValue(v reflect.Value) reflect.Value {\n\tif v.Kind() == reflect.Interface && !v.IsNil() {\n\t\tv = v.Elem()\n\t}\n\treturn v\n}\n\n// dumpPtr handles formatting of pointers by indirecting them as necessary.\nfunc (d *dumpState) dumpPtr(v reflect.Value) {\n\t// Remove pointers at or below the current depth from map used to detect\n\t// circular refs.\n\tfor k, depth := range d.pointers {\n\t\tif depth >= d.depth {\n\t\t\tdelete(d.pointers, k)\n\t\t}\n\t}\n\n\t// Keep list of all dereferenced pointers to show later.\n\tpointerChain := make([]uintptr, 0)\n\n\t// Figure out how many levels of indirection there are by dereferencing\n\t// pointers and unpacking interfaces down the chain while detecting circular\n\t// references.\n\tnilFound := false\n\tcycleFound := false\n\tindirects := 0\n\tve := v\n\tfor ve.Kind() == reflect.Ptr {\n\t\tif ve.IsNil() {\n\t\t\tnilFound = true\n\t\t\tbreak\n\t\t}\n\t\tindirects++\n\t\taddr := ve.Pointer()\n\t\tpointerChain = append(pointerChain, addr)\n\t\tif pd, ok := d.pointers[addr]; ok && pd < d.depth {\n\t\t\tcycleFound = true\n\t\t\tindirects--\n\t\t\tbreak\n\t\t}\n\t\td.pointers[addr] = d.depth\n\n\t\tve = ve.Elem()\n\t\tif ve.Kind() == reflect.Interface {\n\t\t\tif ve.IsNil() {\n\t\t\t\tnilFound = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tve = ve.Elem()\n\t\t}\n\t}\n\n\t// Display type information.\n\td.w.Write(openParenBytes)\n\td.w.Write(bytes.Repeat(asteriskBytes, indirects))\n\td.w.Write([]byte(ve.Type().String()))\n\td.w.Write(closeParenBytes)\n\n\t// Display pointer information.\n\tif !d.cs.DisablePointerAddresses && len(pointerChain) > 0 {\n\t\td.w.Write(openParenBytes)\n\t\tfor i, addr := range pointerChain {\n\t\t\tif i > 0 {\n\t\t\t\td.w.Write(pointerChainBytes)\n\t\t\t}\n\t\t\tprintHexPtr(d.w, addr)\n\t\t}\n\t\td.w.Write(closeParenBytes)\n\t}\n\n\t// Display dereferenced value.\n\td.w.Write(openParenBytes)\n\tswitch {\n\tcase nilFound:\n\t\td.w.Write(nilAngleBytes)\n\n\tcase cycleFound:\n\t\td.w.Write(circularBytes)\n\n\tdefault:\n\t\td.ignoreNextType = true\n\t\td.dump(ve)\n\t}\n\td.w.Write(closeParenBytes)\n}\n\n// dumpSlice handles formatting of arrays and slices.  Byte (uint8 under\n// reflection) arrays and slices are dumped in hexdump -C fashion.\nfunc (d *dumpState) dumpSlice(v reflect.Value) {\n\t// Determine whether this type should be hex dumped or not.  Also,\n\t// for types which should be hexdumped, try to use the underlying data\n\t// first, then fall back to trying to convert them to a uint8 slice.\n\tvar buf []uint8\n\tdoConvert := false\n\tdoHexDump := false\n\tnumEntries := v.Len()\n\tif numEntries > 0 {\n\t\tvt := v.Index(0).Type()\n\t\tvts := vt.String()\n\t\tswitch {\n\t\t// C types that need to be converted.\n\t\tcase cCharRE.MatchString(vts):\n\t\t\tfallthrough\n\t\tcase cUnsignedCharRE.MatchString(vts):\n\t\t\tfallthrough\n\t\tcase cUint8tCharRE.MatchString(vts):\n\t\t\tdoConvert = true\n\n\t\t// Try to use existing uint8 slices and fall back to converting\n\t\t// and copying if that fails.\n\t\tcase vt.Kind() == reflect.Uint8:\n\t\t\t// We need an addressable interface to convert the type\n\t\t\t// to a byte slice.  However, the reflect package won't\n\t\t\t// give us an interface on certain things like\n\t\t\t// unexported struct fields in order to enforce\n\t\t\t// visibility rules.  We use unsafe, when available, to\n\t\t\t// bypass these restrictions since this package does not\n\t\t\t// mutate the values.\n\t\t\tvs := v\n\t\t\tif !vs.CanInterface() || !vs.CanAddr() {\n\t\t\t\tvs = unsafeReflectValue(vs)\n\t\t\t}\n\t\t\tif !UnsafeDisabled {\n\t\t\t\tvs = vs.Slice(0, numEntries)\n\n\t\t\t\t// Use the existing uint8 slice if it can be\n\t\t\t\t// type asserted.\n\t\t\t\tiface := vs.Interface()\n\t\t\t\tif slice, ok := iface.([]uint8); ok {\n\t\t\t\t\tbuf = slice\n\t\t\t\t\tdoHexDump = true\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// The underlying data needs to be converted if it can't\n\t\t\t// be type asserted to a uint8 slice.\n\t\t\tdoConvert = true\n\t\t}\n\n\t\t// Copy and convert the underlying type if needed.\n\t\tif doConvert && vt.ConvertibleTo(uint8Type) {\n\t\t\t// Convert and copy each element into a uint8 byte\n\t\t\t// slice.\n\t\t\tbuf = make([]uint8, numEntries)\n\t\t\tfor i := 0; i < numEntries; i++ {\n\t\t\t\tvv := v.Index(i)\n\t\t\t\tbuf[i] = uint8(vv.Convert(uint8Type).Uint())\n\t\t\t}\n\t\t\tdoHexDump = true\n\t\t}\n\t}\n\n\t// Hexdump the entire slice as needed.\n\tif doHexDump {\n\t\tindent := strings.Repeat(d.cs.Indent, d.depth)\n\t\tstr := indent + hex.Dump(buf)\n\t\tstr = strings.Replace(str, \"\\n\", \"\\n\"+indent, -1)\n\t\tstr = strings.TrimRight(str, d.cs.Indent)\n\t\td.w.Write([]byte(str))\n\t\treturn\n\t}\n\n\t// Recursively call dump for each item.\n\tfor i := 0; i < numEntries; i++ {\n\t\td.dump(d.unpackValue(v.Index(i)))\n\t\tif i < (numEntries - 1) {\n\t\t\td.w.Write(commaNewlineBytes)\n\t\t} else {\n\t\t\td.w.Write(newlineBytes)\n\t\t}\n\t}\n}\n\n// dump is the main workhorse for dumping a value.  It uses the passed reflect\n// value to figure out what kind of object we are dealing with and formats it\n// appropriately.  It is a recursive function, however circular data structures\n// are detected and handled properly.\nfunc (d *dumpState) dump(v reflect.Value) {\n\t// Handle invalid reflect values immediately.\n\tkind := v.Kind()\n\tif kind == reflect.Invalid {\n\t\td.w.Write(invalidAngleBytes)\n\t\treturn\n\t}\n\n\t// Handle pointers specially.\n\tif kind == reflect.Ptr {\n\t\td.indent()\n\t\td.dumpPtr(v)\n\t\treturn\n\t}\n\n\t// Print type information unless already handled elsewhere.\n\tif !d.ignoreNextType {\n\t\td.indent()\n\t\td.w.Write(openParenBytes)\n\t\td.w.Write([]byte(v.Type().String()))\n\t\td.w.Write(closeParenBytes)\n\t\td.w.Write(spaceBytes)\n\t}\n\td.ignoreNextType = false\n\n\t// Display length and capacity if the built-in len and cap functions\n\t// work with the value's kind and the len/cap itself is non-zero.\n\tvalueLen, valueCap := 0, 0\n\tswitch v.Kind() {\n\tcase reflect.Array, reflect.Slice, reflect.Chan:\n\t\tvalueLen, valueCap = v.Len(), v.Cap()\n\tcase reflect.Map, reflect.String:\n\t\tvalueLen = v.Len()\n\t}\n\tif valueLen != 0 || !d.cs.DisableCapacities && valueCap != 0 {\n\t\td.w.Write(openParenBytes)\n\t\tif valueLen != 0 {\n\t\t\td.w.Write(lenEqualsBytes)\n\t\t\tprintInt(d.w, int64(valueLen), 10)\n\t\t}\n\t\tif !d.cs.DisableCapacities && valueCap != 0 {\n\t\t\tif valueLen != 0 {\n\t\t\t\td.w.Write(spaceBytes)\n\t\t\t}\n\t\t\td.w.Write(capEqualsBytes)\n\t\t\tprintInt(d.w, int64(valueCap), 10)\n\t\t}\n\t\td.w.Write(closeParenBytes)\n\t\td.w.Write(spaceBytes)\n\t}\n\n\t// Call Stringer/error interfaces if they exist and the handle methods flag\n\t// is enabled\n\tif !d.cs.DisableMethods {\n\t\tif (kind != reflect.Invalid) && (kind != reflect.Interface) {\n\t\t\tif handled := handleMethods(d.cs, d.w, v); handled {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n\n\tswitch kind {\n\tcase reflect.Invalid:\n\t\t// Do nothing.  We should never get here since invalid has already\n\t\t// been handled above.\n\n\tcase reflect.Bool:\n\t\tprintBool(d.w, v.Bool())\n\n\tcase reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int:\n\t\tprintInt(d.w, v.Int(), 10)\n\n\tcase reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint:\n\t\tprintUint(d.w, v.Uint(), 10)\n\n\tcase reflect.Float32:\n\t\tprintFloat(d.w, v.Float(), 32)\n\n\tcase reflect.Float64:\n\t\tprintFloat(d.w, v.Float(), 64)\n\n\tcase reflect.Complex64:\n\t\tprintComplex(d.w, v.Complex(), 32)\n\n\tcase reflect.Complex128:\n\t\tprintComplex(d.w, v.Complex(), 64)\n\n\tcase reflect.Slice:\n\t\tif v.IsNil() {\n\t\t\td.w.Write(nilAngleBytes)\n\t\t\tbreak\n\t\t}\n\t\tfallthrough\n\n\tcase reflect.Array:\n\t\td.w.Write(openBraceNewlineBytes)\n\t\td.depth++\n\t\tif (d.cs.MaxDepth != 0) && (d.depth > d.cs.MaxDepth) {\n\t\t\td.indent()\n\t\t\td.w.Write(maxNewlineBytes)\n\t\t} else {\n\t\t\td.dumpSlice(v)\n\t\t}\n\t\td.depth--\n\t\td.indent()\n\t\td.w.Write(closeBraceBytes)\n\n\tcase reflect.String:\n\t\td.w.Write([]byte(strconv.Quote(v.String())))\n\n\tcase reflect.Interface:\n\t\t// The only time we should get here is for nil interfaces due to\n\t\t// unpackValue calls.\n\t\tif v.IsNil() {\n\t\t\td.w.Write(nilAngleBytes)\n\t\t}\n\n\tcase reflect.Ptr:\n\t\t// Do nothing.  We should never get here since pointers have already\n\t\t// been handled above.\n\n\tcase reflect.Map:\n\t\t// nil maps should be indicated as different than empty maps\n\t\tif v.IsNil() {\n\t\t\td.w.Write(nilAngleBytes)\n\t\t\tbreak\n\t\t}\n\n\t\td.w.Write(openBraceNewlineBytes)\n\t\td.depth++\n\t\tif (d.cs.MaxDepth != 0) && (d.depth > d.cs.MaxDepth) {\n\t\t\td.indent()\n\t\t\td.w.Write(maxNewlineBytes)\n\t\t} else {\n\t\t\tnumEntries := v.Len()\n\t\t\tkeys := v.MapKeys()\n\t\t\tif d.cs.SortKeys {\n\t\t\t\tsortValues(keys, d.cs)\n\t\t\t}\n\t\t\tfor i, key := range keys {\n\t\t\t\td.dump(d.unpackValue(key))\n\t\t\t\td.w.Write(colonSpaceBytes)\n\t\t\t\td.ignoreNextIndent = true\n\t\t\t\td.dump(d.unpackValue(v.MapIndex(key)))\n\t\t\t\tif i < (numEntries - 1) {\n\t\t\t\t\td.w.Write(commaNewlineBytes)\n\t\t\t\t} else {\n\t\t\t\t\td.w.Write(newlineBytes)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\td.depth--\n\t\td.indent()\n\t\td.w.Write(closeBraceBytes)\n\n\tcase reflect.Struct:\n\t\td.w.Write(openBraceNewlineBytes)\n\t\td.depth++\n\t\tif (d.cs.MaxDepth != 0) && (d.depth > d.cs.MaxDepth) {\n\t\t\td.indent()\n\t\t\td.w.Write(maxNewlineBytes)\n\t\t} else {\n\t\t\tvt := v.Type()\n\t\t\tnumFields := v.NumField()\n\t\t\tfor i := 0; i < numFields; i++ {\n\t\t\t\td.indent()\n\t\t\t\tvtf := vt.Field(i)\n\t\t\t\td.w.Write([]byte(vtf.Name))\n\t\t\t\td.w.Write(colonSpaceBytes)\n\t\t\t\td.ignoreNextIndent = true\n\t\t\t\td.dump(d.unpackValue(v.Field(i)))\n\t\t\t\tif i < (numFields - 1) {\n\t\t\t\t\td.w.Write(commaNewlineBytes)\n\t\t\t\t} else {\n\t\t\t\t\td.w.Write(newlineBytes)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\td.depth--\n\t\td.indent()\n\t\td.w.Write(closeBraceBytes)\n\n\tcase reflect.Uintptr:\n\t\tprintHexPtr(d.w, uintptr(v.Uint()))\n\n\tcase reflect.UnsafePointer, reflect.Chan, reflect.Func:\n\t\tprintHexPtr(d.w, v.Pointer())\n\n\t// There were not any other types at the time this code was written, but\n\t// fall back to letting the default fmt package handle it in case any new\n\t// types are added.\n\tdefault:\n\t\tif v.CanInterface() {\n\t\t\tfmt.Fprintf(d.w, \"%v\", v.Interface())\n\t\t} else {\n\t\t\tfmt.Fprintf(d.w, \"%v\", v.String())\n\t\t}\n\t}\n}\n\n// fdump is a helper function to consolidate the logic from the various public\n// methods which take varying writers and config states.\nfunc fdump(cs *ConfigState, w io.Writer, a ...interface{}) {\n\tfor _, arg := range a {\n\t\tif arg == nil {\n\t\t\tw.Write(interfaceBytes)\n\t\t\tw.Write(spaceBytes)\n\t\t\tw.Write(nilAngleBytes)\n\t\t\tw.Write(newlineBytes)\n\t\t\tcontinue\n\t\t}\n\n\t\td := dumpState{w: w, cs: cs}\n\t\td.pointers = make(map[uintptr]int)\n\t\td.dump(reflect.ValueOf(arg))\n\t\td.w.Write(newlineBytes)\n\t}\n}\n\n// Fdump formats and displays the passed arguments to io.Writer w.  It formats\n// exactly the same as Dump.\nfunc Fdump(w io.Writer, a ...interface{}) {\n\tfdump(&Config, w, a...)\n}\n\n// Sdump returns a string with the passed arguments formatted exactly the same\n// as Dump.\nfunc Sdump(a ...interface{}) string {\n\tvar buf bytes.Buffer\n\tfdump(&Config, &buf, a...)\n\treturn buf.String()\n}\n\n/*\nDump displays the passed parameters to standard out with newlines, customizable\nindentation, and additional debug information such as complete types and all\npointer addresses used to indirect to the final value.  It provides the\nfollowing features over the built-in printing facilities provided by the fmt\npackage:\n\n\t* Pointers are dereferenced and followed\n\t* Circular data structures are detected and handled properly\n\t* Custom Stringer/error interfaces are optionally invoked, including\n\t  on unexported types\n\t* Custom types which only implement the Stringer/error interfaces via\n\t  a pointer receiver are optionally invoked when passing non-pointer\n\t  variables\n\t* Byte arrays and slices are dumped like the hexdump -C command which\n\t  includes offsets, byte values in hex, and ASCII output\n\nThe configuration options are controlled by an exported package global,\nspew.Config.  See ConfigState for options documentation.\n\nSee Fdump if you would prefer dumping to an arbitrary io.Writer or Sdump to\nget the formatted result as a string.\n*/\nfunc Dump(a ...interface{}) {\n\tfdump(&Config, os.Stdout, a...)\n}\n"
  },
  {
    "path": "vendor/github.com/davecgh/go-spew/spew/format.go",
    "content": "/*\n * Copyright (c) 2013-2016 Dave Collins <dave@davec.name>\n *\n * Permission to use, copy, modify, and distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n */\n\npackage spew\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// supportedFlags is a list of all the character flags supported by fmt package.\nconst supportedFlags = \"0-+# \"\n\n// formatState implements the fmt.Formatter interface and contains information\n// about the state of a formatting operation.  The NewFormatter function can\n// be used to get a new Formatter which can be used directly as arguments\n// in standard fmt package printing calls.\ntype formatState struct {\n\tvalue          interface{}\n\tfs             fmt.State\n\tdepth          int\n\tpointers       map[uintptr]int\n\tignoreNextType bool\n\tcs             *ConfigState\n}\n\n// buildDefaultFormat recreates the original format string without precision\n// and width information to pass in to fmt.Sprintf in the case of an\n// unrecognized type.  Unless new types are added to the language, this\n// function won't ever be called.\nfunc (f *formatState) buildDefaultFormat() (format string) {\n\tbuf := bytes.NewBuffer(percentBytes)\n\n\tfor _, flag := range supportedFlags {\n\t\tif f.fs.Flag(int(flag)) {\n\t\t\tbuf.WriteRune(flag)\n\t\t}\n\t}\n\n\tbuf.WriteRune('v')\n\n\tformat = buf.String()\n\treturn format\n}\n\n// constructOrigFormat recreates the original format string including precision\n// and width information to pass along to the standard fmt package.  This allows\n// automatic deferral of all format strings this package doesn't support.\nfunc (f *formatState) constructOrigFormat(verb rune) (format string) {\n\tbuf := bytes.NewBuffer(percentBytes)\n\n\tfor _, flag := range supportedFlags {\n\t\tif f.fs.Flag(int(flag)) {\n\t\t\tbuf.WriteRune(flag)\n\t\t}\n\t}\n\n\tif width, ok := f.fs.Width(); ok {\n\t\tbuf.WriteString(strconv.Itoa(width))\n\t}\n\n\tif precision, ok := f.fs.Precision(); ok {\n\t\tbuf.Write(precisionBytes)\n\t\tbuf.WriteString(strconv.Itoa(precision))\n\t}\n\n\tbuf.WriteRune(verb)\n\n\tformat = buf.String()\n\treturn format\n}\n\n// unpackValue returns values inside of non-nil interfaces when possible and\n// ensures that types for values which have been unpacked from an interface\n// are displayed when the show types flag is also set.\n// This is useful for data types like structs, arrays, slices, and maps which\n// can contain varying types packed inside an interface.\nfunc (f *formatState) unpackValue(v reflect.Value) reflect.Value {\n\tif v.Kind() == reflect.Interface {\n\t\tf.ignoreNextType = false\n\t\tif !v.IsNil() {\n\t\t\tv = v.Elem()\n\t\t}\n\t}\n\treturn v\n}\n\n// formatPtr handles formatting of pointers by indirecting them as necessary.\nfunc (f *formatState) formatPtr(v reflect.Value) {\n\t// Display nil if top level pointer is nil.\n\tshowTypes := f.fs.Flag('#')\n\tif v.IsNil() && (!showTypes || f.ignoreNextType) {\n\t\tf.fs.Write(nilAngleBytes)\n\t\treturn\n\t}\n\n\t// Remove pointers at or below the current depth from map used to detect\n\t// circular refs.\n\tfor k, depth := range f.pointers {\n\t\tif depth >= f.depth {\n\t\t\tdelete(f.pointers, k)\n\t\t}\n\t}\n\n\t// Keep list of all dereferenced pointers to possibly show later.\n\tpointerChain := make([]uintptr, 0)\n\n\t// Figure out how many levels of indirection there are by derferencing\n\t// pointers and unpacking interfaces down the chain while detecting circular\n\t// references.\n\tnilFound := false\n\tcycleFound := false\n\tindirects := 0\n\tve := v\n\tfor ve.Kind() == reflect.Ptr {\n\t\tif ve.IsNil() {\n\t\t\tnilFound = true\n\t\t\tbreak\n\t\t}\n\t\tindirects++\n\t\taddr := ve.Pointer()\n\t\tpointerChain = append(pointerChain, addr)\n\t\tif pd, ok := f.pointers[addr]; ok && pd < f.depth {\n\t\t\tcycleFound = true\n\t\t\tindirects--\n\t\t\tbreak\n\t\t}\n\t\tf.pointers[addr] = f.depth\n\n\t\tve = ve.Elem()\n\t\tif ve.Kind() == reflect.Interface {\n\t\t\tif ve.IsNil() {\n\t\t\t\tnilFound = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tve = ve.Elem()\n\t\t}\n\t}\n\n\t// Display type or indirection level depending on flags.\n\tif showTypes && !f.ignoreNextType {\n\t\tf.fs.Write(openParenBytes)\n\t\tf.fs.Write(bytes.Repeat(asteriskBytes, indirects))\n\t\tf.fs.Write([]byte(ve.Type().String()))\n\t\tf.fs.Write(closeParenBytes)\n\t} else {\n\t\tif nilFound || cycleFound {\n\t\t\tindirects += strings.Count(ve.Type().String(), \"*\")\n\t\t}\n\t\tf.fs.Write(openAngleBytes)\n\t\tf.fs.Write([]byte(strings.Repeat(\"*\", indirects)))\n\t\tf.fs.Write(closeAngleBytes)\n\t}\n\n\t// Display pointer information depending on flags.\n\tif f.fs.Flag('+') && (len(pointerChain) > 0) {\n\t\tf.fs.Write(openParenBytes)\n\t\tfor i, addr := range pointerChain {\n\t\t\tif i > 0 {\n\t\t\t\tf.fs.Write(pointerChainBytes)\n\t\t\t}\n\t\t\tprintHexPtr(f.fs, addr)\n\t\t}\n\t\tf.fs.Write(closeParenBytes)\n\t}\n\n\t// Display dereferenced value.\n\tswitch {\n\tcase nilFound:\n\t\tf.fs.Write(nilAngleBytes)\n\n\tcase cycleFound:\n\t\tf.fs.Write(circularShortBytes)\n\n\tdefault:\n\t\tf.ignoreNextType = true\n\t\tf.format(ve)\n\t}\n}\n\n// format is the main workhorse for providing the Formatter interface.  It\n// uses the passed reflect value to figure out what kind of object we are\n// dealing with and formats it appropriately.  It is a recursive function,\n// however circular data structures are detected and handled properly.\nfunc (f *formatState) format(v reflect.Value) {\n\t// Handle invalid reflect values immediately.\n\tkind := v.Kind()\n\tif kind == reflect.Invalid {\n\t\tf.fs.Write(invalidAngleBytes)\n\t\treturn\n\t}\n\n\t// Handle pointers specially.\n\tif kind == reflect.Ptr {\n\t\tf.formatPtr(v)\n\t\treturn\n\t}\n\n\t// Print type information unless already handled elsewhere.\n\tif !f.ignoreNextType && f.fs.Flag('#') {\n\t\tf.fs.Write(openParenBytes)\n\t\tf.fs.Write([]byte(v.Type().String()))\n\t\tf.fs.Write(closeParenBytes)\n\t}\n\tf.ignoreNextType = false\n\n\t// Call Stringer/error interfaces if they exist and the handle methods\n\t// flag is enabled.\n\tif !f.cs.DisableMethods {\n\t\tif (kind != reflect.Invalid) && (kind != reflect.Interface) {\n\t\t\tif handled := handleMethods(f.cs, f.fs, v); handled {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n\n\tswitch kind {\n\tcase reflect.Invalid:\n\t\t// Do nothing.  We should never get here since invalid has already\n\t\t// been handled above.\n\n\tcase reflect.Bool:\n\t\tprintBool(f.fs, v.Bool())\n\n\tcase reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int:\n\t\tprintInt(f.fs, v.Int(), 10)\n\n\tcase reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint:\n\t\tprintUint(f.fs, v.Uint(), 10)\n\n\tcase reflect.Float32:\n\t\tprintFloat(f.fs, v.Float(), 32)\n\n\tcase reflect.Float64:\n\t\tprintFloat(f.fs, v.Float(), 64)\n\n\tcase reflect.Complex64:\n\t\tprintComplex(f.fs, v.Complex(), 32)\n\n\tcase reflect.Complex128:\n\t\tprintComplex(f.fs, v.Complex(), 64)\n\n\tcase reflect.Slice:\n\t\tif v.IsNil() {\n\t\t\tf.fs.Write(nilAngleBytes)\n\t\t\tbreak\n\t\t}\n\t\tfallthrough\n\n\tcase reflect.Array:\n\t\tf.fs.Write(openBracketBytes)\n\t\tf.depth++\n\t\tif (f.cs.MaxDepth != 0) && (f.depth > f.cs.MaxDepth) {\n\t\t\tf.fs.Write(maxShortBytes)\n\t\t} else {\n\t\t\tnumEntries := v.Len()\n\t\t\tfor i := 0; i < numEntries; i++ {\n\t\t\t\tif i > 0 {\n\t\t\t\t\tf.fs.Write(spaceBytes)\n\t\t\t\t}\n\t\t\t\tf.ignoreNextType = true\n\t\t\t\tf.format(f.unpackValue(v.Index(i)))\n\t\t\t}\n\t\t}\n\t\tf.depth--\n\t\tf.fs.Write(closeBracketBytes)\n\n\tcase reflect.String:\n\t\tf.fs.Write([]byte(v.String()))\n\n\tcase reflect.Interface:\n\t\t// The only time we should get here is for nil interfaces due to\n\t\t// unpackValue calls.\n\t\tif v.IsNil() {\n\t\t\tf.fs.Write(nilAngleBytes)\n\t\t}\n\n\tcase reflect.Ptr:\n\t\t// Do nothing.  We should never get here since pointers have already\n\t\t// been handled above.\n\n\tcase reflect.Map:\n\t\t// nil maps should be indicated as different than empty maps\n\t\tif v.IsNil() {\n\t\t\tf.fs.Write(nilAngleBytes)\n\t\t\tbreak\n\t\t}\n\n\t\tf.fs.Write(openMapBytes)\n\t\tf.depth++\n\t\tif (f.cs.MaxDepth != 0) && (f.depth > f.cs.MaxDepth) {\n\t\t\tf.fs.Write(maxShortBytes)\n\t\t} else {\n\t\t\tkeys := v.MapKeys()\n\t\t\tif f.cs.SortKeys {\n\t\t\t\tsortValues(keys, f.cs)\n\t\t\t}\n\t\t\tfor i, key := range keys {\n\t\t\t\tif i > 0 {\n\t\t\t\t\tf.fs.Write(spaceBytes)\n\t\t\t\t}\n\t\t\t\tf.ignoreNextType = true\n\t\t\t\tf.format(f.unpackValue(key))\n\t\t\t\tf.fs.Write(colonBytes)\n\t\t\t\tf.ignoreNextType = true\n\t\t\t\tf.format(f.unpackValue(v.MapIndex(key)))\n\t\t\t}\n\t\t}\n\t\tf.depth--\n\t\tf.fs.Write(closeMapBytes)\n\n\tcase reflect.Struct:\n\t\tnumFields := v.NumField()\n\t\tf.fs.Write(openBraceBytes)\n\t\tf.depth++\n\t\tif (f.cs.MaxDepth != 0) && (f.depth > f.cs.MaxDepth) {\n\t\t\tf.fs.Write(maxShortBytes)\n\t\t} else {\n\t\t\tvt := v.Type()\n\t\t\tfor i := 0; i < numFields; i++ {\n\t\t\t\tif i > 0 {\n\t\t\t\t\tf.fs.Write(spaceBytes)\n\t\t\t\t}\n\t\t\t\tvtf := vt.Field(i)\n\t\t\t\tif f.fs.Flag('+') || f.fs.Flag('#') {\n\t\t\t\t\tf.fs.Write([]byte(vtf.Name))\n\t\t\t\t\tf.fs.Write(colonBytes)\n\t\t\t\t}\n\t\t\t\tf.format(f.unpackValue(v.Field(i)))\n\t\t\t}\n\t\t}\n\t\tf.depth--\n\t\tf.fs.Write(closeBraceBytes)\n\n\tcase reflect.Uintptr:\n\t\tprintHexPtr(f.fs, uintptr(v.Uint()))\n\n\tcase reflect.UnsafePointer, reflect.Chan, reflect.Func:\n\t\tprintHexPtr(f.fs, v.Pointer())\n\n\t// There were not any other types at the time this code was written, but\n\t// fall back to letting the default fmt package handle it if any get added.\n\tdefault:\n\t\tformat := f.buildDefaultFormat()\n\t\tif v.CanInterface() {\n\t\t\tfmt.Fprintf(f.fs, format, v.Interface())\n\t\t} else {\n\t\t\tfmt.Fprintf(f.fs, format, v.String())\n\t\t}\n\t}\n}\n\n// Format satisfies the fmt.Formatter interface. See NewFormatter for usage\n// details.\nfunc (f *formatState) Format(fs fmt.State, verb rune) {\n\tf.fs = fs\n\n\t// Use standard formatting for verbs that are not v.\n\tif verb != 'v' {\n\t\tformat := f.constructOrigFormat(verb)\n\t\tfmt.Fprintf(fs, format, f.value)\n\t\treturn\n\t}\n\n\tif f.value == nil {\n\t\tif fs.Flag('#') {\n\t\t\tfs.Write(interfaceBytes)\n\t\t}\n\t\tfs.Write(nilAngleBytes)\n\t\treturn\n\t}\n\n\tf.format(reflect.ValueOf(f.value))\n}\n\n// newFormatter is a helper function to consolidate the logic from the various\n// public methods which take varying config states.\nfunc newFormatter(cs *ConfigState, v interface{}) fmt.Formatter {\n\tfs := &formatState{value: v, cs: cs}\n\tfs.pointers = make(map[uintptr]int)\n\treturn fs\n}\n\n/*\nNewFormatter returns a custom formatter that satisfies the fmt.Formatter\ninterface.  As a result, it integrates cleanly with standard fmt package\nprinting functions.  The formatter is useful for inline printing of smaller data\ntypes similar to the standard %v format specifier.\n\nThe custom formatter only responds to the %v (most compact), %+v (adds pointer\naddresses), %#v (adds types), or %#+v (adds types and pointer addresses) verb\ncombinations.  Any other verbs such as %x and %q will be sent to the the\nstandard fmt package for formatting.  In addition, the custom formatter ignores\nthe width and precision arguments (however they will still work on the format\nspecifiers not handled by the custom formatter).\n\nTypically this function shouldn't be called directly.  It is much easier to make\nuse of the custom formatter by calling one of the convenience functions such as\nPrintf, Println, or Fprintf.\n*/\nfunc NewFormatter(v interface{}) fmt.Formatter {\n\treturn newFormatter(&Config, v)\n}\n"
  },
  {
    "path": "vendor/github.com/davecgh/go-spew/spew/spew.go",
    "content": "/*\n * Copyright (c) 2013-2016 Dave Collins <dave@davec.name>\n *\n * Permission to use, copy, modify, and distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n */\n\npackage spew\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\n// Errorf is a wrapper for fmt.Errorf that treats each argument as if it were\n// passed with a default Formatter interface returned by NewFormatter.  It\n// returns the formatted string as a value that satisfies error.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Errorf(format, spew.NewFormatter(a), spew.NewFormatter(b))\nfunc Errorf(format string, a ...interface{}) (err error) {\n\treturn fmt.Errorf(format, convertArgs(a)...)\n}\n\n// Fprint is a wrapper for fmt.Fprint that treats each argument as if it were\n// passed with a default Formatter interface returned by NewFormatter.  It\n// returns the number of bytes written and any write error encountered.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Fprint(w, spew.NewFormatter(a), spew.NewFormatter(b))\nfunc Fprint(w io.Writer, a ...interface{}) (n int, err error) {\n\treturn fmt.Fprint(w, convertArgs(a)...)\n}\n\n// Fprintf is a wrapper for fmt.Fprintf that treats each argument as if it were\n// passed with a default Formatter interface returned by NewFormatter.  It\n// returns the number of bytes written and any write error encountered.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Fprintf(w, format, spew.NewFormatter(a), spew.NewFormatter(b))\nfunc Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) {\n\treturn fmt.Fprintf(w, format, convertArgs(a)...)\n}\n\n// Fprintln is a wrapper for fmt.Fprintln that treats each argument as if it\n// passed with a default Formatter interface returned by NewFormatter.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Fprintln(w, spew.NewFormatter(a), spew.NewFormatter(b))\nfunc Fprintln(w io.Writer, a ...interface{}) (n int, err error) {\n\treturn fmt.Fprintln(w, convertArgs(a)...)\n}\n\n// Print is a wrapper for fmt.Print that treats each argument as if it were\n// passed with a default Formatter interface returned by NewFormatter.  It\n// returns the number of bytes written and any write error encountered.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Print(spew.NewFormatter(a), spew.NewFormatter(b))\nfunc Print(a ...interface{}) (n int, err error) {\n\treturn fmt.Print(convertArgs(a)...)\n}\n\n// Printf is a wrapper for fmt.Printf that treats each argument as if it were\n// passed with a default Formatter interface returned by NewFormatter.  It\n// returns the number of bytes written and any write error encountered.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Printf(format, spew.NewFormatter(a), spew.NewFormatter(b))\nfunc Printf(format string, a ...interface{}) (n int, err error) {\n\treturn fmt.Printf(format, convertArgs(a)...)\n}\n\n// Println is a wrapper for fmt.Println that treats each argument as if it were\n// passed with a default Formatter interface returned by NewFormatter.  It\n// returns the number of bytes written and any write error encountered.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Println(spew.NewFormatter(a), spew.NewFormatter(b))\nfunc Println(a ...interface{}) (n int, err error) {\n\treturn fmt.Println(convertArgs(a)...)\n}\n\n// Sprint is a wrapper for fmt.Sprint that treats each argument as if it were\n// passed with a default Formatter interface returned by NewFormatter.  It\n// returns the resulting string.  See NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Sprint(spew.NewFormatter(a), spew.NewFormatter(b))\nfunc Sprint(a ...interface{}) string {\n\treturn fmt.Sprint(convertArgs(a)...)\n}\n\n// Sprintf is a wrapper for fmt.Sprintf that treats each argument as if it were\n// passed with a default Formatter interface returned by NewFormatter.  It\n// returns the resulting string.  See NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Sprintf(format, spew.NewFormatter(a), spew.NewFormatter(b))\nfunc Sprintf(format string, a ...interface{}) string {\n\treturn fmt.Sprintf(format, convertArgs(a)...)\n}\n\n// Sprintln is a wrapper for fmt.Sprintln that treats each argument as if it\n// were passed with a default Formatter interface returned by NewFormatter.  It\n// returns the resulting string.  See NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Sprintln(spew.NewFormatter(a), spew.NewFormatter(b))\nfunc Sprintln(a ...interface{}) string {\n\treturn fmt.Sprintln(convertArgs(a)...)\n}\n\n// convertArgs accepts a slice of arguments and returns a slice of the same\n// length with each argument converted to a default spew Formatter interface.\nfunc convertArgs(args []interface{}) (formatters []interface{}) {\n\tformatters = make([]interface{}, len(args))\n\tfor index, arg := range args {\n\t\tformatters[index] = NewFormatter(arg)\n\t}\n\treturn formatters\n}\n"
  },
  {
    "path": "vendor/github.com/pkg/errors/.gitignore",
    "content": "# Compiled Object files, Static and Dynamic libs (Shared Objects)\n*.o\n*.a\n*.so\n\n# Folders\n_obj\n_test\n\n# Architecture specific extensions/prefixes\n*.[568vq]\n[568vq].out\n\n*.cgo1.go\n*.cgo2.c\n_cgo_defun.c\n_cgo_gotypes.go\n_cgo_export.*\n\n_testmain.go\n\n*.exe\n*.test\n*.prof\n"
  },
  {
    "path": "vendor/github.com/pkg/errors/.travis.yml",
    "content": "language: go\ngo_import_path: github.com/pkg/errors\ngo:\n  - 1.4.3\n  - 1.5.4\n  - 1.6.2\n  - 1.7.1\n  - tip\n\nscript:\n  - go test -v ./...\n"
  },
  {
    "path": "vendor/github.com/pkg/errors/LICENSE",
    "content": "Copyright (c) 2015, Dave Cheney <dave@cheney.net>\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n  list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n  this list of conditions and the following disclaimer in the documentation\n  and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "vendor/github.com/pkg/errors/README.md",
    "content": "# errors [![Travis-CI](https://travis-ci.org/pkg/errors.svg)](https://travis-ci.org/pkg/errors) [![AppVeyor](https://ci.appveyor.com/api/projects/status/b98mptawhudj53ep/branch/master?svg=true)](https://ci.appveyor.com/project/davecheney/errors/branch/master) [![GoDoc](https://godoc.org/github.com/pkg/errors?status.svg)](http://godoc.org/github.com/pkg/errors) [![Report card](https://goreportcard.com/badge/github.com/pkg/errors)](https://goreportcard.com/report/github.com/pkg/errors)\n\nPackage errors provides simple error handling primitives.\n\n`go get github.com/pkg/errors`\n\nThe traditional error handling idiom in Go is roughly akin to\n```go\nif err != nil {\n        return err\n}\n```\nwhich applied recursively up the call stack results in error reports without context or debugging information. The errors package allows programmers to add context to the failure path in their code in a way that does not destroy the original value of the error.\n\n## Adding context to an error\n\nThe errors.Wrap function returns a new error that adds context to the original error. For example\n```go\n_, err := ioutil.ReadAll(r)\nif err != nil {\n        return errors.Wrap(err, \"read failed\")\n}\n```\n## Retrieving the cause of an error\n\nUsing `errors.Wrap` constructs a stack of errors, adding context to the preceding error. Depending on the nature of the error it may be necessary to reverse the operation of errors.Wrap to retrieve the original error for inspection. Any error value which implements this interface can be inspected by `errors.Cause`.\n```go\ntype causer interface {\n        Cause() error\n}\n```\n`errors.Cause` will recursively retrieve the topmost error which does not implement `causer`, which is assumed to be the original cause. For example:\n```go\nswitch err := errors.Cause(err).(type) {\ncase *MyError:\n        // handle specifically\ndefault:\n        // unknown error\n}\n```\n\n[Read the package documentation for more information](https://godoc.org/github.com/pkg/errors).\n\n## Contributing\n\nWe welcome pull requests, bug fixes and issue reports. With that said, the bar for adding new symbols to this package is intentionally set high.\n\nBefore proposing a change, please discuss your change by raising an issue.\n\n## Licence\n\nBSD-2-Clause\n"
  },
  {
    "path": "vendor/github.com/pkg/errors/appveyor.yml",
    "content": "version: build-{build}.{branch}\n\nclone_folder: C:\\gopath\\src\\github.com\\pkg\\errors\nshallow_clone: true # for startup speed\n\nenvironment:\n  GOPATH: C:\\gopath\n\nplatform:\n  - x64\n\n# http://www.appveyor.com/docs/installed-software\ninstall:\n  # some helpful output for debugging builds\n  - go version\n  - go env\n  # pre-installed MinGW at C:\\MinGW is 32bit only\n  # but MSYS2 at C:\\msys64 has mingw64\n  - set PATH=C:\\msys64\\mingw64\\bin;%PATH%\n  - gcc --version\n  - g++ --version\n\nbuild_script:\n  - go install -v ./...\n\ntest_script:\n  - set PATH=C:\\gopath\\bin;%PATH%\n  - go test -v ./...\n\n#artifacts:\n#  - path: '%GOPATH%\\bin\\*.exe'\ndeploy: off\n"
  },
  {
    "path": "vendor/github.com/pkg/errors/errors.go",
    "content": "// Package errors provides simple error handling primitives.\n//\n// The traditional error handling idiom in Go is roughly akin to\n//\n//     if err != nil {\n//             return err\n//     }\n//\n// which applied recursively up the call stack results in error reports\n// without context or debugging information. The errors package allows\n// programmers to add context to the failure path in their code in a way\n// that does not destroy the original value of the error.\n//\n// Adding context to an error\n//\n// The errors.Wrap function returns a new error that adds context to the\n// original error by recording a stack trace at the point Wrap is called,\n// and the supplied message. For example\n//\n//     _, err := ioutil.ReadAll(r)\n//     if err != nil {\n//             return errors.Wrap(err, \"read failed\")\n//     }\n//\n// If additional control is required the errors.WithStack and errors.WithMessage\n// functions destructure errors.Wrap into its component operations of annotating\n// an error with a stack trace and an a message, respectively.\n//\n// Retrieving the cause of an error\n//\n// Using errors.Wrap constructs a stack of errors, adding context to the\n// preceding error. Depending on the nature of the error it may be necessary\n// to reverse the operation of errors.Wrap to retrieve the original error\n// for inspection. Any error value which implements this interface\n//\n//     type causer interface {\n//             Cause() error\n//     }\n//\n// can be inspected by errors.Cause. errors.Cause will recursively retrieve\n// the topmost error which does not implement causer, which is assumed to be\n// the original cause. For example:\n//\n//     switch err := errors.Cause(err).(type) {\n//     case *MyError:\n//             // handle specifically\n//     default:\n//             // unknown error\n//     }\n//\n// causer interface is not exported by this package, but is considered a part\n// of stable public API.\n//\n// Formatted printing of errors\n//\n// All error values returned from this package implement fmt.Formatter and can\n// be formatted by the fmt package. The following verbs are supported\n//\n//     %s    print the error. If the error has a Cause it will be\n//           printed recursively\n//     %v    see %s\n//     %+v   extended format. Each Frame of the error's StackTrace will\n//           be printed in detail.\n//\n// Retrieving the stack trace of an error or wrapper\n//\n// New, Errorf, Wrap, and Wrapf record a stack trace at the point they are\n// invoked. This information can be retrieved with the following interface.\n//\n//     type stackTracer interface {\n//             StackTrace() errors.StackTrace\n//     }\n//\n// Where errors.StackTrace is defined as\n//\n//     type StackTrace []Frame\n//\n// The Frame type represents a call site in the stack trace. Frame supports\n// the fmt.Formatter interface that can be used for printing information about\n// the stack trace of this error. For example:\n//\n//     if err, ok := err.(stackTracer); ok {\n//             for _, f := range err.StackTrace() {\n//                     fmt.Printf(\"%+s:%d\", f)\n//             }\n//     }\n//\n// stackTracer interface is not exported by this package, but is considered a part\n// of stable public API.\n//\n// See the documentation for Frame.Format for more details.\npackage errors\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\n// New returns an error with the supplied message.\n// New also records the stack trace at the point it was called.\nfunc New(message string) error {\n\treturn &fundamental{\n\t\tmsg:   message,\n\t\tstack: callers(),\n\t}\n}\n\n// Errorf formats according to a format specifier and returns the string\n// as a value that satisfies error.\n// Errorf also records the stack trace at the point it was called.\nfunc Errorf(format string, args ...interface{}) error {\n\treturn &fundamental{\n\t\tmsg:   fmt.Sprintf(format, args...),\n\t\tstack: callers(),\n\t}\n}\n\n// fundamental is an error that has a message and a stack, but no caller.\ntype fundamental struct {\n\tmsg string\n\t*stack\n}\n\nfunc (f *fundamental) Error() string { return f.msg }\n\nfunc (f *fundamental) Format(s fmt.State, verb rune) {\n\tswitch verb {\n\tcase 'v':\n\t\tif s.Flag('+') {\n\t\t\tio.WriteString(s, f.msg)\n\t\t\tf.stack.Format(s, verb)\n\t\t\treturn\n\t\t}\n\t\tfallthrough\n\tcase 's':\n\t\tio.WriteString(s, f.msg)\n\tcase 'q':\n\t\tfmt.Fprintf(s, \"%q\", f.msg)\n\t}\n}\n\n// WithStack annotates err with a stack trace at the point WithStack was called.\n// If err is nil, WithStack returns nil.\nfunc WithStack(err error) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\treturn &withStack{\n\t\terr,\n\t\tcallers(),\n\t}\n}\n\ntype withStack struct {\n\terror\n\t*stack\n}\n\nfunc (w *withStack) Cause() error { return w.error }\n\nfunc (w *withStack) Format(s fmt.State, verb rune) {\n\tswitch verb {\n\tcase 'v':\n\t\tif s.Flag('+') {\n\t\t\tfmt.Fprintf(s, \"%+v\", w.Cause())\n\t\t\tw.stack.Format(s, verb)\n\t\t\treturn\n\t\t}\n\t\tfallthrough\n\tcase 's':\n\t\tio.WriteString(s, w.Error())\n\tcase 'q':\n\t\tfmt.Fprintf(s, \"%q\", w.Error())\n\t}\n}\n\n// Wrap returns an error annotating err with a stack trace\n// at the point Wrap is called, and the supplied message.\n// If err is nil, Wrap returns nil.\nfunc Wrap(err error, message string) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\terr = &withMessage{\n\t\tcause: err,\n\t\tmsg:   message,\n\t}\n\treturn &withStack{\n\t\terr,\n\t\tcallers(),\n\t}\n}\n\n// Wrapf returns an error annotating err with a stack trace\n// at the point Wrapf is call, and the format specifier.\n// If err is nil, Wrapf returns nil.\nfunc Wrapf(err error, format string, args ...interface{}) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\terr = &withMessage{\n\t\tcause: err,\n\t\tmsg:   fmt.Sprintf(format, args...),\n\t}\n\treturn &withStack{\n\t\terr,\n\t\tcallers(),\n\t}\n}\n\n// WithMessage annotates err with a new message.\n// If err is nil, WithMessage returns nil.\nfunc WithMessage(err error, message string) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\treturn &withMessage{\n\t\tcause: err,\n\t\tmsg:   message,\n\t}\n}\n\ntype withMessage struct {\n\tcause error\n\tmsg   string\n}\n\nfunc (w *withMessage) Error() string { return w.msg + \": \" + w.cause.Error() }\nfunc (w *withMessage) Cause() error  { return w.cause }\n\nfunc (w *withMessage) Format(s fmt.State, verb rune) {\n\tswitch verb {\n\tcase 'v':\n\t\tif s.Flag('+') {\n\t\t\tfmt.Fprintf(s, \"%+v\\n\", w.Cause())\n\t\t\tio.WriteString(s, w.msg)\n\t\t\treturn\n\t\t}\n\t\tfallthrough\n\tcase 's', 'q':\n\t\tio.WriteString(s, w.Error())\n\t}\n}\n\n// Cause returns the underlying cause of the error, if possible.\n// An error value has a cause if it implements the following\n// interface:\n//\n//     type causer interface {\n//            Cause() error\n//     }\n//\n// If the error does not implement Cause, the original error will\n// be returned. If the error is nil, nil will be returned without further\n// investigation.\nfunc Cause(err error) error {\n\ttype causer interface {\n\t\tCause() error\n\t}\n\n\tfor err != nil {\n\t\tcause, ok := err.(causer)\n\t\tif !ok {\n\t\t\tbreak\n\t\t}\n\t\terr = cause.Cause()\n\t}\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/pkg/errors/stack.go",
    "content": "package errors\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"path\"\n\t\"runtime\"\n\t\"strings\"\n)\n\n// Frame represents a program counter inside a stack frame.\ntype Frame uintptr\n\n// pc returns the program counter for this frame;\n// multiple frames may have the same PC value.\nfunc (f Frame) pc() uintptr { return uintptr(f) - 1 }\n\n// file returns the full path to the file that contains the\n// function for this Frame's pc.\nfunc (f Frame) file() string {\n\tfn := runtime.FuncForPC(f.pc())\n\tif fn == nil {\n\t\treturn \"unknown\"\n\t}\n\tfile, _ := fn.FileLine(f.pc())\n\treturn file\n}\n\n// line returns the line number of source code of the\n// function for this Frame's pc.\nfunc (f Frame) line() int {\n\tfn := runtime.FuncForPC(f.pc())\n\tif fn == nil {\n\t\treturn 0\n\t}\n\t_, line := fn.FileLine(f.pc())\n\treturn line\n}\n\n// Format formats the frame according to the fmt.Formatter interface.\n//\n//    %s    source file\n//    %d    source line\n//    %n    function name\n//    %v    equivalent to %s:%d\n//\n// Format accepts flags that alter the printing of some verbs, as follows:\n//\n//    %+s   path of source file relative to the compile time GOPATH\n//    %+v   equivalent to %+s:%d\nfunc (f Frame) Format(s fmt.State, verb rune) {\n\tswitch verb {\n\tcase 's':\n\t\tswitch {\n\t\tcase s.Flag('+'):\n\t\t\tpc := f.pc()\n\t\t\tfn := runtime.FuncForPC(pc)\n\t\t\tif fn == nil {\n\t\t\t\tio.WriteString(s, \"unknown\")\n\t\t\t} else {\n\t\t\t\tfile, _ := fn.FileLine(pc)\n\t\t\t\tfmt.Fprintf(s, \"%s\\n\\t%s\", fn.Name(), file)\n\t\t\t}\n\t\tdefault:\n\t\t\tio.WriteString(s, path.Base(f.file()))\n\t\t}\n\tcase 'd':\n\t\tfmt.Fprintf(s, \"%d\", f.line())\n\tcase 'n':\n\t\tname := runtime.FuncForPC(f.pc()).Name()\n\t\tio.WriteString(s, funcname(name))\n\tcase 'v':\n\t\tf.Format(s, 's')\n\t\tio.WriteString(s, \":\")\n\t\tf.Format(s, 'd')\n\t}\n}\n\n// StackTrace is stack of Frames from innermost (newest) to outermost (oldest).\ntype StackTrace []Frame\n\nfunc (st StackTrace) Format(s fmt.State, verb rune) {\n\tswitch verb {\n\tcase 'v':\n\t\tswitch {\n\t\tcase s.Flag('+'):\n\t\t\tfor _, f := range st {\n\t\t\t\tfmt.Fprintf(s, \"\\n%+v\", f)\n\t\t\t}\n\t\tcase s.Flag('#'):\n\t\t\tfmt.Fprintf(s, \"%#v\", []Frame(st))\n\t\tdefault:\n\t\t\tfmt.Fprintf(s, \"%v\", []Frame(st))\n\t\t}\n\tcase 's':\n\t\tfmt.Fprintf(s, \"%s\", []Frame(st))\n\t}\n}\n\n// stack represents a stack of program counters.\ntype stack []uintptr\n\nfunc (s *stack) Format(st fmt.State, verb rune) {\n\tswitch verb {\n\tcase 'v':\n\t\tswitch {\n\t\tcase st.Flag('+'):\n\t\t\tfor _, pc := range *s {\n\t\t\t\tf := Frame(pc)\n\t\t\t\tfmt.Fprintf(st, \"\\n%+v\", f)\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc (s *stack) StackTrace() StackTrace {\n\tf := make([]Frame, len(*s))\n\tfor i := 0; i < len(f); i++ {\n\t\tf[i] = Frame((*s)[i])\n\t}\n\treturn f\n}\n\nfunc callers() *stack {\n\tconst depth = 32\n\tvar pcs [depth]uintptr\n\tn := runtime.Callers(3, pcs[:])\n\tvar st stack = pcs[0:n]\n\treturn &st\n}\n\n// funcname removes the path prefix component of a function's name reported by func.Name().\nfunc funcname(name string) string {\n\ti := strings.LastIndex(name, \"/\")\n\tname = name[i+1:]\n\ti = strings.Index(name, \".\")\n\treturn name[i+1:]\n}\n\nfunc trimGOPATH(name, file string) string {\n\t// Here we want to get the source file path relative to the compile time\n\t// GOPATH. As of Go 1.6.x there is no direct way to know the compiled\n\t// GOPATH at runtime, but we can infer the number of path segments in the\n\t// GOPATH. We note that fn.Name() returns the function name qualified by\n\t// the import path, which does not include the GOPATH. Thus we can trim\n\t// segments from the beginning of the file path until the number of path\n\t// separators remaining is one more than the number of path separators in\n\t// the function name. For example, given:\n\t//\n\t//    GOPATH     /home/user\n\t//    file       /home/user/src/pkg/sub/file.go\n\t//    fn.Name()  pkg/sub.Type.Method\n\t//\n\t// We want to produce:\n\t//\n\t//    pkg/sub/file.go\n\t//\n\t// From this we can easily see that fn.Name() has one less path separator\n\t// than our desired output. We count separators from the end of the file\n\t// path until it finds two more than in the function name and then move\n\t// one character forward to preserve the initial path segment without a\n\t// leading separator.\n\tconst sep = \"/\"\n\tgoal := strings.Count(name, sep) + 2\n\ti := len(file)\n\tfor n := 0; n < goal; n++ {\n\t\ti = strings.LastIndex(file[:i], sep)\n\t\tif i == -1 {\n\t\t\t// not enough separators found, set i so that the slice expression\n\t\t\t// below leaves file unmodified\n\t\t\ti = -len(sep)\n\t\t\tbreak\n\t\t}\n\t}\n\t// get back to 0 or trim the leading separator\n\tfile = file[i+len(sep):]\n\treturn file\n}\n"
  },
  {
    "path": "vendor/github.com/pmezard/go-difflib/LICENSE",
    "content": "Copyright (c) 2013, Patrick Mezard\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n    Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n    Redistributions in binary form must reproduce the above copyright\nnotice, this list of conditions and the following disclaimer in the\ndocumentation and/or other materials provided with the distribution.\n    The names of its contributors may not be used to endorse or promote\nproducts derived from this software without specific prior written\npermission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\nIS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED\nTO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\nPARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nHOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "vendor/github.com/pmezard/go-difflib/difflib/difflib.go",
    "content": "// Package difflib is a partial port of Python difflib module.\n//\n// It provides tools to compare sequences of strings and generate textual diffs.\n//\n// The following class and functions have been ported:\n//\n// - SequenceMatcher\n//\n// - unified_diff\n//\n// - context_diff\n//\n// Getting unified diffs was the main goal of the port. Keep in mind this code\n// is mostly suitable to output text differences in a human friendly way, there\n// are no guarantees generated diffs are consumable by patch(1).\npackage difflib\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"strings\"\n)\n\nfunc min(a, b int) int {\n\tif a < b {\n\t\treturn a\n\t}\n\treturn b\n}\n\nfunc max(a, b int) int {\n\tif a > b {\n\t\treturn a\n\t}\n\treturn b\n}\n\nfunc calculateRatio(matches, length int) float64 {\n\tif length > 0 {\n\t\treturn 2.0 * float64(matches) / float64(length)\n\t}\n\treturn 1.0\n}\n\ntype Match struct {\n\tA    int\n\tB    int\n\tSize int\n}\n\ntype OpCode struct {\n\tTag byte\n\tI1  int\n\tI2  int\n\tJ1  int\n\tJ2  int\n}\n\n// SequenceMatcher compares sequence of strings. The basic\n// algorithm predates, and is a little fancier than, an algorithm\n// published in the late 1980's by Ratcliff and Obershelp under the\n// hyperbolic name \"gestalt pattern matching\".  The basic idea is to find\n// the longest contiguous matching subsequence that contains no \"junk\"\n// elements (R-O doesn't address junk).  The same idea is then applied\n// recursively to the pieces of the sequences to the left and to the right\n// of the matching subsequence.  This does not yield minimal edit\n// sequences, but does tend to yield matches that \"look right\" to people.\n//\n// SequenceMatcher tries to compute a \"human-friendly diff\" between two\n// sequences.  Unlike e.g. UNIX(tm) diff, the fundamental notion is the\n// longest *contiguous* & junk-free matching subsequence.  That's what\n// catches peoples' eyes.  The Windows(tm) windiff has another interesting\n// notion, pairing up elements that appear uniquely in each sequence.\n// That, and the method here, appear to yield more intuitive difference\n// reports than does diff.  This method appears to be the least vulnerable\n// to synching up on blocks of \"junk lines\", though (like blank lines in\n// ordinary text files, or maybe \"<P>\" lines in HTML files).  That may be\n// because this is the only method of the 3 that has a *concept* of\n// \"junk\" <wink>.\n//\n// Timing:  Basic R-O is cubic time worst case and quadratic time expected\n// case.  SequenceMatcher is quadratic time for the worst case and has\n// expected-case behavior dependent in a complicated way on how many\n// elements the sequences have in common; best case time is linear.\ntype SequenceMatcher struct {\n\ta              []string\n\tb              []string\n\tb2j            map[string][]int\n\tIsJunk         func(string) bool\n\tautoJunk       bool\n\tbJunk          map[string]struct{}\n\tmatchingBlocks []Match\n\tfullBCount     map[string]int\n\tbPopular       map[string]struct{}\n\topCodes        []OpCode\n}\n\nfunc NewMatcher(a, b []string) *SequenceMatcher {\n\tm := SequenceMatcher{autoJunk: true}\n\tm.SetSeqs(a, b)\n\treturn &m\n}\n\nfunc NewMatcherWithJunk(a, b []string, autoJunk bool,\n\tisJunk func(string) bool) *SequenceMatcher {\n\n\tm := SequenceMatcher{IsJunk: isJunk, autoJunk: autoJunk}\n\tm.SetSeqs(a, b)\n\treturn &m\n}\n\n// Set two sequences to be compared.\nfunc (m *SequenceMatcher) SetSeqs(a, b []string) {\n\tm.SetSeq1(a)\n\tm.SetSeq2(b)\n}\n\n// Set the first sequence to be compared. The second sequence to be compared is\n// not changed.\n//\n// SequenceMatcher computes and caches detailed information about the second\n// sequence, so if you want to compare one sequence S against many sequences,\n// use .SetSeq2(s) once and call .SetSeq1(x) repeatedly for each of the other\n// sequences.\n//\n// See also SetSeqs() and SetSeq2().\nfunc (m *SequenceMatcher) SetSeq1(a []string) {\n\tif &a == &m.a {\n\t\treturn\n\t}\n\tm.a = a\n\tm.matchingBlocks = nil\n\tm.opCodes = nil\n}\n\n// Set the second sequence to be compared. The first sequence to be compared is\n// not changed.\nfunc (m *SequenceMatcher) SetSeq2(b []string) {\n\tif &b == &m.b {\n\t\treturn\n\t}\n\tm.b = b\n\tm.matchingBlocks = nil\n\tm.opCodes = nil\n\tm.fullBCount = nil\n\tm.chainB()\n}\n\nfunc (m *SequenceMatcher) chainB() {\n\t// Populate line -> index mapping\n\tb2j := map[string][]int{}\n\tfor i, s := range m.b {\n\t\tindices := b2j[s]\n\t\tindices = append(indices, i)\n\t\tb2j[s] = indices\n\t}\n\n\t// Purge junk elements\n\tm.bJunk = map[string]struct{}{}\n\tif m.IsJunk != nil {\n\t\tjunk := m.bJunk\n\t\tfor s, _ := range b2j {\n\t\t\tif m.IsJunk(s) {\n\t\t\t\tjunk[s] = struct{}{}\n\t\t\t}\n\t\t}\n\t\tfor s, _ := range junk {\n\t\t\tdelete(b2j, s)\n\t\t}\n\t}\n\n\t// Purge remaining popular elements\n\tpopular := map[string]struct{}{}\n\tn := len(m.b)\n\tif m.autoJunk && n >= 200 {\n\t\tntest := n/100 + 1\n\t\tfor s, indices := range b2j {\n\t\t\tif len(indices) > ntest {\n\t\t\t\tpopular[s] = struct{}{}\n\t\t\t}\n\t\t}\n\t\tfor s, _ := range popular {\n\t\t\tdelete(b2j, s)\n\t\t}\n\t}\n\tm.bPopular = popular\n\tm.b2j = b2j\n}\n\nfunc (m *SequenceMatcher) isBJunk(s string) bool {\n\t_, ok := m.bJunk[s]\n\treturn ok\n}\n\n// Find longest matching block in a[alo:ahi] and b[blo:bhi].\n//\n// If IsJunk is not defined:\n//\n// Return (i,j,k) such that a[i:i+k] is equal to b[j:j+k], where\n//     alo <= i <= i+k <= ahi\n//     blo <= j <= j+k <= bhi\n// and for all (i',j',k') meeting those conditions,\n//     k >= k'\n//     i <= i'\n//     and if i == i', j <= j'\n//\n// In other words, of all maximal matching blocks, return one that\n// starts earliest in a, and of all those maximal matching blocks that\n// start earliest in a, return the one that starts earliest in b.\n//\n// If IsJunk is defined, first the longest matching block is\n// determined as above, but with the additional restriction that no\n// junk element appears in the block.  Then that block is extended as\n// far as possible by matching (only) junk elements on both sides.  So\n// the resulting block never matches on junk except as identical junk\n// happens to be adjacent to an \"interesting\" match.\n//\n// If no blocks match, return (alo, blo, 0).\nfunc (m *SequenceMatcher) findLongestMatch(alo, ahi, blo, bhi int) Match {\n\t// CAUTION:  stripping common prefix or suffix would be incorrect.\n\t// E.g.,\n\t//    ab\n\t//    acab\n\t// Longest matching block is \"ab\", but if common prefix is\n\t// stripped, it's \"a\" (tied with \"b\").  UNIX(tm) diff does so\n\t// strip, so ends up claiming that ab is changed to acab by\n\t// inserting \"ca\" in the middle.  That's minimal but unintuitive:\n\t// \"it's obvious\" that someone inserted \"ac\" at the front.\n\t// Windiff ends up at the same place as diff, but by pairing up\n\t// the unique 'b's and then matching the first two 'a's.\n\tbesti, bestj, bestsize := alo, blo, 0\n\n\t// find longest junk-free match\n\t// during an iteration of the loop, j2len[j] = length of longest\n\t// junk-free match ending with a[i-1] and b[j]\n\tj2len := map[int]int{}\n\tfor i := alo; i != ahi; i++ {\n\t\t// look at all instances of a[i] in b; note that because\n\t\t// b2j has no junk keys, the loop is skipped if a[i] is junk\n\t\tnewj2len := map[int]int{}\n\t\tfor _, j := range m.b2j[m.a[i]] {\n\t\t\t// a[i] matches b[j]\n\t\t\tif j < blo {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif j >= bhi {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tk := j2len[j-1] + 1\n\t\t\tnewj2len[j] = k\n\t\t\tif k > bestsize {\n\t\t\t\tbesti, bestj, bestsize = i-k+1, j-k+1, k\n\t\t\t}\n\t\t}\n\t\tj2len = newj2len\n\t}\n\n\t// Extend the best by non-junk elements on each end.  In particular,\n\t// \"popular\" non-junk elements aren't in b2j, which greatly speeds\n\t// the inner loop above, but also means \"the best\" match so far\n\t// doesn't contain any junk *or* popular non-junk elements.\n\tfor besti > alo && bestj > blo && !m.isBJunk(m.b[bestj-1]) &&\n\t\tm.a[besti-1] == m.b[bestj-1] {\n\t\tbesti, bestj, bestsize = besti-1, bestj-1, bestsize+1\n\t}\n\tfor besti+bestsize < ahi && bestj+bestsize < bhi &&\n\t\t!m.isBJunk(m.b[bestj+bestsize]) &&\n\t\tm.a[besti+bestsize] == m.b[bestj+bestsize] {\n\t\tbestsize += 1\n\t}\n\n\t// Now that we have a wholly interesting match (albeit possibly\n\t// empty!), we may as well suck up the matching junk on each\n\t// side of it too.  Can't think of a good reason not to, and it\n\t// saves post-processing the (possibly considerable) expense of\n\t// figuring out what to do with it.  In the case of an empty\n\t// interesting match, this is clearly the right thing to do,\n\t// because no other kind of match is possible in the regions.\n\tfor besti > alo && bestj > blo && m.isBJunk(m.b[bestj-1]) &&\n\t\tm.a[besti-1] == m.b[bestj-1] {\n\t\tbesti, bestj, bestsize = besti-1, bestj-1, bestsize+1\n\t}\n\tfor besti+bestsize < ahi && bestj+bestsize < bhi &&\n\t\tm.isBJunk(m.b[bestj+bestsize]) &&\n\t\tm.a[besti+bestsize] == m.b[bestj+bestsize] {\n\t\tbestsize += 1\n\t}\n\n\treturn Match{A: besti, B: bestj, Size: bestsize}\n}\n\n// Return list of triples describing matching subsequences.\n//\n// Each triple is of the form (i, j, n), and means that\n// a[i:i+n] == b[j:j+n].  The triples are monotonically increasing in\n// i and in j. It's also guaranteed that if (i, j, n) and (i', j', n') are\n// adjacent triples in the list, and the second is not the last triple in the\n// list, then i+n != i' or j+n != j'. IOW, adjacent triples never describe\n// adjacent equal blocks.\n//\n// The last triple is a dummy, (len(a), len(b), 0), and is the only\n// triple with n==0.\nfunc (m *SequenceMatcher) GetMatchingBlocks() []Match {\n\tif m.matchingBlocks != nil {\n\t\treturn m.matchingBlocks\n\t}\n\n\tvar matchBlocks func(alo, ahi, blo, bhi int, matched []Match) []Match\n\tmatchBlocks = func(alo, ahi, blo, bhi int, matched []Match) []Match {\n\t\tmatch := m.findLongestMatch(alo, ahi, blo, bhi)\n\t\ti, j, k := match.A, match.B, match.Size\n\t\tif match.Size > 0 {\n\t\t\tif alo < i && blo < j {\n\t\t\t\tmatched = matchBlocks(alo, i, blo, j, matched)\n\t\t\t}\n\t\t\tmatched = append(matched, match)\n\t\t\tif i+k < ahi && j+k < bhi {\n\t\t\t\tmatched = matchBlocks(i+k, ahi, j+k, bhi, matched)\n\t\t\t}\n\t\t}\n\t\treturn matched\n\t}\n\tmatched := matchBlocks(0, len(m.a), 0, len(m.b), nil)\n\n\t// It's possible that we have adjacent equal blocks in the\n\t// matching_blocks list now.\n\tnonAdjacent := []Match{}\n\ti1, j1, k1 := 0, 0, 0\n\tfor _, b := range matched {\n\t\t// Is this block adjacent to i1, j1, k1?\n\t\ti2, j2, k2 := b.A, b.B, b.Size\n\t\tif i1+k1 == i2 && j1+k1 == j2 {\n\t\t\t// Yes, so collapse them -- this just increases the length of\n\t\t\t// the first block by the length of the second, and the first\n\t\t\t// block so lengthened remains the block to compare against.\n\t\t\tk1 += k2\n\t\t} else {\n\t\t\t// Not adjacent.  Remember the first block (k1==0 means it's\n\t\t\t// the dummy we started with), and make the second block the\n\t\t\t// new block to compare against.\n\t\t\tif k1 > 0 {\n\t\t\t\tnonAdjacent = append(nonAdjacent, Match{i1, j1, k1})\n\t\t\t}\n\t\t\ti1, j1, k1 = i2, j2, k2\n\t\t}\n\t}\n\tif k1 > 0 {\n\t\tnonAdjacent = append(nonAdjacent, Match{i1, j1, k1})\n\t}\n\n\tnonAdjacent = append(nonAdjacent, Match{len(m.a), len(m.b), 0})\n\tm.matchingBlocks = nonAdjacent\n\treturn m.matchingBlocks\n}\n\n// Return list of 5-tuples describing how to turn a into b.\n//\n// Each tuple is of the form (tag, i1, i2, j1, j2).  The first tuple\n// has i1 == j1 == 0, and remaining tuples have i1 == the i2 from the\n// tuple preceding it, and likewise for j1 == the previous j2.\n//\n// The tags are characters, with these meanings:\n//\n// 'r' (replace):  a[i1:i2] should be replaced by b[j1:j2]\n//\n// 'd' (delete):   a[i1:i2] should be deleted, j1==j2 in this case.\n//\n// 'i' (insert):   b[j1:j2] should be inserted at a[i1:i1], i1==i2 in this case.\n//\n// 'e' (equal):    a[i1:i2] == b[j1:j2]\nfunc (m *SequenceMatcher) GetOpCodes() []OpCode {\n\tif m.opCodes != nil {\n\t\treturn m.opCodes\n\t}\n\ti, j := 0, 0\n\tmatching := m.GetMatchingBlocks()\n\topCodes := make([]OpCode, 0, len(matching))\n\tfor _, m := range matching {\n\t\t//  invariant:  we've pumped out correct diffs to change\n\t\t//  a[:i] into b[:j], and the next matching block is\n\t\t//  a[ai:ai+size] == b[bj:bj+size]. So we need to pump\n\t\t//  out a diff to change a[i:ai] into b[j:bj], pump out\n\t\t//  the matching block, and move (i,j) beyond the match\n\t\tai, bj, size := m.A, m.B, m.Size\n\t\ttag := byte(0)\n\t\tif i < ai && j < bj {\n\t\t\ttag = 'r'\n\t\t} else if i < ai {\n\t\t\ttag = 'd'\n\t\t} else if j < bj {\n\t\t\ttag = 'i'\n\t\t}\n\t\tif tag > 0 {\n\t\t\topCodes = append(opCodes, OpCode{tag, i, ai, j, bj})\n\t\t}\n\t\ti, j = ai+size, bj+size\n\t\t// the list of matching blocks is terminated by a\n\t\t// sentinel with size 0\n\t\tif size > 0 {\n\t\t\topCodes = append(opCodes, OpCode{'e', ai, i, bj, j})\n\t\t}\n\t}\n\tm.opCodes = opCodes\n\treturn m.opCodes\n}\n\n// Isolate change clusters by eliminating ranges with no changes.\n//\n// Return a generator of groups with up to n lines of context.\n// Each group is in the same format as returned by GetOpCodes().\nfunc (m *SequenceMatcher) GetGroupedOpCodes(n int) [][]OpCode {\n\tif n < 0 {\n\t\tn = 3\n\t}\n\tcodes := m.GetOpCodes()\n\tif len(codes) == 0 {\n\t\tcodes = []OpCode{OpCode{'e', 0, 1, 0, 1}}\n\t}\n\t// Fixup leading and trailing groups if they show no changes.\n\tif codes[0].Tag == 'e' {\n\t\tc := codes[0]\n\t\ti1, i2, j1, j2 := c.I1, c.I2, c.J1, c.J2\n\t\tcodes[0] = OpCode{c.Tag, max(i1, i2-n), i2, max(j1, j2-n), j2}\n\t}\n\tif codes[len(codes)-1].Tag == 'e' {\n\t\tc := codes[len(codes)-1]\n\t\ti1, i2, j1, j2 := c.I1, c.I2, c.J1, c.J2\n\t\tcodes[len(codes)-1] = OpCode{c.Tag, i1, min(i2, i1+n), j1, min(j2, j1+n)}\n\t}\n\tnn := n + n\n\tgroups := [][]OpCode{}\n\tgroup := []OpCode{}\n\tfor _, c := range codes {\n\t\ti1, i2, j1, j2 := c.I1, c.I2, c.J1, c.J2\n\t\t// End the current group and start a new one whenever\n\t\t// there is a large range with no changes.\n\t\tif c.Tag == 'e' && i2-i1 > nn {\n\t\t\tgroup = append(group, OpCode{c.Tag, i1, min(i2, i1+n),\n\t\t\t\tj1, min(j2, j1+n)})\n\t\t\tgroups = append(groups, group)\n\t\t\tgroup = []OpCode{}\n\t\t\ti1, j1 = max(i1, i2-n), max(j1, j2-n)\n\t\t}\n\t\tgroup = append(group, OpCode{c.Tag, i1, i2, j1, j2})\n\t}\n\tif len(group) > 0 && !(len(group) == 1 && group[0].Tag == 'e') {\n\t\tgroups = append(groups, group)\n\t}\n\treturn groups\n}\n\n// Return a measure of the sequences' similarity (float in [0,1]).\n//\n// Where T is the total number of elements in both sequences, and\n// M is the number of matches, this is 2.0*M / T.\n// Note that this is 1 if the sequences are identical, and 0 if\n// they have nothing in common.\n//\n// .Ratio() is expensive to compute if you haven't already computed\n// .GetMatchingBlocks() or .GetOpCodes(), in which case you may\n// want to try .QuickRatio() or .RealQuickRation() first to get an\n// upper bound.\nfunc (m *SequenceMatcher) Ratio() float64 {\n\tmatches := 0\n\tfor _, m := range m.GetMatchingBlocks() {\n\t\tmatches += m.Size\n\t}\n\treturn calculateRatio(matches, len(m.a)+len(m.b))\n}\n\n// Return an upper bound on ratio() relatively quickly.\n//\n// This isn't defined beyond that it is an upper bound on .Ratio(), and\n// is faster to compute.\nfunc (m *SequenceMatcher) QuickRatio() float64 {\n\t// viewing a and b as multisets, set matches to the cardinality\n\t// of their intersection; this counts the number of matches\n\t// without regard to order, so is clearly an upper bound\n\tif m.fullBCount == nil {\n\t\tm.fullBCount = map[string]int{}\n\t\tfor _, s := range m.b {\n\t\t\tm.fullBCount[s] = m.fullBCount[s] + 1\n\t\t}\n\t}\n\n\t// avail[x] is the number of times x appears in 'b' less the\n\t// number of times we've seen it in 'a' so far ... kinda\n\tavail := map[string]int{}\n\tmatches := 0\n\tfor _, s := range m.a {\n\t\tn, ok := avail[s]\n\t\tif !ok {\n\t\t\tn = m.fullBCount[s]\n\t\t}\n\t\tavail[s] = n - 1\n\t\tif n > 0 {\n\t\t\tmatches += 1\n\t\t}\n\t}\n\treturn calculateRatio(matches, len(m.a)+len(m.b))\n}\n\n// Return an upper bound on ratio() very quickly.\n//\n// This isn't defined beyond that it is an upper bound on .Ratio(), and\n// is faster to compute than either .Ratio() or .QuickRatio().\nfunc (m *SequenceMatcher) RealQuickRatio() float64 {\n\tla, lb := len(m.a), len(m.b)\n\treturn calculateRatio(min(la, lb), la+lb)\n}\n\n// Convert range to the \"ed\" format\nfunc formatRangeUnified(start, stop int) string {\n\t// Per the diff spec at http://www.unix.org/single_unix_specification/\n\tbeginning := start + 1 // lines start numbering with one\n\tlength := stop - start\n\tif length == 1 {\n\t\treturn fmt.Sprintf(\"%d\", beginning)\n\t}\n\tif length == 0 {\n\t\tbeginning -= 1 // empty ranges begin at line just before the range\n\t}\n\treturn fmt.Sprintf(\"%d,%d\", beginning, length)\n}\n\n// Unified diff parameters\ntype UnifiedDiff struct {\n\tA        []string // First sequence lines\n\tFromFile string   // First file name\n\tFromDate string   // First file time\n\tB        []string // Second sequence lines\n\tToFile   string   // Second file name\n\tToDate   string   // Second file time\n\tEol      string   // Headers end of line, defaults to LF\n\tContext  int      // Number of context lines\n}\n\n// Compare two sequences of lines; generate the delta as a unified diff.\n//\n// Unified diffs are a compact way of showing line changes and a few\n// lines of context.  The number of context lines is set by 'n' which\n// defaults to three.\n//\n// By default, the diff control lines (those with ---, +++, or @@) are\n// created with a trailing newline.  This is helpful so that inputs\n// created from file.readlines() result in diffs that are suitable for\n// file.writelines() since both the inputs and outputs have trailing\n// newlines.\n//\n// For inputs that do not have trailing newlines, set the lineterm\n// argument to \"\" so that the output will be uniformly newline free.\n//\n// The unidiff format normally has a header for filenames and modification\n// times.  Any or all of these may be specified using strings for\n// 'fromfile', 'tofile', 'fromfiledate', and 'tofiledate'.\n// The modification times are normally expressed in the ISO 8601 format.\nfunc WriteUnifiedDiff(writer io.Writer, diff UnifiedDiff) error {\n\tbuf := bufio.NewWriter(writer)\n\tdefer buf.Flush()\n\twf := func(format string, args ...interface{}) error {\n\t\t_, err := buf.WriteString(fmt.Sprintf(format, args...))\n\t\treturn err\n\t}\n\tws := func(s string) error {\n\t\t_, err := buf.WriteString(s)\n\t\treturn err\n\t}\n\n\tif len(diff.Eol) == 0 {\n\t\tdiff.Eol = \"\\n\"\n\t}\n\n\tstarted := false\n\tm := NewMatcher(diff.A, diff.B)\n\tfor _, g := range m.GetGroupedOpCodes(diff.Context) {\n\t\tif !started {\n\t\t\tstarted = true\n\t\t\tfromDate := \"\"\n\t\t\tif len(diff.FromDate) > 0 {\n\t\t\t\tfromDate = \"\\t\" + diff.FromDate\n\t\t\t}\n\t\t\ttoDate := \"\"\n\t\t\tif len(diff.ToDate) > 0 {\n\t\t\t\ttoDate = \"\\t\" + diff.ToDate\n\t\t\t}\n\t\t\tif diff.FromFile != \"\" || diff.ToFile != \"\" {\n\t\t\t\terr := wf(\"--- %s%s%s\", diff.FromFile, fromDate, diff.Eol)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\terr = wf(\"+++ %s%s%s\", diff.ToFile, toDate, diff.Eol)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfirst, last := g[0], g[len(g)-1]\n\t\trange1 := formatRangeUnified(first.I1, last.I2)\n\t\trange2 := formatRangeUnified(first.J1, last.J2)\n\t\tif err := wf(\"@@ -%s +%s @@%s\", range1, range2, diff.Eol); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfor _, c := range g {\n\t\t\ti1, i2, j1, j2 := c.I1, c.I2, c.J1, c.J2\n\t\t\tif c.Tag == 'e' {\n\t\t\t\tfor _, line := range diff.A[i1:i2] {\n\t\t\t\t\tif err := ws(\" \" + line); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif c.Tag == 'r' || c.Tag == 'd' {\n\t\t\t\tfor _, line := range diff.A[i1:i2] {\n\t\t\t\t\tif err := ws(\"-\" + line); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif c.Tag == 'r' || c.Tag == 'i' {\n\t\t\t\tfor _, line := range diff.B[j1:j2] {\n\t\t\t\t\tif err := ws(\"+\" + line); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\n// Like WriteUnifiedDiff but returns the diff a string.\nfunc GetUnifiedDiffString(diff UnifiedDiff) (string, error) {\n\tw := &bytes.Buffer{}\n\terr := WriteUnifiedDiff(w, diff)\n\treturn string(w.Bytes()), err\n}\n\n// Convert range to the \"ed\" format.\nfunc formatRangeContext(start, stop int) string {\n\t// Per the diff spec at http://www.unix.org/single_unix_specification/\n\tbeginning := start + 1 // lines start numbering with one\n\tlength := stop - start\n\tif length == 0 {\n\t\tbeginning -= 1 // empty ranges begin at line just before the range\n\t}\n\tif length <= 1 {\n\t\treturn fmt.Sprintf(\"%d\", beginning)\n\t}\n\treturn fmt.Sprintf(\"%d,%d\", beginning, beginning+length-1)\n}\n\ntype ContextDiff UnifiedDiff\n\n// Compare two sequences of lines; generate the delta as a context diff.\n//\n// Context diffs are a compact way of showing line changes and a few\n// lines of context. The number of context lines is set by diff.Context\n// which defaults to three.\n//\n// By default, the diff control lines (those with *** or ---) are\n// created with a trailing newline.\n//\n// For inputs that do not have trailing newlines, set the diff.Eol\n// argument to \"\" so that the output will be uniformly newline free.\n//\n// The context diff format normally has a header for filenames and\n// modification times.  Any or all of these may be specified using\n// strings for diff.FromFile, diff.ToFile, diff.FromDate, diff.ToDate.\n// The modification times are normally expressed in the ISO 8601 format.\n// If not specified, the strings default to blanks.\nfunc WriteContextDiff(writer io.Writer, diff ContextDiff) error {\n\tbuf := bufio.NewWriter(writer)\n\tdefer buf.Flush()\n\tvar diffErr error\n\twf := func(format string, args ...interface{}) {\n\t\t_, err := buf.WriteString(fmt.Sprintf(format, args...))\n\t\tif diffErr == nil && err != nil {\n\t\t\tdiffErr = err\n\t\t}\n\t}\n\tws := func(s string) {\n\t\t_, err := buf.WriteString(s)\n\t\tif diffErr == nil && err != nil {\n\t\t\tdiffErr = err\n\t\t}\n\t}\n\n\tif len(diff.Eol) == 0 {\n\t\tdiff.Eol = \"\\n\"\n\t}\n\n\tprefix := map[byte]string{\n\t\t'i': \"+ \",\n\t\t'd': \"- \",\n\t\t'r': \"! \",\n\t\t'e': \"  \",\n\t}\n\n\tstarted := false\n\tm := NewMatcher(diff.A, diff.B)\n\tfor _, g := range m.GetGroupedOpCodes(diff.Context) {\n\t\tif !started {\n\t\t\tstarted = true\n\t\t\tfromDate := \"\"\n\t\t\tif len(diff.FromDate) > 0 {\n\t\t\t\tfromDate = \"\\t\" + diff.FromDate\n\t\t\t}\n\t\t\ttoDate := \"\"\n\t\t\tif len(diff.ToDate) > 0 {\n\t\t\t\ttoDate = \"\\t\" + diff.ToDate\n\t\t\t}\n\t\t\tif diff.FromFile != \"\" || diff.ToFile != \"\" {\n\t\t\t\twf(\"*** %s%s%s\", diff.FromFile, fromDate, diff.Eol)\n\t\t\t\twf(\"--- %s%s%s\", diff.ToFile, toDate, diff.Eol)\n\t\t\t}\n\t\t}\n\n\t\tfirst, last := g[0], g[len(g)-1]\n\t\tws(\"***************\" + diff.Eol)\n\n\t\trange1 := formatRangeContext(first.I1, last.I2)\n\t\twf(\"*** %s ****%s\", range1, diff.Eol)\n\t\tfor _, c := range g {\n\t\t\tif c.Tag == 'r' || c.Tag == 'd' {\n\t\t\t\tfor _, cc := range g {\n\t\t\t\t\tif cc.Tag == 'i' {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tfor _, line := range diff.A[cc.I1:cc.I2] {\n\t\t\t\t\t\tws(prefix[cc.Tag] + line)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\trange2 := formatRangeContext(first.J1, last.J2)\n\t\twf(\"--- %s ----%s\", range2, diff.Eol)\n\t\tfor _, c := range g {\n\t\t\tif c.Tag == 'r' || c.Tag == 'i' {\n\t\t\t\tfor _, cc := range g {\n\t\t\t\t\tif cc.Tag == 'd' {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tfor _, line := range diff.B[cc.J1:cc.J2] {\n\t\t\t\t\t\tws(prefix[cc.Tag] + line)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\treturn diffErr\n}\n\n// Like WriteContextDiff but returns the diff a string.\nfunc GetContextDiffString(diff ContextDiff) (string, error) {\n\tw := &bytes.Buffer{}\n\terr := WriteContextDiff(w, diff)\n\treturn string(w.Bytes()), err\n}\n\n// Split a string on \"\\n\" while preserving them. The output can be used\n// as input for UnifiedDiff and ContextDiff structures.\nfunc SplitLines(s string) []string {\n\tlines := strings.SplitAfter(s, \"\\n\")\n\tlines[len(lines)-1] += \"\\n\"\n\treturn lines\n}\n"
  },
  {
    "path": "vendor/github.com/stretchr/testify/LICENSE",
    "content": "Copyright (c) 2012 - 2013 Mat Ryer and Tyler Bunnell\n\nPlease consider promoting this project if you find it useful.\n\nPermission is hereby granted, free of charge, to any person \nobtaining a copy of this software and associated documentation \nfiles (the \"Software\"), to deal in the Software without restriction, \nincluding without limitation the rights to use, copy, modify, merge, \npublish, distribute, sublicense, and/or sell copies of the Software, \nand to permit persons to whom the Software is furnished to do so, \nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, \nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES \nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. \nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, \nDAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT \nOR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE \nOR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/stretchr/testify/assert/assertion_format.go",
    "content": "/*\n* CODE GENERATED AUTOMATICALLY WITH github.com/stretchr/testify/_codegen\n* THIS FILE MUST NOT BE EDITED BY HAND\n */\n\npackage assert\n\nimport (\n\thttp \"net/http\"\n\turl \"net/url\"\n\ttime \"time\"\n)\n\n// Conditionf uses a Comparison to assert a complex condition.\nfunc Conditionf(t TestingT, comp Comparison, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Condition(t, comp, append([]interface{}{msg}, args...)...)\n}\n\n// Containsf asserts that the specified string, list(array, slice...) or map contains the\n// specified substring or element.\n//\n//    assert.Containsf(t, \"Hello World\", \"World\", \"error message %s\", \"formatted\")\n//    assert.Containsf(t, [\"Hello\", \"World\"], \"World\", \"error message %s\", \"formatted\")\n//    assert.Containsf(t, {\"Hello\": \"World\"}, \"Hello\", \"error message %s\", \"formatted\")\nfunc Containsf(t TestingT, s interface{}, contains interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Contains(t, s, contains, append([]interface{}{msg}, args...)...)\n}\n\n// DirExistsf checks whether a directory exists in the given path. It also fails if the path is a file rather a directory or there is an error checking whether it exists.\nfunc DirExistsf(t TestingT, path string, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn DirExists(t, path, append([]interface{}{msg}, args...)...)\n}\n\n// ElementsMatchf asserts that the specified listA(array, slice...) is equal to specified\n// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,\n// the number of appearances of each of them in both lists should match.\n//\n// assert.ElementsMatchf(t, [1, 3, 2, 3], [1, 3, 3, 2], \"error message %s\", \"formatted\")\nfunc ElementsMatchf(t TestingT, listA interface{}, listB interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn ElementsMatch(t, listA, listB, append([]interface{}{msg}, args...)...)\n}\n\n// Emptyf asserts that the specified object is empty.  I.e. nil, \"\", false, 0 or either\n// a slice or a channel with len == 0.\n//\n//  assert.Emptyf(t, obj, \"error message %s\", \"formatted\")\nfunc Emptyf(t TestingT, object interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Empty(t, object, append([]interface{}{msg}, args...)...)\n}\n\n// Equalf asserts that two objects are equal.\n//\n//    assert.Equalf(t, 123, 123, \"error message %s\", \"formatted\")\n//\n// Pointer variable equality is determined based on the equality of the\n// referenced values (as opposed to the memory addresses). Function equality\n// cannot be determined and will always fail.\nfunc Equalf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Equal(t, expected, actual, append([]interface{}{msg}, args...)...)\n}\n\n// EqualErrorf asserts that a function returned an error (i.e. not `nil`)\n// and that it is equal to the provided error.\n//\n//   actualObj, err := SomeFunction()\n//   assert.EqualErrorf(t, err,  expectedErrorString, \"error message %s\", \"formatted\")\nfunc EqualErrorf(t TestingT, theError error, errString string, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn EqualError(t, theError, errString, append([]interface{}{msg}, args...)...)\n}\n\n// EqualValuesf asserts that two objects are equal or convertable to the same types\n// and equal.\n//\n//    assert.EqualValuesf(t, uint32(123, \"error message %s\", \"formatted\"), int32(123))\nfunc EqualValuesf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn EqualValues(t, expected, actual, append([]interface{}{msg}, args...)...)\n}\n\n// Errorf asserts that a function returned an error (i.e. not `nil`).\n//\n//   actualObj, err := SomeFunction()\n//   if assert.Errorf(t, err, \"error message %s\", \"formatted\") {\n// \t   assert.Equal(t, expectedErrorf, err)\n//   }\nfunc Errorf(t TestingT, err error, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Error(t, err, append([]interface{}{msg}, args...)...)\n}\n\n// Exactlyf asserts that two objects are equal in value and type.\n//\n//    assert.Exactlyf(t, int32(123, \"error message %s\", \"formatted\"), int64(123))\nfunc Exactlyf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Exactly(t, expected, actual, append([]interface{}{msg}, args...)...)\n}\n\n// Failf reports a failure through\nfunc Failf(t TestingT, failureMessage string, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Fail(t, failureMessage, append([]interface{}{msg}, args...)...)\n}\n\n// FailNowf fails test\nfunc FailNowf(t TestingT, failureMessage string, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn FailNow(t, failureMessage, append([]interface{}{msg}, args...)...)\n}\n\n// Falsef asserts that the specified value is false.\n//\n//    assert.Falsef(t, myBool, \"error message %s\", \"formatted\")\nfunc Falsef(t TestingT, value bool, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn False(t, value, append([]interface{}{msg}, args...)...)\n}\n\n// FileExistsf checks whether a file exists in the given path. It also fails if the path points to a directory or there is an error when trying to check the file.\nfunc FileExistsf(t TestingT, path string, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn FileExists(t, path, append([]interface{}{msg}, args...)...)\n}\n\n// HTTPBodyContainsf asserts that a specified handler returns a\n// body that contains a string.\n//\n//  assert.HTTPBodyContainsf(t, myHandler, \"GET\", \"www.google.com\", nil, \"I'm Feeling Lucky\", \"error message %s\", \"formatted\")\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc HTTPBodyContainsf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn HTTPBodyContains(t, handler, method, url, values, str, append([]interface{}{msg}, args...)...)\n}\n\n// HTTPBodyNotContainsf asserts that a specified handler returns a\n// body that does not contain a string.\n//\n//  assert.HTTPBodyNotContainsf(t, myHandler, \"GET\", \"www.google.com\", nil, \"I'm Feeling Lucky\", \"error message %s\", \"formatted\")\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc HTTPBodyNotContainsf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn HTTPBodyNotContains(t, handler, method, url, values, str, append([]interface{}{msg}, args...)...)\n}\n\n// HTTPErrorf asserts that a specified handler returns an error status code.\n//\n//  assert.HTTPErrorf(t, myHandler, \"POST\", \"/a/b/c\", url.Values{\"a\": []string{\"b\", \"c\"}}\n//\n// Returns whether the assertion was successful (true, \"error message %s\", \"formatted\") or not (false).\nfunc HTTPErrorf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn HTTPError(t, handler, method, url, values, append([]interface{}{msg}, args...)...)\n}\n\n// HTTPRedirectf asserts that a specified handler returns a redirect status code.\n//\n//  assert.HTTPRedirectf(t, myHandler, \"GET\", \"/a/b/c\", url.Values{\"a\": []string{\"b\", \"c\"}}\n//\n// Returns whether the assertion was successful (true, \"error message %s\", \"formatted\") or not (false).\nfunc HTTPRedirectf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn HTTPRedirect(t, handler, method, url, values, append([]interface{}{msg}, args...)...)\n}\n\n// HTTPSuccessf asserts that a specified handler returns a success status code.\n//\n//  assert.HTTPSuccessf(t, myHandler, \"POST\", \"http://www.google.com\", nil, \"error message %s\", \"formatted\")\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc HTTPSuccessf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn HTTPSuccess(t, handler, method, url, values, append([]interface{}{msg}, args...)...)\n}\n\n// Implementsf asserts that an object is implemented by the specified interface.\n//\n//    assert.Implementsf(t, (*MyInterface, \"error message %s\", \"formatted\")(nil), new(MyObject))\nfunc Implementsf(t TestingT, interfaceObject interface{}, object interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Implements(t, interfaceObject, object, append([]interface{}{msg}, args...)...)\n}\n\n// InDeltaf asserts that the two numerals are within delta of each other.\n//\n// \t assert.InDeltaf(t, math.Pi, (22 / 7.0, \"error message %s\", \"formatted\"), 0.01)\nfunc InDeltaf(t TestingT, expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn InDelta(t, expected, actual, delta, append([]interface{}{msg}, args...)...)\n}\n\n// InDeltaMapValuesf is the same as InDelta, but it compares all values between two maps. Both maps must have exactly the same keys.\nfunc InDeltaMapValuesf(t TestingT, expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn InDeltaMapValues(t, expected, actual, delta, append([]interface{}{msg}, args...)...)\n}\n\n// InDeltaSlicef is the same as InDelta, except it compares two slices.\nfunc InDeltaSlicef(t TestingT, expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn InDeltaSlice(t, expected, actual, delta, append([]interface{}{msg}, args...)...)\n}\n\n// InEpsilonf asserts that expected and actual have a relative error less than epsilon\nfunc InEpsilonf(t TestingT, expected interface{}, actual interface{}, epsilon float64, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn InEpsilon(t, expected, actual, epsilon, append([]interface{}{msg}, args...)...)\n}\n\n// InEpsilonSlicef is the same as InEpsilon, except it compares each value from two slices.\nfunc InEpsilonSlicef(t TestingT, expected interface{}, actual interface{}, epsilon float64, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn InEpsilonSlice(t, expected, actual, epsilon, append([]interface{}{msg}, args...)...)\n}\n\n// IsTypef asserts that the specified objects are of the same type.\nfunc IsTypef(t TestingT, expectedType interface{}, object interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn IsType(t, expectedType, object, append([]interface{}{msg}, args...)...)\n}\n\n// JSONEqf asserts that two JSON strings are equivalent.\n//\n//  assert.JSONEqf(t, `{\"hello\": \"world\", \"foo\": \"bar\"}`, `{\"foo\": \"bar\", \"hello\": \"world\"}`, \"error message %s\", \"formatted\")\nfunc JSONEqf(t TestingT, expected string, actual string, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn JSONEq(t, expected, actual, append([]interface{}{msg}, args...)...)\n}\n\n// Lenf asserts that the specified object has specific length.\n// Lenf also fails if the object has a type that len() not accept.\n//\n//    assert.Lenf(t, mySlice, 3, \"error message %s\", \"formatted\")\nfunc Lenf(t TestingT, object interface{}, length int, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Len(t, object, length, append([]interface{}{msg}, args...)...)\n}\n\n// Nilf asserts that the specified object is nil.\n//\n//    assert.Nilf(t, err, \"error message %s\", \"formatted\")\nfunc Nilf(t TestingT, object interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Nil(t, object, append([]interface{}{msg}, args...)...)\n}\n\n// NoErrorf asserts that a function returned no error (i.e. `nil`).\n//\n//   actualObj, err := SomeFunction()\n//   if assert.NoErrorf(t, err, \"error message %s\", \"formatted\") {\n// \t   assert.Equal(t, expectedObj, actualObj)\n//   }\nfunc NoErrorf(t TestingT, err error, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NoError(t, err, append([]interface{}{msg}, args...)...)\n}\n\n// NotContainsf asserts that the specified string, list(array, slice...) or map does NOT contain the\n// specified substring or element.\n//\n//    assert.NotContainsf(t, \"Hello World\", \"Earth\", \"error message %s\", \"formatted\")\n//    assert.NotContainsf(t, [\"Hello\", \"World\"], \"Earth\", \"error message %s\", \"formatted\")\n//    assert.NotContainsf(t, {\"Hello\": \"World\"}, \"Earth\", \"error message %s\", \"formatted\")\nfunc NotContainsf(t TestingT, s interface{}, contains interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotContains(t, s, contains, append([]interface{}{msg}, args...)...)\n}\n\n// NotEmptyf asserts that the specified object is NOT empty.  I.e. not nil, \"\", false, 0 or either\n// a slice or a channel with len == 0.\n//\n//  if assert.NotEmptyf(t, obj, \"error message %s\", \"formatted\") {\n//    assert.Equal(t, \"two\", obj[1])\n//  }\nfunc NotEmptyf(t TestingT, object interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotEmpty(t, object, append([]interface{}{msg}, args...)...)\n}\n\n// NotEqualf asserts that the specified values are NOT equal.\n//\n//    assert.NotEqualf(t, obj1, obj2, \"error message %s\", \"formatted\")\n//\n// Pointer variable equality is determined based on the equality of the\n// referenced values (as opposed to the memory addresses).\nfunc NotEqualf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotEqual(t, expected, actual, append([]interface{}{msg}, args...)...)\n}\n\n// NotNilf asserts that the specified object is not nil.\n//\n//    assert.NotNilf(t, err, \"error message %s\", \"formatted\")\nfunc NotNilf(t TestingT, object interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotNil(t, object, append([]interface{}{msg}, args...)...)\n}\n\n// NotPanicsf asserts that the code inside the specified PanicTestFunc does NOT panic.\n//\n//   assert.NotPanicsf(t, func(){ RemainCalm() }, \"error message %s\", \"formatted\")\nfunc NotPanicsf(t TestingT, f PanicTestFunc, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotPanics(t, f, append([]interface{}{msg}, args...)...)\n}\n\n// NotRegexpf asserts that a specified regexp does not match a string.\n//\n//  assert.NotRegexpf(t, regexp.MustCompile(\"starts\", \"error message %s\", \"formatted\"), \"it's starting\")\n//  assert.NotRegexpf(t, \"^start\", \"it's not starting\", \"error message %s\", \"formatted\")\nfunc NotRegexpf(t TestingT, rx interface{}, str interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotRegexp(t, rx, str, append([]interface{}{msg}, args...)...)\n}\n\n// NotSubsetf asserts that the specified list(array, slice...) contains not all\n// elements given in the specified subset(array, slice...).\n//\n//    assert.NotSubsetf(t, [1, 3, 4], [1, 2], \"But [1, 3, 4] does not contain [1, 2]\", \"error message %s\", \"formatted\")\nfunc NotSubsetf(t TestingT, list interface{}, subset interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotSubset(t, list, subset, append([]interface{}{msg}, args...)...)\n}\n\n// NotZerof asserts that i is not the zero value for its type.\nfunc NotZerof(t TestingT, i interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotZero(t, i, append([]interface{}{msg}, args...)...)\n}\n\n// Panicsf asserts that the code inside the specified PanicTestFunc panics.\n//\n//   assert.Panicsf(t, func(){ GoCrazy() }, \"error message %s\", \"formatted\")\nfunc Panicsf(t TestingT, f PanicTestFunc, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Panics(t, f, append([]interface{}{msg}, args...)...)\n}\n\n// PanicsWithValuef asserts that the code inside the specified PanicTestFunc panics, and that\n// the recovered panic value equals the expected panic value.\n//\n//   assert.PanicsWithValuef(t, \"crazy error\", func(){ GoCrazy() }, \"error message %s\", \"formatted\")\nfunc PanicsWithValuef(t TestingT, expected interface{}, f PanicTestFunc, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn PanicsWithValue(t, expected, f, append([]interface{}{msg}, args...)...)\n}\n\n// Regexpf asserts that a specified regexp matches a string.\n//\n//  assert.Regexpf(t, regexp.MustCompile(\"start\", \"error message %s\", \"formatted\"), \"it's starting\")\n//  assert.Regexpf(t, \"start...$\", \"it's not starting\", \"error message %s\", \"formatted\")\nfunc Regexpf(t TestingT, rx interface{}, str interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Regexp(t, rx, str, append([]interface{}{msg}, args...)...)\n}\n\n// Subsetf asserts that the specified list(array, slice...) contains all\n// elements given in the specified subset(array, slice...).\n//\n//    assert.Subsetf(t, [1, 2, 3], [1, 2], \"But [1, 2, 3] does contain [1, 2]\", \"error message %s\", \"formatted\")\nfunc Subsetf(t TestingT, list interface{}, subset interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Subset(t, list, subset, append([]interface{}{msg}, args...)...)\n}\n\n// Truef asserts that the specified value is true.\n//\n//    assert.Truef(t, myBool, \"error message %s\", \"formatted\")\nfunc Truef(t TestingT, value bool, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn True(t, value, append([]interface{}{msg}, args...)...)\n}\n\n// WithinDurationf asserts that the two times are within duration delta of each other.\n//\n//   assert.WithinDurationf(t, time.Now(), time.Now(), 10*time.Second, \"error message %s\", \"formatted\")\nfunc WithinDurationf(t TestingT, expected time.Time, actual time.Time, delta time.Duration, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn WithinDuration(t, expected, actual, delta, append([]interface{}{msg}, args...)...)\n}\n\n// Zerof asserts that i is the zero value for its type.\nfunc Zerof(t TestingT, i interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Zero(t, i, append([]interface{}{msg}, args...)...)\n}\n"
  },
  {
    "path": "vendor/github.com/stretchr/testify/assert/assertion_format.go.tmpl",
    "content": "{{.CommentFormat}}\nfunc {{.DocInfo.Name}}f(t TestingT, {{.ParamsFormat}}) bool {\n\tif h, ok := t.(tHelper); ok { h.Helper() }\n\treturn {{.DocInfo.Name}}(t, {{.ForwardedParamsFormat}})\n}\n"
  },
  {
    "path": "vendor/github.com/stretchr/testify/assert/assertion_forward.go",
    "content": "/*\n* CODE GENERATED AUTOMATICALLY WITH github.com/stretchr/testify/_codegen\n* THIS FILE MUST NOT BE EDITED BY HAND\n */\n\npackage assert\n\nimport (\n\thttp \"net/http\"\n\turl \"net/url\"\n\ttime \"time\"\n)\n\n// Condition uses a Comparison to assert a complex condition.\nfunc (a *Assertions) Condition(comp Comparison, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Condition(a.t, comp, msgAndArgs...)\n}\n\n// Conditionf uses a Comparison to assert a complex condition.\nfunc (a *Assertions) Conditionf(comp Comparison, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Conditionf(a.t, comp, msg, args...)\n}\n\n// Contains asserts that the specified string, list(array, slice...) or map contains the\n// specified substring or element.\n//\n//    a.Contains(\"Hello World\", \"World\")\n//    a.Contains([\"Hello\", \"World\"], \"World\")\n//    a.Contains({\"Hello\": \"World\"}, \"Hello\")\nfunc (a *Assertions) Contains(s interface{}, contains interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Contains(a.t, s, contains, msgAndArgs...)\n}\n\n// Containsf asserts that the specified string, list(array, slice...) or map contains the\n// specified substring or element.\n//\n//    a.Containsf(\"Hello World\", \"World\", \"error message %s\", \"formatted\")\n//    a.Containsf([\"Hello\", \"World\"], \"World\", \"error message %s\", \"formatted\")\n//    a.Containsf({\"Hello\": \"World\"}, \"Hello\", \"error message %s\", \"formatted\")\nfunc (a *Assertions) Containsf(s interface{}, contains interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Containsf(a.t, s, contains, msg, args...)\n}\n\n// DirExists checks whether a directory exists in the given path. It also fails if the path is a file rather a directory or there is an error checking whether it exists.\nfunc (a *Assertions) DirExists(path string, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn DirExists(a.t, path, msgAndArgs...)\n}\n\n// DirExistsf checks whether a directory exists in the given path. It also fails if the path is a file rather a directory or there is an error checking whether it exists.\nfunc (a *Assertions) DirExistsf(path string, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn DirExistsf(a.t, path, msg, args...)\n}\n\n// ElementsMatch asserts that the specified listA(array, slice...) is equal to specified\n// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,\n// the number of appearances of each of them in both lists should match.\n//\n// a.ElementsMatch([1, 3, 2, 3], [1, 3, 3, 2])\nfunc (a *Assertions) ElementsMatch(listA interface{}, listB interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn ElementsMatch(a.t, listA, listB, msgAndArgs...)\n}\n\n// ElementsMatchf asserts that the specified listA(array, slice...) is equal to specified\n// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,\n// the number of appearances of each of them in both lists should match.\n//\n// a.ElementsMatchf([1, 3, 2, 3], [1, 3, 3, 2], \"error message %s\", \"formatted\")\nfunc (a *Assertions) ElementsMatchf(listA interface{}, listB interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn ElementsMatchf(a.t, listA, listB, msg, args...)\n}\n\n// Empty asserts that the specified object is empty.  I.e. nil, \"\", false, 0 or either\n// a slice or a channel with len == 0.\n//\n//  a.Empty(obj)\nfunc (a *Assertions) Empty(object interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Empty(a.t, object, msgAndArgs...)\n}\n\n// Emptyf asserts that the specified object is empty.  I.e. nil, \"\", false, 0 or either\n// a slice or a channel with len == 0.\n//\n//  a.Emptyf(obj, \"error message %s\", \"formatted\")\nfunc (a *Assertions) Emptyf(object interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Emptyf(a.t, object, msg, args...)\n}\n\n// Equal asserts that two objects are equal.\n//\n//    a.Equal(123, 123)\n//\n// Pointer variable equality is determined based on the equality of the\n// referenced values (as opposed to the memory addresses). Function equality\n// cannot be determined and will always fail.\nfunc (a *Assertions) Equal(expected interface{}, actual interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Equal(a.t, expected, actual, msgAndArgs...)\n}\n\n// EqualError asserts that a function returned an error (i.e. not `nil`)\n// and that it is equal to the provided error.\n//\n//   actualObj, err := SomeFunction()\n//   a.EqualError(err,  expectedErrorString)\nfunc (a *Assertions) EqualError(theError error, errString string, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn EqualError(a.t, theError, errString, msgAndArgs...)\n}\n\n// EqualErrorf asserts that a function returned an error (i.e. not `nil`)\n// and that it is equal to the provided error.\n//\n//   actualObj, err := SomeFunction()\n//   a.EqualErrorf(err,  expectedErrorString, \"error message %s\", \"formatted\")\nfunc (a *Assertions) EqualErrorf(theError error, errString string, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn EqualErrorf(a.t, theError, errString, msg, args...)\n}\n\n// EqualValues asserts that two objects are equal or convertable to the same types\n// and equal.\n//\n//    a.EqualValues(uint32(123), int32(123))\nfunc (a *Assertions) EqualValues(expected interface{}, actual interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn EqualValues(a.t, expected, actual, msgAndArgs...)\n}\n\n// EqualValuesf asserts that two objects are equal or convertable to the same types\n// and equal.\n//\n//    a.EqualValuesf(uint32(123, \"error message %s\", \"formatted\"), int32(123))\nfunc (a *Assertions) EqualValuesf(expected interface{}, actual interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn EqualValuesf(a.t, expected, actual, msg, args...)\n}\n\n// Equalf asserts that two objects are equal.\n//\n//    a.Equalf(123, 123, \"error message %s\", \"formatted\")\n//\n// Pointer variable equality is determined based on the equality of the\n// referenced values (as opposed to the memory addresses). Function equality\n// cannot be determined and will always fail.\nfunc (a *Assertions) Equalf(expected interface{}, actual interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Equalf(a.t, expected, actual, msg, args...)\n}\n\n// Error asserts that a function returned an error (i.e. not `nil`).\n//\n//   actualObj, err := SomeFunction()\n//   if a.Error(err) {\n// \t   assert.Equal(t, expectedError, err)\n//   }\nfunc (a *Assertions) Error(err error, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Error(a.t, err, msgAndArgs...)\n}\n\n// Errorf asserts that a function returned an error (i.e. not `nil`).\n//\n//   actualObj, err := SomeFunction()\n//   if a.Errorf(err, \"error message %s\", \"formatted\") {\n// \t   assert.Equal(t, expectedErrorf, err)\n//   }\nfunc (a *Assertions) Errorf(err error, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Errorf(a.t, err, msg, args...)\n}\n\n// Exactly asserts that two objects are equal in value and type.\n//\n//    a.Exactly(int32(123), int64(123))\nfunc (a *Assertions) Exactly(expected interface{}, actual interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Exactly(a.t, expected, actual, msgAndArgs...)\n}\n\n// Exactlyf asserts that two objects are equal in value and type.\n//\n//    a.Exactlyf(int32(123, \"error message %s\", \"formatted\"), int64(123))\nfunc (a *Assertions) Exactlyf(expected interface{}, actual interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Exactlyf(a.t, expected, actual, msg, args...)\n}\n\n// Fail reports a failure through\nfunc (a *Assertions) Fail(failureMessage string, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Fail(a.t, failureMessage, msgAndArgs...)\n}\n\n// FailNow fails test\nfunc (a *Assertions) FailNow(failureMessage string, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn FailNow(a.t, failureMessage, msgAndArgs...)\n}\n\n// FailNowf fails test\nfunc (a *Assertions) FailNowf(failureMessage string, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn FailNowf(a.t, failureMessage, msg, args...)\n}\n\n// Failf reports a failure through\nfunc (a *Assertions) Failf(failureMessage string, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Failf(a.t, failureMessage, msg, args...)\n}\n\n// False asserts that the specified value is false.\n//\n//    a.False(myBool)\nfunc (a *Assertions) False(value bool, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn False(a.t, value, msgAndArgs...)\n}\n\n// Falsef asserts that the specified value is false.\n//\n//    a.Falsef(myBool, \"error message %s\", \"formatted\")\nfunc (a *Assertions) Falsef(value bool, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Falsef(a.t, value, msg, args...)\n}\n\n// FileExists checks whether a file exists in the given path. It also fails if the path points to a directory or there is an error when trying to check the file.\nfunc (a *Assertions) FileExists(path string, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn FileExists(a.t, path, msgAndArgs...)\n}\n\n// FileExistsf checks whether a file exists in the given path. It also fails if the path points to a directory or there is an error when trying to check the file.\nfunc (a *Assertions) FileExistsf(path string, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn FileExistsf(a.t, path, msg, args...)\n}\n\n// HTTPBodyContains asserts that a specified handler returns a\n// body that contains a string.\n//\n//  a.HTTPBodyContains(myHandler, \"GET\", \"www.google.com\", nil, \"I'm Feeling Lucky\")\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc (a *Assertions) HTTPBodyContains(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn HTTPBodyContains(a.t, handler, method, url, values, str, msgAndArgs...)\n}\n\n// HTTPBodyContainsf asserts that a specified handler returns a\n// body that contains a string.\n//\n//  a.HTTPBodyContainsf(myHandler, \"GET\", \"www.google.com\", nil, \"I'm Feeling Lucky\", \"error message %s\", \"formatted\")\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc (a *Assertions) HTTPBodyContainsf(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn HTTPBodyContainsf(a.t, handler, method, url, values, str, msg, args...)\n}\n\n// HTTPBodyNotContains asserts that a specified handler returns a\n// body that does not contain a string.\n//\n//  a.HTTPBodyNotContains(myHandler, \"GET\", \"www.google.com\", nil, \"I'm Feeling Lucky\")\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc (a *Assertions) HTTPBodyNotContains(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn HTTPBodyNotContains(a.t, handler, method, url, values, str, msgAndArgs...)\n}\n\n// HTTPBodyNotContainsf asserts that a specified handler returns a\n// body that does not contain a string.\n//\n//  a.HTTPBodyNotContainsf(myHandler, \"GET\", \"www.google.com\", nil, \"I'm Feeling Lucky\", \"error message %s\", \"formatted\")\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc (a *Assertions) HTTPBodyNotContainsf(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn HTTPBodyNotContainsf(a.t, handler, method, url, values, str, msg, args...)\n}\n\n// HTTPError asserts that a specified handler returns an error status code.\n//\n//  a.HTTPError(myHandler, \"POST\", \"/a/b/c\", url.Values{\"a\": []string{\"b\", \"c\"}}\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc (a *Assertions) HTTPError(handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn HTTPError(a.t, handler, method, url, values, msgAndArgs...)\n}\n\n// HTTPErrorf asserts that a specified handler returns an error status code.\n//\n//  a.HTTPErrorf(myHandler, \"POST\", \"/a/b/c\", url.Values{\"a\": []string{\"b\", \"c\"}}\n//\n// Returns whether the assertion was successful (true, \"error message %s\", \"formatted\") or not (false).\nfunc (a *Assertions) HTTPErrorf(handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn HTTPErrorf(a.t, handler, method, url, values, msg, args...)\n}\n\n// HTTPRedirect asserts that a specified handler returns a redirect status code.\n//\n//  a.HTTPRedirect(myHandler, \"GET\", \"/a/b/c\", url.Values{\"a\": []string{\"b\", \"c\"}}\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc (a *Assertions) HTTPRedirect(handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn HTTPRedirect(a.t, handler, method, url, values, msgAndArgs...)\n}\n\n// HTTPRedirectf asserts that a specified handler returns a redirect status code.\n//\n//  a.HTTPRedirectf(myHandler, \"GET\", \"/a/b/c\", url.Values{\"a\": []string{\"b\", \"c\"}}\n//\n// Returns whether the assertion was successful (true, \"error message %s\", \"formatted\") or not (false).\nfunc (a *Assertions) HTTPRedirectf(handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn HTTPRedirectf(a.t, handler, method, url, values, msg, args...)\n}\n\n// HTTPSuccess asserts that a specified handler returns a success status code.\n//\n//  a.HTTPSuccess(myHandler, \"POST\", \"http://www.google.com\", nil)\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc (a *Assertions) HTTPSuccess(handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn HTTPSuccess(a.t, handler, method, url, values, msgAndArgs...)\n}\n\n// HTTPSuccessf asserts that a specified handler returns a success status code.\n//\n//  a.HTTPSuccessf(myHandler, \"POST\", \"http://www.google.com\", nil, \"error message %s\", \"formatted\")\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc (a *Assertions) HTTPSuccessf(handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn HTTPSuccessf(a.t, handler, method, url, values, msg, args...)\n}\n\n// Implements asserts that an object is implemented by the specified interface.\n//\n//    a.Implements((*MyInterface)(nil), new(MyObject))\nfunc (a *Assertions) Implements(interfaceObject interface{}, object interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Implements(a.t, interfaceObject, object, msgAndArgs...)\n}\n\n// Implementsf asserts that an object is implemented by the specified interface.\n//\n//    a.Implementsf((*MyInterface, \"error message %s\", \"formatted\")(nil), new(MyObject))\nfunc (a *Assertions) Implementsf(interfaceObject interface{}, object interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Implementsf(a.t, interfaceObject, object, msg, args...)\n}\n\n// InDelta asserts that the two numerals are within delta of each other.\n//\n// \t a.InDelta(math.Pi, (22 / 7.0), 0.01)\nfunc (a *Assertions) InDelta(expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn InDelta(a.t, expected, actual, delta, msgAndArgs...)\n}\n\n// InDeltaMapValues is the same as InDelta, but it compares all values between two maps. Both maps must have exactly the same keys.\nfunc (a *Assertions) InDeltaMapValues(expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn InDeltaMapValues(a.t, expected, actual, delta, msgAndArgs...)\n}\n\n// InDeltaMapValuesf is the same as InDelta, but it compares all values between two maps. Both maps must have exactly the same keys.\nfunc (a *Assertions) InDeltaMapValuesf(expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn InDeltaMapValuesf(a.t, expected, actual, delta, msg, args...)\n}\n\n// InDeltaSlice is the same as InDelta, except it compares two slices.\nfunc (a *Assertions) InDeltaSlice(expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn InDeltaSlice(a.t, expected, actual, delta, msgAndArgs...)\n}\n\n// InDeltaSlicef is the same as InDelta, except it compares two slices.\nfunc (a *Assertions) InDeltaSlicef(expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn InDeltaSlicef(a.t, expected, actual, delta, msg, args...)\n}\n\n// InDeltaf asserts that the two numerals are within delta of each other.\n//\n// \t a.InDeltaf(math.Pi, (22 / 7.0, \"error message %s\", \"formatted\"), 0.01)\nfunc (a *Assertions) InDeltaf(expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn InDeltaf(a.t, expected, actual, delta, msg, args...)\n}\n\n// InEpsilon asserts that expected and actual have a relative error less than epsilon\nfunc (a *Assertions) InEpsilon(expected interface{}, actual interface{}, epsilon float64, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn InEpsilon(a.t, expected, actual, epsilon, msgAndArgs...)\n}\n\n// InEpsilonSlice is the same as InEpsilon, except it compares each value from two slices.\nfunc (a *Assertions) InEpsilonSlice(expected interface{}, actual interface{}, epsilon float64, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn InEpsilonSlice(a.t, expected, actual, epsilon, msgAndArgs...)\n}\n\n// InEpsilonSlicef is the same as InEpsilon, except it compares each value from two slices.\nfunc (a *Assertions) InEpsilonSlicef(expected interface{}, actual interface{}, epsilon float64, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn InEpsilonSlicef(a.t, expected, actual, epsilon, msg, args...)\n}\n\n// InEpsilonf asserts that expected and actual have a relative error less than epsilon\nfunc (a *Assertions) InEpsilonf(expected interface{}, actual interface{}, epsilon float64, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn InEpsilonf(a.t, expected, actual, epsilon, msg, args...)\n}\n\n// IsType asserts that the specified objects are of the same type.\nfunc (a *Assertions) IsType(expectedType interface{}, object interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn IsType(a.t, expectedType, object, msgAndArgs...)\n}\n\n// IsTypef asserts that the specified objects are of the same type.\nfunc (a *Assertions) IsTypef(expectedType interface{}, object interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn IsTypef(a.t, expectedType, object, msg, args...)\n}\n\n// JSONEq asserts that two JSON strings are equivalent.\n//\n//  a.JSONEq(`{\"hello\": \"world\", \"foo\": \"bar\"}`, `{\"foo\": \"bar\", \"hello\": \"world\"}`)\nfunc (a *Assertions) JSONEq(expected string, actual string, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn JSONEq(a.t, expected, actual, msgAndArgs...)\n}\n\n// JSONEqf asserts that two JSON strings are equivalent.\n//\n//  a.JSONEqf(`{\"hello\": \"world\", \"foo\": \"bar\"}`, `{\"foo\": \"bar\", \"hello\": \"world\"}`, \"error message %s\", \"formatted\")\nfunc (a *Assertions) JSONEqf(expected string, actual string, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn JSONEqf(a.t, expected, actual, msg, args...)\n}\n\n// Len asserts that the specified object has specific length.\n// Len also fails if the object has a type that len() not accept.\n//\n//    a.Len(mySlice, 3)\nfunc (a *Assertions) Len(object interface{}, length int, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Len(a.t, object, length, msgAndArgs...)\n}\n\n// Lenf asserts that the specified object has specific length.\n// Lenf also fails if the object has a type that len() not accept.\n//\n//    a.Lenf(mySlice, 3, \"error message %s\", \"formatted\")\nfunc (a *Assertions) Lenf(object interface{}, length int, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Lenf(a.t, object, length, msg, args...)\n}\n\n// Nil asserts that the specified object is nil.\n//\n//    a.Nil(err)\nfunc (a *Assertions) Nil(object interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Nil(a.t, object, msgAndArgs...)\n}\n\n// Nilf asserts that the specified object is nil.\n//\n//    a.Nilf(err, \"error message %s\", \"formatted\")\nfunc (a *Assertions) Nilf(object interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Nilf(a.t, object, msg, args...)\n}\n\n// NoError asserts that a function returned no error (i.e. `nil`).\n//\n//   actualObj, err := SomeFunction()\n//   if a.NoError(err) {\n// \t   assert.Equal(t, expectedObj, actualObj)\n//   }\nfunc (a *Assertions) NoError(err error, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NoError(a.t, err, msgAndArgs...)\n}\n\n// NoErrorf asserts that a function returned no error (i.e. `nil`).\n//\n//   actualObj, err := SomeFunction()\n//   if a.NoErrorf(err, \"error message %s\", \"formatted\") {\n// \t   assert.Equal(t, expectedObj, actualObj)\n//   }\nfunc (a *Assertions) NoErrorf(err error, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NoErrorf(a.t, err, msg, args...)\n}\n\n// NotContains asserts that the specified string, list(array, slice...) or map does NOT contain the\n// specified substring or element.\n//\n//    a.NotContains(\"Hello World\", \"Earth\")\n//    a.NotContains([\"Hello\", \"World\"], \"Earth\")\n//    a.NotContains({\"Hello\": \"World\"}, \"Earth\")\nfunc (a *Assertions) NotContains(s interface{}, contains interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotContains(a.t, s, contains, msgAndArgs...)\n}\n\n// NotContainsf asserts that the specified string, list(array, slice...) or map does NOT contain the\n// specified substring or element.\n//\n//    a.NotContainsf(\"Hello World\", \"Earth\", \"error message %s\", \"formatted\")\n//    a.NotContainsf([\"Hello\", \"World\"], \"Earth\", \"error message %s\", \"formatted\")\n//    a.NotContainsf({\"Hello\": \"World\"}, \"Earth\", \"error message %s\", \"formatted\")\nfunc (a *Assertions) NotContainsf(s interface{}, contains interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotContainsf(a.t, s, contains, msg, args...)\n}\n\n// NotEmpty asserts that the specified object is NOT empty.  I.e. not nil, \"\", false, 0 or either\n// a slice or a channel with len == 0.\n//\n//  if a.NotEmpty(obj) {\n//    assert.Equal(t, \"two\", obj[1])\n//  }\nfunc (a *Assertions) NotEmpty(object interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotEmpty(a.t, object, msgAndArgs...)\n}\n\n// NotEmptyf asserts that the specified object is NOT empty.  I.e. not nil, \"\", false, 0 or either\n// a slice or a channel with len == 0.\n//\n//  if a.NotEmptyf(obj, \"error message %s\", \"formatted\") {\n//    assert.Equal(t, \"two\", obj[1])\n//  }\nfunc (a *Assertions) NotEmptyf(object interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotEmptyf(a.t, object, msg, args...)\n}\n\n// NotEqual asserts that the specified values are NOT equal.\n//\n//    a.NotEqual(obj1, obj2)\n//\n// Pointer variable equality is determined based on the equality of the\n// referenced values (as opposed to the memory addresses).\nfunc (a *Assertions) NotEqual(expected interface{}, actual interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotEqual(a.t, expected, actual, msgAndArgs...)\n}\n\n// NotEqualf asserts that the specified values are NOT equal.\n//\n//    a.NotEqualf(obj1, obj2, \"error message %s\", \"formatted\")\n//\n// Pointer variable equality is determined based on the equality of the\n// referenced values (as opposed to the memory addresses).\nfunc (a *Assertions) NotEqualf(expected interface{}, actual interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotEqualf(a.t, expected, actual, msg, args...)\n}\n\n// NotNil asserts that the specified object is not nil.\n//\n//    a.NotNil(err)\nfunc (a *Assertions) NotNil(object interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotNil(a.t, object, msgAndArgs...)\n}\n\n// NotNilf asserts that the specified object is not nil.\n//\n//    a.NotNilf(err, \"error message %s\", \"formatted\")\nfunc (a *Assertions) NotNilf(object interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotNilf(a.t, object, msg, args...)\n}\n\n// NotPanics asserts that the code inside the specified PanicTestFunc does NOT panic.\n//\n//   a.NotPanics(func(){ RemainCalm() })\nfunc (a *Assertions) NotPanics(f PanicTestFunc, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotPanics(a.t, f, msgAndArgs...)\n}\n\n// NotPanicsf asserts that the code inside the specified PanicTestFunc does NOT panic.\n//\n//   a.NotPanicsf(func(){ RemainCalm() }, \"error message %s\", \"formatted\")\nfunc (a *Assertions) NotPanicsf(f PanicTestFunc, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotPanicsf(a.t, f, msg, args...)\n}\n\n// NotRegexp asserts that a specified regexp does not match a string.\n//\n//  a.NotRegexp(regexp.MustCompile(\"starts\"), \"it's starting\")\n//  a.NotRegexp(\"^start\", \"it's not starting\")\nfunc (a *Assertions) NotRegexp(rx interface{}, str interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotRegexp(a.t, rx, str, msgAndArgs...)\n}\n\n// NotRegexpf asserts that a specified regexp does not match a string.\n//\n//  a.NotRegexpf(regexp.MustCompile(\"starts\", \"error message %s\", \"formatted\"), \"it's starting\")\n//  a.NotRegexpf(\"^start\", \"it's not starting\", \"error message %s\", \"formatted\")\nfunc (a *Assertions) NotRegexpf(rx interface{}, str interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotRegexpf(a.t, rx, str, msg, args...)\n}\n\n// NotSubset asserts that the specified list(array, slice...) contains not all\n// elements given in the specified subset(array, slice...).\n//\n//    a.NotSubset([1, 3, 4], [1, 2], \"But [1, 3, 4] does not contain [1, 2]\")\nfunc (a *Assertions) NotSubset(list interface{}, subset interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotSubset(a.t, list, subset, msgAndArgs...)\n}\n\n// NotSubsetf asserts that the specified list(array, slice...) contains not all\n// elements given in the specified subset(array, slice...).\n//\n//    a.NotSubsetf([1, 3, 4], [1, 2], \"But [1, 3, 4] does not contain [1, 2]\", \"error message %s\", \"formatted\")\nfunc (a *Assertions) NotSubsetf(list interface{}, subset interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotSubsetf(a.t, list, subset, msg, args...)\n}\n\n// NotZero asserts that i is not the zero value for its type.\nfunc (a *Assertions) NotZero(i interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotZero(a.t, i, msgAndArgs...)\n}\n\n// NotZerof asserts that i is not the zero value for its type.\nfunc (a *Assertions) NotZerof(i interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotZerof(a.t, i, msg, args...)\n}\n\n// Panics asserts that the code inside the specified PanicTestFunc panics.\n//\n//   a.Panics(func(){ GoCrazy() })\nfunc (a *Assertions) Panics(f PanicTestFunc, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Panics(a.t, f, msgAndArgs...)\n}\n\n// PanicsWithValue asserts that the code inside the specified PanicTestFunc panics, and that\n// the recovered panic value equals the expected panic value.\n//\n//   a.PanicsWithValue(\"crazy error\", func(){ GoCrazy() })\nfunc (a *Assertions) PanicsWithValue(expected interface{}, f PanicTestFunc, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn PanicsWithValue(a.t, expected, f, msgAndArgs...)\n}\n\n// PanicsWithValuef asserts that the code inside the specified PanicTestFunc panics, and that\n// the recovered panic value equals the expected panic value.\n//\n//   a.PanicsWithValuef(\"crazy error\", func(){ GoCrazy() }, \"error message %s\", \"formatted\")\nfunc (a *Assertions) PanicsWithValuef(expected interface{}, f PanicTestFunc, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn PanicsWithValuef(a.t, expected, f, msg, args...)\n}\n\n// Panicsf asserts that the code inside the specified PanicTestFunc panics.\n//\n//   a.Panicsf(func(){ GoCrazy() }, \"error message %s\", \"formatted\")\nfunc (a *Assertions) Panicsf(f PanicTestFunc, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Panicsf(a.t, f, msg, args...)\n}\n\n// Regexp asserts that a specified regexp matches a string.\n//\n//  a.Regexp(regexp.MustCompile(\"start\"), \"it's starting\")\n//  a.Regexp(\"start...$\", \"it's not starting\")\nfunc (a *Assertions) Regexp(rx interface{}, str interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Regexp(a.t, rx, str, msgAndArgs...)\n}\n\n// Regexpf asserts that a specified regexp matches a string.\n//\n//  a.Regexpf(regexp.MustCompile(\"start\", \"error message %s\", \"formatted\"), \"it's starting\")\n//  a.Regexpf(\"start...$\", \"it's not starting\", \"error message %s\", \"formatted\")\nfunc (a *Assertions) Regexpf(rx interface{}, str interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Regexpf(a.t, rx, str, msg, args...)\n}\n\n// Subset asserts that the specified list(array, slice...) contains all\n// elements given in the specified subset(array, slice...).\n//\n//    a.Subset([1, 2, 3], [1, 2], \"But [1, 2, 3] does contain [1, 2]\")\nfunc (a *Assertions) Subset(list interface{}, subset interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Subset(a.t, list, subset, msgAndArgs...)\n}\n\n// Subsetf asserts that the specified list(array, slice...) contains all\n// elements given in the specified subset(array, slice...).\n//\n//    a.Subsetf([1, 2, 3], [1, 2], \"But [1, 2, 3] does contain [1, 2]\", \"error message %s\", \"formatted\")\nfunc (a *Assertions) Subsetf(list interface{}, subset interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Subsetf(a.t, list, subset, msg, args...)\n}\n\n// True asserts that the specified value is true.\n//\n//    a.True(myBool)\nfunc (a *Assertions) True(value bool, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn True(a.t, value, msgAndArgs...)\n}\n\n// Truef asserts that the specified value is true.\n//\n//    a.Truef(myBool, \"error message %s\", \"formatted\")\nfunc (a *Assertions) Truef(value bool, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Truef(a.t, value, msg, args...)\n}\n\n// WithinDuration asserts that the two times are within duration delta of each other.\n//\n//   a.WithinDuration(time.Now(), time.Now(), 10*time.Second)\nfunc (a *Assertions) WithinDuration(expected time.Time, actual time.Time, delta time.Duration, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn WithinDuration(a.t, expected, actual, delta, msgAndArgs...)\n}\n\n// WithinDurationf asserts that the two times are within duration delta of each other.\n//\n//   a.WithinDurationf(time.Now(), time.Now(), 10*time.Second, \"error message %s\", \"formatted\")\nfunc (a *Assertions) WithinDurationf(expected time.Time, actual time.Time, delta time.Duration, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn WithinDurationf(a.t, expected, actual, delta, msg, args...)\n}\n\n// Zero asserts that i is the zero value for its type.\nfunc (a *Assertions) Zero(i interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Zero(a.t, i, msgAndArgs...)\n}\n\n// Zerof asserts that i is the zero value for its type.\nfunc (a *Assertions) Zerof(i interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Zerof(a.t, i, msg, args...)\n}\n"
  },
  {
    "path": "vendor/github.com/stretchr/testify/assert/assertion_forward.go.tmpl",
    "content": "{{.CommentWithoutT \"a\"}}\nfunc (a *Assertions) {{.DocInfo.Name}}({{.Params}}) bool {\n\tif h, ok := a.t.(tHelper); ok { h.Helper() }\n\treturn {{.DocInfo.Name}}(a.t, {{.ForwardedParams}})\n}\n"
  },
  {
    "path": "vendor/github.com/stretchr/testify/assert/assertions.go",
    "content": "package assert\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"os\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"runtime\"\n\t\"strings\"\n\t\"time\"\n\t\"unicode\"\n\t\"unicode/utf8\"\n\n\t\"github.com/davecgh/go-spew/spew\"\n\t\"github.com/pmezard/go-difflib/difflib\"\n)\n\n//go:generate go run ../_codegen/main.go -output-package=assert -template=assertion_format.go.tmpl\n\n// TestingT is an interface wrapper around *testing.T\ntype TestingT interface {\n\tErrorf(format string, args ...interface{})\n}\n\n// ComparisonAssertionFunc is a common function prototype when comparing two values.  Can be useful\n// for table driven tests.\ntype ComparisonAssertionFunc func(TestingT, interface{}, interface{}, ...interface{}) bool\n\n// ValueAssertionFunc is a common function prototype when validating a single value.  Can be useful\n// for table driven tests.\ntype ValueAssertionFunc func(TestingT, interface{}, ...interface{}) bool\n\n// BoolAssertionFunc is a common function prototype when validating a bool value.  Can be useful\n// for table driven tests.\ntype BoolAssertionFunc func(TestingT, bool, ...interface{}) bool\n\n// ValuesAssertionFunc is a common function prototype when validating an error value.  Can be useful\n// for table driven tests.\ntype ErrorAssertionFunc func(TestingT, error, ...interface{}) bool\n\n// Comparison a custom function that returns true on success and false on failure\ntype Comparison func() (success bool)\n\n/*\n\tHelper functions\n*/\n\n// ObjectsAreEqual determines if two objects are considered equal.\n//\n// This function does no assertion of any kind.\nfunc ObjectsAreEqual(expected, actual interface{}) bool {\n\tif expected == nil || actual == nil {\n\t\treturn expected == actual\n\t}\n\n\texp, ok := expected.([]byte)\n\tif !ok {\n\t\treturn reflect.DeepEqual(expected, actual)\n\t}\n\n\tact, ok := actual.([]byte)\n\tif !ok {\n\t\treturn false\n\t}\n\tif exp == nil || act == nil {\n\t\treturn exp == nil && act == nil\n\t}\n\treturn bytes.Equal(exp, act)\n}\n\n// ObjectsAreEqualValues gets whether two objects are equal, or if their\n// values are equal.\nfunc ObjectsAreEqualValues(expected, actual interface{}) bool {\n\tif ObjectsAreEqual(expected, actual) {\n\t\treturn true\n\t}\n\n\tactualType := reflect.TypeOf(actual)\n\tif actualType == nil {\n\t\treturn false\n\t}\n\texpectedValue := reflect.ValueOf(expected)\n\tif expectedValue.IsValid() && expectedValue.Type().ConvertibleTo(actualType) {\n\t\t// Attempt comparison after type conversion\n\t\treturn reflect.DeepEqual(expectedValue.Convert(actualType).Interface(), actual)\n\t}\n\n\treturn false\n}\n\n/* CallerInfo is necessary because the assert functions use the testing object\ninternally, causing it to print the file:line of the assert method, rather than where\nthe problem actually occurred in calling code.*/\n\n// CallerInfo returns an array of strings containing the file and line number\n// of each stack frame leading from the current test to the assert call that\n// failed.\nfunc CallerInfo() []string {\n\n\tpc := uintptr(0)\n\tfile := \"\"\n\tline := 0\n\tok := false\n\tname := \"\"\n\n\tcallers := []string{}\n\tfor i := 0; ; i++ {\n\t\tpc, file, line, ok = runtime.Caller(i)\n\t\tif !ok {\n\t\t\t// The breaks below failed to terminate the loop, and we ran off the\n\t\t\t// end of the call stack.\n\t\t\tbreak\n\t\t}\n\n\t\t// This is a huge edge case, but it will panic if this is the case, see #180\n\t\tif file == \"<autogenerated>\" {\n\t\t\tbreak\n\t\t}\n\n\t\tf := runtime.FuncForPC(pc)\n\t\tif f == nil {\n\t\t\tbreak\n\t\t}\n\t\tname = f.Name()\n\n\t\t// testing.tRunner is the standard library function that calls\n\t\t// tests. Subtests are called directly by tRunner, without going through\n\t\t// the Test/Benchmark/Example function that contains the t.Run calls, so\n\t\t// with subtests we should break when we hit tRunner, without adding it\n\t\t// to the list of callers.\n\t\tif name == \"testing.tRunner\" {\n\t\t\tbreak\n\t\t}\n\n\t\tparts := strings.Split(file, \"/\")\n\t\tfile = parts[len(parts)-1]\n\t\tif len(parts) > 1 {\n\t\t\tdir := parts[len(parts)-2]\n\t\t\tif (dir != \"assert\" && dir != \"mock\" && dir != \"require\") || file == \"mock_test.go\" {\n\t\t\t\tcallers = append(callers, fmt.Sprintf(\"%s:%d\", file, line))\n\t\t\t}\n\t\t}\n\n\t\t// Drop the package\n\t\tsegments := strings.Split(name, \".\")\n\t\tname = segments[len(segments)-1]\n\t\tif isTest(name, \"Test\") ||\n\t\t\tisTest(name, \"Benchmark\") ||\n\t\t\tisTest(name, \"Example\") {\n\t\t\tbreak\n\t\t}\n\t}\n\n\treturn callers\n}\n\n// Stolen from the `go test` tool.\n// isTest tells whether name looks like a test (or benchmark, according to prefix).\n// It is a Test (say) if there is a character after Test that is not a lower-case letter.\n// We don't want TesticularCancer.\nfunc isTest(name, prefix string) bool {\n\tif !strings.HasPrefix(name, prefix) {\n\t\treturn false\n\t}\n\tif len(name) == len(prefix) { // \"Test\" is ok\n\t\treturn true\n\t}\n\trune, _ := utf8.DecodeRuneInString(name[len(prefix):])\n\treturn !unicode.IsLower(rune)\n}\n\nfunc messageFromMsgAndArgs(msgAndArgs ...interface{}) string {\n\tif len(msgAndArgs) == 0 || msgAndArgs == nil {\n\t\treturn \"\"\n\t}\n\tif len(msgAndArgs) == 1 {\n\t\treturn msgAndArgs[0].(string)\n\t}\n\tif len(msgAndArgs) > 1 {\n\t\treturn fmt.Sprintf(msgAndArgs[0].(string), msgAndArgs[1:]...)\n\t}\n\treturn \"\"\n}\n\n// Aligns the provided message so that all lines after the first line start at the same location as the first line.\n// Assumes that the first line starts at the correct location (after carriage return, tab, label, spacer and tab).\n// The longestLabelLen parameter specifies the length of the longest label in the output (required becaues this is the\n// basis on which the alignment occurs).\nfunc indentMessageLines(message string, longestLabelLen int) string {\n\toutBuf := new(bytes.Buffer)\n\n\tfor i, scanner := 0, bufio.NewScanner(strings.NewReader(message)); scanner.Scan(); i++ {\n\t\t// no need to align first line because it starts at the correct location (after the label)\n\t\tif i != 0 {\n\t\t\t// append alignLen+1 spaces to align with \"{{longestLabel}}:\" before adding tab\n\t\t\toutBuf.WriteString(\"\\n\\t\" + strings.Repeat(\" \", longestLabelLen+1) + \"\\t\")\n\t\t}\n\t\toutBuf.WriteString(scanner.Text())\n\t}\n\n\treturn outBuf.String()\n}\n\ntype failNower interface {\n\tFailNow()\n}\n\n// FailNow fails test\nfunc FailNow(t TestingT, failureMessage string, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tFail(t, failureMessage, msgAndArgs...)\n\n\t// We cannot extend TestingT with FailNow() and\n\t// maintain backwards compatibility, so we fallback\n\t// to panicking when FailNow is not available in\n\t// TestingT.\n\t// See issue #263\n\n\tif t, ok := t.(failNower); ok {\n\t\tt.FailNow()\n\t} else {\n\t\tpanic(\"test failed and t is missing `FailNow()`\")\n\t}\n\treturn false\n}\n\n// Fail reports a failure through\nfunc Fail(t TestingT, failureMessage string, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tcontent := []labeledContent{\n\t\t{\"Error Trace\", strings.Join(CallerInfo(), \"\\n\\t\\t\\t\")},\n\t\t{\"Error\", failureMessage},\n\t}\n\n\t// Add test name if the Go version supports it\n\tif n, ok := t.(interface {\n\t\tName() string\n\t}); ok {\n\t\tcontent = append(content, labeledContent{\"Test\", n.Name()})\n\t}\n\n\tmessage := messageFromMsgAndArgs(msgAndArgs...)\n\tif len(message) > 0 {\n\t\tcontent = append(content, labeledContent{\"Messages\", message})\n\t}\n\n\tt.Errorf(\"\\n%s\", \"\"+labeledOutput(content...))\n\n\treturn false\n}\n\ntype labeledContent struct {\n\tlabel   string\n\tcontent string\n}\n\n// labeledOutput returns a string consisting of the provided labeledContent. Each labeled output is appended in the following manner:\n//\n//   \\t{{label}}:{{align_spaces}}\\t{{content}}\\n\n//\n// The initial carriage return is required to undo/erase any padding added by testing.T.Errorf. The \"\\t{{label}}:\" is for the label.\n// If a label is shorter than the longest label provided, padding spaces are added to make all the labels match in length. Once this\n// alignment is achieved, \"\\t{{content}}\\n\" is added for the output.\n//\n// If the content of the labeledOutput contains line breaks, the subsequent lines are aligned so that they start at the same location as the first line.\nfunc labeledOutput(content ...labeledContent) string {\n\tlongestLabel := 0\n\tfor _, v := range content {\n\t\tif len(v.label) > longestLabel {\n\t\t\tlongestLabel = len(v.label)\n\t\t}\n\t}\n\tvar output string\n\tfor _, v := range content {\n\t\toutput += \"\\t\" + v.label + \":\" + strings.Repeat(\" \", longestLabel-len(v.label)) + \"\\t\" + indentMessageLines(v.content, longestLabel) + \"\\n\"\n\t}\n\treturn output\n}\n\n// Implements asserts that an object is implemented by the specified interface.\n//\n//    assert.Implements(t, (*MyInterface)(nil), new(MyObject))\nfunc Implements(t TestingT, interfaceObject interface{}, object interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tinterfaceType := reflect.TypeOf(interfaceObject).Elem()\n\n\tif object == nil {\n\t\treturn Fail(t, fmt.Sprintf(\"Cannot check if nil implements %v\", interfaceType), msgAndArgs...)\n\t}\n\tif !reflect.TypeOf(object).Implements(interfaceType) {\n\t\treturn Fail(t, fmt.Sprintf(\"%T must implement %v\", object, interfaceType), msgAndArgs...)\n\t}\n\n\treturn true\n}\n\n// IsType asserts that the specified objects are of the same type.\nfunc IsType(t TestingT, expectedType interface{}, object interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\n\tif !ObjectsAreEqual(reflect.TypeOf(object), reflect.TypeOf(expectedType)) {\n\t\treturn Fail(t, fmt.Sprintf(\"Object expected to be of type %v, but was %v\", reflect.TypeOf(expectedType), reflect.TypeOf(object)), msgAndArgs...)\n\t}\n\n\treturn true\n}\n\n// Equal asserts that two objects are equal.\n//\n//    assert.Equal(t, 123, 123)\n//\n// Pointer variable equality is determined based on the equality of the\n// referenced values (as opposed to the memory addresses). Function equality\n// cannot be determined and will always fail.\nfunc Equal(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif err := validateEqualArgs(expected, actual); err != nil {\n\t\treturn Fail(t, fmt.Sprintf(\"Invalid operation: %#v == %#v (%s)\",\n\t\t\texpected, actual, err), msgAndArgs...)\n\t}\n\n\tif !ObjectsAreEqual(expected, actual) {\n\t\tdiff := diff(expected, actual)\n\t\texpected, actual = formatUnequalValues(expected, actual)\n\t\treturn Fail(t, fmt.Sprintf(\"Not equal: \\n\"+\n\t\t\t\"expected: %s\\n\"+\n\t\t\t\"actual  : %s%s\", expected, actual, diff), msgAndArgs...)\n\t}\n\n\treturn true\n\n}\n\n// formatUnequalValues takes two values of arbitrary types and returns string\n// representations appropriate to be presented to the user.\n//\n// If the values are not of like type, the returned strings will be prefixed\n// with the type name, and the value will be enclosed in parenthesis similar\n// to a type conversion in the Go grammar.\nfunc formatUnequalValues(expected, actual interface{}) (e string, a string) {\n\tif reflect.TypeOf(expected) != reflect.TypeOf(actual) {\n\t\treturn fmt.Sprintf(\"%T(%#v)\", expected, expected),\n\t\t\tfmt.Sprintf(\"%T(%#v)\", actual, actual)\n\t}\n\n\treturn fmt.Sprintf(\"%#v\", expected),\n\t\tfmt.Sprintf(\"%#v\", actual)\n}\n\n// EqualValues asserts that two objects are equal or convertable to the same types\n// and equal.\n//\n//    assert.EqualValues(t, uint32(123), int32(123))\nfunc EqualValues(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\n\tif !ObjectsAreEqualValues(expected, actual) {\n\t\tdiff := diff(expected, actual)\n\t\texpected, actual = formatUnequalValues(expected, actual)\n\t\treturn Fail(t, fmt.Sprintf(\"Not equal: \\n\"+\n\t\t\t\"expected: %s\\n\"+\n\t\t\t\"actual  : %s%s\", expected, actual, diff), msgAndArgs...)\n\t}\n\n\treturn true\n\n}\n\n// Exactly asserts that two objects are equal in value and type.\n//\n//    assert.Exactly(t, int32(123), int64(123))\nfunc Exactly(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\n\taType := reflect.TypeOf(expected)\n\tbType := reflect.TypeOf(actual)\n\n\tif aType != bType {\n\t\treturn Fail(t, fmt.Sprintf(\"Types expected to match exactly\\n\\t%v != %v\", aType, bType), msgAndArgs...)\n\t}\n\n\treturn Equal(t, expected, actual, msgAndArgs...)\n\n}\n\n// NotNil asserts that the specified object is not nil.\n//\n//    assert.NotNil(t, err)\nfunc NotNil(t TestingT, object interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif !isNil(object) {\n\t\treturn true\n\t}\n\treturn Fail(t, \"Expected value not to be nil.\", msgAndArgs...)\n}\n\n// isNil checks if a specified object is nil or not, without Failing.\nfunc isNil(object interface{}) bool {\n\tif object == nil {\n\t\treturn true\n\t}\n\n\tvalue := reflect.ValueOf(object)\n\tkind := value.Kind()\n\tif kind >= reflect.Chan && kind <= reflect.Slice && value.IsNil() {\n\t\treturn true\n\t}\n\n\treturn false\n}\n\n// Nil asserts that the specified object is nil.\n//\n//    assert.Nil(t, err)\nfunc Nil(t TestingT, object interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif isNil(object) {\n\t\treturn true\n\t}\n\treturn Fail(t, fmt.Sprintf(\"Expected nil, but got: %#v\", object), msgAndArgs...)\n}\n\n// isEmpty gets whether the specified object is considered empty or not.\nfunc isEmpty(object interface{}) bool {\n\n\t// get nil case out of the way\n\tif object == nil {\n\t\treturn true\n\t}\n\n\tobjValue := reflect.ValueOf(object)\n\n\tswitch objValue.Kind() {\n\t// collection types are empty when they have no element\n\tcase reflect.Array, reflect.Chan, reflect.Map, reflect.Slice:\n\t\treturn objValue.Len() == 0\n\t// pointers are empty if nil or if the value they point to is empty\n\tcase reflect.Ptr:\n\t\tif objValue.IsNil() {\n\t\t\treturn true\n\t\t}\n\t\tderef := objValue.Elem().Interface()\n\t\treturn isEmpty(deref)\n\t// for all other types, compare against the zero value\n\tdefault:\n\t\tzero := reflect.Zero(objValue.Type())\n\t\treturn reflect.DeepEqual(object, zero.Interface())\n\t}\n}\n\n// Empty asserts that the specified object is empty.  I.e. nil, \"\", false, 0 or either\n// a slice or a channel with len == 0.\n//\n//  assert.Empty(t, obj)\nfunc Empty(t TestingT, object interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\n\tpass := isEmpty(object)\n\tif !pass {\n\t\tFail(t, fmt.Sprintf(\"Should be empty, but was %v\", object), msgAndArgs...)\n\t}\n\n\treturn pass\n\n}\n\n// NotEmpty asserts that the specified object is NOT empty.  I.e. not nil, \"\", false, 0 or either\n// a slice or a channel with len == 0.\n//\n//  if assert.NotEmpty(t, obj) {\n//    assert.Equal(t, \"two\", obj[1])\n//  }\nfunc NotEmpty(t TestingT, object interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\n\tpass := !isEmpty(object)\n\tif !pass {\n\t\tFail(t, fmt.Sprintf(\"Should NOT be empty, but was %v\", object), msgAndArgs...)\n\t}\n\n\treturn pass\n\n}\n\n// getLen try to get length of object.\n// return (false, 0) if impossible.\nfunc getLen(x interface{}) (ok bool, length int) {\n\tv := reflect.ValueOf(x)\n\tdefer func() {\n\t\tif e := recover(); e != nil {\n\t\t\tok = false\n\t\t}\n\t}()\n\treturn true, v.Len()\n}\n\n// Len asserts that the specified object has specific length.\n// Len also fails if the object has a type that len() not accept.\n//\n//    assert.Len(t, mySlice, 3)\nfunc Len(t TestingT, object interface{}, length int, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tok, l := getLen(object)\n\tif !ok {\n\t\treturn Fail(t, fmt.Sprintf(\"\\\"%s\\\" could not be applied builtin len()\", object), msgAndArgs...)\n\t}\n\n\tif l != length {\n\t\treturn Fail(t, fmt.Sprintf(\"\\\"%s\\\" should have %d item(s), but has %d\", object, length, l), msgAndArgs...)\n\t}\n\treturn true\n}\n\n// True asserts that the specified value is true.\n//\n//    assert.True(t, myBool)\nfunc True(t TestingT, value bool, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif h, ok := t.(interface {\n\t\tHelper()\n\t}); ok {\n\t\th.Helper()\n\t}\n\n\tif value != true {\n\t\treturn Fail(t, \"Should be true\", msgAndArgs...)\n\t}\n\n\treturn true\n\n}\n\n// False asserts that the specified value is false.\n//\n//    assert.False(t, myBool)\nfunc False(t TestingT, value bool, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\n\tif value != false {\n\t\treturn Fail(t, \"Should be false\", msgAndArgs...)\n\t}\n\n\treturn true\n\n}\n\n// NotEqual asserts that the specified values are NOT equal.\n//\n//    assert.NotEqual(t, obj1, obj2)\n//\n// Pointer variable equality is determined based on the equality of the\n// referenced values (as opposed to the memory addresses).\nfunc NotEqual(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif err := validateEqualArgs(expected, actual); err != nil {\n\t\treturn Fail(t, fmt.Sprintf(\"Invalid operation: %#v != %#v (%s)\",\n\t\t\texpected, actual, err), msgAndArgs...)\n\t}\n\n\tif ObjectsAreEqual(expected, actual) {\n\t\treturn Fail(t, fmt.Sprintf(\"Should not be: %#v\\n\", actual), msgAndArgs...)\n\t}\n\n\treturn true\n\n}\n\n// containsElement try loop over the list check if the list includes the element.\n// return (false, false) if impossible.\n// return (true, false) if element was not found.\n// return (true, true) if element was found.\nfunc includeElement(list interface{}, element interface{}) (ok, found bool) {\n\n\tlistValue := reflect.ValueOf(list)\n\telementValue := reflect.ValueOf(element)\n\tdefer func() {\n\t\tif e := recover(); e != nil {\n\t\t\tok = false\n\t\t\tfound = false\n\t\t}\n\t}()\n\n\tif reflect.TypeOf(list).Kind() == reflect.String {\n\t\treturn true, strings.Contains(listValue.String(), elementValue.String())\n\t}\n\n\tif reflect.TypeOf(list).Kind() == reflect.Map {\n\t\tmapKeys := listValue.MapKeys()\n\t\tfor i := 0; i < len(mapKeys); i++ {\n\t\t\tif ObjectsAreEqual(mapKeys[i].Interface(), element) {\n\t\t\t\treturn true, true\n\t\t\t}\n\t\t}\n\t\treturn true, false\n\t}\n\n\tfor i := 0; i < listValue.Len(); i++ {\n\t\tif ObjectsAreEqual(listValue.Index(i).Interface(), element) {\n\t\t\treturn true, true\n\t\t}\n\t}\n\treturn true, false\n\n}\n\n// Contains asserts that the specified string, list(array, slice...) or map contains the\n// specified substring or element.\n//\n//    assert.Contains(t, \"Hello World\", \"World\")\n//    assert.Contains(t, [\"Hello\", \"World\"], \"World\")\n//    assert.Contains(t, {\"Hello\": \"World\"}, \"Hello\")\nfunc Contains(t TestingT, s, contains interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\n\tok, found := includeElement(s, contains)\n\tif !ok {\n\t\treturn Fail(t, fmt.Sprintf(\"\\\"%s\\\" could not be applied builtin len()\", s), msgAndArgs...)\n\t}\n\tif !found {\n\t\treturn Fail(t, fmt.Sprintf(\"\\\"%s\\\" does not contain \\\"%s\\\"\", s, contains), msgAndArgs...)\n\t}\n\n\treturn true\n\n}\n\n// NotContains asserts that the specified string, list(array, slice...) or map does NOT contain the\n// specified substring or element.\n//\n//    assert.NotContains(t, \"Hello World\", \"Earth\")\n//    assert.NotContains(t, [\"Hello\", \"World\"], \"Earth\")\n//    assert.NotContains(t, {\"Hello\": \"World\"}, \"Earth\")\nfunc NotContains(t TestingT, s, contains interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\n\tok, found := includeElement(s, contains)\n\tif !ok {\n\t\treturn Fail(t, fmt.Sprintf(\"\\\"%s\\\" could not be applied builtin len()\", s), msgAndArgs...)\n\t}\n\tif found {\n\t\treturn Fail(t, fmt.Sprintf(\"\\\"%s\\\" should not contain \\\"%s\\\"\", s, contains), msgAndArgs...)\n\t}\n\n\treturn true\n\n}\n\n// Subset asserts that the specified list(array, slice...) contains all\n// elements given in the specified subset(array, slice...).\n//\n//    assert.Subset(t, [1, 2, 3], [1, 2], \"But [1, 2, 3] does contain [1, 2]\")\nfunc Subset(t TestingT, list, subset interface{}, msgAndArgs ...interface{}) (ok bool) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif subset == nil {\n\t\treturn true // we consider nil to be equal to the nil set\n\t}\n\n\tsubsetValue := reflect.ValueOf(subset)\n\tdefer func() {\n\t\tif e := recover(); e != nil {\n\t\t\tok = false\n\t\t}\n\t}()\n\n\tlistKind := reflect.TypeOf(list).Kind()\n\tsubsetKind := reflect.TypeOf(subset).Kind()\n\n\tif listKind != reflect.Array && listKind != reflect.Slice {\n\t\treturn Fail(t, fmt.Sprintf(\"%q has an unsupported type %s\", list, listKind), msgAndArgs...)\n\t}\n\n\tif subsetKind != reflect.Array && subsetKind != reflect.Slice {\n\t\treturn Fail(t, fmt.Sprintf(\"%q has an unsupported type %s\", subset, subsetKind), msgAndArgs...)\n\t}\n\n\tfor i := 0; i < subsetValue.Len(); i++ {\n\t\telement := subsetValue.Index(i).Interface()\n\t\tok, found := includeElement(list, element)\n\t\tif !ok {\n\t\t\treturn Fail(t, fmt.Sprintf(\"\\\"%s\\\" could not be applied builtin len()\", list), msgAndArgs...)\n\t\t}\n\t\tif !found {\n\t\t\treturn Fail(t, fmt.Sprintf(\"\\\"%s\\\" does not contain \\\"%s\\\"\", list, element), msgAndArgs...)\n\t\t}\n\t}\n\n\treturn true\n}\n\n// NotSubset asserts that the specified list(array, slice...) contains not all\n// elements given in the specified subset(array, slice...).\n//\n//    assert.NotSubset(t, [1, 3, 4], [1, 2], \"But [1, 3, 4] does not contain [1, 2]\")\nfunc NotSubset(t TestingT, list, subset interface{}, msgAndArgs ...interface{}) (ok bool) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif subset == nil {\n\t\treturn Fail(t, fmt.Sprintf(\"nil is the empty set which is a subset of every set\"), msgAndArgs...)\n\t}\n\n\tsubsetValue := reflect.ValueOf(subset)\n\tdefer func() {\n\t\tif e := recover(); e != nil {\n\t\t\tok = false\n\t\t}\n\t}()\n\n\tlistKind := reflect.TypeOf(list).Kind()\n\tsubsetKind := reflect.TypeOf(subset).Kind()\n\n\tif listKind != reflect.Array && listKind != reflect.Slice {\n\t\treturn Fail(t, fmt.Sprintf(\"%q has an unsupported type %s\", list, listKind), msgAndArgs...)\n\t}\n\n\tif subsetKind != reflect.Array && subsetKind != reflect.Slice {\n\t\treturn Fail(t, fmt.Sprintf(\"%q has an unsupported type %s\", subset, subsetKind), msgAndArgs...)\n\t}\n\n\tfor i := 0; i < subsetValue.Len(); i++ {\n\t\telement := subsetValue.Index(i).Interface()\n\t\tok, found := includeElement(list, element)\n\t\tif !ok {\n\t\t\treturn Fail(t, fmt.Sprintf(\"\\\"%s\\\" could not be applied builtin len()\", list), msgAndArgs...)\n\t\t}\n\t\tif !found {\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn Fail(t, fmt.Sprintf(\"%q is a subset of %q\", subset, list), msgAndArgs...)\n}\n\n// ElementsMatch asserts that the specified listA(array, slice...) is equal to specified\n// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,\n// the number of appearances of each of them in both lists should match.\n//\n// assert.ElementsMatch(t, [1, 3, 2, 3], [1, 3, 3, 2])\nfunc ElementsMatch(t TestingT, listA, listB interface{}, msgAndArgs ...interface{}) (ok bool) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif isEmpty(listA) && isEmpty(listB) {\n\t\treturn true\n\t}\n\n\taKind := reflect.TypeOf(listA).Kind()\n\tbKind := reflect.TypeOf(listB).Kind()\n\n\tif aKind != reflect.Array && aKind != reflect.Slice {\n\t\treturn Fail(t, fmt.Sprintf(\"%q has an unsupported type %s\", listA, aKind), msgAndArgs...)\n\t}\n\n\tif bKind != reflect.Array && bKind != reflect.Slice {\n\t\treturn Fail(t, fmt.Sprintf(\"%q has an unsupported type %s\", listB, bKind), msgAndArgs...)\n\t}\n\n\taValue := reflect.ValueOf(listA)\n\tbValue := reflect.ValueOf(listB)\n\n\taLen := aValue.Len()\n\tbLen := bValue.Len()\n\n\tif aLen != bLen {\n\t\treturn Fail(t, fmt.Sprintf(\"lengths don't match: %d != %d\", aLen, bLen), msgAndArgs...)\n\t}\n\n\t// Mark indexes in bValue that we already used\n\tvisited := make([]bool, bLen)\n\tfor i := 0; i < aLen; i++ {\n\t\telement := aValue.Index(i).Interface()\n\t\tfound := false\n\t\tfor j := 0; j < bLen; j++ {\n\t\t\tif visited[j] {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif ObjectsAreEqual(bValue.Index(j).Interface(), element) {\n\t\t\t\tvisited[j] = true\n\t\t\t\tfound = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif !found {\n\t\t\treturn Fail(t, fmt.Sprintf(\"element %s appears more times in %s than in %s\", element, aValue, bValue), msgAndArgs...)\n\t\t}\n\t}\n\n\treturn true\n}\n\n// Condition uses a Comparison to assert a complex condition.\nfunc Condition(t TestingT, comp Comparison, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tresult := comp()\n\tif !result {\n\t\tFail(t, \"Condition failed!\", msgAndArgs...)\n\t}\n\treturn result\n}\n\n// PanicTestFunc defines a func that should be passed to the assert.Panics and assert.NotPanics\n// methods, and represents a simple func that takes no arguments, and returns nothing.\ntype PanicTestFunc func()\n\n// didPanic returns true if the function passed to it panics. Otherwise, it returns false.\nfunc didPanic(f PanicTestFunc) (bool, interface{}) {\n\n\tdidPanic := false\n\tvar message interface{}\n\tfunc() {\n\n\t\tdefer func() {\n\t\t\tif message = recover(); message != nil {\n\t\t\t\tdidPanic = true\n\t\t\t}\n\t\t}()\n\n\t\t// call the target function\n\t\tf()\n\n\t}()\n\n\treturn didPanic, message\n\n}\n\n// Panics asserts that the code inside the specified PanicTestFunc panics.\n//\n//   assert.Panics(t, func(){ GoCrazy() })\nfunc Panics(t TestingT, f PanicTestFunc, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\n\tif funcDidPanic, panicValue := didPanic(f); !funcDidPanic {\n\t\treturn Fail(t, fmt.Sprintf(\"func %#v should panic\\n\\tPanic value:\\t%#v\", f, panicValue), msgAndArgs...)\n\t}\n\n\treturn true\n}\n\n// PanicsWithValue asserts that the code inside the specified PanicTestFunc panics, and that\n// the recovered panic value equals the expected panic value.\n//\n//   assert.PanicsWithValue(t, \"crazy error\", func(){ GoCrazy() })\nfunc PanicsWithValue(t TestingT, expected interface{}, f PanicTestFunc, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\n\tfuncDidPanic, panicValue := didPanic(f)\n\tif !funcDidPanic {\n\t\treturn Fail(t, fmt.Sprintf(\"func %#v should panic\\n\\tPanic value:\\t%#v\", f, panicValue), msgAndArgs...)\n\t}\n\tif panicValue != expected {\n\t\treturn Fail(t, fmt.Sprintf(\"func %#v should panic with value:\\t%#v\\n\\tPanic value:\\t%#v\", f, expected, panicValue), msgAndArgs...)\n\t}\n\n\treturn true\n}\n\n// NotPanics asserts that the code inside the specified PanicTestFunc does NOT panic.\n//\n//   assert.NotPanics(t, func(){ RemainCalm() })\nfunc NotPanics(t TestingT, f PanicTestFunc, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\n\tif funcDidPanic, panicValue := didPanic(f); funcDidPanic {\n\t\treturn Fail(t, fmt.Sprintf(\"func %#v should not panic\\n\\tPanic value:\\t%v\", f, panicValue), msgAndArgs...)\n\t}\n\n\treturn true\n}\n\n// WithinDuration asserts that the two times are within duration delta of each other.\n//\n//   assert.WithinDuration(t, time.Now(), time.Now(), 10*time.Second)\nfunc WithinDuration(t TestingT, expected, actual time.Time, delta time.Duration, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\n\tdt := expected.Sub(actual)\n\tif dt < -delta || dt > delta {\n\t\treturn Fail(t, fmt.Sprintf(\"Max difference between %v and %v allowed is %v, but difference was %v\", expected, actual, delta, dt), msgAndArgs...)\n\t}\n\n\treturn true\n}\n\nfunc toFloat(x interface{}) (float64, bool) {\n\tvar xf float64\n\txok := true\n\n\tswitch xn := x.(type) {\n\tcase uint8:\n\t\txf = float64(xn)\n\tcase uint16:\n\t\txf = float64(xn)\n\tcase uint32:\n\t\txf = float64(xn)\n\tcase uint64:\n\t\txf = float64(xn)\n\tcase int:\n\t\txf = float64(xn)\n\tcase int8:\n\t\txf = float64(xn)\n\tcase int16:\n\t\txf = float64(xn)\n\tcase int32:\n\t\txf = float64(xn)\n\tcase int64:\n\t\txf = float64(xn)\n\tcase float32:\n\t\txf = float64(xn)\n\tcase float64:\n\t\txf = float64(xn)\n\tcase time.Duration:\n\t\txf = float64(xn)\n\tdefault:\n\t\txok = false\n\t}\n\n\treturn xf, xok\n}\n\n// InDelta asserts that the two numerals are within delta of each other.\n//\n// \t assert.InDelta(t, math.Pi, (22 / 7.0), 0.01)\nfunc InDelta(t TestingT, expected, actual interface{}, delta float64, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\n\taf, aok := toFloat(expected)\n\tbf, bok := toFloat(actual)\n\n\tif !aok || !bok {\n\t\treturn Fail(t, fmt.Sprintf(\"Parameters must be numerical\"), msgAndArgs...)\n\t}\n\n\tif math.IsNaN(af) {\n\t\treturn Fail(t, fmt.Sprintf(\"Expected must not be NaN\"), msgAndArgs...)\n\t}\n\n\tif math.IsNaN(bf) {\n\t\treturn Fail(t, fmt.Sprintf(\"Expected %v with delta %v, but was NaN\", expected, delta), msgAndArgs...)\n\t}\n\n\tdt := af - bf\n\tif dt < -delta || dt > delta {\n\t\treturn Fail(t, fmt.Sprintf(\"Max difference between %v and %v allowed is %v, but difference was %v\", expected, actual, delta, dt), msgAndArgs...)\n\t}\n\n\treturn true\n}\n\n// InDeltaSlice is the same as InDelta, except it compares two slices.\nfunc InDeltaSlice(t TestingT, expected, actual interface{}, delta float64, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif expected == nil || actual == nil ||\n\t\treflect.TypeOf(actual).Kind() != reflect.Slice ||\n\t\treflect.TypeOf(expected).Kind() != reflect.Slice {\n\t\treturn Fail(t, fmt.Sprintf(\"Parameters must be slice\"), msgAndArgs...)\n\t}\n\n\tactualSlice := reflect.ValueOf(actual)\n\texpectedSlice := reflect.ValueOf(expected)\n\n\tfor i := 0; i < actualSlice.Len(); i++ {\n\t\tresult := InDelta(t, actualSlice.Index(i).Interface(), expectedSlice.Index(i).Interface(), delta, msgAndArgs...)\n\t\tif !result {\n\t\t\treturn result\n\t\t}\n\t}\n\n\treturn true\n}\n\n// InDeltaMapValues is the same as InDelta, but it compares all values between two maps. Both maps must have exactly the same keys.\nfunc InDeltaMapValues(t TestingT, expected, actual interface{}, delta float64, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif expected == nil || actual == nil ||\n\t\treflect.TypeOf(actual).Kind() != reflect.Map ||\n\t\treflect.TypeOf(expected).Kind() != reflect.Map {\n\t\treturn Fail(t, \"Arguments must be maps\", msgAndArgs...)\n\t}\n\n\texpectedMap := reflect.ValueOf(expected)\n\tactualMap := reflect.ValueOf(actual)\n\n\tif expectedMap.Len() != actualMap.Len() {\n\t\treturn Fail(t, \"Arguments must have the same number of keys\", msgAndArgs...)\n\t}\n\n\tfor _, k := range expectedMap.MapKeys() {\n\t\tev := expectedMap.MapIndex(k)\n\t\tav := actualMap.MapIndex(k)\n\n\t\tif !ev.IsValid() {\n\t\t\treturn Fail(t, fmt.Sprintf(\"missing key %q in expected map\", k), msgAndArgs...)\n\t\t}\n\n\t\tif !av.IsValid() {\n\t\t\treturn Fail(t, fmt.Sprintf(\"missing key %q in actual map\", k), msgAndArgs...)\n\t\t}\n\n\t\tif !InDelta(\n\t\t\tt,\n\t\t\tev.Interface(),\n\t\t\tav.Interface(),\n\t\t\tdelta,\n\t\t\tmsgAndArgs...,\n\t\t) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\nfunc calcRelativeError(expected, actual interface{}) (float64, error) {\n\taf, aok := toFloat(expected)\n\tif !aok {\n\t\treturn 0, fmt.Errorf(\"expected value %q cannot be converted to float\", expected)\n\t}\n\tif af == 0 {\n\t\treturn 0, fmt.Errorf(\"expected value must have a value other than zero to calculate the relative error\")\n\t}\n\tbf, bok := toFloat(actual)\n\tif !bok {\n\t\treturn 0, fmt.Errorf(\"actual value %q cannot be converted to float\", actual)\n\t}\n\n\treturn math.Abs(af-bf) / math.Abs(af), nil\n}\n\n// InEpsilon asserts that expected and actual have a relative error less than epsilon\nfunc InEpsilon(t TestingT, expected, actual interface{}, epsilon float64, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tactualEpsilon, err := calcRelativeError(expected, actual)\n\tif err != nil {\n\t\treturn Fail(t, err.Error(), msgAndArgs...)\n\t}\n\tif actualEpsilon > epsilon {\n\t\treturn Fail(t, fmt.Sprintf(\"Relative error is too high: %#v (expected)\\n\"+\n\t\t\t\"        < %#v (actual)\", epsilon, actualEpsilon), msgAndArgs...)\n\t}\n\n\treturn true\n}\n\n// InEpsilonSlice is the same as InEpsilon, except it compares each value from two slices.\nfunc InEpsilonSlice(t TestingT, expected, actual interface{}, epsilon float64, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif expected == nil || actual == nil ||\n\t\treflect.TypeOf(actual).Kind() != reflect.Slice ||\n\t\treflect.TypeOf(expected).Kind() != reflect.Slice {\n\t\treturn Fail(t, fmt.Sprintf(\"Parameters must be slice\"), msgAndArgs...)\n\t}\n\n\tactualSlice := reflect.ValueOf(actual)\n\texpectedSlice := reflect.ValueOf(expected)\n\n\tfor i := 0; i < actualSlice.Len(); i++ {\n\t\tresult := InEpsilon(t, actualSlice.Index(i).Interface(), expectedSlice.Index(i).Interface(), epsilon)\n\t\tif !result {\n\t\t\treturn result\n\t\t}\n\t}\n\n\treturn true\n}\n\n/*\n\tErrors\n*/\n\n// NoError asserts that a function returned no error (i.e. `nil`).\n//\n//   actualObj, err := SomeFunction()\n//   if assert.NoError(t, err) {\n//\t   assert.Equal(t, expectedObj, actualObj)\n//   }\nfunc NoError(t TestingT, err error, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif err != nil {\n\t\treturn Fail(t, fmt.Sprintf(\"Received unexpected error:\\n%+v\", err), msgAndArgs...)\n\t}\n\n\treturn true\n}\n\n// Error asserts that a function returned an error (i.e. not `nil`).\n//\n//   actualObj, err := SomeFunction()\n//   if assert.Error(t, err) {\n//\t   assert.Equal(t, expectedError, err)\n//   }\nfunc Error(t TestingT, err error, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\n\tif err == nil {\n\t\treturn Fail(t, \"An error is expected but got nil.\", msgAndArgs...)\n\t}\n\n\treturn true\n}\n\n// EqualError asserts that a function returned an error (i.e. not `nil`)\n// and that it is equal to the provided error.\n//\n//   actualObj, err := SomeFunction()\n//   assert.EqualError(t, err,  expectedErrorString)\nfunc EqualError(t TestingT, theError error, errString string, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif !Error(t, theError, msgAndArgs...) {\n\t\treturn false\n\t}\n\texpected := errString\n\tactual := theError.Error()\n\t// don't need to use deep equals here, we know they are both strings\n\tif expected != actual {\n\t\treturn Fail(t, fmt.Sprintf(\"Error message not equal:\\n\"+\n\t\t\t\"expected: %q\\n\"+\n\t\t\t\"actual  : %q\", expected, actual), msgAndArgs...)\n\t}\n\treturn true\n}\n\n// matchRegexp return true if a specified regexp matches a string.\nfunc matchRegexp(rx interface{}, str interface{}) bool {\n\n\tvar r *regexp.Regexp\n\tif rr, ok := rx.(*regexp.Regexp); ok {\n\t\tr = rr\n\t} else {\n\t\tr = regexp.MustCompile(fmt.Sprint(rx))\n\t}\n\n\treturn (r.FindStringIndex(fmt.Sprint(str)) != nil)\n\n}\n\n// Regexp asserts that a specified regexp matches a string.\n//\n//  assert.Regexp(t, regexp.MustCompile(\"start\"), \"it's starting\")\n//  assert.Regexp(t, \"start...$\", \"it's not starting\")\nfunc Regexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\n\tmatch := matchRegexp(rx, str)\n\n\tif !match {\n\t\tFail(t, fmt.Sprintf(\"Expect \\\"%v\\\" to match \\\"%v\\\"\", str, rx), msgAndArgs...)\n\t}\n\n\treturn match\n}\n\n// NotRegexp asserts that a specified regexp does not match a string.\n//\n//  assert.NotRegexp(t, regexp.MustCompile(\"starts\"), \"it's starting\")\n//  assert.NotRegexp(t, \"^start\", \"it's not starting\")\nfunc NotRegexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tmatch := matchRegexp(rx, str)\n\n\tif match {\n\t\tFail(t, fmt.Sprintf(\"Expect \\\"%v\\\" to NOT match \\\"%v\\\"\", str, rx), msgAndArgs...)\n\t}\n\n\treturn !match\n\n}\n\n// Zero asserts that i is the zero value for its type.\nfunc Zero(t TestingT, i interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif i != nil && !reflect.DeepEqual(i, reflect.Zero(reflect.TypeOf(i)).Interface()) {\n\t\treturn Fail(t, fmt.Sprintf(\"Should be zero, but was %v\", i), msgAndArgs...)\n\t}\n\treturn true\n}\n\n// NotZero asserts that i is not the zero value for its type.\nfunc NotZero(t TestingT, i interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif i == nil || reflect.DeepEqual(i, reflect.Zero(reflect.TypeOf(i)).Interface()) {\n\t\treturn Fail(t, fmt.Sprintf(\"Should not be zero, but was %v\", i), msgAndArgs...)\n\t}\n\treturn true\n}\n\n// FileExists checks whether a file exists in the given path. It also fails if the path points to a directory or there is an error when trying to check the file.\nfunc FileExists(t TestingT, path string, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tinfo, err := os.Lstat(path)\n\tif err != nil {\n\t\tif os.IsNotExist(err) {\n\t\t\treturn Fail(t, fmt.Sprintf(\"unable to find file %q\", path), msgAndArgs...)\n\t\t}\n\t\treturn Fail(t, fmt.Sprintf(\"error when running os.Lstat(%q): %s\", path, err), msgAndArgs...)\n\t}\n\tif info.IsDir() {\n\t\treturn Fail(t, fmt.Sprintf(\"%q is a directory\", path), msgAndArgs...)\n\t}\n\treturn true\n}\n\n// DirExists checks whether a directory exists in the given path. It also fails if the path is a file rather a directory or there is an error checking whether it exists.\nfunc DirExists(t TestingT, path string, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tinfo, err := os.Lstat(path)\n\tif err != nil {\n\t\tif os.IsNotExist(err) {\n\t\t\treturn Fail(t, fmt.Sprintf(\"unable to find file %q\", path), msgAndArgs...)\n\t\t}\n\t\treturn Fail(t, fmt.Sprintf(\"error when running os.Lstat(%q): %s\", path, err), msgAndArgs...)\n\t}\n\tif !info.IsDir() {\n\t\treturn Fail(t, fmt.Sprintf(\"%q is a file\", path), msgAndArgs...)\n\t}\n\treturn true\n}\n\n// JSONEq asserts that two JSON strings are equivalent.\n//\n//  assert.JSONEq(t, `{\"hello\": \"world\", \"foo\": \"bar\"}`, `{\"foo\": \"bar\", \"hello\": \"world\"}`)\nfunc JSONEq(t TestingT, expected string, actual string, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tvar expectedJSONAsInterface, actualJSONAsInterface interface{}\n\n\tif err := json.Unmarshal([]byte(expected), &expectedJSONAsInterface); err != nil {\n\t\treturn Fail(t, fmt.Sprintf(\"Expected value ('%s') is not valid json.\\nJSON parsing error: '%s'\", expected, err.Error()), msgAndArgs...)\n\t}\n\n\tif err := json.Unmarshal([]byte(actual), &actualJSONAsInterface); err != nil {\n\t\treturn Fail(t, fmt.Sprintf(\"Input ('%s') needs to be valid json.\\nJSON parsing error: '%s'\", actual, err.Error()), msgAndArgs...)\n\t}\n\n\treturn Equal(t, expectedJSONAsInterface, actualJSONAsInterface, msgAndArgs...)\n}\n\nfunc typeAndKind(v interface{}) (reflect.Type, reflect.Kind) {\n\tt := reflect.TypeOf(v)\n\tk := t.Kind()\n\n\tif k == reflect.Ptr {\n\t\tt = t.Elem()\n\t\tk = t.Kind()\n\t}\n\treturn t, k\n}\n\n// diff returns a diff of both values as long as both are of the same type and\n// are a struct, map, slice or array. Otherwise it returns an empty string.\nfunc diff(expected interface{}, actual interface{}) string {\n\tif expected == nil || actual == nil {\n\t\treturn \"\"\n\t}\n\n\tet, ek := typeAndKind(expected)\n\tat, _ := typeAndKind(actual)\n\n\tif et != at {\n\t\treturn \"\"\n\t}\n\n\tif ek != reflect.Struct && ek != reflect.Map && ek != reflect.Slice && ek != reflect.Array && ek != reflect.String {\n\t\treturn \"\"\n\t}\n\n\tvar e, a string\n\tif ek != reflect.String {\n\t\te = spewConfig.Sdump(expected)\n\t\ta = spewConfig.Sdump(actual)\n\t} else {\n\t\te = expected.(string)\n\t\ta = actual.(string)\n\t}\n\n\tdiff, _ := difflib.GetUnifiedDiffString(difflib.UnifiedDiff{\n\t\tA:        difflib.SplitLines(e),\n\t\tB:        difflib.SplitLines(a),\n\t\tFromFile: \"Expected\",\n\t\tFromDate: \"\",\n\t\tToFile:   \"Actual\",\n\t\tToDate:   \"\",\n\t\tContext:  1,\n\t})\n\n\treturn \"\\n\\nDiff:\\n\" + diff\n}\n\n// validateEqualArgs checks whether provided arguments can be safely used in the\n// Equal/NotEqual functions.\nfunc validateEqualArgs(expected, actual interface{}) error {\n\tif isFunction(expected) || isFunction(actual) {\n\t\treturn errors.New(\"cannot take func type as argument\")\n\t}\n\treturn nil\n}\n\nfunc isFunction(arg interface{}) bool {\n\tif arg == nil {\n\t\treturn false\n\t}\n\treturn reflect.TypeOf(arg).Kind() == reflect.Func\n}\n\nvar spewConfig = spew.ConfigState{\n\tIndent:                  \" \",\n\tDisablePointerAddresses: true,\n\tDisableCapacities:       true,\n\tSortKeys:                true,\n}\n\ntype tHelper interface {\n\tHelper()\n}\n"
  },
  {
    "path": "vendor/github.com/stretchr/testify/assert/doc.go",
    "content": "// Package assert provides a set of comprehensive testing tools for use with the normal Go testing system.\n//\n// Example Usage\n//\n// The following is a complete example using assert in a standard test function:\n//    import (\n//      \"testing\"\n//      \"github.com/stretchr/testify/assert\"\n//    )\n//\n//    func TestSomething(t *testing.T) {\n//\n//      var a string = \"Hello\"\n//      var b string = \"Hello\"\n//\n//      assert.Equal(t, a, b, \"The two words should be the same.\")\n//\n//    }\n//\n// if you assert many times, use the format below:\n//\n//    import (\n//      \"testing\"\n//      \"github.com/stretchr/testify/assert\"\n//    )\n//\n//    func TestSomething(t *testing.T) {\n//      assert := assert.New(t)\n//\n//      var a string = \"Hello\"\n//      var b string = \"Hello\"\n//\n//      assert.Equal(a, b, \"The two words should be the same.\")\n//    }\n//\n// Assertions\n//\n// Assertions allow you to easily write test code, and are global funcs in the `assert` package.\n// All assertion functions take, as the first argument, the `*testing.T` object provided by the\n// testing framework. This allows the assertion funcs to write the failings and other details to\n// the correct place.\n//\n// Every assertion function also takes an optional string message as the final argument,\n// allowing custom error messages to be appended to the message the assertion method outputs.\npackage assert\n"
  },
  {
    "path": "vendor/github.com/stretchr/testify/assert/errors.go",
    "content": "package assert\n\nimport (\n\t\"errors\"\n)\n\n// AnError is an error instance useful for testing.  If the code does not care\n// about error specifics, and only needs to return the error for example, this\n// error should be used to make the test code more readable.\nvar AnError = errors.New(\"assert.AnError general error for testing\")\n"
  },
  {
    "path": "vendor/github.com/stretchr/testify/assert/forward_assertions.go",
    "content": "package assert\n\n// Assertions provides assertion methods around the\n// TestingT interface.\ntype Assertions struct {\n\tt TestingT\n}\n\n// New makes a new Assertions object for the specified TestingT.\nfunc New(t TestingT) *Assertions {\n\treturn &Assertions{\n\t\tt: t,\n\t}\n}\n\n//go:generate go run ../_codegen/main.go -output-package=assert -template=assertion_forward.go.tmpl -include-format-funcs\n"
  },
  {
    "path": "vendor/github.com/stretchr/testify/assert/http_assertions.go",
    "content": "package assert\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"net/url\"\n\t\"strings\"\n)\n\n// httpCode is a helper that returns HTTP code of the response. It returns -1 and\n// an error if building a new request fails.\nfunc httpCode(handler http.HandlerFunc, method, url string, values url.Values) (int, error) {\n\tw := httptest.NewRecorder()\n\treq, err := http.NewRequest(method, url, nil)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\treq.URL.RawQuery = values.Encode()\n\thandler(w, req)\n\treturn w.Code, nil\n}\n\n// HTTPSuccess asserts that a specified handler returns a success status code.\n//\n//  assert.HTTPSuccess(t, myHandler, \"POST\", \"http://www.google.com\", nil)\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc HTTPSuccess(t TestingT, handler http.HandlerFunc, method, url string, values url.Values, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tcode, err := httpCode(handler, method, url, values)\n\tif err != nil {\n\t\tFail(t, fmt.Sprintf(\"Failed to build test request, got error: %s\", err))\n\t\treturn false\n\t}\n\n\tisSuccessCode := code >= http.StatusOK && code <= http.StatusPartialContent\n\tif !isSuccessCode {\n\t\tFail(t, fmt.Sprintf(\"Expected HTTP success status code for %q but received %d\", url+\"?\"+values.Encode(), code))\n\t}\n\n\treturn isSuccessCode\n}\n\n// HTTPRedirect asserts that a specified handler returns a redirect status code.\n//\n//  assert.HTTPRedirect(t, myHandler, \"GET\", \"/a/b/c\", url.Values{\"a\": []string{\"b\", \"c\"}}\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc HTTPRedirect(t TestingT, handler http.HandlerFunc, method, url string, values url.Values, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tcode, err := httpCode(handler, method, url, values)\n\tif err != nil {\n\t\tFail(t, fmt.Sprintf(\"Failed to build test request, got error: %s\", err))\n\t\treturn false\n\t}\n\n\tisRedirectCode := code >= http.StatusMultipleChoices && code <= http.StatusTemporaryRedirect\n\tif !isRedirectCode {\n\t\tFail(t, fmt.Sprintf(\"Expected HTTP redirect status code for %q but received %d\", url+\"?\"+values.Encode(), code))\n\t}\n\n\treturn isRedirectCode\n}\n\n// HTTPError asserts that a specified handler returns an error status code.\n//\n//  assert.HTTPError(t, myHandler, \"POST\", \"/a/b/c\", url.Values{\"a\": []string{\"b\", \"c\"}}\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc HTTPError(t TestingT, handler http.HandlerFunc, method, url string, values url.Values, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tcode, err := httpCode(handler, method, url, values)\n\tif err != nil {\n\t\tFail(t, fmt.Sprintf(\"Failed to build test request, got error: %s\", err))\n\t\treturn false\n\t}\n\n\tisErrorCode := code >= http.StatusBadRequest\n\tif !isErrorCode {\n\t\tFail(t, fmt.Sprintf(\"Expected HTTP error status code for %q but received %d\", url+\"?\"+values.Encode(), code))\n\t}\n\n\treturn isErrorCode\n}\n\n// HTTPBody is a helper that returns HTTP body of the response. It returns\n// empty string if building a new request fails.\nfunc HTTPBody(handler http.HandlerFunc, method, url string, values url.Values) string {\n\tw := httptest.NewRecorder()\n\treq, err := http.NewRequest(method, url+\"?\"+values.Encode(), nil)\n\tif err != nil {\n\t\treturn \"\"\n\t}\n\thandler(w, req)\n\treturn w.Body.String()\n}\n\n// HTTPBodyContains asserts that a specified handler returns a\n// body that contains a string.\n//\n//  assert.HTTPBodyContains(t, myHandler, \"GET\", \"www.google.com\", nil, \"I'm Feeling Lucky\")\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc HTTPBodyContains(t TestingT, handler http.HandlerFunc, method, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tbody := HTTPBody(handler, method, url, values)\n\n\tcontains := strings.Contains(body, fmt.Sprint(str))\n\tif !contains {\n\t\tFail(t, fmt.Sprintf(\"Expected response body for \\\"%s\\\" to contain \\\"%s\\\" but found \\\"%s\\\"\", url+\"?\"+values.Encode(), str, body))\n\t}\n\n\treturn contains\n}\n\n// HTTPBodyNotContains asserts that a specified handler returns a\n// body that does not contain a string.\n//\n//  assert.HTTPBodyNotContains(t, myHandler, \"GET\", \"www.google.com\", nil, \"I'm Feeling Lucky\")\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc HTTPBodyNotContains(t TestingT, handler http.HandlerFunc, method, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tbody := HTTPBody(handler, method, url, values)\n\n\tcontains := strings.Contains(body, fmt.Sprint(str))\n\tif contains {\n\t\tFail(t, fmt.Sprintf(\"Expected response body for \\\"%s\\\" to NOT contain \\\"%s\\\" but found \\\"%s\\\"\", url+\"?\"+values.Encode(), str, body))\n\t}\n\n\treturn !contains\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/AUTHORS",
    "content": "# This source code refers to The Go Authors for copyright purposes.\n# The master list of authors is in the main Go distribution,\n# visible at https://tip.golang.org/AUTHORS.\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/CONTRIBUTORS",
    "content": "# This source code was written by the Go contributors.\n# The master list of contributors is in the main Go distribution,\n# visible at https://tip.golang.org/CONTRIBUTORS.\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/LICENSE",
    "content": "Copyright (c) 2009 The Go Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/PATENTS",
    "content": "Additional IP Rights Grant (Patents)\n\n\"This implementation\" means the copyrightable works distributed by\nGoogle as part of the Go project.\n\nGoogle hereby grants to You a perpetual, worldwide, non-exclusive,\nno-charge, royalty-free, irrevocable (except as stated in this section)\npatent license to make, have made, use, offer to sell, sell, import,\ntransfer and otherwise run, modify and propagate the contents of this\nimplementation of Go, where such license applies only to those patent\nclaims, both currently owned or controlled by Google and acquired in\nthe future, licensable by Google that are necessarily infringed by this\nimplementation of Go.  This grant does not include claims that would be\ninfringed only as a consequence of further modification of this\nimplementation.  If you or your agent or exclusive licensee institute or\norder or agree to the institution of patent litigation against any\nentity (including a cross-claim or counterclaim in a lawsuit) alleging\nthat this implementation of Go or any code incorporated within this\nimplementation of Go constitutes direct or contributory patent\ninfringement, or inducement of patent infringement, then any patent\nrights granted to you under this License for this implementation of Go\nshall terminate as of the date such litigation is filed.\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/ripemd160/ripemd160.go",
    "content": "// Copyright 2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package ripemd160 implements the RIPEMD-160 hash algorithm.\npackage ripemd160 // import \"golang.org/x/crypto/ripemd160\"\n\n// RIPEMD-160 is designed by by Hans Dobbertin, Antoon Bosselaers, and Bart\n// Preneel with specifications available at:\n// http://homes.esat.kuleuven.be/~cosicart/pdf/AB-9601/AB-9601.pdf.\n\nimport (\n\t\"crypto\"\n\t\"hash\"\n)\n\nfunc init() {\n\tcrypto.RegisterHash(crypto.RIPEMD160, New)\n}\n\n// The size of the checksum in bytes.\nconst Size = 20\n\n// The block size of the hash algorithm in bytes.\nconst BlockSize = 64\n\nconst (\n\t_s0 = 0x67452301\n\t_s1 = 0xefcdab89\n\t_s2 = 0x98badcfe\n\t_s3 = 0x10325476\n\t_s4 = 0xc3d2e1f0\n)\n\n// digest represents the partial evaluation of a checksum.\ntype digest struct {\n\ts  [5]uint32       // running context\n\tx  [BlockSize]byte // temporary buffer\n\tnx int             // index into x\n\ttc uint64          // total count of bytes processed\n}\n\nfunc (d *digest) Reset() {\n\td.s[0], d.s[1], d.s[2], d.s[3], d.s[4] = _s0, _s1, _s2, _s3, _s4\n\td.nx = 0\n\td.tc = 0\n}\n\n// New returns a new hash.Hash computing the checksum.\nfunc New() hash.Hash {\n\tresult := new(digest)\n\tresult.Reset()\n\treturn result\n}\n\nfunc (d *digest) Size() int { return Size }\n\nfunc (d *digest) BlockSize() int { return BlockSize }\n\nfunc (d *digest) Write(p []byte) (nn int, err error) {\n\tnn = len(p)\n\td.tc += uint64(nn)\n\tif d.nx > 0 {\n\t\tn := len(p)\n\t\tif n > BlockSize-d.nx {\n\t\t\tn = BlockSize - d.nx\n\t\t}\n\t\tfor i := 0; i < n; i++ {\n\t\t\td.x[d.nx+i] = p[i]\n\t\t}\n\t\td.nx += n\n\t\tif d.nx == BlockSize {\n\t\t\t_Block(d, d.x[0:])\n\t\t\td.nx = 0\n\t\t}\n\t\tp = p[n:]\n\t}\n\tn := _Block(d, p)\n\tp = p[n:]\n\tif len(p) > 0 {\n\t\td.nx = copy(d.x[:], p)\n\t}\n\treturn\n}\n\nfunc (d0 *digest) Sum(in []byte) []byte {\n\t// Make a copy of d0 so that caller can keep writing and summing.\n\td := *d0\n\n\t// Padding.  Add a 1 bit and 0 bits until 56 bytes mod 64.\n\ttc := d.tc\n\tvar tmp [64]byte\n\ttmp[0] = 0x80\n\tif tc%64 < 56 {\n\t\td.Write(tmp[0 : 56-tc%64])\n\t} else {\n\t\td.Write(tmp[0 : 64+56-tc%64])\n\t}\n\n\t// Length in bits.\n\ttc <<= 3\n\tfor i := uint(0); i < 8; i++ {\n\t\ttmp[i] = byte(tc >> (8 * i))\n\t}\n\td.Write(tmp[0:8])\n\n\tif d.nx != 0 {\n\t\tpanic(\"d.nx != 0\")\n\t}\n\n\tvar digest [Size]byte\n\tfor i, s := range d.s {\n\t\tdigest[i*4] = byte(s)\n\t\tdigest[i*4+1] = byte(s >> 8)\n\t\tdigest[i*4+2] = byte(s >> 16)\n\t\tdigest[i*4+3] = byte(s >> 24)\n\t}\n\n\treturn append(in, digest[:]...)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/ripemd160/ripemd160block.go",
    "content": "// Copyright 2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// RIPEMD-160 block step.\n// In its own file so that a faster assembly or C version\n// can be substituted easily.\n\npackage ripemd160\n\nimport (\n\t\"math/bits\"\n)\n\n// work buffer indices and roll amounts for one line\nvar _n = [80]uint{\n\t0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n\t7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n\t3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n\t1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n\t4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13,\n}\n\nvar _r = [80]uint{\n\t11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n\t7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n\t11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n\t11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n\t9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6,\n}\n\n// same for the other parallel one\nvar n_ = [80]uint{\n\t5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n\t6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n\t15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n\t8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n\t12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11,\n}\n\nvar r_ = [80]uint{\n\t8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n\t9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n\t9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n\t15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n\t8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11,\n}\n\nfunc _Block(md *digest, p []byte) int {\n\tn := 0\n\tvar x [16]uint32\n\tvar alpha, beta uint32\n\tfor len(p) >= BlockSize {\n\t\ta, b, c, d, e := md.s[0], md.s[1], md.s[2], md.s[3], md.s[4]\n\t\taa, bb, cc, dd, ee := a, b, c, d, e\n\t\tj := 0\n\t\tfor i := 0; i < 16; i++ {\n\t\t\tx[i] = uint32(p[j]) | uint32(p[j+1])<<8 | uint32(p[j+2])<<16 | uint32(p[j+3])<<24\n\t\t\tj += 4\n\t\t}\n\n\t\t// round 1\n\t\ti := 0\n\t\tfor i < 16 {\n\t\t\talpha = a + (b ^ c ^ d) + x[_n[i]]\n\t\t\ts := int(_r[i])\n\t\t\talpha = bits.RotateLeft32(alpha, s) + e\n\t\t\tbeta = bits.RotateLeft32(c, 10)\n\t\t\ta, b, c, d, e = e, alpha, b, beta, d\n\n\t\t\t// parallel line\n\t\t\talpha = aa + (bb ^ (cc | ^dd)) + x[n_[i]] + 0x50a28be6\n\t\t\ts = int(r_[i])\n\t\t\talpha = bits.RotateLeft32(alpha, s) + ee\n\t\t\tbeta = bits.RotateLeft32(cc, 10)\n\t\t\taa, bb, cc, dd, ee = ee, alpha, bb, beta, dd\n\n\t\t\ti++\n\t\t}\n\n\t\t// round 2\n\t\tfor i < 32 {\n\t\t\talpha = a + (b&c | ^b&d) + x[_n[i]] + 0x5a827999\n\t\t\ts := int(_r[i])\n\t\t\talpha = bits.RotateLeft32(alpha, s) + e\n\t\t\tbeta = bits.RotateLeft32(c, 10)\n\t\t\ta, b, c, d, e = e, alpha, b, beta, d\n\n\t\t\t// parallel line\n\t\t\talpha = aa + (bb&dd | cc&^dd) + x[n_[i]] + 0x5c4dd124\n\t\t\ts = int(r_[i])\n\t\t\talpha = bits.RotateLeft32(alpha, s) + ee\n\t\t\tbeta = bits.RotateLeft32(cc, 10)\n\t\t\taa, bb, cc, dd, ee = ee, alpha, bb, beta, dd\n\n\t\t\ti++\n\t\t}\n\n\t\t// round 3\n\t\tfor i < 48 {\n\t\t\talpha = a + (b | ^c ^ d) + x[_n[i]] + 0x6ed9eba1\n\t\t\ts := int(_r[i])\n\t\t\talpha = bits.RotateLeft32(alpha, s) + e\n\t\t\tbeta = bits.RotateLeft32(c, 10)\n\t\t\ta, b, c, d, e = e, alpha, b, beta, d\n\n\t\t\t// parallel line\n\t\t\talpha = aa + (bb | ^cc ^ dd) + x[n_[i]] + 0x6d703ef3\n\t\t\ts = int(r_[i])\n\t\t\talpha = bits.RotateLeft32(alpha, s) + ee\n\t\t\tbeta = bits.RotateLeft32(cc, 10)\n\t\t\taa, bb, cc, dd, ee = ee, alpha, bb, beta, dd\n\n\t\t\ti++\n\t\t}\n\n\t\t// round 4\n\t\tfor i < 64 {\n\t\t\talpha = a + (b&d | c&^d) + x[_n[i]] + 0x8f1bbcdc\n\t\t\ts := int(_r[i])\n\t\t\talpha = bits.RotateLeft32(alpha, s) + e\n\t\t\tbeta = bits.RotateLeft32(c, 10)\n\t\t\ta, b, c, d, e = e, alpha, b, beta, d\n\n\t\t\t// parallel line\n\t\t\talpha = aa + (bb&cc | ^bb&dd) + x[n_[i]] + 0x7a6d76e9\n\t\t\ts = int(r_[i])\n\t\t\talpha = bits.RotateLeft32(alpha, s) + ee\n\t\t\tbeta = bits.RotateLeft32(cc, 10)\n\t\t\taa, bb, cc, dd, ee = ee, alpha, bb, beta, dd\n\n\t\t\ti++\n\t\t}\n\n\t\t// round 5\n\t\tfor i < 80 {\n\t\t\talpha = a + (b ^ (c | ^d)) + x[_n[i]] + 0xa953fd4e\n\t\t\ts := int(_r[i])\n\t\t\talpha = bits.RotateLeft32(alpha, s) + e\n\t\t\tbeta = bits.RotateLeft32(c, 10)\n\t\t\ta, b, c, d, e = e, alpha, b, beta, d\n\n\t\t\t// parallel line\n\t\t\talpha = aa + (bb ^ cc ^ dd) + x[n_[i]]\n\t\t\ts = int(r_[i])\n\t\t\talpha = bits.RotateLeft32(alpha, s) + ee\n\t\t\tbeta = bits.RotateLeft32(cc, 10)\n\t\t\taa, bb, cc, dd, ee = ee, alpha, bb, beta, dd\n\n\t\t\ti++\n\t\t}\n\n\t\t// combine results\n\t\tdd += c + md.s[1]\n\t\tmd.s[1] = md.s[2] + d + ee\n\t\tmd.s[2] = md.s[3] + e + aa\n\t\tmd.s[3] = md.s[4] + a + bb\n\t\tmd.s[4] = md.s[0] + b + cc\n\t\tmd.s[0] = dd\n\n\t\tp = p[BlockSize:]\n\t\tn += BlockSize\n\t}\n\treturn n\n}\n"
  },
  {
    "path": "vendor/gopkg.in/alecthomas/kingpin.v2/.travis.yml",
    "content": "sudo: false\nlanguage: go\ninstall: go get -t -v ./...\ngo: 1.2\n"
  },
  {
    "path": "vendor/gopkg.in/alecthomas/kingpin.v2/COPYING",
    "content": "Copyright (C) 2014 Alec Thomas\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "vendor/gopkg.in/alecthomas/kingpin.v2/README.md",
    "content": "# Kingpin - A Go (golang) command line and flag parser\n[![](https://godoc.org/github.com/alecthomas/kingpin?status.svg)](http://godoc.org/github.com/alecthomas/kingpin) [![Build Status](https://travis-ci.org/alecthomas/kingpin.svg?branch=master)](https://travis-ci.org/alecthomas/kingpin) [![Gitter chat](https://badges.gitter.im/alecthomas.png)](https://gitter.im/alecthomas/Lobby)\n\n\n\n<!-- MarkdownTOC -->\n\n- [Overview](#overview)\n- [Features](#features)\n- [User-visible changes between v1 and v2](#user-visible-changes-between-v1-and-v2)\n  - [Flags can be used at any point after their definition.](#flags-can-be-used-at-any-point-after-their-definition)\n  - [Short flags can be combined with their parameters](#short-flags-can-be-combined-with-their-parameters)\n- [API changes between v1 and v2](#api-changes-between-v1-and-v2)\n- [Versions](#versions)\n  - [V2 is the current stable version](#v2-is-the-current-stable-version)\n  - [V1 is the OLD stable version](#v1-is-the-old-stable-version)\n- [Change History](#change-history)\n- [Examples](#examples)\n  - [Simple Example](#simple-example)\n  - [Complex Example](#complex-example)\n- [Reference Documentation](#reference-documentation)\n  - [Displaying errors and usage information](#displaying-errors-and-usage-information)\n  - [Sub-commands](#sub-commands)\n  - [Custom Parsers](#custom-parsers)\n  - [Repeatable flags](#repeatable-flags)\n  - [Boolean Values](#boolean-values)\n  - [Default Values](#default-values)\n  - [Place-holders in Help](#place-holders-in-help)\n  - [Consuming all remaining arguments](#consuming-all-remaining-arguments)\n  - [Bash/ZSH Shell Completion](#bashzsh-shell-completion)\n  - [Supporting -h for help](#supporting--h-for-help)\n  - [Custom help](#custom-help)\n\n<!-- /MarkdownTOC -->\n\n## Overview\n\nKingpin is a [fluent-style](http://en.wikipedia.org/wiki/Fluent_interface),\ntype-safe command-line parser. It supports flags, nested commands, and\npositional arguments.\n\nInstall it with:\n\n    $ go get gopkg.in/alecthomas/kingpin.v2\n\nIt looks like this:\n\n```go\nvar (\n  verbose = kingpin.Flag(\"verbose\", \"Verbose mode.\").Short('v').Bool()\n  name    = kingpin.Arg(\"name\", \"Name of user.\").Required().String()\n)\n\nfunc main() {\n  kingpin.Parse()\n  fmt.Printf(\"%v, %s\\n\", *verbose, *name)\n}\n```\n\nMore [examples](https://github.com/alecthomas/kingpin/tree/master/_examples) are available.\n\nSecond to parsing, providing the user with useful help is probably the most\nimportant thing a command-line parser does. Kingpin tries to provide detailed\ncontextual help if `--help` is encountered at any point in the command line\n(excluding after `--`).\n\n## Features\n\n- Help output that isn't as ugly as sin.\n- Fully [customisable help](#custom-help), via Go templates.\n- Parsed, type-safe flags (`kingpin.Flag(\"f\", \"help\").Int()`)\n- Parsed, type-safe positional arguments (`kingpin.Arg(\"a\", \"help\").Int()`).\n- Parsed, type-safe, arbitrarily deep commands (`kingpin.Command(\"c\", \"help\")`).\n- Support for required flags and required positional arguments (`kingpin.Flag(\"f\", \"\").Required().Int()`).\n- Support for arbitrarily nested default commands (`command.Default()`).\n- Callbacks per command, flag and argument (`kingpin.Command(\"c\", \"\").Action(myAction)`).\n- POSIX-style short flag combining (`-a -b` -> `-ab`).\n- Short-flag+parameter combining (`-a parm` -> `-aparm`).\n- Read command-line from files (`@<file>`).\n- Automatically generate man pages (`--help-man`).\n\n## User-visible changes between v1 and v2\n\n### Flags can be used at any point after their definition.\n\nFlags can be specified at any point after their definition, not just\n*immediately after their associated command*. From the chat example below, the\nfollowing used to be required:\n\n```\n$ chat --server=chat.server.com:8080 post --image=~/Downloads/owls.jpg pics\n```\n\nBut the following will now work:\n\n```\n$ chat post --server=chat.server.com:8080 --image=~/Downloads/owls.jpg pics\n```\n\n### Short flags can be combined with their parameters\n\nPreviously, if a short flag was used, any argument to that flag would have to\nbe separated by a space. That is no longer the case.\n\n## API changes between v1 and v2\n\n- `ParseWithFileExpansion()` is gone. The new parser directly supports expanding `@<file>`.\n- Added `FatalUsage()` and `FatalUsageContext()` for displaying an error + usage and terminating.\n- `Dispatch()` renamed to `Action()`.\n- Added `ParseContext()` for parsing a command line into its intermediate context form without executing.\n- Added `Terminate()` function to override the termination function.\n- Added `UsageForContextWithTemplate()` for printing usage via a custom template.\n- Added `UsageTemplate()` for overriding the default template to use. Two templates are included:\n    1. `DefaultUsageTemplate` - default template.\n    2. `CompactUsageTemplate` - compact command template for larger applications.\n\n## Versions\n\nKingpin uses [gopkg.in](https://gopkg.in/alecthomas/kingpin) for versioning.\n\nThe current stable version is [gopkg.in/alecthomas/kingpin.v2](https://gopkg.in/alecthomas/kingpin.v2). The previous version, [gopkg.in/alecthomas/kingpin.v1](https://gopkg.in/alecthomas/kingpin.v1), is deprecated and in maintenance mode.\n\n### [V2](https://gopkg.in/alecthomas/kingpin.v2) is the current stable version\n\nInstallation:\n\n```sh\n$ go get gopkg.in/alecthomas/kingpin.v2\n```\n\n### [V1](https://gopkg.in/alecthomas/kingpin.v1) is the OLD stable version\n\nInstallation:\n\n```sh\n$ go get gopkg.in/alecthomas/kingpin.v1\n```\n\n## Change History\n\n- *2015-09-19* -- Stable v2.1.0 release.\n    - Added `command.Default()` to specify a default command to use if no other\n      command matches. This allows for convenient user shortcuts.\n    - Exposed `HelpFlag` and `VersionFlag` for further customisation.\n    - `Action()` and `PreAction()` added and both now support an arbitrary\n      number of callbacks.\n    - `kingpin.SeparateOptionalFlagsUsageTemplate`.\n    - `--help-long` and `--help-man` (hidden by default) flags.\n    - Flags are \"interspersed\" by default, but can be disabled with `app.Interspersed(false)`.\n    - Added flags for all simple builtin types (int8, uint16, etc.) and slice variants.\n    - Use `app.Writer(os.Writer)` to specify the default writer for all output functions.\n    - Dropped `os.Writer` prefix from all printf-like functions.\n\n- *2015-05-22* -- Stable v2.0.0 release.\n    - Initial stable release of v2.0.0.\n    - Fully supports interspersed flags, commands and arguments.\n    - Flags can be present at any point after their logical definition.\n    - Application.Parse() terminates if commands are present and a command is not parsed.\n    - Dispatch() -> Action().\n    - Actions are dispatched after all values are populated.\n    - Override termination function (defaults to os.Exit).\n    - Override output stream (defaults to os.Stderr).\n    - Templatised usage help, with default and compact templates.\n    - Make error/usage functions more consistent.\n    - Support argument expansion from files by default (with @<file>).\n    - Fully public data model is available via .Model().\n    - Parser has been completely refactored.\n    - Parsing and execution has been split into distinct stages.\n    - Use `go generate` to generate repeated flags.\n    - Support combined short-flag+argument: -fARG.\n\n- *2015-01-23* -- Stable v1.3.4 release.\n    - Support \"--\" for separating flags from positional arguments.\n    - Support loading flags from files (ParseWithFileExpansion()). Use @FILE as an argument.\n    - Add post-app and post-cmd validation hooks. This allows arbitrary validation to be added.\n    - A bunch of improvements to help usage and formatting.\n    - Support arbitrarily nested sub-commands.\n\n- *2014-07-08* -- Stable v1.2.0 release.\n    - Pass any value through to `Strings()` when final argument.\n      Allows for values that look like flags to be processed.\n    - Allow `--help` to be used with commands.\n    - Support `Hidden()` flags.\n    - Parser for [units.Base2Bytes](https://github.com/alecthomas/units)\n      type. Allows for flags like `--ram=512MB` or `--ram=1GB`.\n    - Add an `Enum()` value, allowing only one of a set of values\n      to be selected. eg. `Flag(...).Enum(\"debug\", \"info\", \"warning\")`.\n\n- *2014-06-27* -- Stable v1.1.0 release.\n    - Bug fixes.\n    - Always return an error (rather than panicing) when misconfigured.\n    - `OpenFile(flag, perm)` value type added, for finer control over opening files.\n    - Significantly improved usage formatting.\n\n- *2014-06-19* -- Stable v1.0.0 release.\n    - Support [cumulative positional](#consuming-all-remaining-arguments) arguments.\n    - Return error rather than panic when there are fatal errors not caught by\n      the type system. eg. when a default value is invalid.\n    - Use gokpg.in.\n\n- *2014-06-10* -- Place-holder streamlining.\n    - Renamed `MetaVar` to `PlaceHolder`.\n    - Removed `MetaVarFromDefault`. Kingpin now uses [heuristics](#place-holders-in-help)\n      to determine what to display.\n\n## Examples\n\n### Simple Example\n\nKingpin can be used for simple flag+arg applications like so:\n\n```\n$ ping --help\nusage: ping [<flags>] <ip> [<count>]\n\nFlags:\n  --debug            Enable debug mode.\n  --help             Show help.\n  -t, --timeout=5s   Timeout waiting for ping.\n\nArgs:\n  <ip>        IP address to ping.\n  [<count>]   Number of packets to send\n$ ping 1.2.3.4 5\nWould ping: 1.2.3.4 with timeout 5s and count 5\n```\n\nFrom the following source:\n\n```go\npackage main\n\nimport (\n  \"fmt\"\n\n  \"gopkg.in/alecthomas/kingpin.v2\"\n)\n\nvar (\n  debug   = kingpin.Flag(\"debug\", \"Enable debug mode.\").Bool()\n  timeout = kingpin.Flag(\"timeout\", \"Timeout waiting for ping.\").Default(\"5s\").OverrideDefaultFromEnvar(\"PING_TIMEOUT\").Short('t').Duration()\n  ip      = kingpin.Arg(\"ip\", \"IP address to ping.\").Required().IP()\n  count   = kingpin.Arg(\"count\", \"Number of packets to send\").Int()\n)\n\nfunc main() {\n  kingpin.Version(\"0.0.1\")\n  kingpin.Parse()\n  fmt.Printf(\"Would ping: %s with timeout %s and count %d\\n\", *ip, *timeout, *count)\n}\n```\n\n### Complex Example\n\nKingpin can also produce complex command-line applications with global flags,\nsubcommands, and per-subcommand flags, like this:\n\n```\n$ chat --help\nusage: chat [<flags>] <command> [<flags>] [<args> ...]\n\nA command-line chat application.\n\nFlags:\n  --help              Show help.\n  --debug             Enable debug mode.\n  --server=127.0.0.1  Server address.\n\nCommands:\n  help [<command>]\n    Show help for a command.\n\n  register <nick> <name>\n    Register a new user.\n\n  post [<flags>] <channel> [<text>]\n    Post a message to a channel.\n\n$ chat help post\nusage: chat [<flags>] post [<flags>] <channel> [<text>]\n\nPost a message to a channel.\n\nFlags:\n  --image=IMAGE  Image to post.\n\nArgs:\n  <channel>  Channel to post to.\n  [<text>]   Text to post.\n\n$ chat post --image=~/Downloads/owls.jpg pics\n...\n```\n\nFrom this code:\n\n```go\npackage main\n\nimport (\n  \"os\"\n  \"strings\"\n  \"gopkg.in/alecthomas/kingpin.v2\"\n)\n\nvar (\n  app      = kingpin.New(\"chat\", \"A command-line chat application.\")\n  debug    = app.Flag(\"debug\", \"Enable debug mode.\").Bool()\n  serverIP = app.Flag(\"server\", \"Server address.\").Default(\"127.0.0.1\").IP()\n\n  register     = app.Command(\"register\", \"Register a new user.\")\n  registerNick = register.Arg(\"nick\", \"Nickname for user.\").Required().String()\n  registerName = register.Arg(\"name\", \"Name of user.\").Required().String()\n\n  post        = app.Command(\"post\", \"Post a message to a channel.\")\n  postImage   = post.Flag(\"image\", \"Image to post.\").File()\n  postChannel = post.Arg(\"channel\", \"Channel to post to.\").Required().String()\n  postText    = post.Arg(\"text\", \"Text to post.\").Strings()\n)\n\nfunc main() {\n  switch kingpin.MustParse(app.Parse(os.Args[1:])) {\n  // Register user\n  case register.FullCommand():\n    println(*registerNick)\n\n  // Post message\n  case post.FullCommand():\n    if *postImage != nil {\n    }\n    text := strings.Join(*postText, \" \")\n    println(\"Post:\", text)\n  }\n}\n```\n\n## Reference Documentation\n\n### Displaying errors and usage information\n\nKingpin exports a set of functions to provide consistent errors and usage\ninformation to the user.\n\nError messages look something like this:\n\n    <app>: error: <message>\n\nThe functions on `Application` are:\n\nFunction | Purpose\n---------|--------------\n`Errorf(format, args)` | Display a printf formatted error to the user.\n`Fatalf(format, args)` | As with Errorf, but also call the termination handler.\n`FatalUsage(format, args)` | As with Fatalf, but also print contextual usage information.\n`FatalUsageContext(context, format, args)` | As with Fatalf, but also print contextual usage information from a `ParseContext`.\n`FatalIfError(err, format, args)` | Conditionally print an error prefixed with format+args, then call the termination handler\n\nThere are equivalent global functions in the kingpin namespace for the default\n`kingpin.CommandLine` instance.\n\n### Sub-commands\n\nKingpin supports nested sub-commands, with separate flag and positional\narguments per sub-command. Note that positional arguments may only occur after\nsub-commands.\n\nFor example:\n\n```go\nvar (\n  deleteCommand     = kingpin.Command(\"delete\", \"Delete an object.\")\n  deleteUserCommand = deleteCommand.Command(\"user\", \"Delete a user.\")\n  deleteUserUIDFlag = deleteUserCommand.Flag(\"uid\", \"Delete user by UID rather than username.\")\n  deleteUserUsername = deleteUserCommand.Arg(\"username\", \"Username to delete.\")\n  deletePostCommand = deleteCommand.Command(\"post\", \"Delete a post.\")\n)\n\nfunc main() {\n  switch kingpin.Parse() {\n  case \"delete user\":\n  case \"delete post\":\n  }\n}\n```\n\n### Custom Parsers\n\nKingpin supports both flag and positional argument parsers for converting to\nGo types. For example, some included parsers are `Int()`, `Float()`,\n`Duration()` and `ExistingFile()` (see [parsers.go](./parsers.go) for a complete list of included parsers).\n\nParsers conform to Go's [`flag.Value`](http://godoc.org/flag#Value)\ninterface, so any existing implementations will work.\n\nFor example, a parser for accumulating HTTP header values might look like this:\n\n```go\ntype HTTPHeaderValue http.Header\n\nfunc (h *HTTPHeaderValue) Set(value string) error {\n  parts := strings.SplitN(value, \":\", 2)\n  if len(parts) != 2 {\n    return fmt.Errorf(\"expected HEADER:VALUE got '%s'\", value)\n  }\n  (*http.Header)(h).Add(parts[0], parts[1])\n  return nil\n}\n\nfunc (h *HTTPHeaderValue) String() string {\n  return \"\"\n}\n```\n\nAs a convenience, I would recommend something like this:\n\n```go\nfunc HTTPHeader(s Settings) (target *http.Header) {\n  target = &http.Header{}\n  s.SetValue((*HTTPHeaderValue)(target))\n  return\n}\n```\n\nYou would use it like so:\n\n```go\nheaders = HTTPHeader(kingpin.Flag(\"header\", \"Add a HTTP header to the request.\").Short('H'))\n```\n\n### Repeatable flags\n\nDepending on the `Value` they hold, some flags may be repeated. The\n`IsCumulative() bool` function on `Value` tells if it's safe to call `Set()`\nmultiple times or if an error should be raised if several values are passed.\n\nThe built-in `Value`s returning slices and maps, as well as `Counter` are\nexamples of `Value`s that make a flag repeatable.\n\n### Boolean values\n\nBoolean values are uniquely managed by Kingpin. Each boolean flag will have a negative complement:\n`--<name>` and `--no-<name>`.\n\n### Default Values\n\nThe default value is the zero value for a type. This can be overridden with\nthe `Default(value...)` function on flags and arguments. This function accepts\none or several strings, which are parsed by the value itself, so they *must*\nbe compliant with the format expected.\n\n### Place-holders in Help\n\nThe place-holder value for a flag is the value used in the help to describe\nthe value of a non-boolean flag.\n\nThe value provided to PlaceHolder() is used if provided, then the value\nprovided by Default() if provided, then finally the capitalised flag name is\nused.\n\nHere are some examples of flags with various permutations:\n\n    --name=NAME           // Flag(...).String()\n    --name=\"Harry\"        // Flag(...).Default(\"Harry\").String()\n    --name=FULL-NAME      // Flag(...).PlaceHolder(\"FULL-NAME\").Default(\"Harry\").String()\n\n### Consuming all remaining arguments\n\nA common command-line idiom is to use all remaining arguments for some\npurpose. eg. The following command accepts an arbitrary number of\nIP addresses as positional arguments:\n\n    ./cmd ping 10.1.1.1 192.168.1.1\n\nSuch arguments are similar to [repeatable flags](#repeatable-flags), but for\narguments. Therefore they use the same `IsCumulative() bool` function on the\nunderlying `Value`, so the built-in `Value`s for which the `Set()` function\ncan be called several times will consume multiple arguments.\n\nTo implement the above example with a custom `Value`, we might do something\nlike this:\n\n```go\ntype ipList []net.IP\n\nfunc (i *ipList) Set(value string) error {\n  if ip := net.ParseIP(value); ip == nil {\n    return fmt.Errorf(\"'%s' is not an IP address\", value)\n  } else {\n    *i = append(*i, ip)\n    return nil\n  }\n}\n\nfunc (i *ipList) String() string {\n  return \"\"\n}\n\nfunc (i *ipList) IsCumulative() bool {\n  return true\n}\n\nfunc IPList(s Settings) (target *[]net.IP) {\n  target = new([]net.IP)\n  s.SetValue((*ipList)(target))\n  return\n}\n```\n\nAnd use it like so:\n\n```go\nips := IPList(kingpin.Arg(\"ips\", \"IP addresses to ping.\"))\n```\n\n### Bash/ZSH Shell Completion\n\nBy default, all flags and commands/subcommands generate completions \ninternally.\n\nOut of the box, CLI tools using kingpin should be able to take advantage \nof completion hinting for flags and commands. By specifying \n`--completion-bash` as the first argument, your CLI tool will show \npossible subcommands. By ending your argv with `--`, hints for flags \nwill be shown.\n\nTo allow your end users to take advantage you must package a \n`/etc/bash_completion.d` script with your distribution (or the equivalent \nfor your target platform/shell). An alternative is to instruct your end \nuser to source a script from their `bash_profile` (or equivalent).\n\nFortunately Kingpin makes it easy to generate or source a script for use\nwith end users shells. `./yourtool --completion-script-bash` and \n`./yourtool --completion-script-zsh` will generate these scripts for you.\n\n**Installation by Package**\n\nFor the best user experience, you should bundle your pre-created \ncompletion script with your CLI tool and install it inside \n`/etc/bash_completion.d` (or equivalent). A good suggestion is to add \nthis as an automated step to your build pipeline, in the implementation \nis improved for bug fixed.\n\n**Installation by `bash_profile`**\n\nAlternatively, instruct your users to add an additional statement to \ntheir `bash_profile` (or equivalent):\n\n```\neval \"$(your-cli-tool --completion-script-bash)\"\n```\n\nOr for ZSH\n\n```\neval \"$(your-cli-tool --completion-script-zsh)\"\n```\n\n#### Additional API\nTo provide more flexibility, a completion option API has been\nexposed for flags to allow user defined completion options, to extend\ncompletions further than just EnumVar/Enum. \n\n\n**Provide Static Options**\n\nWhen using an `Enum` or `EnumVar`, users are limited to only the options \ngiven. Maybe we wish to hint possible options to the user, but also \nallow them to provide their own custom option. `HintOptions` gives\nthis functionality to flags.\n\n```\napp := kingpin.New(\"completion\", \"My application with bash completion.\")\napp.Flag(\"port\", \"Provide a port to connect to\").\n    Required().\n    HintOptions(\"80\", \"443\", \"8080\").\n    IntVar(&c.port)\n```\n\n**Provide Dynamic Options**\nConsider the case that you needed to read a local database or a file to \nprovide suggestions. You can dynamically generate the options\n\n```\nfunc listHosts() []string {\n  // Provide a dynamic list of hosts from a hosts file or otherwise\n  // for bash completion. In this example we simply return static slice.\n\n  // You could use this functionality to reach into a hosts file to provide\n  // completion for a list of known hosts.\n  return []string{\"sshhost.example\", \"webhost.example\", \"ftphost.example\"}\n}\n\napp := kingpin.New(\"completion\", \"My application with bash completion.\")\napp.Flag(\"flag-1\", \"\").HintAction(listHosts).String()\n```\n\n**EnumVar/Enum**\nWhen using `Enum` or `EnumVar`, any provided options will be automatically\nused for bash autocompletion. However, if you wish to provide a subset or \ndifferent options, you can use `HintOptions` or `HintAction` which will override\nthe default completion options for `Enum`/`EnumVar`.\n\n\n**Examples**\nYou can see an in depth example of the completion API within \n`examples/completion/main.go`\n\n\n### Supporting -h for help\n\n`kingpin.CommandLine.HelpFlag.Short('h')`\n\n### Custom help\n\nKingpin v2 supports templatised help using the text/template library (actually, [a fork](https://github.com/alecthomas/template)).\n\nYou can specify the template to use with the [Application.UsageTemplate()](http://godoc.org/gopkg.in/alecthomas/kingpin.v2#Application.UsageTemplate) function.\n\nThere are four included templates: `kingpin.DefaultUsageTemplate` is the default,\n`kingpin.CompactUsageTemplate` provides a more compact representation for more complex command-line structures,\n`kingpin.SeparateOptionalFlagsUsageTemplate` looks like the default template, but splits required\nand optional command flags into separate lists, and `kingpin.ManPageTemplate` is used to generate man pages.\n\nSee the above templates for examples of usage, and the the function [UsageForContextWithTemplate()](https://github.com/alecthomas/kingpin/blob/master/usage.go#L198) method for details on the context.\n\n#### Default help template\n\n```\n$ go run ./examples/curl/curl.go --help\nusage: curl [<flags>] <command> [<args> ...]\n\nAn example implementation of curl.\n\nFlags:\n  --help            Show help.\n  -t, --timeout=5s  Set connection timeout.\n  -H, --headers=HEADER=VALUE\n                    Add HTTP headers to the request.\n\nCommands:\n  help [<command>...]\n    Show help.\n\n  get url <url>\n    Retrieve a URL.\n\n  get file <file>\n    Retrieve a file.\n\n  post [<flags>] <url>\n    POST a resource.\n```\n\n#### Compact help template\n\n```\n$ go run ./examples/curl/curl.go --help\nusage: curl [<flags>] <command> [<args> ...]\n\nAn example implementation of curl.\n\nFlags:\n  --help            Show help.\n  -t, --timeout=5s  Set connection timeout.\n  -H, --headers=HEADER=VALUE\n                    Add HTTP headers to the request.\n\nCommands:\n  help [<command>...]\n  get [<flags>]\n    url <url>\n    file <file>\n  post [<flags>] <url>\n```\n"
  },
  {
    "path": "vendor/gopkg.in/alecthomas/kingpin.v2/actions.go",
    "content": "package kingpin\n\n// Action callback executed at various stages after all values are populated.\n// The application, commands, arguments and flags all have corresponding\n// actions.\ntype Action func(*ParseContext) error\n\ntype actionMixin struct {\n\tactions    []Action\n\tpreActions []Action\n}\n\ntype actionApplier interface {\n\tapplyActions(*ParseContext) error\n\tapplyPreActions(*ParseContext) error\n}\n\nfunc (a *actionMixin) addAction(action Action) {\n\ta.actions = append(a.actions, action)\n}\n\nfunc (a *actionMixin) addPreAction(action Action) {\n\ta.preActions = append(a.preActions, action)\n}\n\nfunc (a *actionMixin) applyActions(context *ParseContext) error {\n\tfor _, action := range a.actions {\n\t\tif err := action(context); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (a *actionMixin) applyPreActions(context *ParseContext) error {\n\tfor _, preAction := range a.preActions {\n\t\tif err := preAction(context); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/gopkg.in/alecthomas/kingpin.v2/app.go",
    "content": "package kingpin\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"regexp\"\n\t\"strings\"\n)\n\nvar (\n\tErrCommandNotSpecified = fmt.Errorf(\"command not specified\")\n)\n\nvar (\n\tenvarTransformRegexp = regexp.MustCompile(`[^a-zA-Z0-9_]+`)\n)\n\ntype ApplicationValidator func(*Application) error\n\n// An Application contains the definitions of flags, arguments and commands\n// for an application.\ntype Application struct {\n\tcmdMixin\n\tinitialized bool\n\n\tName string\n\tHelp string\n\n\tauthor         string\n\tversion        string\n\terrorWriter    io.Writer // Destination for errors.\n\tusageWriter    io.Writer // Destination for usage\n\tusageTemplate  string\n\tvalidator      ApplicationValidator\n\tterminate      func(status int) // See Terminate()\n\tnoInterspersed bool             // can flags be interspersed with args (or must they come first)\n\tdefaultEnvars  bool\n\tcompletion     bool\n\n\t// Help flag. Exposed for user customisation.\n\tHelpFlag *FlagClause\n\t// Help command. Exposed for user customisation. May be nil.\n\tHelpCommand *CmdClause\n\t// Version flag. Exposed for user customisation. May be nil.\n\tVersionFlag *FlagClause\n}\n\n// New creates a new Kingpin application instance.\nfunc New(name, help string) *Application {\n\ta := &Application{\n\t\tName:          name,\n\t\tHelp:          help,\n\t\terrorWriter:   os.Stderr, // Left for backwards compatibility purposes.\n\t\tusageWriter:   os.Stderr,\n\t\tusageTemplate: DefaultUsageTemplate,\n\t\tterminate:     os.Exit,\n\t}\n\ta.flagGroup = newFlagGroup()\n\ta.argGroup = newArgGroup()\n\ta.cmdGroup = newCmdGroup(a)\n\ta.HelpFlag = a.Flag(\"help\", \"Show context-sensitive help (also try --help-long and --help-man).\")\n\ta.HelpFlag.Bool()\n\ta.Flag(\"help-long\", \"Generate long help.\").Hidden().PreAction(a.generateLongHelp).Bool()\n\ta.Flag(\"help-man\", \"Generate a man page.\").Hidden().PreAction(a.generateManPage).Bool()\n\ta.Flag(\"completion-bash\", \"Output possible completions for the given args.\").Hidden().BoolVar(&a.completion)\n\ta.Flag(\"completion-script-bash\", \"Generate completion script for bash.\").Hidden().PreAction(a.generateBashCompletionScript).Bool()\n\ta.Flag(\"completion-script-zsh\", \"Generate completion script for ZSH.\").Hidden().PreAction(a.generateZSHCompletionScript).Bool()\n\n\treturn a\n}\n\nfunc (a *Application) generateLongHelp(c *ParseContext) error {\n\ta.Writer(os.Stdout)\n\tif err := a.UsageForContextWithTemplate(c, 2, LongHelpTemplate); err != nil {\n\t\treturn err\n\t}\n\ta.terminate(0)\n\treturn nil\n}\n\nfunc (a *Application) generateManPage(c *ParseContext) error {\n\ta.Writer(os.Stdout)\n\tif err := a.UsageForContextWithTemplate(c, 2, ManPageTemplate); err != nil {\n\t\treturn err\n\t}\n\ta.terminate(0)\n\treturn nil\n}\n\nfunc (a *Application) generateBashCompletionScript(c *ParseContext) error {\n\ta.Writer(os.Stdout)\n\tif err := a.UsageForContextWithTemplate(c, 2, BashCompletionTemplate); err != nil {\n\t\treturn err\n\t}\n\ta.terminate(0)\n\treturn nil\n}\n\nfunc (a *Application) generateZSHCompletionScript(c *ParseContext) error {\n\ta.Writer(os.Stdout)\n\tif err := a.UsageForContextWithTemplate(c, 2, ZshCompletionTemplate); err != nil {\n\t\treturn err\n\t}\n\ta.terminate(0)\n\treturn nil\n}\n\n// DefaultEnvars configures all flags (that do not already have an associated\n// envar) to use a default environment variable in the form \"<app>_<flag>\".\n//\n// For example, if the application is named \"foo\" and a flag is named \"bar-\n// waz\" the environment variable: \"FOO_BAR_WAZ\".\nfunc (a *Application) DefaultEnvars() *Application {\n\ta.defaultEnvars = true\n\treturn a\n}\n\n// Terminate specifies the termination handler. Defaults to os.Exit(status).\n// If nil is passed, a no-op function will be used.\nfunc (a *Application) Terminate(terminate func(int)) *Application {\n\tif terminate == nil {\n\t\tterminate = func(int) {}\n\t}\n\ta.terminate = terminate\n\treturn a\n}\n\n// Writer specifies the writer to use for usage and errors. Defaults to os.Stderr.\n// DEPRECATED: See ErrorWriter and UsageWriter.\nfunc (a *Application) Writer(w io.Writer) *Application {\n\ta.errorWriter = w\n\ta.usageWriter = w\n\treturn a\n}\n\n// ErrorWriter sets the io.Writer to use for errors.\nfunc (a *Application) ErrorWriter(w io.Writer) *Application {\n\ta.errorWriter = w\n\treturn a\n}\n\n// UsageWriter sets the io.Writer to use for errors.\nfunc (a *Application) UsageWriter(w io.Writer) *Application {\n\ta.usageWriter = w\n\treturn a\n}\n\n// UsageTemplate specifies the text template to use when displaying usage\n// information. The default is UsageTemplate.\nfunc (a *Application) UsageTemplate(template string) *Application {\n\ta.usageTemplate = template\n\treturn a\n}\n\n// Validate sets a validation function to run when parsing.\nfunc (a *Application) Validate(validator ApplicationValidator) *Application {\n\ta.validator = validator\n\treturn a\n}\n\n// ParseContext parses the given command line and returns the fully populated\n// ParseContext.\nfunc (a *Application) ParseContext(args []string) (*ParseContext, error) {\n\treturn a.parseContext(false, args)\n}\n\nfunc (a *Application) parseContext(ignoreDefault bool, args []string) (*ParseContext, error) {\n\tif err := a.init(); err != nil {\n\t\treturn nil, err\n\t}\n\tcontext := tokenize(args, ignoreDefault)\n\terr := parse(context, a)\n\treturn context, err\n}\n\n// Parse parses command-line arguments. It returns the selected command and an\n// error. The selected command will be a space separated subcommand, if\n// subcommands have been configured.\n//\n// This will populate all flag and argument values, call all callbacks, and so\n// on.\nfunc (a *Application) Parse(args []string) (command string, err error) {\n\n\tcontext, parseErr := a.ParseContext(args)\n\tselected := []string{}\n\tvar setValuesErr error\n\n\tif context == nil {\n\t\t// Since we do not throw error immediately, there could be a case\n\t\t// where a context returns nil. Protect against that.\n\t\treturn \"\", parseErr\n\t}\n\n\tif err = a.setDefaults(context); err != nil {\n\t\treturn \"\", err\n\t}\n\n\tselected, setValuesErr = a.setValues(context)\n\n\tif err = a.applyPreActions(context, !a.completion); err != nil {\n\t\treturn \"\", err\n\t}\n\n\tif a.completion {\n\t\ta.generateBashCompletion(context)\n\t\ta.terminate(0)\n\t} else {\n\t\tif parseErr != nil {\n\t\t\treturn \"\", parseErr\n\t\t}\n\n\t\ta.maybeHelp(context)\n\t\tif !context.EOL() {\n\t\t\treturn \"\", fmt.Errorf(\"unexpected argument '%s'\", context.Peek())\n\t\t}\n\n\t\tif setValuesErr != nil {\n\t\t\treturn \"\", setValuesErr\n\t\t}\n\n\t\tcommand, err = a.execute(context, selected)\n\t\tif err == ErrCommandNotSpecified {\n\t\t\ta.writeUsage(context, nil)\n\t\t}\n\t}\n\treturn command, err\n}\n\nfunc (a *Application) writeUsage(context *ParseContext, err error) {\n\tif err != nil {\n\t\ta.Errorf(\"%s\", err)\n\t}\n\tif err := a.UsageForContext(context); err != nil {\n\t\tpanic(err)\n\t}\n\tif err != nil {\n\t\ta.terminate(1)\n\t} else {\n\t\ta.terminate(0)\n\t}\n}\n\nfunc (a *Application) maybeHelp(context *ParseContext) {\n\tfor _, element := range context.Elements {\n\t\tif flag, ok := element.Clause.(*FlagClause); ok && flag == a.HelpFlag {\n\t\t\t// Re-parse the command-line ignoring defaults, so that help works correctly.\n\t\t\tcontext, _ = a.parseContext(true, context.rawArgs)\n\t\t\ta.writeUsage(context, nil)\n\t\t}\n\t}\n}\n\n// Version adds a --version flag for displaying the application version.\nfunc (a *Application) Version(version string) *Application {\n\ta.version = version\n\ta.VersionFlag = a.Flag(\"version\", \"Show application version.\").PreAction(func(*ParseContext) error {\n\t\tfmt.Fprintln(a.usageWriter, version)\n\t\ta.terminate(0)\n\t\treturn nil\n\t})\n\ta.VersionFlag.Bool()\n\treturn a\n}\n\n// Author sets the author output by some help templates.\nfunc (a *Application) Author(author string) *Application {\n\ta.author = author\n\treturn a\n}\n\n// Action callback to call when all values are populated and parsing is\n// complete, but before any command, flag or argument actions.\n//\n// All Action() callbacks are called in the order they are encountered on the\n// command line.\nfunc (a *Application) Action(action Action) *Application {\n\ta.addAction(action)\n\treturn a\n}\n\n// Action called after parsing completes but before validation and execution.\nfunc (a *Application) PreAction(action Action) *Application {\n\ta.addPreAction(action)\n\treturn a\n}\n\n// Command adds a new top-level command.\nfunc (a *Application) Command(name, help string) *CmdClause {\n\treturn a.addCommand(name, help)\n}\n\n// Interspersed control if flags can be interspersed with positional arguments\n//\n// true (the default) means that they can, false means that all the flags must appear before the first positional arguments.\nfunc (a *Application) Interspersed(interspersed bool) *Application {\n\ta.noInterspersed = !interspersed\n\treturn a\n}\n\nfunc (a *Application) defaultEnvarPrefix() string {\n\tif a.defaultEnvars {\n\t\treturn a.Name\n\t}\n\treturn \"\"\n}\n\nfunc (a *Application) init() error {\n\tif a.initialized {\n\t\treturn nil\n\t}\n\tif a.cmdGroup.have() && a.argGroup.have() {\n\t\treturn fmt.Errorf(\"can't mix top-level Arg()s with Command()s\")\n\t}\n\n\t// If we have subcommands, add a help command at the top-level.\n\tif a.cmdGroup.have() {\n\t\tvar command []string\n\t\ta.HelpCommand = a.Command(\"help\", \"Show help.\").PreAction(func(context *ParseContext) error {\n\t\t\ta.Usage(command)\n\t\t\ta.terminate(0)\n\t\t\treturn nil\n\t\t})\n\t\ta.HelpCommand.Arg(\"command\", \"Show help on command.\").StringsVar(&command)\n\t\t// Make help first command.\n\t\tl := len(a.commandOrder)\n\t\ta.commandOrder = append(a.commandOrder[l-1:l], a.commandOrder[:l-1]...)\n\t}\n\n\tif err := a.flagGroup.init(a.defaultEnvarPrefix()); err != nil {\n\t\treturn err\n\t}\n\tif err := a.cmdGroup.init(); err != nil {\n\t\treturn err\n\t}\n\tif err := a.argGroup.init(); err != nil {\n\t\treturn err\n\t}\n\tfor _, cmd := range a.commands {\n\t\tif err := cmd.init(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tflagGroups := []*flagGroup{a.flagGroup}\n\tfor _, cmd := range a.commandOrder {\n\t\tif err := checkDuplicateFlags(cmd, flagGroups); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\ta.initialized = true\n\treturn nil\n}\n\n// Recursively check commands for duplicate flags.\nfunc checkDuplicateFlags(current *CmdClause, flagGroups []*flagGroup) error {\n\t// Check for duplicates.\n\tfor _, flags := range flagGroups {\n\t\tfor _, flag := range current.flagOrder {\n\t\t\tif flag.shorthand != 0 {\n\t\t\t\tif _, ok := flags.short[string(flag.shorthand)]; ok {\n\t\t\t\t\treturn fmt.Errorf(\"duplicate short flag -%c\", flag.shorthand)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif _, ok := flags.long[flag.name]; ok {\n\t\t\t\treturn fmt.Errorf(\"duplicate long flag --%s\", flag.name)\n\t\t\t}\n\t\t}\n\t}\n\tflagGroups = append(flagGroups, current.flagGroup)\n\t// Check subcommands.\n\tfor _, subcmd := range current.commandOrder {\n\t\tif err := checkDuplicateFlags(subcmd, flagGroups); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (a *Application) execute(context *ParseContext, selected []string) (string, error) {\n\tvar err error\n\n\tif err = a.validateRequired(context); err != nil {\n\t\treturn \"\", err\n\t}\n\n\tif err = a.applyValidators(context); err != nil {\n\t\treturn \"\", err\n\t}\n\n\tif err = a.applyActions(context); err != nil {\n\t\treturn \"\", err\n\t}\n\n\tcommand := strings.Join(selected, \" \")\n\tif command == \"\" && a.cmdGroup.have() {\n\t\treturn \"\", ErrCommandNotSpecified\n\t}\n\treturn command, err\n}\n\nfunc (a *Application) setDefaults(context *ParseContext) error {\n\tflagElements := map[string]*ParseElement{}\n\tfor _, element := range context.Elements {\n\t\tif flag, ok := element.Clause.(*FlagClause); ok {\n\t\t\tif flag.name == \"help\" {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tflagElements[flag.name] = element\n\t\t}\n\t}\n\n\targElements := map[string]*ParseElement{}\n\tfor _, element := range context.Elements {\n\t\tif arg, ok := element.Clause.(*ArgClause); ok {\n\t\t\targElements[arg.name] = element\n\t\t}\n\t}\n\n\t// Check required flags and set defaults.\n\tfor _, flag := range context.flags.long {\n\t\tif flagElements[flag.name] == nil {\n\t\t\tif err := flag.setDefault(); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\n\tfor _, arg := range context.arguments.args {\n\t\tif argElements[arg.name] == nil {\n\t\t\tif err := arg.setDefault(); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (a *Application) validateRequired(context *ParseContext) error {\n\tflagElements := map[string]*ParseElement{}\n\tfor _, element := range context.Elements {\n\t\tif flag, ok := element.Clause.(*FlagClause); ok {\n\t\t\tflagElements[flag.name] = element\n\t\t}\n\t}\n\n\targElements := map[string]*ParseElement{}\n\tfor _, element := range context.Elements {\n\t\tif arg, ok := element.Clause.(*ArgClause); ok {\n\t\t\targElements[arg.name] = element\n\t\t}\n\t}\n\n\t// Check required flags and set defaults.\n\tfor _, flag := range context.flags.long {\n\t\tif flagElements[flag.name] == nil {\n\t\t\t// Check required flags were provided.\n\t\t\tif flag.needsValue() {\n\t\t\t\treturn fmt.Errorf(\"required flag --%s not provided\", flag.name)\n\t\t\t}\n\t\t}\n\t}\n\n\tfor _, arg := range context.arguments.args {\n\t\tif argElements[arg.name] == nil {\n\t\t\tif arg.needsValue() {\n\t\t\t\treturn fmt.Errorf(\"required argument '%s' not provided\", arg.name)\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (a *Application) setValues(context *ParseContext) (selected []string, err error) {\n\t// Set all arg and flag values.\n\tvar (\n\t\tlastCmd *CmdClause\n\t\tflagSet = map[string]struct{}{}\n\t)\n\tfor _, element := range context.Elements {\n\t\tswitch clause := element.Clause.(type) {\n\t\tcase *FlagClause:\n\t\t\tif _, ok := flagSet[clause.name]; ok {\n\t\t\t\tif v, ok := clause.value.(repeatableFlag); !ok || !v.IsCumulative() {\n\t\t\t\t\treturn nil, fmt.Errorf(\"flag '%s' cannot be repeated\", clause.name)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif err = clause.value.Set(*element.Value); err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tflagSet[clause.name] = struct{}{}\n\n\t\tcase *ArgClause:\n\t\t\tif err = clause.value.Set(*element.Value); err != nil {\n\t\t\t\treturn\n\t\t\t}\n\n\t\tcase *CmdClause:\n\t\t\tif clause.validator != nil {\n\t\t\t\tif err = clause.validator(clause); err != nil {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t\tselected = append(selected, clause.name)\n\t\t\tlastCmd = clause\n\t\t}\n\t}\n\n\tif lastCmd != nil && len(lastCmd.commands) > 0 {\n\t\treturn nil, fmt.Errorf(\"must select a subcommand of '%s'\", lastCmd.FullCommand())\n\t}\n\n\treturn\n}\n\nfunc (a *Application) applyValidators(context *ParseContext) (err error) {\n\t// Call command validation functions.\n\tfor _, element := range context.Elements {\n\t\tif cmd, ok := element.Clause.(*CmdClause); ok && cmd.validator != nil {\n\t\t\tif err = cmd.validator(cmd); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\n\tif a.validator != nil {\n\t\terr = a.validator(a)\n\t}\n\treturn err\n}\n\nfunc (a *Application) applyPreActions(context *ParseContext, dispatch bool) error {\n\tif err := a.actionMixin.applyPreActions(context); err != nil {\n\t\treturn err\n\t}\n\t// Dispatch to actions.\n\tif dispatch {\n\t\tfor _, element := range context.Elements {\n\t\t\tif applier, ok := element.Clause.(actionApplier); ok {\n\t\t\t\tif err := applier.applyPreActions(context); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (a *Application) applyActions(context *ParseContext) error {\n\tif err := a.actionMixin.applyActions(context); err != nil {\n\t\treturn err\n\t}\n\t// Dispatch to actions.\n\tfor _, element := range context.Elements {\n\t\tif applier, ok := element.Clause.(actionApplier); ok {\n\t\t\tif err := applier.applyActions(context); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\n// Errorf prints an error message to w in the format \"<appname>: error: <message>\".\nfunc (a *Application) Errorf(format string, args ...interface{}) {\n\tfmt.Fprintf(a.errorWriter, a.Name+\": error: \"+format+\"\\n\", args...)\n}\n\n// Fatalf writes a formatted error to w then terminates with exit status 1.\nfunc (a *Application) Fatalf(format string, args ...interface{}) {\n\ta.Errorf(format, args...)\n\ta.terminate(1)\n}\n\n// FatalUsage prints an error message followed by usage information, then\n// exits with a non-zero status.\nfunc (a *Application) FatalUsage(format string, args ...interface{}) {\n\ta.Errorf(format, args...)\n\t// Force usage to go to error output.\n\ta.usageWriter = a.errorWriter\n\ta.Usage([]string{})\n\ta.terminate(1)\n}\n\n// FatalUsageContext writes a printf formatted error message to w, then usage\n// information for the given ParseContext, before exiting.\nfunc (a *Application) FatalUsageContext(context *ParseContext, format string, args ...interface{}) {\n\ta.Errorf(format, args...)\n\tif err := a.UsageForContext(context); err != nil {\n\t\tpanic(err)\n\t}\n\ta.terminate(1)\n}\n\n// FatalIfError prints an error and exits if err is not nil. The error is printed\n// with the given formatted string, if any.\nfunc (a *Application) FatalIfError(err error, format string, args ...interface{}) {\n\tif err != nil {\n\t\tprefix := \"\"\n\t\tif format != \"\" {\n\t\t\tprefix = fmt.Sprintf(format, args...) + \": \"\n\t\t}\n\t\ta.Errorf(prefix+\"%s\", err)\n\t\ta.terminate(1)\n\t}\n}\n\nfunc (a *Application) completionOptions(context *ParseContext) []string {\n\targs := context.rawArgs\n\n\tvar (\n\t\tcurrArg string\n\t\tprevArg string\n\t\ttarget  cmdMixin\n\t)\n\n\tnumArgs := len(args)\n\tif numArgs > 1 {\n\t\targs = args[1:]\n\t\tcurrArg = args[len(args)-1]\n\t}\n\tif numArgs > 2 {\n\t\tprevArg = args[len(args)-2]\n\t}\n\n\ttarget = a.cmdMixin\n\tif context.SelectedCommand != nil {\n\t\t// A subcommand was in use. We will use it as the target\n\t\ttarget = context.SelectedCommand.cmdMixin\n\t}\n\n\tif (currArg != \"\" && strings.HasPrefix(currArg, \"--\")) || strings.HasPrefix(prevArg, \"--\") {\n\t\t// Perform completion for A flag. The last/current argument started with \"-\"\n\t\tvar (\n\t\t\tflagName  string // The name of a flag if given (could be half complete)\n\t\t\tflagValue string // The value assigned to a flag (if given) (could be half complete)\n\t\t)\n\n\t\tif strings.HasPrefix(prevArg, \"--\") && !strings.HasPrefix(currArg, \"--\") {\n\t\t\t// Matches: \t./myApp --flag value\n\t\t\t// Wont Match: \t./myApp --flag --\n\t\t\tflagName = prevArg[2:] // Strip the \"--\"\n\t\t\tflagValue = currArg\n\t\t} else if strings.HasPrefix(currArg, \"--\") {\n\t\t\t// Matches: \t./myApp --flag --\n\t\t\t// Matches:\t\t./myApp --flag somevalue --\n\t\t\t// Matches: \t./myApp --\n\t\t\tflagName = currArg[2:] // Strip the \"--\"\n\t\t}\n\n\t\toptions, flagMatched, valueMatched := target.FlagCompletion(flagName, flagValue)\n\t\tif valueMatched {\n\t\t\t// Value Matched. Show cmdCompletions\n\t\t\treturn target.CmdCompletion(context)\n\t\t}\n\n\t\t// Add top level flags if we're not at the top level and no match was found.\n\t\tif context.SelectedCommand != nil && !flagMatched {\n\t\t\ttopOptions, topFlagMatched, topValueMatched := a.FlagCompletion(flagName, flagValue)\n\t\t\tif topValueMatched {\n\t\t\t\t// Value Matched. Back to cmdCompletions\n\t\t\t\treturn target.CmdCompletion(context)\n\t\t\t}\n\n\t\t\tif topFlagMatched {\n\t\t\t\t// Top level had a flag which matched the input. Return it's options.\n\t\t\t\toptions = topOptions\n\t\t\t} else {\n\t\t\t\t// Add top level flags\n\t\t\t\toptions = append(options, topOptions...)\n\t\t\t}\n\t\t}\n\t\treturn options\n\t}\n\n\t// Perform completion for sub commands and arguments.\n\treturn target.CmdCompletion(context)\n}\n\nfunc (a *Application) generateBashCompletion(context *ParseContext) {\n\toptions := a.completionOptions(context)\n\tfmt.Printf(\"%s\", strings.Join(options, \"\\n\"))\n}\n\nfunc envarTransform(name string) string {\n\treturn strings.ToUpper(envarTransformRegexp.ReplaceAllString(name, \"_\"))\n}\n"
  },
  {
    "path": "vendor/gopkg.in/alecthomas/kingpin.v2/args.go",
    "content": "package kingpin\n\nimport (\n\t\"fmt\"\n)\n\ntype argGroup struct {\n\targs []*ArgClause\n}\n\nfunc newArgGroup() *argGroup {\n\treturn &argGroup{}\n}\n\nfunc (a *argGroup) have() bool {\n\treturn len(a.args) > 0\n}\n\n// GetArg gets an argument definition.\n//\n// This allows existing arguments to be modified after definition but before parsing. Useful for\n// modular applications.\nfunc (a *argGroup) GetArg(name string) *ArgClause {\n\tfor _, arg := range a.args {\n\t\tif arg.name == name {\n\t\t\treturn arg\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (a *argGroup) Arg(name, help string) *ArgClause {\n\targ := newArg(name, help)\n\ta.args = append(a.args, arg)\n\treturn arg\n}\n\nfunc (a *argGroup) init() error {\n\trequired := 0\n\tseen := map[string]struct{}{}\n\tpreviousArgMustBeLast := false\n\tfor i, arg := range a.args {\n\t\tif previousArgMustBeLast {\n\t\t\treturn fmt.Errorf(\"Args() can't be followed by another argument '%s'\", arg.name)\n\t\t}\n\t\tif arg.consumesRemainder() {\n\t\t\tpreviousArgMustBeLast = true\n\t\t}\n\t\tif _, ok := seen[arg.name]; ok {\n\t\t\treturn fmt.Errorf(\"duplicate argument '%s'\", arg.name)\n\t\t}\n\t\tseen[arg.name] = struct{}{}\n\t\tif arg.required && required != i {\n\t\t\treturn fmt.Errorf(\"required arguments found after non-required\")\n\t\t}\n\t\tif arg.required {\n\t\t\trequired++\n\t\t}\n\t\tif err := arg.init(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\ntype ArgClause struct {\n\tactionMixin\n\tparserMixin\n\tcompletionsMixin\n\tenvarMixin\n\tname          string\n\thelp          string\n\tdefaultValues []string\n\trequired      bool\n}\n\nfunc newArg(name, help string) *ArgClause {\n\ta := &ArgClause{\n\t\tname: name,\n\t\thelp: help,\n\t}\n\treturn a\n}\n\nfunc (a *ArgClause) setDefault() error {\n\tif a.HasEnvarValue() {\n\t\tif v, ok := a.value.(remainderArg); !ok || !v.IsCumulative() {\n\t\t\t// Use the value as-is\n\t\t\treturn a.value.Set(a.GetEnvarValue())\n\t\t}\n\t\tfor _, value := range a.GetSplitEnvarValue() {\n\t\t\tif err := a.value.Set(value); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\treturn nil\n\t}\n\n\tif len(a.defaultValues) > 0 {\n\t\tfor _, defaultValue := range a.defaultValues {\n\t\t\tif err := a.value.Set(defaultValue); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\treturn nil\n\t}\n\n\treturn nil\n}\n\nfunc (a *ArgClause) needsValue() bool {\n\thaveDefault := len(a.defaultValues) > 0\n\treturn a.required && !(haveDefault || a.HasEnvarValue())\n}\n\nfunc (a *ArgClause) consumesRemainder() bool {\n\tif r, ok := a.value.(remainderArg); ok {\n\t\treturn r.IsCumulative()\n\t}\n\treturn false\n}\n\n// Required arguments must be input by the user. They can not have a Default() value provided.\nfunc (a *ArgClause) Required() *ArgClause {\n\ta.required = true\n\treturn a\n}\n\n// Default values for this argument. They *must* be parseable by the value of the argument.\nfunc (a *ArgClause) Default(values ...string) *ArgClause {\n\ta.defaultValues = values\n\treturn a\n}\n\n// Envar overrides the default value(s) for a flag from an environment variable,\n// if it is set. Several default values can be provided by using new lines to\n// separate them.\nfunc (a *ArgClause) Envar(name string) *ArgClause {\n\ta.envar = name\n\ta.noEnvar = false\n\treturn a\n}\n\n// NoEnvar forces environment variable defaults to be disabled for this flag.\n// Most useful in conjunction with app.DefaultEnvars().\nfunc (a *ArgClause) NoEnvar() *ArgClause {\n\ta.envar = \"\"\n\ta.noEnvar = true\n\treturn a\n}\n\nfunc (a *ArgClause) Action(action Action) *ArgClause {\n\ta.addAction(action)\n\treturn a\n}\n\nfunc (a *ArgClause) PreAction(action Action) *ArgClause {\n\ta.addPreAction(action)\n\treturn a\n}\n\n// HintAction registers a HintAction (function) for the arg to provide completions\nfunc (a *ArgClause) HintAction(action HintAction) *ArgClause {\n\ta.addHintAction(action)\n\treturn a\n}\n\n// HintOptions registers any number of options for the flag to provide completions\nfunc (a *ArgClause) HintOptions(options ...string) *ArgClause {\n\ta.addHintAction(func() []string {\n\t\treturn options\n\t})\n\treturn a\n}\n\nfunc (a *ArgClause) init() error {\n\tif a.required && len(a.defaultValues) > 0 {\n\t\treturn fmt.Errorf(\"required argument '%s' with unusable default value\", a.name)\n\t}\n\tif a.value == nil {\n\t\treturn fmt.Errorf(\"no parser defined for arg '%s'\", a.name)\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/gopkg.in/alecthomas/kingpin.v2/cmd.go",
    "content": "package kingpin\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\ntype cmdMixin struct {\n\t*flagGroup\n\t*argGroup\n\t*cmdGroup\n\tactionMixin\n}\n\n// CmdCompletion returns completion options for arguments, if that's where\n// parsing left off, or commands if there aren't any unsatisfied args.\nfunc (c *cmdMixin) CmdCompletion(context *ParseContext) []string {\n\tvar options []string\n\n\t// Count args already satisfied - we won't complete those, and add any\n\t// default commands' alternatives, since they weren't listed explicitly\n\t// and the user may want to explicitly list something else.\n\targsSatisfied := 0\n\tfor _, el := range context.Elements {\n\t\tswitch clause := el.Clause.(type) {\n\t\tcase *ArgClause:\n\t\t\tif el.Value != nil && *el.Value != \"\" {\n\t\t\t\targsSatisfied++\n\t\t\t}\n\t\tcase *CmdClause:\n\t\t\toptions = append(options, clause.completionAlts...)\n\t\tdefault:\n\t\t}\n\t}\n\n\tif argsSatisfied < len(c.argGroup.args) {\n\t\t// Since not all args have been satisfied, show options for the current one\n\t\toptions = append(options, c.argGroup.args[argsSatisfied].resolveCompletions()...)\n\t} else {\n\t\t// If all args are satisfied, then go back to completing commands\n\t\tfor _, cmd := range c.cmdGroup.commandOrder {\n\t\t\tif !cmd.hidden {\n\t\t\t\toptions = append(options, cmd.name)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn options\n}\n\nfunc (c *cmdMixin) FlagCompletion(flagName string, flagValue string) (choices []string, flagMatch bool, optionMatch bool) {\n\t// Check if flagName matches a known flag.\n\t// If it does, show the options for the flag\n\t// Otherwise, show all flags\n\n\toptions := []string{}\n\n\tfor _, flag := range c.flagGroup.flagOrder {\n\t\t// Loop through each flag and determine if a match exists\n\t\tif flag.name == flagName {\n\t\t\t// User typed entire flag. Need to look for flag options.\n\t\t\toptions = flag.resolveCompletions()\n\t\t\tif len(options) == 0 {\n\t\t\t\t// No Options to Choose From, Assume Match.\n\t\t\t\treturn options, true, true\n\t\t\t}\n\n\t\t\t// Loop options to find if the user specified value matches\n\t\t\tisPrefix := false\n\t\t\tmatched := false\n\n\t\t\tfor _, opt := range options {\n\t\t\t\tif flagValue == opt {\n\t\t\t\t\tmatched = true\n\t\t\t\t} else if strings.HasPrefix(opt, flagValue) {\n\t\t\t\t\tisPrefix = true\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Matched Flag Directly\n\t\t\t// Flag Value Not Prefixed, and Matched Directly\n\t\t\treturn options, true, !isPrefix && matched\n\t\t}\n\n\t\tif !flag.hidden {\n\t\t\toptions = append(options, \"--\"+flag.name)\n\t\t}\n\t}\n\t// No Flag directly matched.\n\treturn options, false, false\n\n}\n\ntype cmdGroup struct {\n\tapp          *Application\n\tparent       *CmdClause\n\tcommands     map[string]*CmdClause\n\tcommandOrder []*CmdClause\n}\n\nfunc (c *cmdGroup) defaultSubcommand() *CmdClause {\n\tfor _, cmd := range c.commandOrder {\n\t\tif cmd.isDefault {\n\t\t\treturn cmd\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (c *cmdGroup) cmdNames() []string {\n\tnames := make([]string, 0, len(c.commandOrder))\n\tfor _, cmd := range c.commandOrder {\n\t\tnames = append(names, cmd.name)\n\t}\n\treturn names\n}\n\n// GetArg gets a command definition.\n//\n// This allows existing commands to be modified after definition but before parsing. Useful for\n// modular applications.\nfunc (c *cmdGroup) GetCommand(name string) *CmdClause {\n\treturn c.commands[name]\n}\n\nfunc newCmdGroup(app *Application) *cmdGroup {\n\treturn &cmdGroup{\n\t\tapp:      app,\n\t\tcommands: make(map[string]*CmdClause),\n\t}\n}\n\nfunc (c *cmdGroup) flattenedCommands() (out []*CmdClause) {\n\tfor _, cmd := range c.commandOrder {\n\t\tif len(cmd.commands) == 0 {\n\t\t\tout = append(out, cmd)\n\t\t}\n\t\tout = append(out, cmd.flattenedCommands()...)\n\t}\n\treturn\n}\n\nfunc (c *cmdGroup) addCommand(name, help string) *CmdClause {\n\tcmd := newCommand(c.app, name, help)\n\tc.commands[name] = cmd\n\tc.commandOrder = append(c.commandOrder, cmd)\n\treturn cmd\n}\n\nfunc (c *cmdGroup) init() error {\n\tseen := map[string]bool{}\n\tif c.defaultSubcommand() != nil && !c.have() {\n\t\treturn fmt.Errorf(\"default subcommand %q provided but no subcommands defined\", c.defaultSubcommand().name)\n\t}\n\tdefaults := []string{}\n\tfor _, cmd := range c.commandOrder {\n\t\tif cmd.isDefault {\n\t\t\tdefaults = append(defaults, cmd.name)\n\t\t}\n\t\tif seen[cmd.name] {\n\t\t\treturn fmt.Errorf(\"duplicate command %q\", cmd.name)\n\t\t}\n\t\tseen[cmd.name] = true\n\t\tfor _, alias := range cmd.aliases {\n\t\t\tif seen[alias] {\n\t\t\t\treturn fmt.Errorf(\"alias duplicates existing command %q\", alias)\n\t\t\t}\n\t\t\tc.commands[alias] = cmd\n\t\t}\n\t\tif err := cmd.init(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif len(defaults) > 1 {\n\t\treturn fmt.Errorf(\"more than one default subcommand exists: %s\", strings.Join(defaults, \", \"))\n\t}\n\treturn nil\n}\n\nfunc (c *cmdGroup) have() bool {\n\treturn len(c.commands) > 0\n}\n\ntype CmdClauseValidator func(*CmdClause) error\n\n// A CmdClause is a single top-level command. It encapsulates a set of flags\n// and either subcommands or positional arguments.\ntype CmdClause struct {\n\tcmdMixin\n\tapp            *Application\n\tname           string\n\taliases        []string\n\thelp           string\n\tisDefault      bool\n\tvalidator      CmdClauseValidator\n\thidden         bool\n\tcompletionAlts []string\n}\n\nfunc newCommand(app *Application, name, help string) *CmdClause {\n\tc := &CmdClause{\n\t\tapp:  app,\n\t\tname: name,\n\t\thelp: help,\n\t}\n\tc.flagGroup = newFlagGroup()\n\tc.argGroup = newArgGroup()\n\tc.cmdGroup = newCmdGroup(app)\n\treturn c\n}\n\n// Add an Alias for this command.\nfunc (c *CmdClause) Alias(name string) *CmdClause {\n\tc.aliases = append(c.aliases, name)\n\treturn c\n}\n\n// Validate sets a validation function to run when parsing.\nfunc (c *CmdClause) Validate(validator CmdClauseValidator) *CmdClause {\n\tc.validator = validator\n\treturn c\n}\n\nfunc (c *CmdClause) FullCommand() string {\n\tout := []string{c.name}\n\tfor p := c.parent; p != nil; p = p.parent {\n\t\tout = append([]string{p.name}, out...)\n\t}\n\treturn strings.Join(out, \" \")\n}\n\n// Command adds a new sub-command.\nfunc (c *CmdClause) Command(name, help string) *CmdClause {\n\tcmd := c.addCommand(name, help)\n\tcmd.parent = c\n\treturn cmd\n}\n\n// Default makes this command the default if commands don't match.\nfunc (c *CmdClause) Default() *CmdClause {\n\tc.isDefault = true\n\treturn c\n}\n\nfunc (c *CmdClause) Action(action Action) *CmdClause {\n\tc.addAction(action)\n\treturn c\n}\n\nfunc (c *CmdClause) PreAction(action Action) *CmdClause {\n\tc.addPreAction(action)\n\treturn c\n}\n\nfunc (c *CmdClause) init() error {\n\tif err := c.flagGroup.init(c.app.defaultEnvarPrefix()); err != nil {\n\t\treturn err\n\t}\n\tif c.argGroup.have() && c.cmdGroup.have() {\n\t\treturn fmt.Errorf(\"can't mix Arg()s with Command()s\")\n\t}\n\tif err := c.argGroup.init(); err != nil {\n\t\treturn err\n\t}\n\tif err := c.cmdGroup.init(); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc (c *CmdClause) Hidden() *CmdClause {\n\tc.hidden = true\n\treturn c\n}\n"
  },
  {
    "path": "vendor/gopkg.in/alecthomas/kingpin.v2/completions.go",
    "content": "package kingpin\n\n// HintAction is a function type who is expected to return a slice of possible\n// command line arguments.\ntype HintAction func() []string\ntype completionsMixin struct {\n\thintActions        []HintAction\n\tbuiltinHintActions []HintAction\n}\n\nfunc (a *completionsMixin) addHintAction(action HintAction) {\n\ta.hintActions = append(a.hintActions, action)\n}\n\n// Allow adding of HintActions which are added internally, ie, EnumVar\nfunc (a *completionsMixin) addHintActionBuiltin(action HintAction) {\n\ta.builtinHintActions = append(a.builtinHintActions, action)\n}\n\nfunc (a *completionsMixin) resolveCompletions() []string {\n\tvar hints []string\n\n\toptions := a.builtinHintActions\n\tif len(a.hintActions) > 0 {\n\t\t// User specified their own hintActions. Use those instead.\n\t\toptions = a.hintActions\n\t}\n\n\tfor _, hintAction := range options {\n\t\thints = append(hints, hintAction()...)\n\t}\n\treturn hints\n}\n"
  },
  {
    "path": "vendor/gopkg.in/alecthomas/kingpin.v2/doc.go",
    "content": "// Package kingpin provides command line interfaces like this:\n//\n//     $ chat\n//     usage: chat [<flags>] <command> [<flags>] [<args> ...]\n//\n//     Flags:\n//       --debug              enable debug mode\n//       --help               Show help.\n//       --server=127.0.0.1   server address\n//\n//     Commands:\n//       help <command>\n//         Show help for a command.\n//\n//       post [<flags>] <channel>\n//         Post a message to a channel.\n//\n//       register <nick> <name>\n//         Register a new user.\n//\n//     $ chat help post\n//     usage: chat [<flags>] post [<flags>] <channel> [<text>]\n//\n//     Post a message to a channel.\n//\n//     Flags:\n//       --image=IMAGE   image to post\n//\n//     Args:\n//       <channel>   channel to post to\n//       [<text>]    text to post\n//     $ chat post --image=~/Downloads/owls.jpg pics\n//\n// From code like this:\n//\n//     package main\n//\n//     import \"gopkg.in/alecthomas/kingpin.v2\"\n//\n//     var (\n//       debug    = kingpin.Flag(\"debug\", \"enable debug mode\").Default(\"false\").Bool()\n//       serverIP = kingpin.Flag(\"server\", \"server address\").Default(\"127.0.0.1\").IP()\n//\n//       register     = kingpin.Command(\"register\", \"Register a new user.\")\n//       registerNick = register.Arg(\"nick\", \"nickname for user\").Required().String()\n//       registerName = register.Arg(\"name\", \"name of user\").Required().String()\n//\n//       post        = kingpin.Command(\"post\", \"Post a message to a channel.\")\n//       postImage   = post.Flag(\"image\", \"image to post\").ExistingFile()\n//       postChannel = post.Arg(\"channel\", \"channel to post to\").Required().String()\n//       postText    = post.Arg(\"text\", \"text to post\").String()\n//     )\n//\n//     func main() {\n//       switch kingpin.Parse() {\n//       // Register user\n//       case \"register\":\n//         println(*registerNick)\n//\n//       // Post message\n//       case \"post\":\n//         if *postImage != nil {\n//         }\n//         if *postText != \"\" {\n//         }\n//       }\n//     }\npackage kingpin\n"
  },
  {
    "path": "vendor/gopkg.in/alecthomas/kingpin.v2/envar.go",
    "content": "package kingpin\n\nimport (\n\t\"os\"\n\t\"regexp\"\n)\n\nvar (\n\tenvVarValuesSeparator = \"\\r?\\n\"\n\tenvVarValuesTrimmer   = regexp.MustCompile(envVarValuesSeparator + \"$\")\n\tenvVarValuesSplitter  = regexp.MustCompile(envVarValuesSeparator)\n)\n\ntype envarMixin struct {\n\tenvar   string\n\tnoEnvar bool\n}\n\nfunc (e *envarMixin) HasEnvarValue() bool {\n\treturn e.GetEnvarValue() != \"\"\n}\n\nfunc (e *envarMixin) GetEnvarValue() string {\n\tif e.noEnvar || e.envar == \"\" {\n\t\treturn \"\"\n\t}\n\treturn os.Getenv(e.envar)\n}\n\nfunc (e *envarMixin) GetSplitEnvarValue() []string {\n\tvalues := make([]string, 0)\n\n\tenvarValue := e.GetEnvarValue()\n\tif envarValue == \"\" {\n\t\treturn values\n\t}\n\n\t// Split by new line to extract multiple values, if any.\n\ttrimmed := envVarValuesTrimmer.ReplaceAllString(envarValue, \"\")\n\tfor _, value := range envVarValuesSplitter.Split(trimmed, -1) {\n\t\tvalues = append(values, value)\n\t}\n\n\treturn values\n}\n"
  },
  {
    "path": "vendor/gopkg.in/alecthomas/kingpin.v2/flags.go",
    "content": "package kingpin\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\ntype flagGroup struct {\n\tshort     map[string]*FlagClause\n\tlong      map[string]*FlagClause\n\tflagOrder []*FlagClause\n}\n\nfunc newFlagGroup() *flagGroup {\n\treturn &flagGroup{\n\t\tshort: map[string]*FlagClause{},\n\t\tlong:  map[string]*FlagClause{},\n\t}\n}\n\n// GetFlag gets a flag definition.\n//\n// This allows existing flags to be modified after definition but before parsing. Useful for\n// modular applications.\nfunc (f *flagGroup) GetFlag(name string) *FlagClause {\n\treturn f.long[name]\n}\n\n// Flag defines a new flag with the given long name and help.\nfunc (f *flagGroup) Flag(name, help string) *FlagClause {\n\tflag := newFlag(name, help)\n\tf.long[name] = flag\n\tf.flagOrder = append(f.flagOrder, flag)\n\treturn flag\n}\n\nfunc (f *flagGroup) init(defaultEnvarPrefix string) error {\n\tif err := f.checkDuplicates(); err != nil {\n\t\treturn err\n\t}\n\tfor _, flag := range f.long {\n\t\tif defaultEnvarPrefix != \"\" && !flag.noEnvar && flag.envar == \"\" {\n\t\t\tflag.envar = envarTransform(defaultEnvarPrefix + \"_\" + flag.name)\n\t\t}\n\t\tif err := flag.init(); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif flag.shorthand != 0 {\n\t\t\tf.short[string(flag.shorthand)] = flag\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (f *flagGroup) checkDuplicates() error {\n\tseenShort := map[rune]bool{}\n\tseenLong := map[string]bool{}\n\tfor _, flag := range f.flagOrder {\n\t\tif flag.shorthand != 0 {\n\t\t\tif _, ok := seenShort[flag.shorthand]; ok {\n\t\t\t\treturn fmt.Errorf(\"duplicate short flag -%c\", flag.shorthand)\n\t\t\t}\n\t\t\tseenShort[flag.shorthand] = true\n\t\t}\n\t\tif _, ok := seenLong[flag.name]; ok {\n\t\t\treturn fmt.Errorf(\"duplicate long flag --%s\", flag.name)\n\t\t}\n\t\tseenLong[flag.name] = true\n\t}\n\treturn nil\n}\n\nfunc (f *flagGroup) parse(context *ParseContext) (*FlagClause, error) {\n\tvar token *Token\n\nloop:\n\tfor {\n\t\ttoken = context.Peek()\n\t\tswitch token.Type {\n\t\tcase TokenEOL:\n\t\t\tbreak loop\n\n\t\tcase TokenLong, TokenShort:\n\t\t\tflagToken := token\n\t\t\tdefaultValue := \"\"\n\t\t\tvar flag *FlagClause\n\t\t\tvar ok bool\n\t\t\tinvert := false\n\n\t\t\tname := token.Value\n\t\t\tif token.Type == TokenLong {\n\t\t\t\tflag, ok = f.long[name]\n\t\t\t\tif !ok {\n\t\t\t\t\tif strings.HasPrefix(name, \"no-\") {\n\t\t\t\t\t\tname = name[3:]\n\t\t\t\t\t\tinvert = true\n\t\t\t\t\t}\n\t\t\t\t\tflag, ok = f.long[name]\n\t\t\t\t}\n\t\t\t\tif !ok {\n\t\t\t\t\treturn nil, fmt.Errorf(\"unknown long flag '%s'\", flagToken)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tflag, ok = f.short[name]\n\t\t\t\tif !ok {\n\t\t\t\t\treturn nil, fmt.Errorf(\"unknown short flag '%s'\", flagToken)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcontext.Next()\n\n\t\t\tfb, ok := flag.value.(boolFlag)\n\t\t\tif ok && fb.IsBoolFlag() {\n\t\t\t\tif invert {\n\t\t\t\t\tdefaultValue = \"false\"\n\t\t\t\t} else {\n\t\t\t\t\tdefaultValue = \"true\"\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif invert {\n\t\t\t\t\tcontext.Push(token)\n\t\t\t\t\treturn nil, fmt.Errorf(\"unknown long flag '%s'\", flagToken)\n\t\t\t\t}\n\t\t\t\ttoken = context.Peek()\n\t\t\t\tif token.Type != TokenArg {\n\t\t\t\t\tcontext.Push(token)\n\t\t\t\t\treturn nil, fmt.Errorf(\"expected argument for flag '%s'\", flagToken)\n\t\t\t\t}\n\t\t\t\tcontext.Next()\n\t\t\t\tdefaultValue = token.Value\n\t\t\t}\n\n\t\t\tcontext.matchedFlag(flag, defaultValue)\n\t\t\treturn flag, nil\n\n\t\tdefault:\n\t\t\tbreak loop\n\t\t}\n\t}\n\treturn nil, nil\n}\n\n// FlagClause is a fluid interface used to build flags.\ntype FlagClause struct {\n\tparserMixin\n\tactionMixin\n\tcompletionsMixin\n\tenvarMixin\n\tname          string\n\tshorthand     rune\n\thelp          string\n\tdefaultValues []string\n\tplaceholder   string\n\thidden        bool\n}\n\nfunc newFlag(name, help string) *FlagClause {\n\tf := &FlagClause{\n\t\tname: name,\n\t\thelp: help,\n\t}\n\treturn f\n}\n\nfunc (f *FlagClause) setDefault() error {\n\tif f.HasEnvarValue() {\n\t\tif v, ok := f.value.(repeatableFlag); !ok || !v.IsCumulative() {\n\t\t\t// Use the value as-is\n\t\t\treturn f.value.Set(f.GetEnvarValue())\n\t\t} else {\n\t\t\tfor _, value := range f.GetSplitEnvarValue() {\n\t\t\t\tif err := f.value.Set(value); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn nil\n\t\t}\n\t}\n\n\tif len(f.defaultValues) > 0 {\n\t\tfor _, defaultValue := range f.defaultValues {\n\t\t\tif err := f.value.Set(defaultValue); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\treturn nil\n\t}\n\n\treturn nil\n}\n\nfunc (f *FlagClause) needsValue() bool {\n\thaveDefault := len(f.defaultValues) > 0\n\treturn f.required && !(haveDefault || f.HasEnvarValue())\n}\n\nfunc (f *FlagClause) init() error {\n\tif f.required && len(f.defaultValues) > 0 {\n\t\treturn fmt.Errorf(\"required flag '--%s' with default value that will never be used\", f.name)\n\t}\n\tif f.value == nil {\n\t\treturn fmt.Errorf(\"no type defined for --%s (eg. .String())\", f.name)\n\t}\n\tif v, ok := f.value.(repeatableFlag); (!ok || !v.IsCumulative()) && len(f.defaultValues) > 1 {\n\t\treturn fmt.Errorf(\"invalid default for '--%s', expecting single value\", f.name)\n\t}\n\treturn nil\n}\n\n// Dispatch to the given function after the flag is parsed and validated.\nfunc (f *FlagClause) Action(action Action) *FlagClause {\n\tf.addAction(action)\n\treturn f\n}\n\nfunc (f *FlagClause) PreAction(action Action) *FlagClause {\n\tf.addPreAction(action)\n\treturn f\n}\n\n// HintAction registers a HintAction (function) for the flag to provide completions\nfunc (a *FlagClause) HintAction(action HintAction) *FlagClause {\n\ta.addHintAction(action)\n\treturn a\n}\n\n// HintOptions registers any number of options for the flag to provide completions\nfunc (a *FlagClause) HintOptions(options ...string) *FlagClause {\n\ta.addHintAction(func() []string {\n\t\treturn options\n\t})\n\treturn a\n}\n\nfunc (a *FlagClause) EnumVar(target *string, options ...string) {\n\ta.parserMixin.EnumVar(target, options...)\n\ta.addHintActionBuiltin(func() []string {\n\t\treturn options\n\t})\n}\n\nfunc (a *FlagClause) Enum(options ...string) (target *string) {\n\ta.addHintActionBuiltin(func() []string {\n\t\treturn options\n\t})\n\treturn a.parserMixin.Enum(options...)\n}\n\n// Default values for this flag. They *must* be parseable by the value of the flag.\nfunc (f *FlagClause) Default(values ...string) *FlagClause {\n\tf.defaultValues = values\n\treturn f\n}\n\n// DEPRECATED: Use Envar(name) instead.\nfunc (f *FlagClause) OverrideDefaultFromEnvar(envar string) *FlagClause {\n\treturn f.Envar(envar)\n}\n\n// Envar overrides the default value(s) for a flag from an environment variable,\n// if it is set. Several default values can be provided by using new lines to\n// separate them.\nfunc (f *FlagClause) Envar(name string) *FlagClause {\n\tf.envar = name\n\tf.noEnvar = false\n\treturn f\n}\n\n// NoEnvar forces environment variable defaults to be disabled for this flag.\n// Most useful in conjunction with app.DefaultEnvars().\nfunc (f *FlagClause) NoEnvar() *FlagClause {\n\tf.envar = \"\"\n\tf.noEnvar = true\n\treturn f\n}\n\n// PlaceHolder sets the place-holder string used for flag values in the help. The\n// default behaviour is to use the value provided by Default() if provided,\n// then fall back on the capitalized flag name.\nfunc (f *FlagClause) PlaceHolder(placeholder string) *FlagClause {\n\tf.placeholder = placeholder\n\treturn f\n}\n\n// Hidden hides a flag from usage but still allows it to be used.\nfunc (f *FlagClause) Hidden() *FlagClause {\n\tf.hidden = true\n\treturn f\n}\n\n// Required makes the flag required. You can not provide a Default() value to a Required() flag.\nfunc (f *FlagClause) Required() *FlagClause {\n\tf.required = true\n\treturn f\n}\n\n// Short sets the short flag name.\nfunc (f *FlagClause) Short(name rune) *FlagClause {\n\tf.shorthand = name\n\treturn f\n}\n\n// Bool makes this flag a boolean flag.\nfunc (f *FlagClause) Bool() (target *bool) {\n\ttarget = new(bool)\n\tf.SetValue(newBoolValue(target))\n\treturn\n}\n"
  },
  {
    "path": "vendor/gopkg.in/alecthomas/kingpin.v2/global.go",
    "content": "package kingpin\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n)\n\nvar (\n\t// CommandLine is the default Kingpin parser.\n\tCommandLine = New(filepath.Base(os.Args[0]), \"\")\n\t// Global help flag. Exposed for user customisation.\n\tHelpFlag = CommandLine.HelpFlag\n\t// Top-level help command. Exposed for user customisation. May be nil.\n\tHelpCommand = CommandLine.HelpCommand\n\t// Global version flag. Exposed for user customisation. May be nil.\n\tVersionFlag = CommandLine.VersionFlag\n)\n\n// Command adds a new command to the default parser.\nfunc Command(name, help string) *CmdClause {\n\treturn CommandLine.Command(name, help)\n}\n\n// Flag adds a new flag to the default parser.\nfunc Flag(name, help string) *FlagClause {\n\treturn CommandLine.Flag(name, help)\n}\n\n// Arg adds a new argument to the top-level of the default parser.\nfunc Arg(name, help string) *ArgClause {\n\treturn CommandLine.Arg(name, help)\n}\n\n// Parse and return the selected command. Will call the termination handler if\n// an error is encountered.\nfunc Parse() string {\n\tselected := MustParse(CommandLine.Parse(os.Args[1:]))\n\tif selected == \"\" && CommandLine.cmdGroup.have() {\n\t\tUsage()\n\t\tCommandLine.terminate(0)\n\t}\n\treturn selected\n}\n\n// Errorf prints an error message to stderr.\nfunc Errorf(format string, args ...interface{}) {\n\tCommandLine.Errorf(format, args...)\n}\n\n// Fatalf prints an error message to stderr and exits.\nfunc Fatalf(format string, args ...interface{}) {\n\tCommandLine.Fatalf(format, args...)\n}\n\n// FatalIfError prints an error and exits if err is not nil. The error is printed\n// with the given prefix.\nfunc FatalIfError(err error, format string, args ...interface{}) {\n\tCommandLine.FatalIfError(err, format, args...)\n}\n\n// FatalUsage prints an error message followed by usage information, then\n// exits with a non-zero status.\nfunc FatalUsage(format string, args ...interface{}) {\n\tCommandLine.FatalUsage(format, args...)\n}\n\n// FatalUsageContext writes a printf formatted error message to stderr, then\n// usage information for the given ParseContext, before exiting.\nfunc FatalUsageContext(context *ParseContext, format string, args ...interface{}) {\n\tCommandLine.FatalUsageContext(context, format, args...)\n}\n\n// Usage prints usage to stderr.\nfunc Usage() {\n\tCommandLine.Usage(os.Args[1:])\n}\n\n// Set global usage template to use (defaults to DefaultUsageTemplate).\nfunc UsageTemplate(template string) *Application {\n\treturn CommandLine.UsageTemplate(template)\n}\n\n// MustParse can be used with app.Parse(args) to exit with an error if parsing fails.\nfunc MustParse(command string, err error) string {\n\tif err != nil {\n\t\tFatalf(\"%s, try --help\", err)\n\t}\n\treturn command\n}\n\n// Version adds a flag for displaying the application version number.\nfunc Version(version string) *Application {\n\treturn CommandLine.Version(version)\n}\n"
  },
  {
    "path": "vendor/gopkg.in/alecthomas/kingpin.v2/guesswidth.go",
    "content": "// +build appengine !linux,!freebsd,!darwin,!dragonfly,!netbsd,!openbsd\n\npackage kingpin\n\nimport \"io\"\n\nfunc guessWidth(w io.Writer) int {\n\treturn 80\n}\n"
  },
  {
    "path": "vendor/gopkg.in/alecthomas/kingpin.v2/guesswidth_unix.go",
    "content": "// +build !appengine,linux freebsd darwin dragonfly netbsd openbsd\n\npackage kingpin\n\nimport (\n\t\"io\"\n\t\"os\"\n\t\"strconv\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc guessWidth(w io.Writer) int {\n\t// check if COLUMNS env is set to comply with\n\t// http://pubs.opengroup.org/onlinepubs/009604499/basedefs/xbd_chap08.html\n\tcolsStr := os.Getenv(\"COLUMNS\")\n\tif colsStr != \"\" {\n\t\tif cols, err := strconv.Atoi(colsStr); err == nil {\n\t\t\treturn cols\n\t\t}\n\t}\n\n\tif t, ok := w.(*os.File); ok {\n\t\tfd := t.Fd()\n\t\tvar dimensions [4]uint16\n\n\t\tif _, _, err := syscall.Syscall6(\n\t\t\tsyscall.SYS_IOCTL,\n\t\t\tuintptr(fd),\n\t\t\tuintptr(syscall.TIOCGWINSZ),\n\t\t\tuintptr(unsafe.Pointer(&dimensions)),\n\t\t\t0, 0, 0,\n\t\t); err == 0 {\n\t\t\treturn int(dimensions[1])\n\t\t}\n\t}\n\treturn 80\n}\n"
  },
  {
    "path": "vendor/gopkg.in/alecthomas/kingpin.v2/model.go",
    "content": "package kingpin\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// Data model for Kingpin command-line structure.\n\ntype FlagGroupModel struct {\n\tFlags []*FlagModel\n}\n\nfunc (f *FlagGroupModel) FlagSummary() string {\n\tout := []string{}\n\tcount := 0\n\tfor _, flag := range f.Flags {\n\t\tif flag.Name != \"help\" {\n\t\t\tcount++\n\t\t}\n\t\tif flag.Required {\n\t\t\tif flag.IsBoolFlag() {\n\t\t\t\tout = append(out, fmt.Sprintf(\"--[no-]%s\", flag.Name))\n\t\t\t} else {\n\t\t\t\tout = append(out, fmt.Sprintf(\"--%s=%s\", flag.Name, flag.FormatPlaceHolder()))\n\t\t\t}\n\t\t}\n\t}\n\tif count != len(out) {\n\t\tout = append(out, \"[<flags>]\")\n\t}\n\treturn strings.Join(out, \" \")\n}\n\ntype FlagModel struct {\n\tName        string\n\tHelp        string\n\tShort       rune\n\tDefault     []string\n\tEnvar       string\n\tPlaceHolder string\n\tRequired    bool\n\tHidden      bool\n\tValue       Value\n}\n\nfunc (f *FlagModel) String() string {\n\treturn f.Value.String()\n}\n\nfunc (f *FlagModel) IsBoolFlag() bool {\n\tif fl, ok := f.Value.(boolFlag); ok {\n\t\treturn fl.IsBoolFlag()\n\t}\n\treturn false\n}\n\nfunc (f *FlagModel) FormatPlaceHolder() string {\n\tif f.PlaceHolder != \"\" {\n\t\treturn f.PlaceHolder\n\t}\n\tif len(f.Default) > 0 {\n\t\tellipsis := \"\"\n\t\tif len(f.Default) > 1 {\n\t\t\tellipsis = \"...\"\n\t\t}\n\t\tif _, ok := f.Value.(*stringValue); ok {\n\t\t\treturn strconv.Quote(f.Default[0]) + ellipsis\n\t\t}\n\t\treturn f.Default[0] + ellipsis\n\t}\n\treturn strings.ToUpper(f.Name)\n}\n\ntype ArgGroupModel struct {\n\tArgs []*ArgModel\n}\n\nfunc (a *ArgGroupModel) ArgSummary() string {\n\tdepth := 0\n\tout := []string{}\n\tfor _, arg := range a.Args {\n\t\th := \"<\" + arg.Name + \">\"\n\t\tif !arg.Required {\n\t\t\th = \"[\" + h\n\t\t\tdepth++\n\t\t}\n\t\tout = append(out, h)\n\t}\n\tout[len(out)-1] = out[len(out)-1] + strings.Repeat(\"]\", depth)\n\treturn strings.Join(out, \" \")\n}\n\ntype ArgModel struct {\n\tName     string\n\tHelp     string\n\tDefault  []string\n\tEnvar    string\n\tRequired bool\n\tValue    Value\n}\n\nfunc (a *ArgModel) String() string {\n\treturn a.Value.String()\n}\n\ntype CmdGroupModel struct {\n\tCommands []*CmdModel\n}\n\nfunc (c *CmdGroupModel) FlattenedCommands() (out []*CmdModel) {\n\tfor _, cmd := range c.Commands {\n\t\tif len(cmd.Commands) == 0 {\n\t\t\tout = append(out, cmd)\n\t\t}\n\t\tout = append(out, cmd.FlattenedCommands()...)\n\t}\n\treturn\n}\n\ntype CmdModel struct {\n\tName        string\n\tAliases     []string\n\tHelp        string\n\tFullCommand string\n\tDepth       int\n\tHidden      bool\n\tDefault     bool\n\t*FlagGroupModel\n\t*ArgGroupModel\n\t*CmdGroupModel\n}\n\nfunc (c *CmdModel) String() string {\n\treturn c.FullCommand\n}\n\ntype ApplicationModel struct {\n\tName    string\n\tHelp    string\n\tVersion string\n\tAuthor  string\n\t*ArgGroupModel\n\t*CmdGroupModel\n\t*FlagGroupModel\n}\n\nfunc (a *Application) Model() *ApplicationModel {\n\treturn &ApplicationModel{\n\t\tName:           a.Name,\n\t\tHelp:           a.Help,\n\t\tVersion:        a.version,\n\t\tAuthor:         a.author,\n\t\tFlagGroupModel: a.flagGroup.Model(),\n\t\tArgGroupModel:  a.argGroup.Model(),\n\t\tCmdGroupModel:  a.cmdGroup.Model(),\n\t}\n}\n\nfunc (a *argGroup) Model() *ArgGroupModel {\n\tm := &ArgGroupModel{}\n\tfor _, arg := range a.args {\n\t\tm.Args = append(m.Args, arg.Model())\n\t}\n\treturn m\n}\n\nfunc (a *ArgClause) Model() *ArgModel {\n\treturn &ArgModel{\n\t\tName:     a.name,\n\t\tHelp:     a.help,\n\t\tDefault:  a.defaultValues,\n\t\tEnvar:    a.envar,\n\t\tRequired: a.required,\n\t\tValue:    a.value,\n\t}\n}\n\nfunc (f *flagGroup) Model() *FlagGroupModel {\n\tm := &FlagGroupModel{}\n\tfor _, fl := range f.flagOrder {\n\t\tm.Flags = append(m.Flags, fl.Model())\n\t}\n\treturn m\n}\n\nfunc (f *FlagClause) Model() *FlagModel {\n\treturn &FlagModel{\n\t\tName:        f.name,\n\t\tHelp:        f.help,\n\t\tShort:       rune(f.shorthand),\n\t\tDefault:     f.defaultValues,\n\t\tEnvar:       f.envar,\n\t\tPlaceHolder: f.placeholder,\n\t\tRequired:    f.required,\n\t\tHidden:      f.hidden,\n\t\tValue:       f.value,\n\t}\n}\n\nfunc (c *cmdGroup) Model() *CmdGroupModel {\n\tm := &CmdGroupModel{}\n\tfor _, cm := range c.commandOrder {\n\t\tm.Commands = append(m.Commands, cm.Model())\n\t}\n\treturn m\n}\n\nfunc (c *CmdClause) Model() *CmdModel {\n\tdepth := 0\n\tfor i := c; i != nil; i = i.parent {\n\t\tdepth++\n\t}\n\treturn &CmdModel{\n\t\tName:           c.name,\n\t\tAliases:        c.aliases,\n\t\tHelp:           c.help,\n\t\tDepth:          depth,\n\t\tHidden:         c.hidden,\n\t\tDefault:        c.isDefault,\n\t\tFullCommand:    c.FullCommand(),\n\t\tFlagGroupModel: c.flagGroup.Model(),\n\t\tArgGroupModel:  c.argGroup.Model(),\n\t\tCmdGroupModel:  c.cmdGroup.Model(),\n\t}\n}\n"
  },
  {
    "path": "vendor/gopkg.in/alecthomas/kingpin.v2/parser.go",
    "content": "package kingpin\n\nimport (\n\t\"bufio\"\n\t\"fmt\"\n\t\"os\"\n\t\"strings\"\n\t\"unicode/utf8\"\n)\n\ntype TokenType int\n\n// Token types.\nconst (\n\tTokenShort TokenType = iota\n\tTokenLong\n\tTokenArg\n\tTokenError\n\tTokenEOL\n)\n\nfunc (t TokenType) String() string {\n\tswitch t {\n\tcase TokenShort:\n\t\treturn \"short flag\"\n\tcase TokenLong:\n\t\treturn \"long flag\"\n\tcase TokenArg:\n\t\treturn \"argument\"\n\tcase TokenError:\n\t\treturn \"error\"\n\tcase TokenEOL:\n\t\treturn \"<EOL>\"\n\t}\n\treturn \"?\"\n}\n\nvar (\n\tTokenEOLMarker = Token{-1, TokenEOL, \"\"}\n)\n\ntype Token struct {\n\tIndex int\n\tType  TokenType\n\tValue string\n}\n\nfunc (t *Token) Equal(o *Token) bool {\n\treturn t.Index == o.Index\n}\n\nfunc (t *Token) IsFlag() bool {\n\treturn t.Type == TokenShort || t.Type == TokenLong\n}\n\nfunc (t *Token) IsEOF() bool {\n\treturn t.Type == TokenEOL\n}\n\nfunc (t *Token) String() string {\n\tswitch t.Type {\n\tcase TokenShort:\n\t\treturn \"-\" + t.Value\n\tcase TokenLong:\n\t\treturn \"--\" + t.Value\n\tcase TokenArg:\n\t\treturn t.Value\n\tcase TokenError:\n\t\treturn \"error: \" + t.Value\n\tcase TokenEOL:\n\t\treturn \"<EOL>\"\n\tdefault:\n\t\tpanic(\"unhandled type\")\n\t}\n}\n\n// A union of possible elements in a parse stack.\ntype ParseElement struct {\n\t// Clause is either *CmdClause, *ArgClause or *FlagClause.\n\tClause interface{}\n\t// Value is corresponding value for an ArgClause or FlagClause (if any).\n\tValue *string\n}\n\n// ParseContext holds the current context of the parser. When passed to\n// Action() callbacks Elements will be fully populated with *FlagClause,\n// *ArgClause and *CmdClause values and their corresponding arguments (if\n// any).\ntype ParseContext struct {\n\tSelectedCommand *CmdClause\n\tignoreDefault   bool\n\targsOnly        bool\n\tpeek            []*Token\n\targi            int // Index of current command-line arg we're processing.\n\targs            []string\n\trawArgs         []string\n\tflags           *flagGroup\n\targuments       *argGroup\n\targumenti       int // Cursor into arguments\n\t// Flags, arguments and commands encountered and collected during parse.\n\tElements []*ParseElement\n}\n\nfunc (p *ParseContext) nextArg() *ArgClause {\n\tif p.argumenti >= len(p.arguments.args) {\n\t\treturn nil\n\t}\n\targ := p.arguments.args[p.argumenti]\n\tif !arg.consumesRemainder() {\n\t\tp.argumenti++\n\t}\n\treturn arg\n}\n\nfunc (p *ParseContext) next() {\n\tp.argi++\n\tp.args = p.args[1:]\n}\n\n// HasTrailingArgs returns true if there are unparsed command-line arguments.\n// This can occur if the parser can not match remaining arguments.\nfunc (p *ParseContext) HasTrailingArgs() bool {\n\treturn len(p.args) > 0\n}\n\nfunc tokenize(args []string, ignoreDefault bool) *ParseContext {\n\treturn &ParseContext{\n\t\tignoreDefault: ignoreDefault,\n\t\targs:          args,\n\t\trawArgs:       args,\n\t\tflags:         newFlagGroup(),\n\t\targuments:     newArgGroup(),\n\t}\n}\n\nfunc (p *ParseContext) mergeFlags(flags *flagGroup) {\n\tfor _, flag := range flags.flagOrder {\n\t\tif flag.shorthand != 0 {\n\t\t\tp.flags.short[string(flag.shorthand)] = flag\n\t\t}\n\t\tp.flags.long[flag.name] = flag\n\t\tp.flags.flagOrder = append(p.flags.flagOrder, flag)\n\t}\n}\n\nfunc (p *ParseContext) mergeArgs(args *argGroup) {\n\tfor _, arg := range args.args {\n\t\tp.arguments.args = append(p.arguments.args, arg)\n\t}\n}\n\nfunc (p *ParseContext) EOL() bool {\n\treturn p.Peek().Type == TokenEOL\n}\n\nfunc (p *ParseContext) Error() bool {\n\treturn p.Peek().Type == TokenError\n}\n\n// Next token in the parse context.\nfunc (p *ParseContext) Next() *Token {\n\tif len(p.peek) > 0 {\n\t\treturn p.pop()\n\t}\n\n\t// End of tokens.\n\tif len(p.args) == 0 {\n\t\treturn &Token{Index: p.argi, Type: TokenEOL}\n\t}\n\n\targ := p.args[0]\n\tp.next()\n\n\tif p.argsOnly {\n\t\treturn &Token{p.argi, TokenArg, arg}\n\t}\n\n\t// All remaining args are passed directly.\n\tif arg == \"--\" {\n\t\tp.argsOnly = true\n\t\treturn p.Next()\n\t}\n\n\tif strings.HasPrefix(arg, \"--\") {\n\t\tparts := strings.SplitN(arg[2:], \"=\", 2)\n\t\ttoken := &Token{p.argi, TokenLong, parts[0]}\n\t\tif len(parts) == 2 {\n\t\t\tp.Push(&Token{p.argi, TokenArg, parts[1]})\n\t\t}\n\t\treturn token\n\t}\n\n\tif strings.HasPrefix(arg, \"-\") {\n\t\tif len(arg) == 1 {\n\t\t\treturn &Token{Index: p.argi, Type: TokenShort}\n\t\t}\n\t\tshortRune, size := utf8.DecodeRuneInString(arg[1:])\n\t\tshort := string(shortRune)\n\t\tflag, ok := p.flags.short[short]\n\t\t// Not a known short flag, we'll just return it anyway.\n\t\tif !ok {\n\t\t} else if fb, ok := flag.value.(boolFlag); ok && fb.IsBoolFlag() {\n\t\t\t// Bool short flag.\n\t\t} else {\n\t\t\t// Short flag with combined argument: -fARG\n\t\t\ttoken := &Token{p.argi, TokenShort, short}\n\t\t\tif len(arg) > size+1 {\n\t\t\t\tp.Push(&Token{p.argi, TokenArg, arg[size+1:]})\n\t\t\t}\n\t\t\treturn token\n\t\t}\n\n\t\tif len(arg) > size+1 {\n\t\t\tp.args = append([]string{\"-\" + arg[size+1:]}, p.args...)\n\t\t}\n\t\treturn &Token{p.argi, TokenShort, short}\n\t} else if strings.HasPrefix(arg, \"@\") {\n\t\texpanded, err := ExpandArgsFromFile(arg[1:])\n\t\tif err != nil {\n\t\t\treturn &Token{p.argi, TokenError, err.Error()}\n\t\t}\n\t\tif len(p.args) == 0 {\n\t\t\tp.args = expanded\n\t\t} else {\n\t\t\tp.args = append(expanded, p.args...)\n\t\t}\n\t\treturn p.Next()\n\t}\n\n\treturn &Token{p.argi, TokenArg, arg}\n}\n\nfunc (p *ParseContext) Peek() *Token {\n\tif len(p.peek) == 0 {\n\t\treturn p.Push(p.Next())\n\t}\n\treturn p.peek[len(p.peek)-1]\n}\n\nfunc (p *ParseContext) Push(token *Token) *Token {\n\tp.peek = append(p.peek, token)\n\treturn token\n}\n\nfunc (p *ParseContext) pop() *Token {\n\tend := len(p.peek) - 1\n\ttoken := p.peek[end]\n\tp.peek = p.peek[0:end]\n\treturn token\n}\n\nfunc (p *ParseContext) String() string {\n\treturn p.SelectedCommand.FullCommand()\n}\n\nfunc (p *ParseContext) matchedFlag(flag *FlagClause, value string) {\n\tp.Elements = append(p.Elements, &ParseElement{Clause: flag, Value: &value})\n}\n\nfunc (p *ParseContext) matchedArg(arg *ArgClause, value string) {\n\tp.Elements = append(p.Elements, &ParseElement{Clause: arg, Value: &value})\n}\n\nfunc (p *ParseContext) matchedCmd(cmd *CmdClause) {\n\tp.Elements = append(p.Elements, &ParseElement{Clause: cmd})\n\tp.mergeFlags(cmd.flagGroup)\n\tp.mergeArgs(cmd.argGroup)\n\tp.SelectedCommand = cmd\n}\n\n// Expand arguments from a file. Lines starting with # will be treated as comments.\nfunc ExpandArgsFromFile(filename string) (out []string, err error) {\n\tif filename == \"\" {\n\t\treturn nil, fmt.Errorf(\"expected @ file to expand arguments from\")\n\t}\n\tr, err := os.Open(filename)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to open arguments file %q: %s\", filename, err)\n\t}\n\tdefer r.Close()\n\tscanner := bufio.NewScanner(r)\n\tfor scanner.Scan() {\n\t\tline := scanner.Text()\n\t\tif strings.HasPrefix(line, \"#\") {\n\t\t\tcontinue\n\t\t}\n\t\tout = append(out, line)\n\t}\n\terr = scanner.Err()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to read arguments from %q: %s\", filename, err)\n\t}\n\treturn\n}\n\nfunc parse(context *ParseContext, app *Application) (err error) {\n\tcontext.mergeFlags(app.flagGroup)\n\tcontext.mergeArgs(app.argGroup)\n\n\tcmds := app.cmdGroup\n\tignoreDefault := context.ignoreDefault\n\nloop:\n\tfor !context.EOL() && !context.Error() {\n\t\ttoken := context.Peek()\n\n\t\tswitch token.Type {\n\t\tcase TokenLong, TokenShort:\n\t\t\tif flag, err := context.flags.parse(context); err != nil {\n\t\t\t\tif !ignoreDefault {\n\t\t\t\t\tif cmd := cmds.defaultSubcommand(); cmd != nil {\n\t\t\t\t\t\tcmd.completionAlts = cmds.cmdNames()\n\t\t\t\t\t\tcontext.matchedCmd(cmd)\n\t\t\t\t\t\tcmds = cmd.cmdGroup\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn err\n\t\t\t} else if flag == HelpFlag {\n\t\t\t\tignoreDefault = true\n\t\t\t}\n\n\t\tcase TokenArg:\n\t\t\tif cmds.have() {\n\t\t\t\tselectedDefault := false\n\t\t\t\tcmd, ok := cmds.commands[token.String()]\n\t\t\t\tif !ok {\n\t\t\t\t\tif !ignoreDefault {\n\t\t\t\t\t\tif cmd = cmds.defaultSubcommand(); cmd != nil {\n\t\t\t\t\t\t\tcmd.completionAlts = cmds.cmdNames()\n\t\t\t\t\t\t\tselectedDefault = true\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif cmd == nil {\n\t\t\t\t\t\treturn fmt.Errorf(\"expected command but got %q\", token)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif cmd == HelpCommand {\n\t\t\t\t\tignoreDefault = true\n\t\t\t\t}\n\t\t\t\tcmd.completionAlts = nil\n\t\t\t\tcontext.matchedCmd(cmd)\n\t\t\t\tcmds = cmd.cmdGroup\n\t\t\t\tif !selectedDefault {\n\t\t\t\t\tcontext.Next()\n\t\t\t\t}\n\t\t\t} else if context.arguments.have() {\n\t\t\t\tif app.noInterspersed {\n\t\t\t\t\t// no more flags\n\t\t\t\t\tcontext.argsOnly = true\n\t\t\t\t}\n\t\t\t\targ := context.nextArg()\n\t\t\t\tif arg == nil {\n\t\t\t\t\tbreak loop\n\t\t\t\t}\n\t\t\t\tcontext.matchedArg(arg, token.String())\n\t\t\t\tcontext.Next()\n\t\t\t} else {\n\t\t\t\tbreak loop\n\t\t\t}\n\n\t\tcase TokenEOL:\n\t\t\tbreak loop\n\t\t}\n\t}\n\n\t// Move to innermost default command.\n\tfor !ignoreDefault {\n\t\tif cmd := cmds.defaultSubcommand(); cmd != nil {\n\t\t\tcmd.completionAlts = cmds.cmdNames()\n\t\t\tcontext.matchedCmd(cmd)\n\t\t\tcmds = cmd.cmdGroup\n\t\t} else {\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif context.Error() {\n\t\treturn fmt.Errorf(\"%s\", context.Peek().Value)\n\t}\n\n\tif !context.EOL() {\n\t\treturn fmt.Errorf(\"unexpected %s\", context.Peek())\n\t}\n\n\t// Set defaults for all remaining args.\n\tfor arg := context.nextArg(); arg != nil && !arg.consumesRemainder(); arg = context.nextArg() {\n\t\tfor _, defaultValue := range arg.defaultValues {\n\t\t\tif err := arg.value.Set(defaultValue); err != nil {\n\t\t\t\treturn fmt.Errorf(\"invalid default value '%s' for argument '%s'\", defaultValue, arg.name)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn\n}\n"
  },
  {
    "path": "vendor/gopkg.in/alecthomas/kingpin.v2/parsers.go",
    "content": "package kingpin\n\nimport (\n\t\"net\"\n\t\"net/url\"\n\t\"os\"\n\t\"time\"\n\n\t\"github.com/alecthomas/units\"\n)\n\ntype Settings interface {\n\tSetValue(value Value)\n}\n\ntype parserMixin struct {\n\tvalue    Value\n\trequired bool\n}\n\nfunc (p *parserMixin) SetValue(value Value) {\n\tp.value = value\n}\n\n// StringMap provides key=value parsing into a map.\nfunc (p *parserMixin) StringMap() (target *map[string]string) {\n\ttarget = &(map[string]string{})\n\tp.StringMapVar(target)\n\treturn\n}\n\n// Duration sets the parser to a time.Duration parser.\nfunc (p *parserMixin) Duration() (target *time.Duration) {\n\ttarget = new(time.Duration)\n\tp.DurationVar(target)\n\treturn\n}\n\n// Bytes parses numeric byte units. eg. 1.5KB\nfunc (p *parserMixin) Bytes() (target *units.Base2Bytes) {\n\ttarget = new(units.Base2Bytes)\n\tp.BytesVar(target)\n\treturn\n}\n\n// IP sets the parser to a net.IP parser.\nfunc (p *parserMixin) IP() (target *net.IP) {\n\ttarget = new(net.IP)\n\tp.IPVar(target)\n\treturn\n}\n\n// TCP (host:port) address.\nfunc (p *parserMixin) TCP() (target **net.TCPAddr) {\n\ttarget = new(*net.TCPAddr)\n\tp.TCPVar(target)\n\treturn\n}\n\n// TCPVar (host:port) address.\nfunc (p *parserMixin) TCPVar(target **net.TCPAddr) {\n\tp.SetValue(newTCPAddrValue(target))\n}\n\n// ExistingFile sets the parser to one that requires and returns an existing file.\nfunc (p *parserMixin) ExistingFile() (target *string) {\n\ttarget = new(string)\n\tp.ExistingFileVar(target)\n\treturn\n}\n\n// ExistingDir sets the parser to one that requires and returns an existing directory.\nfunc (p *parserMixin) ExistingDir() (target *string) {\n\ttarget = new(string)\n\tp.ExistingDirVar(target)\n\treturn\n}\n\n// ExistingFileOrDir sets the parser to one that requires and returns an existing file OR directory.\nfunc (p *parserMixin) ExistingFileOrDir() (target *string) {\n\ttarget = new(string)\n\tp.ExistingFileOrDirVar(target)\n\treturn\n}\n\n// File returns an os.File against an existing file.\nfunc (p *parserMixin) File() (target **os.File) {\n\ttarget = new(*os.File)\n\tp.FileVar(target)\n\treturn\n}\n\n// File attempts to open a File with os.OpenFile(flag, perm).\nfunc (p *parserMixin) OpenFile(flag int, perm os.FileMode) (target **os.File) {\n\ttarget = new(*os.File)\n\tp.OpenFileVar(target, flag, perm)\n\treturn\n}\n\n// URL provides a valid, parsed url.URL.\nfunc (p *parserMixin) URL() (target **url.URL) {\n\ttarget = new(*url.URL)\n\tp.URLVar(target)\n\treturn\n}\n\n// StringMap provides key=value parsing into a map.\nfunc (p *parserMixin) StringMapVar(target *map[string]string) {\n\tp.SetValue(newStringMapValue(target))\n}\n\n// Float sets the parser to a float64 parser.\nfunc (p *parserMixin) Float() (target *float64) {\n\treturn p.Float64()\n}\n\n// Float sets the parser to a float64 parser.\nfunc (p *parserMixin) FloatVar(target *float64) {\n\tp.Float64Var(target)\n}\n\n// Duration sets the parser to a time.Duration parser.\nfunc (p *parserMixin) DurationVar(target *time.Duration) {\n\tp.SetValue(newDurationValue(target))\n}\n\n// BytesVar parses numeric byte units. eg. 1.5KB\nfunc (p *parserMixin) BytesVar(target *units.Base2Bytes) {\n\tp.SetValue(newBytesValue(target))\n}\n\n// IP sets the parser to a net.IP parser.\nfunc (p *parserMixin) IPVar(target *net.IP) {\n\tp.SetValue(newIPValue(target))\n}\n\n// ExistingFile sets the parser to one that requires and returns an existing file.\nfunc (p *parserMixin) ExistingFileVar(target *string) {\n\tp.SetValue(newExistingFileValue(target))\n}\n\n// ExistingDir sets the parser to one that requires and returns an existing directory.\nfunc (p *parserMixin) ExistingDirVar(target *string) {\n\tp.SetValue(newExistingDirValue(target))\n}\n\n// ExistingDir sets the parser to one that requires and returns an existing directory.\nfunc (p *parserMixin) ExistingFileOrDirVar(target *string) {\n\tp.SetValue(newExistingFileOrDirValue(target))\n}\n\n// FileVar opens an existing file.\nfunc (p *parserMixin) FileVar(target **os.File) {\n\tp.SetValue(newFileValue(target, os.O_RDONLY, 0))\n}\n\n// OpenFileVar calls os.OpenFile(flag, perm)\nfunc (p *parserMixin) OpenFileVar(target **os.File, flag int, perm os.FileMode) {\n\tp.SetValue(newFileValue(target, flag, perm))\n}\n\n// URL provides a valid, parsed url.URL.\nfunc (p *parserMixin) URLVar(target **url.URL) {\n\tp.SetValue(newURLValue(target))\n}\n\n// URLList provides a parsed list of url.URL values.\nfunc (p *parserMixin) URLList() (target *[]*url.URL) {\n\ttarget = new([]*url.URL)\n\tp.URLListVar(target)\n\treturn\n}\n\n// URLListVar provides a parsed list of url.URL values.\nfunc (p *parserMixin) URLListVar(target *[]*url.URL) {\n\tp.SetValue(newURLListValue(target))\n}\n\n// Enum allows a value from a set of options.\nfunc (p *parserMixin) Enum(options ...string) (target *string) {\n\ttarget = new(string)\n\tp.EnumVar(target, options...)\n\treturn\n}\n\n// EnumVar allows a value from a set of options.\nfunc (p *parserMixin) EnumVar(target *string, options ...string) {\n\tp.SetValue(newEnumFlag(target, options...))\n}\n\n// Enums allows a set of values from a set of options.\nfunc (p *parserMixin) Enums(options ...string) (target *[]string) {\n\ttarget = new([]string)\n\tp.EnumsVar(target, options...)\n\treturn\n}\n\n// EnumVar allows a value from a set of options.\nfunc (p *parserMixin) EnumsVar(target *[]string, options ...string) {\n\tp.SetValue(newEnumsFlag(target, options...))\n}\n\n// A Counter increments a number each time it is encountered.\nfunc (p *parserMixin) Counter() (target *int) {\n\ttarget = new(int)\n\tp.CounterVar(target)\n\treturn\n}\n\nfunc (p *parserMixin) CounterVar(target *int) {\n\tp.SetValue(newCounterValue(target))\n}\n"
  },
  {
    "path": "vendor/gopkg.in/alecthomas/kingpin.v2/templates.go",
    "content": "package kingpin\n\n// Default usage template.\nvar DefaultUsageTemplate = `{{define \"FormatCommand\"}}\\\n{{if .FlagSummary}} {{.FlagSummary}}{{end}}\\\n{{range .Args}} {{if not .Required}}[{{end}}<{{.Name}}>{{if .Value|IsCumulative}}...{{end}}{{if not .Required}}]{{end}}{{end}}\\\n{{end}}\\\n\n{{define \"FormatCommands\"}}\\\n{{range .FlattenedCommands}}\\\n{{if not .Hidden}}\\\n  {{.FullCommand}}{{if .Default}}*{{end}}{{template \"FormatCommand\" .}}\n{{.Help|Wrap 4}}\n{{end}}\\\n{{end}}\\\n{{end}}\\\n\n{{define \"FormatUsage\"}}\\\n{{template \"FormatCommand\" .}}{{if .Commands}} <command> [<args> ...]{{end}}\n{{if .Help}}\n{{.Help|Wrap 0}}\\\n{{end}}\\\n\n{{end}}\\\n\n{{if .Context.SelectedCommand}}\\\nusage: {{.App.Name}} {{.Context.SelectedCommand}}{{template \"FormatUsage\" .Context.SelectedCommand}}\n{{else}}\\\nusage: {{.App.Name}}{{template \"FormatUsage\" .App}}\n{{end}}\\\n{{if .Context.Flags}}\\\nFlags:\n{{.Context.Flags|FlagsToTwoColumns|FormatTwoColumns}}\n{{end}}\\\n{{if .Context.Args}}\\\nArgs:\n{{.Context.Args|ArgsToTwoColumns|FormatTwoColumns}}\n{{end}}\\\n{{if .Context.SelectedCommand}}\\\n{{if len .Context.SelectedCommand.Commands}}\\\nSubcommands:\n{{template \"FormatCommands\" .Context.SelectedCommand}}\n{{end}}\\\n{{else if .App.Commands}}\\\nCommands:\n{{template \"FormatCommands\" .App}}\n{{end}}\\\n`\n\n// Usage template where command's optional flags are listed separately\nvar SeparateOptionalFlagsUsageTemplate = `{{define \"FormatCommand\"}}\\\n{{if .FlagSummary}} {{.FlagSummary}}{{end}}\\\n{{range .Args}} {{if not .Required}}[{{end}}<{{.Name}}>{{if .Value|IsCumulative}}...{{end}}{{if not .Required}}]{{end}}{{end}}\\\n{{end}}\\\n\n{{define \"FormatCommands\"}}\\\n{{range .FlattenedCommands}}\\\n{{if not .Hidden}}\\\n  {{.FullCommand}}{{if .Default}}*{{end}}{{template \"FormatCommand\" .}}\n{{.Help|Wrap 4}}\n{{end}}\\\n{{end}}\\\n{{end}}\\\n\n{{define \"FormatUsage\"}}\\\n{{template \"FormatCommand\" .}}{{if .Commands}} <command> [<args> ...]{{end}}\n{{if .Help}}\n{{.Help|Wrap 0}}\\\n{{end}}\\\n\n{{end}}\\\n{{if .Context.SelectedCommand}}\\\nusage: {{.App.Name}} {{.Context.SelectedCommand}}{{template \"FormatUsage\" .Context.SelectedCommand}}\n{{else}}\\\nusage: {{.App.Name}}{{template \"FormatUsage\" .App}}\n{{end}}\\\n\n{{if .Context.Flags|RequiredFlags}}\\\nRequired flags:\n{{.Context.Flags|RequiredFlags|FlagsToTwoColumns|FormatTwoColumns}}\n{{end}}\\\n{{if  .Context.Flags|OptionalFlags}}\\\nOptional flags:\n{{.Context.Flags|OptionalFlags|FlagsToTwoColumns|FormatTwoColumns}}\n{{end}}\\\n{{if .Context.Args}}\\\nArgs:\n{{.Context.Args|ArgsToTwoColumns|FormatTwoColumns}}\n{{end}}\\\n{{if .Context.SelectedCommand}}\\\nSubcommands:\n{{if .Context.SelectedCommand.Commands}}\\\n{{template \"FormatCommands\" .Context.SelectedCommand}}\n{{end}}\\\n{{else if .App.Commands}}\\\nCommands:\n{{template \"FormatCommands\" .App}}\n{{end}}\\\n`\n\n// Usage template with compactly formatted commands.\nvar CompactUsageTemplate = `{{define \"FormatCommand\"}}\\\n{{if .FlagSummary}} {{.FlagSummary}}{{end}}\\\n{{range .Args}} {{if not .Required}}[{{end}}<{{.Name}}>{{if .Value|IsCumulative}}...{{end}}{{if not .Required}}]{{end}}{{end}}\\\n{{end}}\\\n\n{{define \"FormatCommandList\"}}\\\n{{range .}}\\\n{{if not .Hidden}}\\\n{{.Depth|Indent}}{{.Name}}{{if .Default}}*{{end}}{{template \"FormatCommand\" .}}\n{{end}}\\\n{{template \"FormatCommandList\" .Commands}}\\\n{{end}}\\\n{{end}}\\\n\n{{define \"FormatUsage\"}}\\\n{{template \"FormatCommand\" .}}{{if .Commands}} <command> [<args> ...]{{end}}\n{{if .Help}}\n{{.Help|Wrap 0}}\\\n{{end}}\\\n\n{{end}}\\\n\n{{if .Context.SelectedCommand}}\\\nusage: {{.App.Name}} {{.Context.SelectedCommand}}{{template \"FormatUsage\" .Context.SelectedCommand}}\n{{else}}\\\nusage: {{.App.Name}}{{template \"FormatUsage\" .App}}\n{{end}}\\\n{{if .Context.Flags}}\\\nFlags:\n{{.Context.Flags|FlagsToTwoColumns|FormatTwoColumns}}\n{{end}}\\\n{{if .Context.Args}}\\\nArgs:\n{{.Context.Args|ArgsToTwoColumns|FormatTwoColumns}}\n{{end}}\\\n{{if .Context.SelectedCommand}}\\\n{{if .Context.SelectedCommand.Commands}}\\\nCommands:\n  {{.Context.SelectedCommand}}\n{{template \"FormatCommandList\" .Context.SelectedCommand.Commands}}\n{{end}}\\\n{{else if .App.Commands}}\\\nCommands:\n{{template \"FormatCommandList\" .App.Commands}}\n{{end}}\\\n`\n\nvar ManPageTemplate = `{{define \"FormatFlags\"}}\\\n{{range .Flags}}\\\n{{if not .Hidden}}\\\n.TP\n\\fB{{if .Short}}-{{.Short|Char}}, {{end}}--{{.Name}}{{if not .IsBoolFlag}}={{.FormatPlaceHolder}}{{end}}\\\\fR\n{{.Help}}\n{{end}}\\\n{{end}}\\\n{{end}}\\\n\n{{define \"FormatCommand\"}}\\\n{{if .FlagSummary}} {{.FlagSummary}}{{end}}\\\n{{range .Args}} {{if not .Required}}[{{end}}<{{.Name}}{{if .Default}}*{{end}}>{{if .Value|IsCumulative}}...{{end}}{{if not .Required}}]{{end}}{{end}}\\\n{{end}}\\\n\n{{define \"FormatCommands\"}}\\\n{{range .FlattenedCommands}}\\\n{{if not .Hidden}}\\\n.SS\n\\fB{{.FullCommand}}{{template \"FormatCommand\" .}}\\\\fR\n.PP\n{{.Help}}\n{{template \"FormatFlags\" .}}\\\n{{end}}\\\n{{end}}\\\n{{end}}\\\n\n{{define \"FormatUsage\"}}\\\n{{template \"FormatCommand\" .}}{{if .Commands}} <command> [<args> ...]{{end}}\\\\fR\n{{end}}\\\n\n.TH {{.App.Name}} 1 {{.App.Version}} \"{{.App.Author}}\"\n.SH \"NAME\"\n{{.App.Name}}\n.SH \"SYNOPSIS\"\n.TP\n\\fB{{.App.Name}}{{template \"FormatUsage\" .App}}\n.SH \"DESCRIPTION\"\n{{.App.Help}}\n.SH \"OPTIONS\"\n{{template \"FormatFlags\" .App}}\\\n{{if .App.Commands}}\\\n.SH \"COMMANDS\"\n{{template \"FormatCommands\" .App}}\\\n{{end}}\\\n`\n\n// Default usage template.\nvar LongHelpTemplate = `{{define \"FormatCommand\"}}\\\n{{if .FlagSummary}} {{.FlagSummary}}{{end}}\\\n{{range .Args}} {{if not .Required}}[{{end}}<{{.Name}}>{{if .Value|IsCumulative}}...{{end}}{{if not .Required}}]{{end}}{{end}}\\\n{{end}}\\\n\n{{define \"FormatCommands\"}}\\\n{{range .FlattenedCommands}}\\\n{{if not .Hidden}}\\\n  {{.FullCommand}}{{template \"FormatCommand\" .}}\n{{.Help|Wrap 4}}\n{{with .Flags|FlagsToTwoColumns}}{{FormatTwoColumnsWithIndent . 4 2}}{{end}}\n{{end}}\\\n{{end}}\\\n{{end}}\\\n\n{{define \"FormatUsage\"}}\\\n{{template \"FormatCommand\" .}}{{if .Commands}} <command> [<args> ...]{{end}}\n{{if .Help}}\n{{.Help|Wrap 0}}\\\n{{end}}\\\n\n{{end}}\\\n\nusage: {{.App.Name}}{{template \"FormatUsage\" .App}}\n{{if .Context.Flags}}\\\nFlags:\n{{.Context.Flags|FlagsToTwoColumns|FormatTwoColumns}}\n{{end}}\\\n{{if .Context.Args}}\\\nArgs:\n{{.Context.Args|ArgsToTwoColumns|FormatTwoColumns}}\n{{end}}\\\n{{if .App.Commands}}\\\nCommands:\n{{template \"FormatCommands\" .App}}\n{{end}}\\\n`\n\nvar BashCompletionTemplate = `\n_{{.App.Name}}_bash_autocomplete() {\n    local cur prev opts base\n    COMPREPLY=()\n    cur=\"${COMP_WORDS[COMP_CWORD]}\"\n    opts=$( ${COMP_WORDS[0]} --completion-bash ${COMP_WORDS[@]:1:$COMP_CWORD} )\n    COMPREPLY=( $(compgen -W \"${opts}\" -- ${cur}) )\n    return 0\n}\ncomplete -F _{{.App.Name}}_bash_autocomplete {{.App.Name}}\n\n`\n\nvar ZshCompletionTemplate = `\n#compdef {{.App.Name}}\nautoload -U compinit && compinit\nautoload -U bashcompinit && bashcompinit\n\n_{{.App.Name}}_bash_autocomplete() {\n    local cur prev opts base\n    COMPREPLY=()\n    cur=\"${COMP_WORDS[COMP_CWORD]}\"\n    opts=$( ${COMP_WORDS[0]} --completion-bash ${COMP_WORDS[@]:1:$COMP_CWORD} )\n    COMPREPLY=( $(compgen -W \"${opts}\" -- ${cur}) )\n    return 0\n}\ncomplete -F _{{.App.Name}}_bash_autocomplete {{.App.Name}}\n`\n"
  },
  {
    "path": "vendor/gopkg.in/alecthomas/kingpin.v2/usage.go",
    "content": "package kingpin\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"go/doc\"\n\t\"io\"\n\t\"strings\"\n\n\t\"github.com/alecthomas/template\"\n)\n\nvar (\n\tpreIndent = \"  \"\n)\n\nfunc formatTwoColumns(w io.Writer, indent, padding, width int, rows [][2]string) {\n\t// Find size of first column.\n\ts := 0\n\tfor _, row := range rows {\n\t\tif c := len(row[0]); c > s && c < 30 {\n\t\t\ts = c\n\t\t}\n\t}\n\n\tindentStr := strings.Repeat(\" \", indent)\n\toffsetStr := strings.Repeat(\" \", s+padding)\n\n\tfor _, row := range rows {\n\t\tbuf := bytes.NewBuffer(nil)\n\t\tdoc.ToText(buf, row[1], \"\", preIndent, width-s-padding-indent)\n\t\tlines := strings.Split(strings.TrimRight(buf.String(), \"\\n\"), \"\\n\")\n\t\tfmt.Fprintf(w, \"%s%-*s%*s\", indentStr, s, row[0], padding, \"\")\n\t\tif len(row[0]) >= 30 {\n\t\t\tfmt.Fprintf(w, \"\\n%s%s\", indentStr, offsetStr)\n\t\t}\n\t\tfmt.Fprintf(w, \"%s\\n\", lines[0])\n\t\tfor _, line := range lines[1:] {\n\t\t\tfmt.Fprintf(w, \"%s%s%s\\n\", indentStr, offsetStr, line)\n\t\t}\n\t}\n}\n\n// Usage writes application usage to w. It parses args to determine\n// appropriate help context, such as which command to show help for.\nfunc (a *Application) Usage(args []string) {\n\tcontext, err := a.parseContext(true, args)\n\ta.FatalIfError(err, \"\")\n\tif err := a.UsageForContextWithTemplate(context, 2, a.usageTemplate); err != nil {\n\t\tpanic(err)\n\t}\n}\n\nfunc formatAppUsage(app *ApplicationModel) string {\n\ts := []string{app.Name}\n\tif len(app.Flags) > 0 {\n\t\ts = append(s, app.FlagSummary())\n\t}\n\tif len(app.Args) > 0 {\n\t\ts = append(s, app.ArgSummary())\n\t}\n\treturn strings.Join(s, \" \")\n}\n\nfunc formatCmdUsage(app *ApplicationModel, cmd *CmdModel) string {\n\ts := []string{app.Name, cmd.String()}\n\tif len(app.Flags) > 0 {\n\t\ts = append(s, app.FlagSummary())\n\t}\n\tif len(app.Args) > 0 {\n\t\ts = append(s, app.ArgSummary())\n\t}\n\treturn strings.Join(s, \" \")\n}\n\nfunc formatFlag(haveShort bool, flag *FlagModel) string {\n\tflagString := \"\"\n\tif flag.Short != 0 {\n\t\tflagString += fmt.Sprintf(\"-%c, --%s\", flag.Short, flag.Name)\n\t} else {\n\t\tif haveShort {\n\t\t\tflagString += fmt.Sprintf(\"    --%s\", flag.Name)\n\t\t} else {\n\t\t\tflagString += fmt.Sprintf(\"--%s\", flag.Name)\n\t\t}\n\t}\n\tif !flag.IsBoolFlag() {\n\t\tflagString += fmt.Sprintf(\"=%s\", flag.FormatPlaceHolder())\n\t}\n\tif v, ok := flag.Value.(repeatableFlag); ok && v.IsCumulative() {\n\t\tflagString += \" ...\"\n\t}\n\treturn flagString\n}\n\ntype templateParseContext struct {\n\tSelectedCommand *CmdModel\n\t*FlagGroupModel\n\t*ArgGroupModel\n}\n\ntype templateContext struct {\n\tApp     *ApplicationModel\n\tWidth   int\n\tContext *templateParseContext\n}\n\n// UsageForContext displays usage information from a ParseContext (obtained from\n// Application.ParseContext() or Action(f) callbacks).\nfunc (a *Application) UsageForContext(context *ParseContext) error {\n\treturn a.UsageForContextWithTemplate(context, 2, a.usageTemplate)\n}\n\n// UsageForContextWithTemplate is the base usage function. You generally don't need to use this.\nfunc (a *Application) UsageForContextWithTemplate(context *ParseContext, indent int, tmpl string) error {\n\twidth := guessWidth(a.usageWriter)\n\tfuncs := template.FuncMap{\n\t\t\"Indent\": func(level int) string {\n\t\t\treturn strings.Repeat(\" \", level*indent)\n\t\t},\n\t\t\"Wrap\": func(indent int, s string) string {\n\t\t\tbuf := bytes.NewBuffer(nil)\n\t\t\tindentText := strings.Repeat(\" \", indent)\n\t\t\tdoc.ToText(buf, s, indentText, \"  \"+indentText, width-indent)\n\t\t\treturn buf.String()\n\t\t},\n\t\t\"FormatFlag\": formatFlag,\n\t\t\"FlagsToTwoColumns\": func(f []*FlagModel) [][2]string {\n\t\t\trows := [][2]string{}\n\t\t\thaveShort := false\n\t\t\tfor _, flag := range f {\n\t\t\t\tif flag.Short != 0 {\n\t\t\t\t\thaveShort = true\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor _, flag := range f {\n\t\t\t\tif !flag.Hidden {\n\t\t\t\t\trows = append(rows, [2]string{formatFlag(haveShort, flag), flag.Help})\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn rows\n\t\t},\n\t\t\"RequiredFlags\": func(f []*FlagModel) []*FlagModel {\n\t\t\trequiredFlags := []*FlagModel{}\n\t\t\tfor _, flag := range f {\n\t\t\t\tif flag.Required {\n\t\t\t\t\trequiredFlags = append(requiredFlags, flag)\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn requiredFlags\n\t\t},\n\t\t\"OptionalFlags\": func(f []*FlagModel) []*FlagModel {\n\t\t\toptionalFlags := []*FlagModel{}\n\t\t\tfor _, flag := range f {\n\t\t\t\tif !flag.Required {\n\t\t\t\t\toptionalFlags = append(optionalFlags, flag)\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn optionalFlags\n\t\t},\n\t\t\"ArgsToTwoColumns\": func(a []*ArgModel) [][2]string {\n\t\t\trows := [][2]string{}\n\t\t\tfor _, arg := range a {\n\t\t\t\ts := \"<\" + arg.Name + \">\"\n\t\t\t\tif !arg.Required {\n\t\t\t\t\ts = \"[\" + s + \"]\"\n\t\t\t\t}\n\t\t\t\trows = append(rows, [2]string{s, arg.Help})\n\t\t\t}\n\t\t\treturn rows\n\t\t},\n\t\t\"FormatTwoColumns\": func(rows [][2]string) string {\n\t\t\tbuf := bytes.NewBuffer(nil)\n\t\t\tformatTwoColumns(buf, indent, indent, width, rows)\n\t\t\treturn buf.String()\n\t\t},\n\t\t\"FormatTwoColumnsWithIndent\": func(rows [][2]string, indent, padding int) string {\n\t\t\tbuf := bytes.NewBuffer(nil)\n\t\t\tformatTwoColumns(buf, indent, padding, width, rows)\n\t\t\treturn buf.String()\n\t\t},\n\t\t\"FormatAppUsage\":     formatAppUsage,\n\t\t\"FormatCommandUsage\": formatCmdUsage,\n\t\t\"IsCumulative\": func(value Value) bool {\n\t\t\tr, ok := value.(remainderArg)\n\t\t\treturn ok && r.IsCumulative()\n\t\t},\n\t\t\"Char\": func(c rune) string {\n\t\t\treturn string(c)\n\t\t},\n\t}\n\tt, err := template.New(\"usage\").Funcs(funcs).Parse(tmpl)\n\tif err != nil {\n\t\treturn err\n\t}\n\tvar selectedCommand *CmdModel\n\tif context.SelectedCommand != nil {\n\t\tselectedCommand = context.SelectedCommand.Model()\n\t}\n\tctx := templateContext{\n\t\tApp:   a.Model(),\n\t\tWidth: width,\n\t\tContext: &templateParseContext{\n\t\t\tSelectedCommand: selectedCommand,\n\t\t\tFlagGroupModel:  context.flags.Model(),\n\t\t\tArgGroupModel:   context.arguments.Model(),\n\t\t},\n\t}\n\treturn t.Execute(a.usageWriter, ctx)\n}\n"
  },
  {
    "path": "vendor/gopkg.in/alecthomas/kingpin.v2/values.go",
    "content": "package kingpin\n\n//go:generate go run ./cmd/genvalues/main.go\n\nimport (\n\t\"fmt\"\n\t\"net\"\n\t\"net/url\"\n\t\"os\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/alecthomas/units\"\n)\n\n// NOTE: Most of the base type values were lifted from:\n// http://golang.org/src/pkg/flag/flag.go?s=20146:20222\n\n// Value is the interface to the dynamic value stored in a flag.\n// (The default value is represented as a string.)\n//\n// If a Value has an IsBoolFlag() bool method returning true, the command-line\n// parser makes --name equivalent to -name=true rather than using the next\n// command-line argument, and adds a --no-name counterpart for negating the\n// flag.\ntype Value interface {\n\tString() string\n\tSet(string) error\n}\n\n// Getter is an interface that allows the contents of a Value to be retrieved.\n// It wraps the Value interface, rather than being part of it, because it\n// appeared after Go 1 and its compatibility rules. All Value types provided\n// by this package satisfy the Getter interface.\ntype Getter interface {\n\tValue\n\tGet() interface{}\n}\n\n// Optional interface to indicate boolean flags that don't accept a value, and\n// implicitly have a --no-<x> negation counterpart.\ntype boolFlag interface {\n\tValue\n\tIsBoolFlag() bool\n}\n\n// Optional interface for arguments that cumulatively consume all remaining\n// input.\ntype remainderArg interface {\n\tValue\n\tIsCumulative() bool\n}\n\n// Optional interface for flags that can be repeated.\ntype repeatableFlag interface {\n\tValue\n\tIsCumulative() bool\n}\n\ntype accumulator struct {\n\telement func(value interface{}) Value\n\ttyp     reflect.Type\n\tslice   reflect.Value\n}\n\n// Use reflection to accumulate values into a slice.\n//\n// target := []string{}\n// newAccumulator(&target, func (value interface{}) Value {\n//   return newStringValue(value.(*string))\n// })\nfunc newAccumulator(slice interface{}, element func(value interface{}) Value) *accumulator {\n\ttyp := reflect.TypeOf(slice)\n\tif typ.Kind() != reflect.Ptr || typ.Elem().Kind() != reflect.Slice {\n\t\tpanic(\"expected a pointer to a slice\")\n\t}\n\treturn &accumulator{\n\t\telement: element,\n\t\ttyp:     typ.Elem().Elem(),\n\t\tslice:   reflect.ValueOf(slice),\n\t}\n}\n\nfunc (a *accumulator) String() string {\n\tout := []string{}\n\ts := a.slice.Elem()\n\tfor i := 0; i < s.Len(); i++ {\n\t\tout = append(out, a.element(s.Index(i).Addr().Interface()).String())\n\t}\n\treturn strings.Join(out, \",\")\n}\n\nfunc (a *accumulator) Set(value string) error {\n\te := reflect.New(a.typ)\n\tif err := a.element(e.Interface()).Set(value); err != nil {\n\t\treturn err\n\t}\n\tslice := reflect.Append(a.slice.Elem(), e.Elem())\n\ta.slice.Elem().Set(slice)\n\treturn nil\n}\n\nfunc (a *accumulator) Get() interface{} {\n\treturn a.slice.Interface()\n}\n\nfunc (a *accumulator) IsCumulative() bool {\n\treturn true\n}\n\nfunc (b *boolValue) IsBoolFlag() bool { return true }\n\n// -- time.Duration Value\ntype durationValue time.Duration\n\nfunc newDurationValue(p *time.Duration) *durationValue {\n\treturn (*durationValue)(p)\n}\n\nfunc (d *durationValue) Set(s string) error {\n\tv, err := time.ParseDuration(s)\n\t*d = durationValue(v)\n\treturn err\n}\n\nfunc (d *durationValue) Get() interface{} { return time.Duration(*d) }\n\nfunc (d *durationValue) String() string { return (*time.Duration)(d).String() }\n\n// -- map[string]string Value\ntype stringMapValue map[string]string\n\nfunc newStringMapValue(p *map[string]string) *stringMapValue {\n\treturn (*stringMapValue)(p)\n}\n\nvar stringMapRegex = regexp.MustCompile(\"[:=]\")\n\nfunc (s *stringMapValue) Set(value string) error {\n\tparts := stringMapRegex.Split(value, 2)\n\tif len(parts) != 2 {\n\t\treturn fmt.Errorf(\"expected KEY=VALUE got '%s'\", value)\n\t}\n\t(*s)[parts[0]] = parts[1]\n\treturn nil\n}\n\nfunc (s *stringMapValue) Get() interface{} {\n\treturn (map[string]string)(*s)\n}\n\nfunc (s *stringMapValue) String() string {\n\treturn fmt.Sprintf(\"%s\", map[string]string(*s))\n}\n\nfunc (s *stringMapValue) IsCumulative() bool {\n\treturn true\n}\n\n// -- net.IP Value\ntype ipValue net.IP\n\nfunc newIPValue(p *net.IP) *ipValue {\n\treturn (*ipValue)(p)\n}\n\nfunc (i *ipValue) Set(value string) error {\n\tif ip := net.ParseIP(value); ip == nil {\n\t\treturn fmt.Errorf(\"'%s' is not an IP address\", value)\n\t} else {\n\t\t*i = *(*ipValue)(&ip)\n\t\treturn nil\n\t}\n}\n\nfunc (i *ipValue) Get() interface{} {\n\treturn (net.IP)(*i)\n}\n\nfunc (i *ipValue) String() string {\n\treturn (*net.IP)(i).String()\n}\n\n// -- *net.TCPAddr Value\ntype tcpAddrValue struct {\n\taddr **net.TCPAddr\n}\n\nfunc newTCPAddrValue(p **net.TCPAddr) *tcpAddrValue {\n\treturn &tcpAddrValue{p}\n}\n\nfunc (i *tcpAddrValue) Set(value string) error {\n\tif addr, err := net.ResolveTCPAddr(\"tcp\", value); err != nil {\n\t\treturn fmt.Errorf(\"'%s' is not a valid TCP address: %s\", value, err)\n\t} else {\n\t\t*i.addr = addr\n\t\treturn nil\n\t}\n}\n\nfunc (t *tcpAddrValue) Get() interface{} {\n\treturn (*net.TCPAddr)(*t.addr)\n}\n\nfunc (i *tcpAddrValue) String() string {\n\treturn (*i.addr).String()\n}\n\n// -- existingFile Value\n\ntype fileStatValue struct {\n\tpath      *string\n\tpredicate func(os.FileInfo) error\n}\n\nfunc newFileStatValue(p *string, predicate func(os.FileInfo) error) *fileStatValue {\n\treturn &fileStatValue{\n\t\tpath:      p,\n\t\tpredicate: predicate,\n\t}\n}\n\nfunc (e *fileStatValue) Set(value string) error {\n\tif s, err := os.Stat(value); os.IsNotExist(err) {\n\t\treturn fmt.Errorf(\"path '%s' does not exist\", value)\n\t} else if err != nil {\n\t\treturn err\n\t} else if err := e.predicate(s); err != nil {\n\t\treturn err\n\t}\n\t*e.path = value\n\treturn nil\n}\n\nfunc (f *fileStatValue) Get() interface{} {\n\treturn (string)(*f.path)\n}\n\nfunc (e *fileStatValue) String() string {\n\treturn *e.path\n}\n\n// -- os.File value\n\ntype fileValue struct {\n\tf    **os.File\n\tflag int\n\tperm os.FileMode\n}\n\nfunc newFileValue(p **os.File, flag int, perm os.FileMode) *fileValue {\n\treturn &fileValue{p, flag, perm}\n}\n\nfunc (f *fileValue) Set(value string) error {\n\tif fd, err := os.OpenFile(value, f.flag, f.perm); err != nil {\n\t\treturn err\n\t} else {\n\t\t*f.f = fd\n\t\treturn nil\n\t}\n}\n\nfunc (f *fileValue) Get() interface{} {\n\treturn (*os.File)(*f.f)\n}\n\nfunc (f *fileValue) String() string {\n\tif *f.f == nil {\n\t\treturn \"<nil>\"\n\t}\n\treturn (*f.f).Name()\n}\n\n// -- url.URL Value\ntype urlValue struct {\n\tu **url.URL\n}\n\nfunc newURLValue(p **url.URL) *urlValue {\n\treturn &urlValue{p}\n}\n\nfunc (u *urlValue) Set(value string) error {\n\tif url, err := url.Parse(value); err != nil {\n\t\treturn fmt.Errorf(\"invalid URL: %s\", err)\n\t} else {\n\t\t*u.u = url\n\t\treturn nil\n\t}\n}\n\nfunc (u *urlValue) Get() interface{} {\n\treturn (*url.URL)(*u.u)\n}\n\nfunc (u *urlValue) String() string {\n\tif *u.u == nil {\n\t\treturn \"<nil>\"\n\t}\n\treturn (*u.u).String()\n}\n\n// -- []*url.URL Value\ntype urlListValue []*url.URL\n\nfunc newURLListValue(p *[]*url.URL) *urlListValue {\n\treturn (*urlListValue)(p)\n}\n\nfunc (u *urlListValue) Set(value string) error {\n\tif url, err := url.Parse(value); err != nil {\n\t\treturn fmt.Errorf(\"invalid URL: %s\", err)\n\t} else {\n\t\t*u = append(*u, url)\n\t\treturn nil\n\t}\n}\n\nfunc (u *urlListValue) Get() interface{} {\n\treturn ([]*url.URL)(*u)\n}\n\nfunc (u *urlListValue) String() string {\n\tout := []string{}\n\tfor _, url := range *u {\n\t\tout = append(out, url.String())\n\t}\n\treturn strings.Join(out, \",\")\n}\n\nfunc (u *urlListValue) IsCumulative() bool {\n\treturn true\n}\n\n// A flag whose value must be in a set of options.\ntype enumValue struct {\n\tvalue   *string\n\toptions []string\n}\n\nfunc newEnumFlag(target *string, options ...string) *enumValue {\n\treturn &enumValue{\n\t\tvalue:   target,\n\t\toptions: options,\n\t}\n}\n\nfunc (a *enumValue) String() string {\n\treturn *a.value\n}\n\nfunc (a *enumValue) Set(value string) error {\n\tfor _, v := range a.options {\n\t\tif v == value {\n\t\t\t*a.value = value\n\t\t\treturn nil\n\t\t}\n\t}\n\treturn fmt.Errorf(\"enum value must be one of %s, got '%s'\", strings.Join(a.options, \",\"), value)\n}\n\nfunc (e *enumValue) Get() interface{} {\n\treturn (string)(*e.value)\n}\n\n// -- []string Enum Value\ntype enumsValue struct {\n\tvalue   *[]string\n\toptions []string\n}\n\nfunc newEnumsFlag(target *[]string, options ...string) *enumsValue {\n\treturn &enumsValue{\n\t\tvalue:   target,\n\t\toptions: options,\n\t}\n}\n\nfunc (s *enumsValue) Set(value string) error {\n\tfor _, v := range s.options {\n\t\tif v == value {\n\t\t\t*s.value = append(*s.value, value)\n\t\t\treturn nil\n\t\t}\n\t}\n\treturn fmt.Errorf(\"enum value must be one of %s, got '%s'\", strings.Join(s.options, \",\"), value)\n}\n\nfunc (e *enumsValue) Get() interface{} {\n\treturn ([]string)(*e.value)\n}\n\nfunc (s *enumsValue) String() string {\n\treturn strings.Join(*s.value, \",\")\n}\n\nfunc (s *enumsValue) IsCumulative() bool {\n\treturn true\n}\n\n// -- units.Base2Bytes Value\ntype bytesValue units.Base2Bytes\n\nfunc newBytesValue(p *units.Base2Bytes) *bytesValue {\n\treturn (*bytesValue)(p)\n}\n\nfunc (d *bytesValue) Set(s string) error {\n\tv, err := units.ParseBase2Bytes(s)\n\t*d = bytesValue(v)\n\treturn err\n}\n\nfunc (d *bytesValue) Get() interface{} { return units.Base2Bytes(*d) }\n\nfunc (d *bytesValue) String() string { return (*units.Base2Bytes)(d).String() }\n\nfunc newExistingFileValue(target *string) *fileStatValue {\n\treturn newFileStatValue(target, func(s os.FileInfo) error {\n\t\tif s.IsDir() {\n\t\t\treturn fmt.Errorf(\"'%s' is a directory\", s.Name())\n\t\t}\n\t\treturn nil\n\t})\n}\n\nfunc newExistingDirValue(target *string) *fileStatValue {\n\treturn newFileStatValue(target, func(s os.FileInfo) error {\n\t\tif !s.IsDir() {\n\t\t\treturn fmt.Errorf(\"'%s' is a file\", s.Name())\n\t\t}\n\t\treturn nil\n\t})\n}\n\nfunc newExistingFileOrDirValue(target *string) *fileStatValue {\n\treturn newFileStatValue(target, func(s os.FileInfo) error { return nil })\n}\n\ntype counterValue int\n\nfunc newCounterValue(n *int) *counterValue {\n\treturn (*counterValue)(n)\n}\n\nfunc (c *counterValue) Set(s string) error {\n\t*c++\n\treturn nil\n}\n\nfunc (c *counterValue) Get() interface{}   { return (int)(*c) }\nfunc (c *counterValue) IsBoolFlag() bool   { return true }\nfunc (c *counterValue) String() string     { return fmt.Sprintf(\"%d\", *c) }\nfunc (c *counterValue) IsCumulative() bool { return true }\n\nfunc resolveHost(value string) (net.IP, error) {\n\tif ip := net.ParseIP(value); ip != nil {\n\t\treturn ip, nil\n\t} else {\n\t\tif addr, err := net.ResolveIPAddr(\"ip\", value); err != nil {\n\t\t\treturn nil, err\n\t\t} else {\n\t\t\treturn addr.IP, nil\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/gopkg.in/alecthomas/kingpin.v2/values.json",
    "content": "[\n  {\"type\": \"bool\", \"parser\": \"strconv.ParseBool(s)\"},\n  {\"type\": \"string\", \"parser\": \"s, error(nil)\", \"format\": \"string(*f.v)\", \"plural\": \"Strings\"},\n  {\"type\": \"uint\", \"parser\": \"strconv.ParseUint(s, 0, 64)\", \"plural\": \"Uints\"},\n  {\"type\": \"uint8\", \"parser\": \"strconv.ParseUint(s, 0, 8)\"},\n  {\"type\": \"uint16\", \"parser\": \"strconv.ParseUint(s, 0, 16)\"},\n  {\"type\": \"uint32\", \"parser\": \"strconv.ParseUint(s, 0, 32)\"},\n  {\"type\": \"uint64\", \"parser\": \"strconv.ParseUint(s, 0, 64)\"},\n  {\"type\": \"int\", \"parser\": \"strconv.ParseFloat(s, 64)\", \"plural\": \"Ints\"},\n  {\"type\": \"int8\", \"parser\": \"strconv.ParseInt(s, 0, 8)\"},\n  {\"type\": \"int16\", \"parser\": \"strconv.ParseInt(s, 0, 16)\"},\n  {\"type\": \"int32\", \"parser\": \"strconv.ParseInt(s, 0, 32)\"},\n  {\"type\": \"int64\", \"parser\": \"strconv.ParseInt(s, 0, 64)\"},\n  {\"type\": \"float64\", \"parser\": \"strconv.ParseFloat(s, 64)\"},\n  {\"type\": \"float32\", \"parser\": \"strconv.ParseFloat(s, 32)\"},\n  {\"name\": \"Duration\", \"type\": \"time.Duration\", \"no_value_parser\": true},\n  {\"name\": \"IP\", \"type\": \"net.IP\", \"no_value_parser\": true},\n  {\"name\": \"TCPAddr\", \"Type\": \"*net.TCPAddr\", \"plural\": \"TCPList\", \"no_value_parser\": true},\n  {\"name\": \"ExistingFile\", \"Type\": \"string\", \"plural\": \"ExistingFiles\", \"no_value_parser\": true},\n  {\"name\": \"ExistingDir\", \"Type\": \"string\", \"plural\": \"ExistingDirs\", \"no_value_parser\": true},\n  {\"name\": \"ExistingFileOrDir\", \"Type\": \"string\", \"plural\": \"ExistingFilesOrDirs\", \"no_value_parser\": true},\n  {\"name\": \"Regexp\", \"Type\": \"*regexp.Regexp\", \"parser\": \"regexp.Compile(s)\"},\n  {\"name\": \"ResolvedIP\", \"Type\": \"net.IP\", \"parser\": \"resolveHost(s)\", \"help\": \"Resolve a hostname or IP to an IP.\"},\n  {\"name\": \"HexBytes\", \"Type\": \"[]byte\", \"parser\": \"hex.DecodeString(s)\", \"help\": \"Bytes as a hex string.\"}\n]\n"
  },
  {
    "path": "vendor/gopkg.in/alecthomas/kingpin.v2/values_generated.go",
    "content": "package kingpin\n\nimport (\n\t\"encoding/hex\"\n\t\"fmt\"\n\t\"net\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"time\"\n)\n\n// This file is autogenerated by \"go generate .\". Do not modify.\n\n// -- bool Value\ntype boolValue struct{ v *bool }\n\nfunc newBoolValue(p *bool) *boolValue {\n\treturn &boolValue{p}\n}\n\nfunc (f *boolValue) Set(s string) error {\n\tv, err := strconv.ParseBool(s)\n\tif err == nil {\n\t\t*f.v = (bool)(v)\n\t}\n\treturn err\n}\n\nfunc (f *boolValue) Get() interface{} { return (bool)(*f.v) }\n\nfunc (f *boolValue) String() string { return fmt.Sprintf(\"%v\", *f.v) }\n\n// Bool parses the next command-line value as bool.\nfunc (p *parserMixin) Bool() (target *bool) {\n\ttarget = new(bool)\n\tp.BoolVar(target)\n\treturn\n}\n\nfunc (p *parserMixin) BoolVar(target *bool) {\n\tp.SetValue(newBoolValue(target))\n}\n\n// BoolList accumulates bool values into a slice.\nfunc (p *parserMixin) BoolList() (target *[]bool) {\n\ttarget = new([]bool)\n\tp.BoolListVar(target)\n\treturn\n}\n\nfunc (p *parserMixin) BoolListVar(target *[]bool) {\n\tp.SetValue(newAccumulator(target, func(v interface{}) Value {\n\t\treturn newBoolValue(v.(*bool))\n\t}))\n}\n\n// -- string Value\ntype stringValue struct{ v *string }\n\nfunc newStringValue(p *string) *stringValue {\n\treturn &stringValue{p}\n}\n\nfunc (f *stringValue) Set(s string) error {\n\tv, err := s, error(nil)\n\tif err == nil {\n\t\t*f.v = (string)(v)\n\t}\n\treturn err\n}\n\nfunc (f *stringValue) Get() interface{} { return (string)(*f.v) }\n\nfunc (f *stringValue) String() string { return string(*f.v) }\n\n// String parses the next command-line value as string.\nfunc (p *parserMixin) String() (target *string) {\n\ttarget = new(string)\n\tp.StringVar(target)\n\treturn\n}\n\nfunc (p *parserMixin) StringVar(target *string) {\n\tp.SetValue(newStringValue(target))\n}\n\n// Strings accumulates string values into a slice.\nfunc (p *parserMixin) Strings() (target *[]string) {\n\ttarget = new([]string)\n\tp.StringsVar(target)\n\treturn\n}\n\nfunc (p *parserMixin) StringsVar(target *[]string) {\n\tp.SetValue(newAccumulator(target, func(v interface{}) Value {\n\t\treturn newStringValue(v.(*string))\n\t}))\n}\n\n// -- uint Value\ntype uintValue struct{ v *uint }\n\nfunc newUintValue(p *uint) *uintValue {\n\treturn &uintValue{p}\n}\n\nfunc (f *uintValue) Set(s string) error {\n\tv, err := strconv.ParseUint(s, 0, 64)\n\tif err == nil {\n\t\t*f.v = (uint)(v)\n\t}\n\treturn err\n}\n\nfunc (f *uintValue) Get() interface{} { return (uint)(*f.v) }\n\nfunc (f *uintValue) String() string { return fmt.Sprintf(\"%v\", *f.v) }\n\n// Uint parses the next command-line value as uint.\nfunc (p *parserMixin) Uint() (target *uint) {\n\ttarget = new(uint)\n\tp.UintVar(target)\n\treturn\n}\n\nfunc (p *parserMixin) UintVar(target *uint) {\n\tp.SetValue(newUintValue(target))\n}\n\n// Uints accumulates uint values into a slice.\nfunc (p *parserMixin) Uints() (target *[]uint) {\n\ttarget = new([]uint)\n\tp.UintsVar(target)\n\treturn\n}\n\nfunc (p *parserMixin) UintsVar(target *[]uint) {\n\tp.SetValue(newAccumulator(target, func(v interface{}) Value {\n\t\treturn newUintValue(v.(*uint))\n\t}))\n}\n\n// -- uint8 Value\ntype uint8Value struct{ v *uint8 }\n\nfunc newUint8Value(p *uint8) *uint8Value {\n\treturn &uint8Value{p}\n}\n\nfunc (f *uint8Value) Set(s string) error {\n\tv, err := strconv.ParseUint(s, 0, 8)\n\tif err == nil {\n\t\t*f.v = (uint8)(v)\n\t}\n\treturn err\n}\n\nfunc (f *uint8Value) Get() interface{} { return (uint8)(*f.v) }\n\nfunc (f *uint8Value) String() string { return fmt.Sprintf(\"%v\", *f.v) }\n\n// Uint8 parses the next command-line value as uint8.\nfunc (p *parserMixin) Uint8() (target *uint8) {\n\ttarget = new(uint8)\n\tp.Uint8Var(target)\n\treturn\n}\n\nfunc (p *parserMixin) Uint8Var(target *uint8) {\n\tp.SetValue(newUint8Value(target))\n}\n\n// Uint8List accumulates uint8 values into a slice.\nfunc (p *parserMixin) Uint8List() (target *[]uint8) {\n\ttarget = new([]uint8)\n\tp.Uint8ListVar(target)\n\treturn\n}\n\nfunc (p *parserMixin) Uint8ListVar(target *[]uint8) {\n\tp.SetValue(newAccumulator(target, func(v interface{}) Value {\n\t\treturn newUint8Value(v.(*uint8))\n\t}))\n}\n\n// -- uint16 Value\ntype uint16Value struct{ v *uint16 }\n\nfunc newUint16Value(p *uint16) *uint16Value {\n\treturn &uint16Value{p}\n}\n\nfunc (f *uint16Value) Set(s string) error {\n\tv, err := strconv.ParseUint(s, 0, 16)\n\tif err == nil {\n\t\t*f.v = (uint16)(v)\n\t}\n\treturn err\n}\n\nfunc (f *uint16Value) Get() interface{} { return (uint16)(*f.v) }\n\nfunc (f *uint16Value) String() string { return fmt.Sprintf(\"%v\", *f.v) }\n\n// Uint16 parses the next command-line value as uint16.\nfunc (p *parserMixin) Uint16() (target *uint16) {\n\ttarget = new(uint16)\n\tp.Uint16Var(target)\n\treturn\n}\n\nfunc (p *parserMixin) Uint16Var(target *uint16) {\n\tp.SetValue(newUint16Value(target))\n}\n\n// Uint16List accumulates uint16 values into a slice.\nfunc (p *parserMixin) Uint16List() (target *[]uint16) {\n\ttarget = new([]uint16)\n\tp.Uint16ListVar(target)\n\treturn\n}\n\nfunc (p *parserMixin) Uint16ListVar(target *[]uint16) {\n\tp.SetValue(newAccumulator(target, func(v interface{}) Value {\n\t\treturn newUint16Value(v.(*uint16))\n\t}))\n}\n\n// -- uint32 Value\ntype uint32Value struct{ v *uint32 }\n\nfunc newUint32Value(p *uint32) *uint32Value {\n\treturn &uint32Value{p}\n}\n\nfunc (f *uint32Value) Set(s string) error {\n\tv, err := strconv.ParseUint(s, 0, 32)\n\tif err == nil {\n\t\t*f.v = (uint32)(v)\n\t}\n\treturn err\n}\n\nfunc (f *uint32Value) Get() interface{} { return (uint32)(*f.v) }\n\nfunc (f *uint32Value) String() string { return fmt.Sprintf(\"%v\", *f.v) }\n\n// Uint32 parses the next command-line value as uint32.\nfunc (p *parserMixin) Uint32() (target *uint32) {\n\ttarget = new(uint32)\n\tp.Uint32Var(target)\n\treturn\n}\n\nfunc (p *parserMixin) Uint32Var(target *uint32) {\n\tp.SetValue(newUint32Value(target))\n}\n\n// Uint32List accumulates uint32 values into a slice.\nfunc (p *parserMixin) Uint32List() (target *[]uint32) {\n\ttarget = new([]uint32)\n\tp.Uint32ListVar(target)\n\treturn\n}\n\nfunc (p *parserMixin) Uint32ListVar(target *[]uint32) {\n\tp.SetValue(newAccumulator(target, func(v interface{}) Value {\n\t\treturn newUint32Value(v.(*uint32))\n\t}))\n}\n\n// -- uint64 Value\ntype uint64Value struct{ v *uint64 }\n\nfunc newUint64Value(p *uint64) *uint64Value {\n\treturn &uint64Value{p}\n}\n\nfunc (f *uint64Value) Set(s string) error {\n\tv, err := strconv.ParseUint(s, 0, 64)\n\tif err == nil {\n\t\t*f.v = (uint64)(v)\n\t}\n\treturn err\n}\n\nfunc (f *uint64Value) Get() interface{} { return (uint64)(*f.v) }\n\nfunc (f *uint64Value) String() string { return fmt.Sprintf(\"%v\", *f.v) }\n\n// Uint64 parses the next command-line value as uint64.\nfunc (p *parserMixin) Uint64() (target *uint64) {\n\ttarget = new(uint64)\n\tp.Uint64Var(target)\n\treturn\n}\n\nfunc (p *parserMixin) Uint64Var(target *uint64) {\n\tp.SetValue(newUint64Value(target))\n}\n\n// Uint64List accumulates uint64 values into a slice.\nfunc (p *parserMixin) Uint64List() (target *[]uint64) {\n\ttarget = new([]uint64)\n\tp.Uint64ListVar(target)\n\treturn\n}\n\nfunc (p *parserMixin) Uint64ListVar(target *[]uint64) {\n\tp.SetValue(newAccumulator(target, func(v interface{}) Value {\n\t\treturn newUint64Value(v.(*uint64))\n\t}))\n}\n\n// -- int Value\ntype intValue struct{ v *int }\n\nfunc newIntValue(p *int) *intValue {\n\treturn &intValue{p}\n}\n\nfunc (f *intValue) Set(s string) error {\n\tv, err := strconv.ParseFloat(s, 64)\n\tif err == nil {\n\t\t*f.v = (int)(v)\n\t}\n\treturn err\n}\n\nfunc (f *intValue) Get() interface{} { return (int)(*f.v) }\n\nfunc (f *intValue) String() string { return fmt.Sprintf(\"%v\", *f.v) }\n\n// Int parses the next command-line value as int.\nfunc (p *parserMixin) Int() (target *int) {\n\ttarget = new(int)\n\tp.IntVar(target)\n\treturn\n}\n\nfunc (p *parserMixin) IntVar(target *int) {\n\tp.SetValue(newIntValue(target))\n}\n\n// Ints accumulates int values into a slice.\nfunc (p *parserMixin) Ints() (target *[]int) {\n\ttarget = new([]int)\n\tp.IntsVar(target)\n\treturn\n}\n\nfunc (p *parserMixin) IntsVar(target *[]int) {\n\tp.SetValue(newAccumulator(target, func(v interface{}) Value {\n\t\treturn newIntValue(v.(*int))\n\t}))\n}\n\n// -- int8 Value\ntype int8Value struct{ v *int8 }\n\nfunc newInt8Value(p *int8) *int8Value {\n\treturn &int8Value{p}\n}\n\nfunc (f *int8Value) Set(s string) error {\n\tv, err := strconv.ParseInt(s, 0, 8)\n\tif err == nil {\n\t\t*f.v = (int8)(v)\n\t}\n\treturn err\n}\n\nfunc (f *int8Value) Get() interface{} { return (int8)(*f.v) }\n\nfunc (f *int8Value) String() string { return fmt.Sprintf(\"%v\", *f.v) }\n\n// Int8 parses the next command-line value as int8.\nfunc (p *parserMixin) Int8() (target *int8) {\n\ttarget = new(int8)\n\tp.Int8Var(target)\n\treturn\n}\n\nfunc (p *parserMixin) Int8Var(target *int8) {\n\tp.SetValue(newInt8Value(target))\n}\n\n// Int8List accumulates int8 values into a slice.\nfunc (p *parserMixin) Int8List() (target *[]int8) {\n\ttarget = new([]int8)\n\tp.Int8ListVar(target)\n\treturn\n}\n\nfunc (p *parserMixin) Int8ListVar(target *[]int8) {\n\tp.SetValue(newAccumulator(target, func(v interface{}) Value {\n\t\treturn newInt8Value(v.(*int8))\n\t}))\n}\n\n// -- int16 Value\ntype int16Value struct{ v *int16 }\n\nfunc newInt16Value(p *int16) *int16Value {\n\treturn &int16Value{p}\n}\n\nfunc (f *int16Value) Set(s string) error {\n\tv, err := strconv.ParseInt(s, 0, 16)\n\tif err == nil {\n\t\t*f.v = (int16)(v)\n\t}\n\treturn err\n}\n\nfunc (f *int16Value) Get() interface{} { return (int16)(*f.v) }\n\nfunc (f *int16Value) String() string { return fmt.Sprintf(\"%v\", *f.v) }\n\n// Int16 parses the next command-line value as int16.\nfunc (p *parserMixin) Int16() (target *int16) {\n\ttarget = new(int16)\n\tp.Int16Var(target)\n\treturn\n}\n\nfunc (p *parserMixin) Int16Var(target *int16) {\n\tp.SetValue(newInt16Value(target))\n}\n\n// Int16List accumulates int16 values into a slice.\nfunc (p *parserMixin) Int16List() (target *[]int16) {\n\ttarget = new([]int16)\n\tp.Int16ListVar(target)\n\treturn\n}\n\nfunc (p *parserMixin) Int16ListVar(target *[]int16) {\n\tp.SetValue(newAccumulator(target, func(v interface{}) Value {\n\t\treturn newInt16Value(v.(*int16))\n\t}))\n}\n\n// -- int32 Value\ntype int32Value struct{ v *int32 }\n\nfunc newInt32Value(p *int32) *int32Value {\n\treturn &int32Value{p}\n}\n\nfunc (f *int32Value) Set(s string) error {\n\tv, err := strconv.ParseInt(s, 0, 32)\n\tif err == nil {\n\t\t*f.v = (int32)(v)\n\t}\n\treturn err\n}\n\nfunc (f *int32Value) Get() interface{} { return (int32)(*f.v) }\n\nfunc (f *int32Value) String() string { return fmt.Sprintf(\"%v\", *f.v) }\n\n// Int32 parses the next command-line value as int32.\nfunc (p *parserMixin) Int32() (target *int32) {\n\ttarget = new(int32)\n\tp.Int32Var(target)\n\treturn\n}\n\nfunc (p *parserMixin) Int32Var(target *int32) {\n\tp.SetValue(newInt32Value(target))\n}\n\n// Int32List accumulates int32 values into a slice.\nfunc (p *parserMixin) Int32List() (target *[]int32) {\n\ttarget = new([]int32)\n\tp.Int32ListVar(target)\n\treturn\n}\n\nfunc (p *parserMixin) Int32ListVar(target *[]int32) {\n\tp.SetValue(newAccumulator(target, func(v interface{}) Value {\n\t\treturn newInt32Value(v.(*int32))\n\t}))\n}\n\n// -- int64 Value\ntype int64Value struct{ v *int64 }\n\nfunc newInt64Value(p *int64) *int64Value {\n\treturn &int64Value{p}\n}\n\nfunc (f *int64Value) Set(s string) error {\n\tv, err := strconv.ParseInt(s, 0, 64)\n\tif err == nil {\n\t\t*f.v = (int64)(v)\n\t}\n\treturn err\n}\n\nfunc (f *int64Value) Get() interface{} { return (int64)(*f.v) }\n\nfunc (f *int64Value) String() string { return fmt.Sprintf(\"%v\", *f.v) }\n\n// Int64 parses the next command-line value as int64.\nfunc (p *parserMixin) Int64() (target *int64) {\n\ttarget = new(int64)\n\tp.Int64Var(target)\n\treturn\n}\n\nfunc (p *parserMixin) Int64Var(target *int64) {\n\tp.SetValue(newInt64Value(target))\n}\n\n// Int64List accumulates int64 values into a slice.\nfunc (p *parserMixin) Int64List() (target *[]int64) {\n\ttarget = new([]int64)\n\tp.Int64ListVar(target)\n\treturn\n}\n\nfunc (p *parserMixin) Int64ListVar(target *[]int64) {\n\tp.SetValue(newAccumulator(target, func(v interface{}) Value {\n\t\treturn newInt64Value(v.(*int64))\n\t}))\n}\n\n// -- float64 Value\ntype float64Value struct{ v *float64 }\n\nfunc newFloat64Value(p *float64) *float64Value {\n\treturn &float64Value{p}\n}\n\nfunc (f *float64Value) Set(s string) error {\n\tv, err := strconv.ParseFloat(s, 64)\n\tif err == nil {\n\t\t*f.v = (float64)(v)\n\t}\n\treturn err\n}\n\nfunc (f *float64Value) Get() interface{} { return (float64)(*f.v) }\n\nfunc (f *float64Value) String() string { return fmt.Sprintf(\"%v\", *f.v) }\n\n// Float64 parses the next command-line value as float64.\nfunc (p *parserMixin) Float64() (target *float64) {\n\ttarget = new(float64)\n\tp.Float64Var(target)\n\treturn\n}\n\nfunc (p *parserMixin) Float64Var(target *float64) {\n\tp.SetValue(newFloat64Value(target))\n}\n\n// Float64List accumulates float64 values into a slice.\nfunc (p *parserMixin) Float64List() (target *[]float64) {\n\ttarget = new([]float64)\n\tp.Float64ListVar(target)\n\treturn\n}\n\nfunc (p *parserMixin) Float64ListVar(target *[]float64) {\n\tp.SetValue(newAccumulator(target, func(v interface{}) Value {\n\t\treturn newFloat64Value(v.(*float64))\n\t}))\n}\n\n// -- float32 Value\ntype float32Value struct{ v *float32 }\n\nfunc newFloat32Value(p *float32) *float32Value {\n\treturn &float32Value{p}\n}\n\nfunc (f *float32Value) Set(s string) error {\n\tv, err := strconv.ParseFloat(s, 32)\n\tif err == nil {\n\t\t*f.v = (float32)(v)\n\t}\n\treturn err\n}\n\nfunc (f *float32Value) Get() interface{} { return (float32)(*f.v) }\n\nfunc (f *float32Value) String() string { return fmt.Sprintf(\"%v\", *f.v) }\n\n// Float32 parses the next command-line value as float32.\nfunc (p *parserMixin) Float32() (target *float32) {\n\ttarget = new(float32)\n\tp.Float32Var(target)\n\treturn\n}\n\nfunc (p *parserMixin) Float32Var(target *float32) {\n\tp.SetValue(newFloat32Value(target))\n}\n\n// Float32List accumulates float32 values into a slice.\nfunc (p *parserMixin) Float32List() (target *[]float32) {\n\ttarget = new([]float32)\n\tp.Float32ListVar(target)\n\treturn\n}\n\nfunc (p *parserMixin) Float32ListVar(target *[]float32) {\n\tp.SetValue(newAccumulator(target, func(v interface{}) Value {\n\t\treturn newFloat32Value(v.(*float32))\n\t}))\n}\n\n// DurationList accumulates time.Duration values into a slice.\nfunc (p *parserMixin) DurationList() (target *[]time.Duration) {\n\ttarget = new([]time.Duration)\n\tp.DurationListVar(target)\n\treturn\n}\n\nfunc (p *parserMixin) DurationListVar(target *[]time.Duration) {\n\tp.SetValue(newAccumulator(target, func(v interface{}) Value {\n\t\treturn newDurationValue(v.(*time.Duration))\n\t}))\n}\n\n// IPList accumulates net.IP values into a slice.\nfunc (p *parserMixin) IPList() (target *[]net.IP) {\n\ttarget = new([]net.IP)\n\tp.IPListVar(target)\n\treturn\n}\n\nfunc (p *parserMixin) IPListVar(target *[]net.IP) {\n\tp.SetValue(newAccumulator(target, func(v interface{}) Value {\n\t\treturn newIPValue(v.(*net.IP))\n\t}))\n}\n\n// TCPList accumulates *net.TCPAddr values into a slice.\nfunc (p *parserMixin) TCPList() (target *[]*net.TCPAddr) {\n\ttarget = new([]*net.TCPAddr)\n\tp.TCPListVar(target)\n\treturn\n}\n\nfunc (p *parserMixin) TCPListVar(target *[]*net.TCPAddr) {\n\tp.SetValue(newAccumulator(target, func(v interface{}) Value {\n\t\treturn newTCPAddrValue(v.(**net.TCPAddr))\n\t}))\n}\n\n// ExistingFiles accumulates string values into a slice.\nfunc (p *parserMixin) ExistingFiles() (target *[]string) {\n\ttarget = new([]string)\n\tp.ExistingFilesVar(target)\n\treturn\n}\n\nfunc (p *parserMixin) ExistingFilesVar(target *[]string) {\n\tp.SetValue(newAccumulator(target, func(v interface{}) Value {\n\t\treturn newExistingFileValue(v.(*string))\n\t}))\n}\n\n// ExistingDirs accumulates string values into a slice.\nfunc (p *parserMixin) ExistingDirs() (target *[]string) {\n\ttarget = new([]string)\n\tp.ExistingDirsVar(target)\n\treturn\n}\n\nfunc (p *parserMixin) ExistingDirsVar(target *[]string) {\n\tp.SetValue(newAccumulator(target, func(v interface{}) Value {\n\t\treturn newExistingDirValue(v.(*string))\n\t}))\n}\n\n// ExistingFilesOrDirs accumulates string values into a slice.\nfunc (p *parserMixin) ExistingFilesOrDirs() (target *[]string) {\n\ttarget = new([]string)\n\tp.ExistingFilesOrDirsVar(target)\n\treturn\n}\n\nfunc (p *parserMixin) ExistingFilesOrDirsVar(target *[]string) {\n\tp.SetValue(newAccumulator(target, func(v interface{}) Value {\n\t\treturn newExistingFileOrDirValue(v.(*string))\n\t}))\n}\n\n// -- *regexp.Regexp Value\ntype regexpValue struct{ v **regexp.Regexp }\n\nfunc newRegexpValue(p **regexp.Regexp) *regexpValue {\n\treturn &regexpValue{p}\n}\n\nfunc (f *regexpValue) Set(s string) error {\n\tv, err := regexp.Compile(s)\n\tif err == nil {\n\t\t*f.v = (*regexp.Regexp)(v)\n\t}\n\treturn err\n}\n\nfunc (f *regexpValue) Get() interface{} { return (*regexp.Regexp)(*f.v) }\n\nfunc (f *regexpValue) String() string { return fmt.Sprintf(\"%v\", *f.v) }\n\n// Regexp parses the next command-line value as *regexp.Regexp.\nfunc (p *parserMixin) Regexp() (target **regexp.Regexp) {\n\ttarget = new(*regexp.Regexp)\n\tp.RegexpVar(target)\n\treturn\n}\n\nfunc (p *parserMixin) RegexpVar(target **regexp.Regexp) {\n\tp.SetValue(newRegexpValue(target))\n}\n\n// RegexpList accumulates *regexp.Regexp values into a slice.\nfunc (p *parserMixin) RegexpList() (target *[]*regexp.Regexp) {\n\ttarget = new([]*regexp.Regexp)\n\tp.RegexpListVar(target)\n\treturn\n}\n\nfunc (p *parserMixin) RegexpListVar(target *[]*regexp.Regexp) {\n\tp.SetValue(newAccumulator(target, func(v interface{}) Value {\n\t\treturn newRegexpValue(v.(**regexp.Regexp))\n\t}))\n}\n\n// -- net.IP Value\ntype resolvedIPValue struct{ v *net.IP }\n\nfunc newResolvedIPValue(p *net.IP) *resolvedIPValue {\n\treturn &resolvedIPValue{p}\n}\n\nfunc (f *resolvedIPValue) Set(s string) error {\n\tv, err := resolveHost(s)\n\tif err == nil {\n\t\t*f.v = (net.IP)(v)\n\t}\n\treturn err\n}\n\nfunc (f *resolvedIPValue) Get() interface{} { return (net.IP)(*f.v) }\n\nfunc (f *resolvedIPValue) String() string { return fmt.Sprintf(\"%v\", *f.v) }\n\n// Resolve a hostname or IP to an IP.\nfunc (p *parserMixin) ResolvedIP() (target *net.IP) {\n\ttarget = new(net.IP)\n\tp.ResolvedIPVar(target)\n\treturn\n}\n\nfunc (p *parserMixin) ResolvedIPVar(target *net.IP) {\n\tp.SetValue(newResolvedIPValue(target))\n}\n\n// ResolvedIPList accumulates net.IP values into a slice.\nfunc (p *parserMixin) ResolvedIPList() (target *[]net.IP) {\n\ttarget = new([]net.IP)\n\tp.ResolvedIPListVar(target)\n\treturn\n}\n\nfunc (p *parserMixin) ResolvedIPListVar(target *[]net.IP) {\n\tp.SetValue(newAccumulator(target, func(v interface{}) Value {\n\t\treturn newResolvedIPValue(v.(*net.IP))\n\t}))\n}\n\n// -- []byte Value\ntype hexBytesValue struct{ v *[]byte }\n\nfunc newHexBytesValue(p *[]byte) *hexBytesValue {\n\treturn &hexBytesValue{p}\n}\n\nfunc (f *hexBytesValue) Set(s string) error {\n\tv, err := hex.DecodeString(s)\n\tif err == nil {\n\t\t*f.v = ([]byte)(v)\n\t}\n\treturn err\n}\n\nfunc (f *hexBytesValue) Get() interface{} { return ([]byte)(*f.v) }\n\nfunc (f *hexBytesValue) String() string { return fmt.Sprintf(\"%v\", *f.v) }\n\n// Bytes as a hex string.\nfunc (p *parserMixin) HexBytes() (target *[]byte) {\n\ttarget = new([]byte)\n\tp.HexBytesVar(target)\n\treturn\n}\n\nfunc (p *parserMixin) HexBytesVar(target *[]byte) {\n\tp.SetValue(newHexBytesValue(target))\n}\n\n// HexBytesList accumulates []byte values into a slice.\nfunc (p *parserMixin) HexBytesList() (target *[][]byte) {\n\ttarget = new([][]byte)\n\tp.HexBytesListVar(target)\n\treturn\n}\n\nfunc (p *parserMixin) HexBytesListVar(target *[][]byte) {\n\tp.SetValue(newAccumulator(target, func(v interface{}) Value {\n\t\treturn newHexBytesValue(v.(*[]byte))\n\t}))\n}\n"
  },
  {
    "path": "vendor/modules.txt",
    "content": "# github.com/Masterminds/semver v1.4.2\ngithub.com/Masterminds/semver\n# github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc\ngithub.com/alecthomas/template\ngithub.com/alecthomas/template/parse\n# github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf\ngithub.com/alecthomas/units\n# github.com/bcext/cashutil v0.0.0-20180827115045-9ba6cf292283\ngithub.com/bcext/cashutil\ngithub.com/bcext/cashutil/base58\n# github.com/bcext/gcash v0.0.0-20180921133405-3f4b56493047\ngithub.com/bcext/gcash/btcec\ngithub.com/bcext/gcash/chaincfg\ngithub.com/bcext/gcash/chaincfg/chainhash\ngithub.com/bcext/gcash/wire\n# github.com/btcsuite/btcd v0.0.0-20180924021209-2a560b2036be\ngithub.com/btcsuite/btcd/btcjson\ngithub.com/btcsuite/btcd/chaincfg/chainhash\ngithub.com/btcsuite/btcd/rpcclient\ngithub.com/btcsuite/btcd/wire\ngithub.com/btcsuite/btcd/txscript\ngithub.com/btcsuite/btcd/chaincfg\ngithub.com/btcsuite/btcd/btcec\n# github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f\ngithub.com/btcsuite/btclog\n# github.com/btcsuite/btcutil v0.0.0-20180706230648-ab6388e0c60a\ngithub.com/btcsuite/btcutil/hdkeychain\ngithub.com/btcsuite/btcutil\ngithub.com/btcsuite/btcutil/base58\ngithub.com/btcsuite/btcutil/bech32\n# github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd\ngithub.com/btcsuite/go-socks/socks\n# github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792\ngithub.com/btcsuite/websocket\n# github.com/davecgh/go-spew v1.1.1\ngithub.com/davecgh/go-spew/spew\n# github.com/pkg/errors v0.8.0\ngithub.com/pkg/errors\n# github.com/pmezard/go-difflib v1.0.0\ngithub.com/pmezard/go-difflib/difflib\n# github.com/stretchr/testify v1.2.2\ngithub.com/stretchr/testify/assert\n# golang.org/x/crypto v0.0.0-20181001203147-e3636079e1a4\ngolang.org/x/crypto/ripemd160\n# gopkg.in/alecthomas/kingpin.v2 v2.2.6\ngopkg.in/alecthomas/kingpin.v2\n"
  }
]