Received: from sog-mx-4.v43.ch3.sourceforge.com ([172.29.43.194] helo=mx.sourceforge.net) by sfs-ml-4.v29.ch3.sourceforge.com with esmtp (Exim 4.76) (envelope-from ) id 1Xa2JB-0000DQ-F1 for bitcoin-development@lists.sourceforge.net; Fri, 03 Oct 2014 12:50:05 +0000 Received-SPF: pass (sog-mx-4.v43.ch3.sourceforge.com: domain of gmail.com designates 209.85.212.177 as permitted sender) client-ip=209.85.212.177; envelope-from=mh.in.england@gmail.com; helo=mail-wi0-f177.google.com; Received: from mail-wi0-f177.google.com ([209.85.212.177]) by sog-mx-4.v43.ch3.sourceforge.com with esmtps (TLSv1:RC4-SHA:128) (Exim 4.76) id 1Xa2J9-0003NS-AL for bitcoin-development@lists.sourceforge.net; Fri, 03 Oct 2014 12:50:05 +0000 Received: by mail-wi0-f177.google.com with SMTP id fb4so1992654wid.10 for ; Fri, 03 Oct 2014 05:49:57 -0700 (PDT) X-Received: by 10.194.216.74 with SMTP id oo10mr6802747wjc.126.1412340597028; Fri, 03 Oct 2014 05:49:57 -0700 (PDT) Received: from [192.168.0.18] (84-72-163-142.dclient.hispeed.ch. [84.72.163.142]) by mx.google.com with ESMTPSA id wm6sm7917716wjb.5.2014.10.03.05.49.54 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 03 Oct 2014 05:49:55 -0700 (PDT) Sender: Mike Hearn From: Mike Hearn Content-Type: multipart/signed; boundary="Apple-Mail=_24B6F826-F8D2-4DB8-B47D-2B92E61681F8"; protocol="application/pkcs7-signature"; micalg=sha1 Message-Id: Date: Fri, 3 Oct 2014 14:49:52 +0200 To: bitcoin-development@lists.sourceforge.net Mime-Version: 1.0 (Mac OS X Mail 7.3 \(1878.6\)) X-Mailer: Apple Mail (2.1878.6) X-Spam-Score: -0.5 (/) X-Spam-Report: Spam Filtering performed by mx.sourceforge.net. See http://spamassassin.org/tag/ for more details. -1.5 SPF_CHECK_PASS SPF reports sender host as permitted sender for sender-domain 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (mh.in.england[at]gmail.com) -0.0 SPF_PASS SPF: sender matches SPF record 1.0 HTML_MESSAGE BODY: HTML included in message 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature X-Headers-End: 1Xa2J9-0003NS-AL Subject: [Bitcoin-development] bitcoinj 0.12 X-BeenThere: bitcoin-development@lists.sourceforge.net X-Mailman-Version: 2.1.9 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 03 Oct 2014 12:50:05 -0000 --Apple-Mail=_24B6F826-F8D2-4DB8-B47D-2B92E61681F8 Content-Type: multipart/alternative; boundary="Apple-Mail=_4CE7191A-91B4-4D75-98D8-A4CF7F12F95C" --Apple-Mail=_4CE7191A-91B4-4D75-98D8-A4CF7F12F95C Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=windows-1252 I=92m pleased to announce version 0.12 of bitcoinj, one of the worlds = most popular Bitcoin libraries. It is used by at least four Android = wallets, three desktop wallets, blockchain.info, Circle, biteasy, = CryptoCorp, Lighthouse, BlueMatt=92s relay network, bitpos, countless = alt coin wallets, for academic research projects and much more. This release represents 8 months of work. The biggest new feature is HD = wallets. Other notable enhancements include a bundled Tor client that = can be activated with one line of code, support for multisig wallets, = much faster and deterministic ECDSA, many API improvements and big = upgrades to the included GUI wallet which can be seen in a new = screencasted tutorial. The commit hash of bitcoinj 0.12 is = 83a9a71f3fff3f223d0737ad758b519a39dbbd62.=20 New in this release Privacy enhancements: Wallets are now hierarchical and deterministic (HD) by default, using = the BIP32 specification. Support for mnemonic codes (BIP 39) is also = included. Change and receive addresses are no longer being reused. Old = wallets are upgraded in place using the private key of the oldest = non-rotating key as the seed bytes, so old backups remain valid. Thanks to devrandom, we have an integrated Tor mode using the Orchid = library. The user does not have to install the Tor client as it=92s all = pure Java. WalletAppKit users can enable usage of Tor with a single line = of code. This support should be considered experimental for now. Thanks to Kosta Korenkov, we have an experimental multisig wallets = implementation. Multisig (also =93married=94) wallets are HD wallets = that are connected to a third party risk analysis service or device. = When married, the wallet tracks multiple BIP32 key trees, keeps them in = sync and starts vending P2SH addresses. As part of this work, transaction signing is now pluggable. = TransactionSigner implementations can be added to the wallet and will be = serialized into and out of the users saved wallet file. Signers are = given a transaction to sign in sequence. This is intended for risk = analysis providers to provide a class that talks to their server to get = a signature of the right form, so that all bitcoinj based wallets can be = easily upgraded to support the new provider. Reject messages are now deserialized and logged, though not yet exposed = in the API. Upgraded to Guava 16 and Bouncy Castle 1.51. Thanks to Peter Dettman and = the rest of the Bouncy Castle team, bitcoinj now uses deterministic = ECDSA for signing and we=92re now using an accelerated secp256k1 = implementation that exploits the special properties of this curve, for = dramatically faster calculations. Payment protocol code improvements: Some X.509 utility code was = refactored out of PaymentSession for general usage. StartCom was added = to the default trust store which was promoted to override the system = trust store on non-Android platforms. A command line tool to dump = requests to stdout was added. Thanks to Andreas Schildbach: We are now BIP62 (canonical push encodings) compliant. A new Coin class replaces usage of BigInteger for marking values that = are quantities of bitcoin. Formatting has moved into the new = MonetaryFormat class. The wallet now saves the fee paid on transactions we calculated = ourselves. This is useful for putting it into a wallet user interface. Transactions can have user memos and exchange rates attached, that will = be saved by the wallet. Support for decrypting BIP 38 protected private keys has been added. Checkpoints can now be stored textually as well as in the old binary = format. There is also a new BtcFormat API that provides an alternative to = MonetaryFormat that plugs in to the java.text framework. Added new DNS seed from Addy Yeow. Wallets can now have string->byte[] mappings attached to them, for = lighter weight extensions. Thanks to Richard Green, there is now a Python version of the = ForwardingService program from the getting started tutorial. This shows = how to use bitcoinj from Python using the Jython interpreter. bitcoinj now probes localhost for a Bitcoin node and automatically uses = that instead of the P2P network, when present. This means any bitcoinj = based app can be easily upgraded from SPV to full security just by = running Core at the same time: no setup needed. Thanks to Michael Bumann, there are now more example apps showing how to = use parts of the API. WalletTemplate/WalletAppKit improvements. WalletTemplate is a demo app = that shows how to create a cross-platform GUI wallet with a modern style = and 60fps animations. WalletAppKit is a very high level API for creating = apps that have a Bitcoin wallet: Now supports mnemonic code and restore from seed words. A date picker is = provided to cut down on the amount of chain that needs to be rescanned. Support for encrypting wallets. Password is requested when needed. The = difficulty of the scrypt function is selected to always take a fixed = number of seconds even if hardware gets more powerful. Some new animation and utility code backported from Lighthouse. Tor support Thanks to Martin Zachrison, the micropayment channels implementation has = received various improvements. Thanks to Eric Tierney (Circle), the Postgres store can now take a = custom schema. The Bloom filtering API has been extended so FilteredBlock objects can = now be produced from Block objects given a BloomFilter. Previously there = was support for client-side Bloom usage but no implementation of the = generation part. Many other bugfixes, cleanups, minor tweaks and small new APIs. Documentation and tutorials A JavaScript tutorial has been added, showing how to use bitcoinj from = this language. More tutorials in other languages will come in future. The =93Working with the wallet=94 document has been significantly = extended to cover encryption, watching wallets, HD wallets and = multisig/married wallets. A new document and accompanying screencast shows how to extend the = WalletTemplate app to have a transactions list, and then make a = native/bundled packages that don=92t need the user to install Java. By = following this tutorial you will learn how to make a basic cross = platform desktop wallet of your own. All other docs were refreshed to the latest APIs. API changes The package name has changed to org.bitcoinj and the core Maven artifact = name is now =93bitcoinj-core=94. You can auto-port most of your code by = running find . -name '*.java' \| xargs sed -i .bak = 's/com.google.bitcoin./import org.bitcoinj./g Wallet.completeTx now throws more precise unchecked exceptions in edge = cases, instead of IllegalArgumentException. The use of BigInteger to represent quantities of Bitcoin has been = replaced with the more efficient, type safe and useful class Coin. Coin = is mostly source compatible with BigInteger so you can probably just do = a search and replace to update your codebase. = Utils.bitcoinValueToFriendlyString and friends moved to CoinFormat. NetworkParameters.getProofOfWorkLimit was renamed to getMaxTarget for = consistency with other Bitcoin codebases. The library no longer uses the misleading term =93nanocoins=94 to mean = satoshis (the old term predated the use of the word satoshi to describe = the smallest possible amount of bitcoin). TransactionConfidence no longer tracks total work done. Because outputs are now shuffled any code during that assumes the = ordering is preserved will break. You can set the shuffleOutputs field = of SendRequest to false to disable this behaviour if you need to. The ECKey and HD API=92s have changed quite a bit: several constructors = were replaced with clearer static factory methods that make it more = obvious how their parameters are interpreted. The new methods don=92t = change their behaviour depending on the pattern of nulls passed into = them. Some unit testing utilities have been moved to the new testing = subpackage and cleaned up/rearranged. It should be easier to write unit = tests for your app that need a simulated network now. DeterministicKey = now derives from ECKey. We now use Utils.HEX.encode() and Utils.HEX.decode() to do translation = to and from base 16. Transaction.hashTransactionForSignature was renamed to just = hashForSignature. The subVer string sent by bitcoinj now has a lower cased first = component. --Apple-Mail=_4CE7191A-91B4-4D75-98D8-A4CF7F12F95C Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=windows-1252 I=92m = pleased to announce version 0.12 of bitcoinj, one of the worlds most = popular Bitcoin libraries. It is used by at least four Android wallets, = three desktop wallets, blockchain.info, Circle, biteasy, CryptoCorp, = Lighthouse, BlueMatt=92s relay network, bitpos, countless alt coin = wallets, for academic research projects and much more.

This release represents 8 months of = work. The biggest new feature is HD wallets. Other notable = enhancements include a bundled Tor client that can be activated with one = line of code, support for multisig wallets, much faster and = deterministic ECDSA, many API improvements and big upgrades to the = included GUI wallet which can be seen in a new = screencasted tutorial.

The commit hash of bitcoinj 0.12 = is 83a9a71f3fff3f223d0737ad758b519a39dbbd62. 

New in this = release

  • Privacy = enhancements:
    • Wallets are now hierarchical and deterministic (HD) by default, = using the BIP32 specification. Support for mnemonic codes (BIP 39) is = also included. Change and receive addresses are no longer being reused. = Old wallets are upgraded in place using the private key of the oldest = non-rotating key as the seed bytes, so old backups remain valid.
    • Thanks to devrandom, we = have an integrated Tor mode using the Orchid library. The user does not = have to install the Tor client as it=92s all pure Java. WalletAppKit = users can enable usage of Tor with a single line of code. This support = should be considered experimental for now.
  • Thanks to Kosta = Korenkov, we have an experimental multisig wallets implementation. = Multisig (also =93married=94) wallets are HD wallets that are connected = to a third party risk analysis service or device. When married, the = wallet tracks multiple BIP32 key trees, keeps them in sync and starts = vending P2SH addresses.
    • As part of this work, transaction signing is now = pluggable. TransactionSigner implementations can be added to the wallet = and will be serialized into and out of the users saved wallet file. = Signers are given a transaction to sign in sequence. This is intended = for risk analysis providers to provide a class that talks to their = server to get a signature of the right form, so that all bitcoinj based = wallets can be easily upgraded to support the new = provider.
  • Reject messages are now deserialized and logged, though not yet = exposed in the API.
  • Upgraded to Guava 16 and Bouncy Castle 1.51. Thanks to Peter = Dettman and the rest of the Bouncy Castle team, bitcoinj now uses = deterministic ECDSA for signing and we=92re now using an accelerated = secp256k1 implementation that exploits the special properties of this = curve, for dramatically faster calculations.
  • Payment protocol code improvements: Some = X.509 utility code was refactored out of PaymentSession for general = usage. StartCom was added to the default trust store which was promoted = to override the system trust store on non-Android platforms. A command = line tool to dump requests to stdout was added.
  • Thanks to Andreas Schildbach:
    • We are now = BIP62 (canonical push encodings) compliant.
    • A new Coin class replaces usage of = BigInteger for marking values that are quantities of bitcoin. Formatting = has moved into the new MonetaryFormat class.
    • The wallet now saves the fee paid on = transactions we calculated ourselves. This is useful for putting it into = a wallet user interface.
    • Transactions can have user memos and exchange rates attached, = that will be saved by the wallet.
    • Support for decrypting BIP 38 protected private = keys has been added.
    • Checkpoints can now be stored textually as well as in the old = binary format.
  • There is also a new BtcFormat API that provides an alternative = to MonetaryFormat that plugs in to the java.text framework.
  • Added new DNS seed from = Addy Yeow.
  • Wallets can now have string->byte[] mappings attached to = them, for lighter weight extensions.
  • Thanks to Richard Green, there is now a Python = version of the ForwardingService program from the getting started = tutorial. This shows how to use bitcoinj from Python using the Jython = interpreter.
  • bitcoinj now probes localhost for a Bitcoin node and = automatically uses that instead of the P2P network, when present. This = means any bitcoinj based app can be easily upgraded from SPV to full = security just by running Core at the same time: no setup needed.
  • Thanks to Michael = Bumann, there are now more example apps showing how to use parts of the = API.
  • WalletTemplate/WalletAppKit improvements. WalletTemplate is a = demo app that shows how to create a cross-platform GUI wallet with a = modern style and 60fps animations. WalletAppKit is a very high level API = for creating apps that have a Bitcoin wallet:
    • Now supports = mnemonic code and restore from seed words. A date picker is provided to = cut down on the amount of chain that needs to be rescanned.
    • Support for encrypting = wallets. Password is requested when needed. The difficulty of the scrypt = function is selected to always take a fixed number of seconds even if = hardware gets more powerful.
    • Some new animation and utility code backported from = Lighthouse.
    • Tor = support
  • Thanks to Martin Zachrison, the micropayment channels = implementation has received various improvements.
  • Thanks to Eric Tierney = (Circle), the Postgres store can now take a custom schema.
  • The Bloom filtering API = has been extended so FilteredBlock objects can now be produced from = Block objects given a BloomFilter. Previously there was support for = client-side Bloom usage but no implementation of the generation = part.
  • Many other = bugfixes, cleanups, minor tweaks and small new APIs.

Documentation and = tutorials

  • JavaScript tutorial has been added, showing how to = use bitcoinj from this language. More tutorials in other languages will = come in future.
  • The =93Working with the wallet=94 document has been = significantly extended to cover encryption, watching wallets, HD wallets = and multisig/married wallets.
  • new = document and accompanying screencast shows how to extend the = WalletTemplate app to have a transactions list, and then make a = native/bundled packages that don=92t need the user to install Java. By = following this tutorial you will learn how to make a basic cross = platform desktop wallet of your own.
  • All other docs were refreshed to the latest = APIs.

API = changes

  • The package name has = changed to org.bitcoinj and the core Maven artifact name is now = =93bitcoinj-core=94. You can auto-port most of your code by = running find . -name '*.java' \| xargs = sed -i .bak 's/com.google.bitcoin./import org.bitcoinj./g
  • Wallet.completeTx now = throws more precise unchecked exceptions in edge cases, instead of = IllegalArgumentException.
  • The use of BigInteger to represent quantities of = Bitcoin has been replaced with the more efficient, type safe and useful = class Coin. Coin is mostly source compatible with BigInteger so you can = probably just do a search and replace to update your codebase. = Utils.bitcoinValueToFriendlyString and friends moved to = CoinFormat.
  • NetworkParameters.getProofOfWorkLimit was renamed to = getMaxTarget for consistency with other Bitcoin codebases.
  • The library no longer = uses the misleading term =93nanocoins=94 to mean satoshis (the old term = predated the use of the word satoshi to describe the smallest possible = amount of bitcoin).
  • TransactionConfidence no longer tracks total work done.
  • Because outputs are now = shuffled any code during that assumes the ordering is preserved will = break. You can set the shuffleOutputs field of SendRequest to false to = disable this behaviour if you need to.
  • The ECKey and HD API=92s have changed quite a = bit: several constructors were replaced with clearer static factory = methods that make it more obvious how their parameters are interpreted. = The new methods don=92t change their behaviour depending on the pattern = of nulls passed into them.
  • Some unit testing utilities have been moved to the = new testing subpackage and cleaned up/rearranged. It should be easier to = write unit tests for your app that need a simulated network now. = DeterministicKey now derives from ECKey.
  • We now use Utils.HEX.encode() and = Utils.HEX.decode() to do translation to and from base 16.
  • Transaction.hashTransactionForSignature was renamed to just = hashForSignature.
  • The subVer string sent by bitcoinj now has a lower cased first = component.

= --Apple-Mail=_4CE7191A-91B4-4D75-98D8-A4CF7F12F95C-- --Apple-Mail=_24B6F826-F8D2-4DB8-B47D-2B92E61681F8 Content-Disposition: attachment; filename=smime.p7s Content-Type: application/pkcs7-signature; name=smime.p7s Content-Transfer-Encoding: base64 MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIINKTCCBm8w ggRXoAMCAQICEADVy4nCkwCb7b0BS9wQlgIwDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UEBhMCQ0gx FTATBgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWduIFBsYXRpbnVtIENBIC0g RzIwHhcNMTAwMzA4MTQwNTA0WhcNMjUwMzA0MTQwNTA0WjBXMQswCQYDVQQGEwJDSDEVMBMGA1UE ChMMU3dpc3NTaWduIEFHMTEwLwYDVQQDEyhTd2lzc1NpZ24gU3Vpc3NlSUQgUGxhdGludW0gQ0Eg MjAxMCAtIEcyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4cSEEXIyNDHcWYj3QrVO /5OBfrIUaK4au+FEcSFe4MvQ9/wV3p9DGSTf8vljcgHNPIYo4iHYh8xJVn7HK7PG6yS+JnoQsl5c 8DI7UE5ZW/kjfHj45W+rDmyhntQqG7FjPZQoPWdlC2lGkV2NEtenU+U0jXf2NpQw3LiPtF3CjliX r8BdusJkvUm0ItfaJabF4+ygFa9qAm9YLGYaMNck17CoKsCVtDdaFKjBm3ColZeB5GAEZTwdBwFn HNp9fXvn+QuNwhE5wMZT46pVXNbJlCrnEdblmiWEhei9jB5381hSsKai/zLaldVQ/aSu10WYg5KK kUfSWVVScT+j6PtM2QIDAQABo4ICQzCCAj8wDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYB Af8CAQAwHQYDVR0OBBYEFOlEhoCS6k5Qd8nnkghC11/AwiVCMB8GA1UdIwQYMBaAFFCvzAeHFUdv OMW0ZdHelarp35zMMIH/BgNVHR8EgfcwgfQwR6BFoEOGQWh0dHA6Ly9jcmwuc3dpc3NzaWduLm5l dC81MEFGQ0MwNzg3MTU0NzZGMzhDNUI0NjVEMURFOTVBQUU5REY5Q0NDMIGooIGloIGihoGfbGRh cDovL2RpcmVjdG9yeS5zd2lzc3NpZ24ubmV0L0NOPTUwQUZDQzA3ODcxNTQ3NkYzOEM1QjQ2NUQx REU5NUFBRTlERjlDQ0MlMkNPPVN3aXNzU2lnbiUyQ0M9Q0g/Y2VydGlmaWNhdGVSZXZvY2F0aW9u TGlzdD9iYXNlP29iamVjdENsYXNzPWNSTERpc3RyaWJ1dGlvblBvaW50MGEGA1UdIARaMFgwVgYE VR0gADBOMEwGCCsGAQUFBwIBFkBodHRwOi8vcmVwb3NpdG9yeS5zd2lzc3NpZ24uY29tL1N3aXNz U2lnbi1QbGF0aW51bS1DUC1DUFMtUjMucGRmMHQGCCsGAQUFBwEBBGgwZjBkBggrBgEFBQcwAoZY aHR0cDovL3N3aXNzc2lnbi5uZXQvY2dpLWJpbi9hdXRob3JpdHkvZG93bmxvYWQvNTBBRkNDMDc4 NzE1NDc2RjM4QzVCNDY1RDFERTk1QUFFOURGOUNDQzANBgkqhkiG9w0BAQUFAAOCAgEAOoY+H9An n9SpqVsHBe34r3tt2coVn5386F0UiH1IhaWNMVZoq0/sKjXuWp+kZrkNAqWwhvk4qghllxtngI7D SG4+1/9SGnpe8DTvngRHesAzVkbHfCoNqlKGBnjCp6i+cdmzOb3opj0MCd5kQkPksw3YTkBXJDiN aU43YRRXb1uEAgQbizKkBgxZGpjDa4FSs5ry+Yq2rXeaUlPWmCR9wZS5kZ1anyfwyRSmFQK/bPMi kCw9ySe28Dtz9nMNwZmHNGvhGYUF+F0QHMb+sdbGx6TD465fqdYe5M7/YpElRvS6jKOPScqUZoq0 xxrBakc4XPQgNOCrCRu0PKgROWeUGv3zZw8uY5Xy5DJoe7F7anxEJgTw9A41S0WDh75Iwjr9l91S 9IzeiGR3g6S6hrek98PWjdHmAfIo9FHGCSXbJFfa958h82QKnydUy79enXwRcPbvlw1FoTkBWgc0 uceIx3jVMlU7NyE+0PCiMIWM/YBbn0B0KmTYb2hdde8YDGp2M+qbW2wQv1gjC9vtm0Ens1bemN3G geWQxQXMAYXDJWb+dFy1sOIwvhzp31ei06x4C3EuiQXINzkQdgOL/7b5e5r23M4xWdISv9IEHwPc 4IuXJ2NBrB8zk9RmZRcQOjeHdwDM7n+i3FlPjL2/StV28qIuPiwzYjQhzQOBQM+7xd4wggayMIIF mqADAgECAg8A3Hz8Etjr03yOomWvEiEwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQ0gxFTAT BgNVBAoTDFN3aXNzU2lnbiBBRzExMC8GA1UEAxMoU3dpc3NTaWduIFN1aXNzZUlEIFBsYXRpbnVt IENBIDIwMTAgLSBHMjAeFw0xMzExMjExNDI5NDhaFw0xNDExMjExNDI5NDhaMGcxJzAlBgNVBAMT Hk1pY2hhZWwgSGVhcm4gKEF1dGhlbnRpY2F0aW9uKTEeMBwGCSqGSIb3DQEJARYPbWlrZUBwbGFu OTkubmV0MRwwGgYDVQQFExMxMzAwLTgwMTUtMTU4Ni05MTE4MIIBIjANBgkqhkiG9w0BAQEFAAOC AQ8AMIIBCgKCAQEAhgAkK5PH/nRIcQcBZamR4P7jkS96g+ud/Tqi32bElgSzuuW6aWzOE0n/XR5H Wf40mDx1dRj0WM3dt/7Cl1KomoShfIsNxHxcG420vpeoQNQd8r8TokojCX6Y5l+TlAvSPdGhIyEO XG3puryO4XBZNYHVkZ9fwhC7bau1sbn7mcU2qba/TwkRDGIFSiCml6z8rBMiJ/cSII2QcNgS+ziv 82Uhz4i4GVNPOmegboHkE8qT+gouEeVWMLivXDbAwQF1fBaE75z/Wr+w0K6YJtS7oAbgwIEJpe8/ 1/OS8HI846+02eMxThD+vqwnxcQo+EpicvoqmOsjnLErQG1cTA556QIDAQABo4IDaTCCA2UwTwYD VR0RBEgwRoEPbWlrZUBwbGFuOTkubmV0oDMGCisGAQQBgjcUAgOgJQwjMTMwMC04MDE1LTE1ODYt OTExOEB1cG4uc3Vpc3NlaWQuY2gwDgYDVR0PAQH/BAQDAgeAMCkGA1UdJQQiMCAGCCsGAQUFBwMC BggrBgEFBQcDBAYKKwYBBAGCNxQCAjAdBgNVHQ4EFgQUp8JGBqJ9qpKjNlth17DhQ+pIAG8wHwYD VR0jBBgwFoAU6USGgJLqTlB3yeeSCELXX8DCJUIwgf8GA1UdHwSB9zCB9DBHoEWgQ4ZBaHR0cDov L2NybC5zd2lzc3NpZ24ubmV0L0U5NDQ4NjgwOTJFQTRFNTA3N0M5RTc5MjA4NDJENzVGQzBDMjI1 NDIwgaiggaWggaKGgZ9sZGFwOi8vZGlyZWN0b3J5LnN3aXNzc2lnbi5uZXQvQ049RTk0NDg2ODA5 MkVBNEU1MDc3QzlFNzkyMDg0MkQ3NUZDMEMyMjU0MiUyQ089U3dpc3NTaWduJTJDQz1DSD9jZXJ0 aWZpY2F0ZVJldm9jYXRpb25MaXN0P2Jhc2U/b2JqZWN0Q2xhc3M9Y1JMRGlzdHJpYnV0aW9uUG9p bnQwgbYGA1UdIASBrjCBqzCBmwYIYIV0BRoBAQIwgY4wTAYIKwYBBQUHAgEWQGh0dHA6Ly9yZXBv c2l0b3J5LnN3aXNzc2lnbi5jb20vU3dpc3NTaWduLVBsYXRpbnVtLUNQLUNQUy1SMy5wZGYwPgYI KwYBBQUHAgIwMhowU3Vpc3NlSUQgaWRlbnRpdHkgYW5kIGF1dGhlbnRpY2F0aW9uIGNlcnRpZmlj YXRlMAsGCWCFdAFZAQEBATCB2wYIKwYBBQUHAQEEgc4wgcswZAYIKwYBBQUHMAKGWGh0dHA6Ly9z d2lzc3NpZ24ubmV0L2NnaS1iaW4vYXV0aG9yaXR5L2Rvd25sb2FkL0U5NDQ4NjgwOTJFQTRFNTA3 N0M5RTc5MjA4NDJENzVGQzBDMjI1NDIwYwYIKwYBBQUHMAGGV2h0dHA6Ly9wbGF0aW51bS1zdWlz c2VpZC1nMi5vY3NwLnN3aXNzc2lnbi5uZXQvRTk0NDg2ODA5MkVBNEU1MDc3QzlFNzkyMDg0MkQ3 NUZDMEMyMjU0MjANBgkqhkiG9w0BAQUFAAOCAQEAQENx9hsahnGo3u/8ksy53OxZkaSISe6e4XT1 i/o0qZ6DKd9noZ2LvbclyyNo3Q9W4TU1pP41yf4JcL25sx1z7U/e9Ze7vTZN/GZ+gv20gaCqm/cQ WF19PjzTPqYXvJjGK6euiQzACN/IEjxeuzaiml02jpFnH1VrNvgfib/WQCL9y1dK6aLx9noP3CXC nd0ZWhYIdh1e4NZXetRFKII1z/iAlevHmEdLAv0XgKFA6RnBdxCFdw6E7cz2TUS3m59IkrE3z/3s wGV+lg7Q60ZNMAeskg1+zhNpaY9FyBdRDXk2K43ItgE5Mr8+LCdGwoIofXubME12En6DuOnQ38mq GzGCAfAwggHsAgEBMGowVzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzExMC8G A1UEAxMoU3dpc3NTaWduIFN1aXNzZUlEIFBsYXRpbnVtIENBIDIwMTAgLSBHMgIPANx8/BLY69N8 jqJlrxIhMAkGBSsOAwIaBQCgXTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJ BTEPFw0xNDEwMDMxMjQ5NTNaMCMGCSqGSIb3DQEJBDEWBBQV5WPyzghEm13qvTzHh9k5hYoyzDAN BgkqhkiG9w0BAQEFAASCAQB6cbHAIzIs2iNOrpt7bF7muQ3SNoN9POwKSCre/A7ye27tjqC9YPer ha9Dr5f8z7YkuW7QfMxtqqTAUp1YHZKqquMtDD6hzjxokbQ27SRrLy8nKILHc6UpwEFw8j9cmRbp n1tJIOItGl40YCFg9Y4+N0mN1wT7QC9zxb7d1v5ZEIZz3hfMtKVFDRkS3KSHYmT98YDDd9AnInlz W7t6coLcwExC5byqMSkrEyzA21V8A5a/9gXVwRKcpSXbDGe83LO2qCOpjH42+Bvz+ib1spOMR7hA TDj3M8srJU9cWo53sAbAKfSnTFHNPNC5wd01fSiXKMgF5D/6LdJq3sHIOzntAAAAAAAA --Apple-Mail=_24B6F826-F8D2-4DB8-B47D-2B92E61681F8--