# README
Abelian SDK
Abelian is a quantum-safe Blockchain network, which makes use of post-quantum zero-knowledge proof systems and cryptographic schemes to defend against attacks from quantum computers.
By providing APIs with different degrees of abstraction, Abelian SDK aims to help developers quickly integrate Abelian into existing systems or develop new systems
Using APIs with higher levels of abstraction only requires the developer to understand the necessary concepts, while APIs with lower levels of abstraction provide more flexibility.
Key concepts will be introduced in a bottom-up manner, allowing developers to fully understand them. However, from the perspective of using the SDK, the introduction of APIs will be done in a top-down manner, allowing developers to quickly use the SDK to complete system interfacing.
1. Key Concept of Abelian
This section introduces the key concepts of Abelian, mainly including cryptographic scheme and privacy level, addresses and keys.
1.1 Cryptographic Scheme and Privacy Level
Underlying Cryptographic schemes provide privacy properties and post-quantum properties, a key cornerstone of Abelian.
Understanding the privacy level is necessary for different purposes, Abelian support two different privacy level, called full-privacy and pseudonymous, respectively. In full-privacy level, all values are hidden and transactions are untraceable. In pseudonymous level, all values are publicly visible, and transactions are transparent and traceable.
At the beginning, Abelian only supported the full-privacy level when it was launched. At height 300,000, Abelian support both two privacy levels by upgrading the cryptographic scheme from version 0 to version 1.
1.2 Address and Keys
Currently, Abelian supports different levels of privacy for different address types. Users can achieve different privacy needs by using the address type.
In general, each address corresponds to several keys. Both address and keys need to be generated from scratch. The first step of generating address is to select the random number and then generate the seed (called 'root seed') based on the random number. and then the root seeds are used to generate address keys pairs.
There is an example in the directory address to show how to generate root seeds, addresses and keys. The output example is as follows:
==============
crypto scheme 1, privacy level 1
RootSeeds: 261 bytes | 0100000001793ff02fd28dc7c37bdc4ee14dd7f06a715b1c0c4d3fc39cbe989f2cbd6cb5be0b31610728165f187b1a832ef9be5401cd6970d7b716f22e4b5244931069217ba5d5a38e26a44a93f3177586f095e6dc8357163f6aa84591ef169cb5553f587fce130e68b064a38b67daaf025242349c6350925f0b04eb63ad49fe81605b25f163f5c9f3088511b04b263f71b955a2420700fdb2057d6efd7afb2a873ec549c467fabc346758bd08cc2e6ecfc2880369638739dbe0a010ba4678171ddaa06486ff2246cba9364e488418af9300af25fd1d2112c96cb90416016b7e09d6ea7b3d38c94a10e1b3eb74818048decf0622c522fe065928f703b8a85072479f5f5310
CryptoAddress: 10826 bytes | 0100000001018168571bbe0ffddaf9989c45dc6ac2b3206f40c020ffc1f5bdc7221eb2bbed0d0e8ae848c50c8f792dcd70235699e31ef0d510a62010ce622062ab0b9575f5fa1b340301e62e96764a3958705518d2105d2e24f0511a353d9a2a100ebe497e2e5492ced3a8c3d2c69d1557927da28f7eebc9748da002e55bfef696a2200fe34efb43a80317248f3ea108947c201cde889aa61c1ece4a2e7b228d35f5def8293404255f36da0c3c1c553ae54a63b570a9ce8554ae0eb623e4d88ec25171e2f97b5234fd11cf05caaa70cf709285243c7164a3b7779b3bc0159a2bcb6e4c7cba06af5cb42904918c70017081a6a0dad8a98e6bdb1eeee50a9016ab0647d1c5ac3aad4e02422e7c5e127094f55ba814049fb5d2403ed2df82dccba93fd263a353fb86d557e0679d29e2549a3e6d9ff952498dd52da947109464100ed76aece26a12358edae4c100799d59c490efb3e28004fcd522caeba512d7da51548d0076c58ef51685b141a4c2633e99fb988ee0e726b362a8e5ae7260af2d4a7f9914760fe8672d33db2fecda5725d4fd1883705005bf9045358f03a29cb3426534456c12e45b82f40b7872e13e34212aa1330360a3ddc668de49993c4bacaaf5e7be94e76dc483ec8215c3c9c2c74cb0762c0ba17c48cdd960d1de6cab013ff5e391329607f82170e62c1351cc18268984eb0d32f6da97f0eabea39c1d051a849b223a82477919aca68367af6a5b22773e29fa97eca0394aac1f0d01a1ddb5d6b5b62d5ea0f4c4585c0ea414399b84a699b3f6eb20d0c48067b36ce6fa5bb377685f6a05a27352c00d1f367a0612d2e240df8d7d278d585f2ebfa3e75c4730560ea5f81c42cd9faccc3bc609e4c17a786e11752c5463e027f2d1362348985e5b1ff7b103cf188219ba6164c6bf4b77992507635dcf8af2b036b10428bcd6fb5201a3930c8c47c0d7961cd1d0cc7b3c95bfb99ec04475c2df9d9667daa7145cfaab0278fbcb7cfad65b366accc1bf33e26c0c5b6b3eed27f0295fe290df5ec03193c4a9d4646f1f85ca1b8bcb3d178e514eab591a8a74e69b28d26c94c95b328f150c4e4874908229a9cb5ff14f3bfc0d95381227e95b72a93ac00f4aef1987dd4501ec6f262f6b1905364c629d9ff614179e1fe0343313649cc35293e69a1686071152244cb97514f1ee2635fa1bced86015a4fa8bebf41d9b5c9349b2ddea726b042bd76b795361061423310dd6e1972a84f1df43d1cbd97782ab1871a04a3e2bc3cb6cd3a04601fcd54c645f82cb3cf31746757f39189f69caa413a884ccdc21a13fe2cf8abfb34b47da4dffdb291574c4887821146648c6d338ab340f51779804dbc49153949325542bea9661bbb1eac38c1272751335e8399d965a6410c9bb8e26162adcf3d5b630eee0cd75dd1f13473d06999a58d86241a824c9a4a61c293f812afc791770333d5ac35e3ff52ae97b31a361b9d794e49ca582d119926d33fdfa6ec980e93fc68c9cd11f7a0e45887fccd32ff34b0cb6ae8e94eca10a32d0abe6147b9d4c168a8110bc20e3cfb283a11b4cb4a56b9b0d2c87e92c0dcc017c3fd1bdbe54bbf34768de51fdeb549c4c674568229e24dff324bc950a7bce43cfcc04faca3e6a93a2e6d9534fbc3a150aea90498b115257a5061fb254b837f8d7969ac79abc0941d1ed6342745ad3147f3908d93581a5be94aa81573c7059ee7e9e9e8b1b3d633946e2eb59ef378d8f6e62c048fc61ca281f7f1f5b3f74939c9bf1704a453bcc07b349892024af2459a28e45af00b22dd45bd1cde6f12ddba49b65441ccf32cb9d2e8e7f097cb3f6c9a1ec49ecca0de74a3606d5770e582c2244f67fa30e52ea6764bec80391f88a28586aef9bb7378ab6cd65b24c92842e546778e47e8697e8c946a2b948ad23b8fa0a9a3263256de3661d3d54e1da14cf9ddc0bf3ac7ff22ff7e8539d045a908a8d45692a9120861cb8f2a93fbc1da465ba953094af2962dbc194d86c2ad92044762bc8714c58366bb9ec46f1859c0c1fc7b4098c968fb09e323afe900a06a2f3198cdb3f2f39184001287c78c9dad66bc3d13f9839b6abf031b87a3240f59b2b40be3748d51a528ae4dd223b563510d2e928394159fe064650d7c3462504272142cb95b509dcab8f69271c14d97255ae52e43ae633b3341076aa652ffb4e280dc41ddecdfc3f92b372c8ede4f11c658275bde10c47091b88e32b0ae5c3f9919cad96e072d50a38e8af37d09c4828300f54b0fba1bf93a3b7f60e1008ccf61d37256a4cabfaa0825989b30eb4b96e62727b4f82ab86002fdc1ff53fd5a9fab875da6a7b26926af8907dcf8cd1f2b11873a3a51d4dcf614bf7eb7f4166d68ca3759a3eb7be9a75d13c30ab04613d40fc9db1f83d38e46d0e21cd007c7396db2ff39757378c60e80b73a73d2b11fbaf9722905675b729eec342299070f6b2a58d61699ad8d24a09207ddd148e4c8f8a715fb2c41adbc641230f09a7cfaf93d91d6c8cf1c802ce8e99b50ee8e24fb8c61508d0aa508a29cd5f67463a42b2115a160caf7fc1dd09d65df739848af03418dc51ec09e1ac5f1481a77466e6dcdf90d2e983789d060bca70e274906b9c2547d971b58fa395381c151eb49be23bd5e899a978052474d78c264aceee417788bad40c3969da81b4d945774e747ba0466e808d29a3d80ac8c5c147ff09aa1fd09e8458791e4c06bcd8c72e34a5f671b13f1e788cbdfaafd9f7aa2808f043cf1dbf68d2e669d403151dd1fccdf681d54890206c4ae78fa61af35fdba8292dcc4d346528f6dd1401da5a971607f3bb9923d469231c6546a682c7793fd5f5a04b61d9bc54995f7b824c022caad3c11cf42c277a1f44bf4ae043db01d7196d5f8c25b2b073763eb3027517d53145918458b0935b57594e8717d89700c58abf592148dcbde9201e7c4083a70344e28e65b8d59198424e7b118d22a6274822a04c262776a8ff26649594d74bafac5b4ae6af8ae595ccf8c28a1feaa129e31b05a960fe1d1a944c39afab0ed077913dafe28e8b021e7442f32cfda440d2a5c6fc5970eb15d5f46dad4da3f2a8cf5a3dace023943739b94db93b3354e03ba02bd27526004d97b0742c0c1873951bc6decba9476ffd66ef4e6400802131654b6b68d16a34f591578cdbd6b7af77dcfdfd0200bb5fd9c2d3fe76be05ad57ff49efebe9e6c8d0d7fb23f6f258b650e184f9c25896498d22dcca3b0405f4ba8066024bff2f226286e2ce6fd99239aa5db41155798d3a399923beb04dec45bf4f5671a10b443aa1d006db2cbf41a8dd6b22ca9d767c80e34462747d442f16629e2f0e5e6038ac7718afc3ec1a10bfb0b56deb44961ff53bee30cd451ac4099022bfbc9f57f9b67ce8cdea9b9f3b4ed15f1f33cda807939b0e256b645f9348380ae8304a2e303b6db5847edd30a98a41c51af6a2b8fae708aa44cbf706cf47b41c404616178a2cdcc1cee38a19f2b09f88507e23e3c221048cb6adbed861efa548852bac69cef2d23db44d945d95390ba408e5ea86df4d471d1965e03e3dad58e3aedbf3d20f115d2ba604654336a5ea97500a3d9801ea5b086cda1c73a9f38d8db9640ceeef989180ca440f7b014610dd3c4c23d0707af546d5dec1fa61bdeaea289f30e8a6f126f47cee0cede79c91940d4143313ea0dcee17254b0573fcdda03759427b308eeae1f2a9c1cdd62699cf675be2656a633b05ab65160f105b6bfbb089837088ea22c9f1e45544e4b5bf5fd9e02165b88ad5d86cf5cd3133fd374dcecfda2234c345ce1a681e0335a2fd5ddf4ad235f3618617a85150143a65261a3772503f32fb8645b5b1efa0a4b5148230b7a3fd3c20ba4ad774acfb2da2a2087d80469899805abe89dde3283dd4b98cc777283054c3ee6dc75bb88714cc4aa64ab118dc4b0daf40d9044059b24ae2aa195e05d8699641fa996e7284f3837ad1e9d41d945a2dec07c2b329f960cc853ed97b76b8ab63b76abb962d41ab32d11d2f2585c12c159f51529626542a5203aec35f6ada7cca2728e2db28675249eb32de2d10335f3123df921957255c8ff630785535cc806d90fdb3e44a3074738e71c58fc64342e9b67d941e8e278e829e543d57f9d568a27b8a27d6f6d808178467bcdcc8b182af446d89e9881b18e3d6e668f06b3e12078a1ae429941041ce61ed635c1443d38389b05392ec726e27d6040abf431b754a16a10e10c01275e3bfe2b617066109a7562dd5bb381b6d3e5ec3805324e97cf2be0561f6a983466aeba63389199c272a2ea9e1ef6ee2765229689b9451a2ff02f96aff84cc3901307d478009b7ab990a4ea7c0a1d3bfe009602ef1fe6aa90b3a84293ef2e012de9df6ae6d820e314ba46d43484aef1c3b48a7c85f77868a7e295bdd3acc105f12a4de62e1ef8eabf5042301e84a602b039891f646d56d141bc5c1e008ff816dc40dd0359ab49affd501ad795167f2ae8674a5a87138a406fa903a8055dfe3bafcd859d7d754bcbbc4a85a1d7abf0b9f443e513747623799134e19fd42a59fe9d48e66056b8e48b786a1f61a0b0178b9683fbe4efbe2852334aceec039f5cb232b94c17a0831af40750c62d3cbfc02913e76b246219e2123ac035023af6f48c589d0fcd868b770fc99561d9c2addfbd9436f85eecf4b21ac07ed63e92003bd76952d87f81e487d83b265a3cfa0fa21d15686f9ae2a31cea7cda02108a49733905688f4461939d595aee777a14dba6673345d99638db2b5f687b83e21bbfe8b23e6e64274151617ca2c3cbb109c23def5daa90b7da2e889851c5eaf03290732c8cf59c507ae756969ab0bd982b6f9dbb54365972758e6b751dafc7157ff7c5e92c580d70fc401f47d200849e94fbe594ad1d8452bf18e25ca066af2d2fe893609022e1fc5036e4adaf649e7f36d813147f26bbfc74ecd74e7627eecb6a082da376b48e5420dc75c2052270c7658bab530824fbb9df5b86460d7c52214e9f8181f3323f8b6a3d7ae5f8ecf875900095137e3da9461fc5d5c7435b36e57f43bf5766cbbb5c7cf3d8418ebec401e12d13a50e63c90bd480b20176a78abdaeafca0e2b08acd2287b32f3d61541ef7f41585f20c872371bba84065e269b98df5a0ec929ff11eef3274244496d47cddecd474bcc84223caac26784d947b71a7665fbc21342535dd7202cfe05a95247346f5f1af976e46fd0b4b7f7c2ad08d2b555877d0996e6043e298ac567e5d3a3ce240d551288e187e66ac7b77fed31d876ce3a53f9fc5c314437fd2818a69084af6ba78146ac0cab61bdb7e3fcbcf10c287ae73e2b2cf366a632d63d71958d382782b33637a37a3885c8e74f3cee8564aa34f36282dc2cb69c163da5ec1b8175330a9826cab8e8e8c75c7baac0c10d79e3c5564c22dbea03d1f642082627e80d34b873d572584be802dcef4225f9374869b64f1cb91e2ca94b6f46122b1b562edbef8648ad366fafe9a2ef45993da954c364d75e5e574ede88ffad456182fd80b0f06aa4a556aad922a0e3bf552867553d86baed5104f2658379dccc33fc3c101b8a03f71231033c527c9c22c4fabfc194b65adaf5b99f30aa30ee5e3958c5e33a3171dd043595540846fadc1a67139a04f084579523241a11c5ec03b18bbcd02a5f40a2139fc2a7036519b99f02336af1a1790448ed12fa54dccb065490716373a06ae746a768ef77e70ed3e43272b9302731ccf508c7c16fd8967501a05f6da842f800582eb6e2b106199c936a2df63e304f4ecd23b4627bf4cc99db620cb8163f4886bdfdfc772fc11662aad388a19c64290f8db3cf2f99e697445592d63b8de547ac7a92558a986b849f78d546dc08c6a2722528e5631bd7d0a6d3c3d46f521e9ae3d85036ec06cf2cdd5877a1165ec3d754c193ce43cd28ef773630beeb4a7734b024e5dcf1fe08082d5a91d540718f7ce765a763d8f266cce5f086b284bc309a7b5b2b1d9ea5c61e6059eda47ff561027090a38db0514242b923c16722c7400a47f2ad7f859bcc48aefeeb092180777812d09489cf0cbe2fc6912f7ed6a10b3b441055cd3c50c55a3f1adf7e1503b5c16a531c26c4f00c987d86fb9c7e672d60804f207618cab05d3075a4c18b71c13a8dece6545ef7669690d232b8c79f3a30a6cbb8312fa8a297b384e5edc9ef1167df2503c20edf1f86f597afd4037e36d858e011a2aa9ce505e70abc090e56e58f1f86d26c95f19ae84c157a63283d7853a86a72a038020282177a2321718daa8f7ab5231349a55b76ff89c3ce382edf4a754a92b67272d7090bdb98e4549bc4b25c1a09ab2edee0893ad4f98b155b00b745aa9ba24a1e07dc28a4544814891c8f4dedd599b176aeeef6962add4500126fee6f2452f74235640e4493baf145120c6381529051ec4b7b2f27640495ac18db082f3c63f912e699b856efb3e2ba9d45a103f1c0a7b1c91c0b9077190b80317e27130f69762e314f66fbd7b69fa922bee8f907c9b370b8d9064c2c0d909c4f904de7af2a6233f4201727c5dcf503ab184b4076da1cb26d565c9b6350c15ab049a08333d2fbaadf4846e986ce1bcb068e1cf8dad628ac62e49311c1ff531f0f98359d3117fe56e0c25e95172b350730ca5628b2174e04058aeb4ae40ba010070486b5a24ce7906295295e5419354059f2f5746ed7867d4a6e5cddb72a8a0473c4e324a79e179e9c446091c9efc99901c7c1f110585d7d27a714a68af90579086e9a4d89b3b52334abdff8793a92bcbd85b8308aca83888fc14d2ee181df129418757440afaf37dcceb56fb422fbff53fc6e0d550d4e902b327a59471b522541575e5da09c9256465665974be916cbbe7166d2b3394357dfe936e05abe36714c290ba06e58d23324f9f3f86378d56610fbeb3171c913c98df7bf469129f5cb4504f33ddd4e3539bf46bd9d0ec0fd3299bda34e926e6d250c04c3af987e1bfa8a9261bfccfa9ae44f4edea6a0a477de90532e5a1581937085467df1641889fa3a91a79deb293df785668b3a8cbaf21cdfa146847fd584f964070e29f6596e458eb19afeb7bb5df37326973b5ff95daea0c792f6714a299ee8484d367c67885c597b1ffb395fde9c1593c5ac4b72ef199358d9b6cf05d7341937ace000421f16a2c74c7b51bac9f73d7f1bf997e651efc46dc6a8877c5fbe86916145c6d0652021124b6bc24f08422c489a95f86bca1e5e8efeff5aa058868583388b1328069eb7a38187a0a6f19e58190df5347c8fd2dc2ebcbb7f236872a91382af55e551e271e4481ccfa7558c1319944d14c2ef9ebfd8d8bd5aff1b35ae445855a492d709ea5a168c13096796164cb10dbb886642d63f96be4111da8340ef866fbe316fea8ecaf2ecae1a3129d0741b2699d131bf679e2c879b7b0715ca45002018084ee9836562ff9bbc3dac5be9cd0f25e89c102862728d25d486d4b52988612195e490f4e32b5ce4fca140149aeea049cf18fe95b5612e3ab15dd47f5ac61859bac6ed72244ac29260b400d123327d3c12ceac237029512c33e3757ce6180e296e3c9cc43b3a006f4fb8c7e4ee9b9cd1e6e0079189272992c90b6028de13a73edb3954a088f64eaae9972b051e3078253f906b9f70096f5bb5e0b40a7eda140a04684d4461538a20299c6a9f13e0372c579e708cdf6691dbeb3503a4b8e3259773433a2e3111f0541107506daeb972fbf285770648ae39dc1d87404bdac1ff41f2e2691aa16b9359d56c6a54123ca61a8dfc88520ddd7d5ff3e768386d902fc73f9bf7b3dcbba219bb4c3e09f78b63cecbcba06cca49dcfd4d2f2fde289c3f24bf3f2a42442d1432de811985d820ad265b9fa44d71b35c58bee9a5ca89c3b41f31b00a9af4f767d3221e1e532548025d8e2ca2011ce363ca0a6f7b938f443ed10d44f9e1491b61356b1b200df2df346151827efc9c931b5c9e5659a1c9e488609cd62d0ff52f5928247b743422031d38566418fb91340de2469151582caf98a85675d83bf1eec8e9d1bad517a7665750d2ae3ca5739255d79c39f51dbe5e9b78c0a1e396af435e64d68a96acfd368398cea27becb11d127f6419b6ba5145276bc2d3aaac4412ad54e2705a9d1c3c51d6ceefeb901d2750f4a33fa9ca3fc6d24acf896ab3f451d9a0edf88e82442f723c2ccad35914fb20bc04ebf5a0b93a28e4d0bd8b423f1502693c6fe46e6b8b6c1f50367b76b9cfd8c15696059eb9c1132b0957e5e94241b25797d920e32942af77fbaf347dc19328ce9b62f85f4d7d574a58ec3d7029ea8cb59d3271ef213116563196d47373484000128a1f0504d723ead4f282cc628c29bd4ce2391945dff374bb44490292809fa1f1ed113672617f293cdbc409b1584f072207d9db6716f10ac587f4c36ca18091414737f4aab7c8d69cd3bb34f2d421f7f6fe3007782f7e914cac732960ddf18751f1692d8067d5d1c231a787c8a75fd58277558c7a1146d0533ddf5b5047485ebe090eaf427a47c47190cb109ea39d16ca45d1bb86f9408506d9d28710d2565169ebbe3bffeb37eb15a74adc63745a3561e020557dff3974d58f6e101bf85b0c768d0bebb9281d8db586fc9cc4898e53c0e49505496f4ae25bd3a4b86a8a252887b7f26853d5e3cff0d616f56d695067ff8fb4b679f00f872847c4bf73c28e5e9e0c11664581bc7e1132a0f30b83fd791287be79126338d19e504294308b6813df1c9a88120ebcbe6b99612e68c3e57ace816e306f7f31540f027630b850bfc23f62608d5b098c3144b335185a253d20d3e93c9e597fc0d61fc0c68e466bf3a0a224e93d126b8c84ea867ace775dc16c0623bcefbd8d3d2851b2bb7df9d25bf182e14e545cbf6cb61c15c2c4c54dd966b5d9e42216005f74c1ea59654fb217d334104225b6e04ebd05a2986f72483d9a80aa077fcb38e578556498eb6c70787ec780cf801e19b202237b96bc4765725ff59a0ba7e22558f441eefa9384d471fcb124313e2f9f2b6f4caec454a271011ad6a14014f23390a626b5dd12938ba081c51039bc28ed974496d79d3ebb4745328b3aa450e06e845fa09a91b50725f7793cafcf51ce739de94d0545df920a1f45c272452a951ef2621584a8c1ea47ee05d22c488c45c3362f2a0249d4ad030e69cb1d4c8b74c5da540c8831535d55036e4130bf363b18d63079e93fff926c7c85afb478667cbb1c2ceb7087da32afbcfe5c9a65ccb247c8d1edd34dd0e84670e19b0ecdacb9126041752292a38da4705e93a0fa905973aba5b902e6821a43d5d481c4c470a2e73321f0eb5de7a269479facc4707285002e1f91cecc1fb76caed4780cd701bdff7d8840072f61e48737c9b6c2aecfb77bdbc2dc0fe2d115e88dccb8950457956825374bb03b6c1346e2f13bae0d86196250dc0381c9746b84c8b575c02441aa0cde7276ed3c30fb24a275377019c53be1a3d280434e9d28f27f7997d612f863d423c676429ee5736798e50d8694dc65bba954e2ee408a7bd22f139dbcf09d28d1a1d97449ed2eb71a2cf5c9255d83a20b4219ad9c5b4c57d0118a9ef0cd8f13e2c827eb00421058fd580bc7766365b3cc077d37066c2fea29b8418dd2cb0cbd915117a721799d8be39b3dab65997b05a0270a0fdb35306ed4eddebff1319f24682f125bacc68d59332827932ad3a5d9ddc71b9f67d5d5bda1f6487608bd9e19f3b7166bbb32b7576caa51ffff8278d32b06acd4c96723b6e62334c2c5e484d82175e0fea339ac31b7f2cbf5b6d73423c70883787121f03b905c0725eadbca81de2d4384a33b33bdc277451a6dc498462ccbc68e46fa1dc9274d87c6035f7b10255bd3ada00a23ee82a702fd8fddacab77b99d82964208601fe9d446926b4ebb632f0418cb7de79767d6526d692127428d4c122214b1211d6232d0415ab5a5b9b43c027437c1f20bdbd2bad1d1cba53fbe18f4df018c03231d342f7d25ff3c2be9eacccc3524ba35738317d15a141ea09aa8b01b7aef8bb659a2e7b3c171342631cc1006dfd531d9855e72e8d2bee8479ae47ff3f279c7c1d98f6f76d9964e6a5f973f0b37f830ac9414842344db2ad7348e5bfb1fec729ed639c6ab161648aa2c4d4170754b29c842b627b1fad9717aeeba778ee57e539d60502a68371072555a923d89ccc9832c970568717b538c3ed3bc4b01c90cb2ba5c501a1027ee3b38ec1b8806688f3b7358114099f6c3b4fbcfad9511ac65cc0a9d7c9814e5f7c9d1f42d3f4699962c5d524caffc81d1bed88536f9df98930a430b844a1acc068a606c16cdc67b16507f908a7cf3c538d891bcd09657e7aa4424e279e380fc13d759bf3804234819af3787d2b822ece08176ab56a68e4660805238d9e873fdfb60444164ef59a4b542dd2a91de2a20e26ca69a353cc53144c3a3f87a51cd415d140f28267a1a935837b434cf0e770ff966c8d216602f04642c535331da322c0ca7536ee0eec3047270f6eee72337d9bfd07bcae64917187fe2d42122f8f0753bd22aafba635963ae0e9d11bbc5c98d17f5c084cf802fef597b8e1fb4f68f458c155ae56635404d67d2d139bf9aaecbb88dfbdb9e8166f1ae2296d8b5b168738798ac2c37e8df806f29aa783208164735c0212f75e7db456d3d9415859a6bf641fa554db196cce842957b1f8d613c89669422014bcc596dd46931bd2a51bfccc6a5a686707d5be108d4b725751c85f31f2e21aa69b7f58debdc131598eb15b83849e0e7d027e92edfdb1c2aac557a455157567f37dffb5f0ea785b972645469fcbfadfc3d1e075a3823b5dd56a3011dc5567813858e152291d68a353c474e9fc076b2007da492a0b10907d384c5b632fbac45c1e9aa14c8e451058d20070a03df14fa860bc0804b958ecddcfe207fd19b624447cc4922546d3ced8b02784ecf66a4009aa9a7484f18a5b67761eea4dfacb73599d41735f9c50b118b49a0f70c5bd1f360d4491afce905534b5a0a670f75ddd8874865da5666a0094a7082f6cb4bbc4b2b3f4c314562c9090e73908d8a7d3e3f890fd42c9400469c2fbdc33961e964a4fd67f7f0d5e970d3c639572d1a8d9c7da7956dbd2c55aefb93d5cf102153c7ab7d3ccd51e0a3e803c098c36c5c86b46f6fe0e9dc4fe1619e33a30910bbe01f4737aaed810c5a490bcb0bb9098f88df5dca1ff1974bcaeff270fe449237f00d74f94914dd27c52b46ff2567e2c8f99305d10e9f51b368f66016ac197a5a6c84c715b31f6552461913da9fc670aefec7d9b4f0bf84c0d4d82ed245dbf6301831f1587002941d515121424fa2b6e2eb4d646c35f96691a4932a64cac3b7a3b5c699da3d959f3ccd2b6b83b5e46714fb9187d92ad3b26922cbab9eac1007fdd4e74864de960e93ef7d51576307c34b217dc7482108d6375b6a056441a53b82695c296be859d33ddd9f4271679ef5bc4150c204c3577207a2537a6c2e82a69e65472d5dbe006e464299d76ffd314411dcdbe668fa6302b9e737fd9fd985c662e9cd1b933515bdafa12bb509005222d38f0b2a38ada7b54d7c7a7099deb8fcdd1f6a15fb93d063c97bc4ddb644bf7474ae1e309fb4eee637c1f36450debedd95e035021088203f53426d26b5d516796f2d7e9475aaa31ad0b8868056cde035003d2433176f6dc4c8512e36415bd5693ff0293489c8e97c313e9fc5a69f353b5727349ca3a4a687ea7ee3c43c20bf0a87bdaea8c20d7d27fed275c6948635ca672d8d8da157d722bff5dc2d60d135c98ed9fe045acb9b19cf348c5ba0debc3971e4b3ef1d07df15a24661ef4814c6ecdbc75d6b46c2fb7ed38352b470d90fc7762e5b1bb98f8f1bf41f042f5b58fa3ea0dcc7550342ef1d70c4d72f1c90413ee821e00b736cde413019fb269b689db547efb588b52d2a09585821ff0d397888bb92a40d5c821453d53090866f02e56df98abe204894396a7251abbabd2556ebca5918c92c78b4fb9a9c43fafd9e7013bbdf0bb27502dfd6d6bb288ace077f2e77dabc979af6babe17f14a1b14ccdb6c99b1a35f1a2b371600dd60daa59ebdfdcc8d59ccf73fbcee759044b7d39bf504056373a21e7f0567455494e72f68380625f4a243343b7e7e43db4002414243a9daa067a7831ce7b023ffb004e5a97ed0b4fc48f5152eabec6c09fc7b607f6ad56c99540aeddf4d5583a9c17e17b1df97bf3d6628814bf3cdec48e4285c5adddddf7050d74c389cf22d39ed5c489f636911f26c1c1e16f05cc2059761684ca30e1cef6b8d269228dc0332c182121cab2a1b063f3980c5748fbca349a2bb31123d88e58a77d66e0b4c361a6e5d6d936706c4ec1998c01b3238f7b76ba432234c4821207a7f36d327eafdeb7e8b1263e4d6177d98dcd867294109103f41cb300b33dfc37357d15a2a4d5be8bf57df356c872b78206e93d33f046874c0788e00a1cd6e360ed2b682f0185a4c4d59c4c83801959a0d10435098bbea1a262995a12e91fb40996298cbeaf6dc127e63d09dabf273b7eda2f6fe94670b2e403f947efe1f59a44cf4def135771431aea843b84fa5bd1996286ffdaac044b02c618c96985bec1be41adb99255441c1eb63d1892a11dc567568218102dcba6f3eb6c05237ee735f4dbde454612811b2d70a542c285c51b1d9e307b5a3b2248272713a742efbece3a748716091f8566633655a1b53dc4ccb54777422a062d6c768688d411830b4279ace09c647bb5028c7792d647653f80a0bf28f88ab0be92fcab5f409348d58eb56f3dee51df29898a4e57f6910d5307465fe4d71c74cea6c4975f59f65ca5a2fd84b517e7d4051d8384c285063e9d87b8c1659af4bf885d5421dad05de7e94e5baf6bafa47ab46c7420e4b69def4e13f8efaaff7e40782d3c3228daf04d7dc4c20c6ffca3193ee2a59fdc7d8e9965fe54eb4db7c1ce690def2e73485a5b31a0dc43c2fc1952b0bb4a87b025fd044f90ce6a3618994bab150078c2084393fead52f8fa70c4857e58611be49f35935d2d41562f1aa9f705107e8f3875dd62b677ab997df08e19c6bd82d5c90dfd7da986f3f1a03c7149e3d44585f8592a59cf2108739bb102227611193fbebd0ac98d55f3e1d5eeca7d42338f801166a3475978bbb359f04e4d3c49b5d2efcfcd3b0074c3eaa80ac06d1aee5795be5d115f7ae6faa3a65d1872b5cef6efcf314bf92a5bae9fb67baece1451ec4c92d104b5775f4f7b85020fbf37a1a285226e2e494f6b77d69c1d3ed18169e9b9643acd6fb0e30d0eca05d079387f249df28300f9b00a367fd3e4fcaacc5d0983caf75aa90390831dfda9da28a719627594ca83751a7538c1735b11b26ac51ff6b8305bf4dcad0a6bd656a7a70a561ac9c9ff8bd5d2d44fd81c00276ac1289619d99156df2a3f60fa6fc1b591e530b0f8489465013acc68f0e1b710be710b53cd7215e4fda17817b629c2cefef0ea1a885fc4d54e70263547874e4371a812f15dfcfaaf5c9f4f5b171b3974b090d6c319a1de37f80cf1323b4f25067b35449a6274e656e23fe98437657a5b87189dc6651e364beeb533dc8625a8d2d0327af42c9309a508177cb64443ba3ce97189bf5b0cf5ef200820fef8d867b68fe87988331cb5f0692c97a1b11b6a33f20ff70070cfbe2618e00100000096a447ee5b85fe3a04a27986e44177bf00204c312bc4a8abf43c623d67b9580a95e689665fc698858a7fd9eb0409556171a73bf04314cd89420f26a4e78bb05cd064f7020cc07cc0852678adbcbc652b66e2031ad0d303d7a116a5233dac2b0018ea9fff362de958b758b1282b39709b7a0e8bd606a776107cf83dc0b2bfec6589dcc9207f849ca3f56e697917a241b8789699d07c595aeb4c8d07cc3cac1cffe36fb52513b59b6c921828b6984fec5087afb53c1eba7730b7c62e8b87ca2a03ead91f7f423e705387ad0b933cd84b8b98c44db48ded42279e960e3c537c10b9a89752489b061d8a6038c34b2a3268c4461967e7299b7183b28b9baac257b5b2069901104036f5a32eb156ff755191269fa25aae10823d7b639696e7cd84b6422cbb01202a7790db6d79f380b79895f2813e0433a47d18b91261890dfcbbaa386acf523ecf4a51174292a539a948a961c769a8d3b0cc295c9e2c150aeeb7cc8dc5832fb910439253d6310fadc17a44e31ea1c2a0a53739c42666f017a4241880b559047d024ac3b13aad453d5b70ba0de990a85a13a135160ec172fb828a5780acd87539d71bb2a2e8bb70ec4ec0308e4189ad2436bdb0934b5f4179aba9a50a53720759b0423589f3058bd76a3f13f122d701bf5dba5215a81de6066607c10e16f91834ec8a61472d7aa17ccea7a9ed764326746f05b45ff6e352541087c2d38dd7f314f15a86348b8e332131c53ba1f9d732c54789db0001d8f12c673a282907bb6a02386665c9f096706e034233d79af68809ea17ca75452c8689cc520747c0db7e9cbc5bdfa7032a696f7281a34c2a0087cc99eac6723d2b82236c3139e2c0289c7eb05249ce92a76664a7070c3a7c991442c91de9e4a75ec65174b08cf9b67115348ab1c3333f1a50cb1c153a81bba2786bc6b1a8c87692bc1c27fa9741f1420696e565fe8426cfb3027c4857267c6c8021ae32c3264166663cd2a02535093cf9224dc4c95dea699de0588ce8674542313e65335bf482fe9a078a7505d7eca577729600f0411c024db9079cf6f3290fd2aedcc1091a8543afcc2e987522d882ccab042423e80ba3e52cc596244699a2049c0aa30ba117a4b4554a0ffbc01767d9ac3700a254d3920c73b48d1a5efd20c30bfcaa4b04cd6087a736a4c851f948018185683ba6e2c707c7eb9ee59213b8b1507988a407bb6c26f34023a05839e24476676397d7a0d556c47cbc1e08fb62772b67c880036f507e415537acdccf7ca76deae4aff0ec0a1ac02515c52673882d5040b7196861295432e88b94022145f52a62b4322e2e157894a276a5b6484c24a2f5e79a2aea93494a3ddae406ad1534e64a085ef11cd514cb97113064e87c0a24129b4b4fc95abba2b915534b1384177536e24d37ca93dc4b237b1c22a8752b06b0148827a2361b84f7324477f78354b81bc3b20e16533754ab5ae9b59e4c220299614f5e7880ba0a8b7db4bd055b6f9c70186ff95b4d890fb695a6964a5cba445880537aaa259b60d80f1512320aba1a6421c9932a8026194a700606ac753c1282b361d9a4b1115c0f4461ded672ade6027dfaacf3e35f8b872968ab9c987665951a0f97459819b148bb7acfb5a95c0e5e17a7cf674993817efc418ae88945d8af9eace5aa84f10670b57ed6
SpendSecretKey: 1542 bytes | 0100000001019ec8a5c1496adcbbd26dd6978425fd60a641bea42e9280beb6a29fd88290e962f6d4269e5f68a1ce5d2359f99c9b9c393f35595fa0beea6f7a91aedada1b61808a84707a6819080e0d471670dcab891e8ca463bc52e21a624732e43a049a3884db8a57c7ecde24e1aaf79be0fae269a088df2c3860b53ae7d810a0d5e9264967aa26281a70bb737a78803afa43e7aab9dee4a7be29a5ca9f7a82ea3a27ea9a4e9991aec4d9cb9e82b242c0d70a8c5a104926547506c7d1eb8a7106ba977e913a94a8ead2e9ca48038aaa68f8baf3ad8aaba56d62e26fff959ca9341f42daf29fb35129a45942cda5890ef45136c929ab5a4c90c7d0a56ea6bba84a493a7969920089ae1053e0d7b209423d0fea34813d0d8610ca280c8492239088530d2346968a2b469d8afb3c9ac3c0d861bf2e86e399086062aa728abea3bc998acfaa59914e31838b9428ba8a22a6d0ec442a2ee60ac4a7ee2db70ad6a0e38e29eeafb2861320f216890867d1284459fbe1204b824219289c51a810d680fdd2809802fe14200ae6b9df6b2a85ca920ee8646fb2228ae21a4ba9b42ebd6d8ae8c830d9b9f66aa0a2abc1eda2f232ba808583f6cae2bda29eabe7ea46e919d8aa4fcebbbaa0104d5b870b8274548031c4e3368a84c40410a8cc5400c199861ab9c0823fdac7b2d093f8eedbc69b96ac9f2f48aceaaf922a6bea678e20c92ea8baa2827b2d7bde87ecd28cee11a7cb6b9c841a623f6aee89666f402ead9aa965ae52252a0a9a85c99e39a87b623950a13180a7d571521b9ab290590a50672e7030a2061a1480a2029aa2ca3c996aa38b6a935c37e0a3a812b8da959433b07cae3226956fb6d07708afea6d51aae6dcea6e1b2b80fa80a338a48bb82fae2bae9a31e41acb2ab20588696299945258109c00c57644308d05c702c18a13038d419c7c3aba8491d7a2bb946889a00a961eb9afa6ae6a59aadf3abcb762761ba0ae6ab9a99bfdfbebb2623aa62b96114b9de9b0c196bf296478bb2e812dbaab6af89360c93a2ea28ffc60c20142536e807b5e51817386e3ff04470710a28c7140f686e6539ca4373ca6cbab1b62a10660c9daa2b2ab9b88a7e652a1edf20aaca82c66cb48151a82b96b8e23496348aa549acd68baba76adabed76229853dcbdebe4ebaad94aa636aa9c3d4100aad0391209ec1c42160b10412125210ca3d24db65e24a196b88182151aba20ee6580293b4b19edb4aa60b2a94a270b2a42ac039dcacaa6aa188a2a391e3aaea84b9fad40b6884d64c4a0e49569a6aa3a1704bb6be8a18750f85ae75a62a4845623ca4f04507360a1aba98041630bb30e2402888c944b015f0e093c19f6a8828684bf8549c56b5f669c1a295ab66570cab27296a286a8e19ae3ba9071b93a89e7ac9e36e9fd752eba32e666aa582b90e249881d5c2efacab27aa380970d08782858031a220d844d494028d9404cd0be854e77c4e132800022f3cb151080eeda9bbfabbf7ea69ac3ae8a76ce3bc54e8ac0d2bae6aadfb836ee8bb90aa2e6fa1eda96da25b7a9629abd4aa6dafa2daaa22ab4e768d9034feb846927707de018177711f9517a2889d9194be5e393c9a3a0d45ae3d2dad604d484310f1064b86c8be03f96a1bb827a8a291b08d2db219505698cf33f86a197902cd9385e93a51ae7301a880aaa2af8a7a4c1a8299adb2baab8709e2365e6eb183921aa7b422ecb1754700a21b90060da1790204813344981c2e7cd680219c7b445bc62a01766604982a54686abc6ea82ab76f2a8ab3a541ef21398aabd12ab807aaba7814b2322eb061f21cd3a7832bab5598f94a200dfda9a9ee681f8280fe6222cc6af6e00101c71e9f8c55607d201ead0505118411f035a444db210b0399bc8360992339a549e6d3776720a7682ab372fe799a1fae60d49beaa4ad17faae7fbe641fbf3b849ab26b49253adabae67af7449ebc252ba5247a60bc5f38aeafaa8a63a42e1002b5505155d93009f22878217f908dd265d94617771048dc0113dd8f04e4980ea8dc4a19aba3087d5688e78482437cd34a8ed782410862fb669399bae150f821e4ac4bbb6595592ef6f9aa124e2b2f5a6eaa9a2a9aa18ea399bac2de27698662b487094484b00a5246a04302c140703137824907b0290c5cc089ef2b46a5842
SerialNoSecretKey: 1062 bytes | 010000000101671ab996edb2e4ac1bb61eb08d56c1d4771032b4f1e800c279d77c88e8aa9ce6d50f5c34abe4f194541bb3e4d3f78e52e35c7705760d763440e331299663bf09997b8fae1562e96adc9aa36a160833282080de1f5c50853fdf655a7559c7d71f0e2d049ceb91858766f29fa2089b2b5c9c7f30fa0d7cf9f4587a12c7b7a64a8a4a2c1ecee3d1574cb5229a6b066884ac4dd1ff7bd09b678dc03f3d42b71992678112836a53d37ca7cba500fd3938d8a4d9de0a70939d3d03eefe50fd679bf14b02729141eb171b1305ad1e2c7d1d7c34e7fdd75be78d46ac211990d3e91efb2dc475484e6090266b222ef2612460e4ac4531e475565989288a90291e7b5d124a2c09300a1b8c4a89e62365fb913aada9aa5ee0c282561490b4d8c61c9e6d1b126ba28c8c62af7b830cc88ed055008e97540db2a241b692dee2c0cf5afad81f24e60311a62e8fdede7c31e3376341d87bebd6a469de25d142002749e6bb5e82083666780ed37c094b4c72bf80d83028eb6e3b579a7133d9f23c864e68842c16cd1b191fe62cc81a1c6d94857a7aedcc4109a605317ceac81fbd86af544ec0a6cbae18299f302f20c3ca5dda4d990e2587c4f6879195ef946880e3f8519ba1361a1c2169c3f441a1fdae695a07b2b4f50c1b20c2c20734f8fb0a785fda0e1fb9a9e501342f78405c9d8be909ef844aae97adc0c6b794094aa772731a15fcde9d34e48fd968f7c8fe9b33d4615ab60defdae42c1d4beccd8ba408deaba1c82a8a113bc9a6ae5285838375d1631e8bf0a669a5dae3b7a298fdf1da272a41a9fbb6e504e3bea377b24cdfb4d9cc9afb8ce84a0165fc925095ef5b55ff94dca9efe8e5d05e22e50cd6aa64093dc0c705c0ae6ef6da6f305d82fe0d935a3fca8ffc0c6ce5a917d17e99cd112fa0635b96ca13aad9d33c1e2265547ea381fb0ca2fc92bbd61f128d294d18a91dbd26a8f7f4ee2406236d4a40a59adf03921cafea0554de4471fb5109f871c44615e9e5333befa0a334602a8c50dc0e1e4415b17678d11699c604619034f35bb2457cb882b9c4d1937b3787e6b460d7720377b9c3a1ca2de4113eba001b5f6a41786357eb19a760a417fe5d29d8fcef8aece68500256caab221b5e10fce8a053d1c3b595c8e42813af947d91a10ec3c52aebc5b68c2999e25651daaebfe983fcb140a370c78405a1587243e18ffd700c0321264b6811dad79e049f32b709315f50dd5a86242bf771afd7995d82b9b747d3fcac07f3ecf2b3c43adff5b761e140bd3c67610a540a0130c694ed90132399429bcf475afe1f81fc9cf8a0230391beed659a9e611b2706e7cf9b5e0b4ec3be7ae8addb3a8ba784c40cd6b42fa6740047e61d4efab4443d70bc8bfd29c54f5493bb377859219401b49cb5151fb0b40d72dc5a8061288fa789f8a971d34d6479cf523552a3cd11833306b9c3a347c5507034e34f4ffcabaaa475c96b2e5206112cad99f43ce73c6
ViewSecretKey: 2409 bytes | 010000000101000000174cb90b2cb2c1a72c334604cfab9b699c686af6c5e57448b64abfb46c96f8a3b7c2a972ba95bbed25a5680c46308c5803a0a8a817230653c1fb1c22f52c27c074828762668a32385502098ebc3732f55bd53a78b9e2cdf5dbc30cc037de644626f6b48563a5152bc5c03c1a6e975682fa13947c9c91f3c438e74e0bf43fd6904b9ec92ee989b42f378cc63bbc4912764bcca34db609a18132485651eff715b67250bd6355ce3b9115876e3397cd954c4abcdb1bc76517297847a2f772a5eab20f23977ffc3761c7c830d44f447429c3c375014982216849498041b65ac02aa72005e477d3cb33c3f8ce88f78927e98da59b7bbc40bc3c1a01615bc5833848e3e377feb54b4dd9cbf4dabbb8f16dc4a7638151424ff3b6227b811e7306469bb6ad603e0f30747ed20eadc52a340ac09dd70410b256381022ddf04e66d973fb89c75f96866bf27cd04937a2400088f8aabd14bcdb153f3347bd25028f446265128b9f562b1ed023b7ffe297eb8311e6987448f82849b4b394e318463b6383f32f9f04956350a16a31ba8bca4daf048f24f0426eeba1fd0471555c52ec406433998e2b69b4c78a388ad9b2de6694313a2660611255865c3c5838697347849ca96b496d0dd77044c59c0d114b98daaad9e6c63804a423b85c66228ad7a8328604c9daea30c1eb7e7265a00f41b372e63a4ea31795800209bb332a2b7a812410cd75be24c1bd0c6aa7c237014909b10123cc02170bb1d11f450a4f57482ef7d352e6d02582fa735187b82d213b62878627d4a5c7a6611548b4dc733ef23059aa43415bf5315767a794b000a4319376d83e17969daea7ae8ef79e15a6108196b0aa541e2e93c994d106837a8dee545807ab987a1a352a8564d5d8a8bcd00bf1ca1e5cfb4f3769bdf37a48c563988b9472306357858b4830b277748b4e20478a6d3b0a9f1064e27570a1d6c12d924aed35b1276816613b35f7127509bc9d7d26104b2c620a1c498c5c1e4ee493c7c25dd5385d01034e4b3853ba58444c9cb515facdc45b0330e77c3b0321a99a582d73029e9032e269026210703491af7f298e03a4a922f33311b7cc746725a186765da99f08e6186b10c7e8067abd498dfd48a7d03bbbb043aa111cbd6b5796f5b95329957c336cc69c5646592045f449a496d144a9e7bb1222a7d2e28977d21cc9e4ac49095ef2967e7f098c485233978298bac87a4e8c037c0a5f808b5a3ca993c0fc651309c5f2cc069f595aa53b52f420bc4d4081a7a9bef04a3e541893e8d586cc7328fd3897d3a07dbce563f95224d0fa2170f82920b212ed5c1eb2cc2e5e86547b6b0f8670458d8b5ddefb464da4a3d2712e8688b1c60146dde626ec14a4506931ed95747d0a01e0bc8d497caa03e7b7f417c9b1b4aa2c425ae5210ac2531eea04983b138bc0633bff7598122469c72107eba278d80411e14b4f559a3ee04199b89976a6f9c1e644b4a6b410d6bc07f14c150df33bf66546450a24c923b3b2c7603dd0afac9760055bbb9db61540f569a8a801dcc4b909a9562554ab4c13223723cf07bb1145d57dc5fbb24cd050582952bc1b580af91e7e14b6c6470bf6ac9062d7b9e60c40e89a4e8bc4b002a75d54079996a447ee5b85fe3a04a27986e44177bf00204c312bc4a8abf43c623d67b9580a95e689665fc698858a7fd9eb0409556171a73bf04314cd89420f26a4e78bb05cd064f7020cc07cc0852678adbcbc652b66e2031ad0d303d7a116a5233dac2b0018ea9fff362de958b758b1282b39709b7a0e8bd606a776107cf83dc0b2bfec6589dcc9207f849ca3f56e697917a241b8789699d07c595aeb4c8d07cc3cac1cffe36fb52513b59b6c921828b6984fec5087afb53c1eba7730b7c62e8b87ca2a03ead91f7f423e705387ad0b933cd84b8b98c44db48ded42279e960e3c537c10b9a89752489b061d8a6038c34b2a3268c4461967e7299b7183b28b9baac257b5b2069901104036f5a32eb156ff755191269fa25aae10823d7b639696e7cd84b6422cbb01202a7790db6d79f380b79895f2813e0433a47d18b91261890dfcbbaa386acf523ecf4a51174292a539a948a961c769a8d3b0cc295c9e2c150aeeb7cc8dc5832fb910439253d6310fadc17a44e31ea1c2a0a53739c42666f017a4241880b559047d024ac3b13aad453d5b70ba0de990a85a13a135160ec172fb828a5780acd87539d71bb2a2e8bb70ec4ec0308e4189ad2436bdb0934b5f4179aba9a50a53720759b0423589f3058bd76a3f13f122d701bf5dba5215a81de6066607c10e16f91834ec8a61472d7aa17ccea7a9ed764326746f05b45ff6e352541087c2d38dd7f314f15a86348b8e332131c53ba1f9d732c54789db0001d8f12c673a282907bb6a02386665c9f096706e034233d79af68809ea17ca75452c8689cc520747c0db7e9cbc5bdfa7032a696f7281a34c2a0087cc99eac6723d2b82236c3139e2c0289c7eb05249ce92a76664a7070c3a7c991442c91de9e4a75ec65174b08cf9b67115348ab1c3333f1a50cb1c153a81bba2786bc6b1a8c87692bc1c27fa9741f1420696e565fe8426cfb3027c4857267c6c8021ae32c3264166663cd2a02535093cf9224dc4c95dea699de0588ce8674542313e65335bf482fe9a078a7505d7eca577729600f0411c024db9079cf6f3290fd2aedcc1091a8543afcc2e987522d882ccab042423e80ba3e52cc596244699a2049c0aa30ba117a4b4554a0ffbc01767d9ac3700a254d3920c73b48d1a5efd20c30bfcaa4b04cd6087a736a4c851f948018185683ba6e2c707c7eb9ee59213b8b1507988a407bb6c26f34023a05839e24476676397d7a0d556c47cbc1e08fb62772b67c880036f507e415537acdccf7ca76deae4aff0ec0a1ac02515c52673882d5040b7196861295432e88b94022145f52a62b4322e2e157894a276a5b6484c24a2f5e79a2aea93494a3ddae406ad1534e64a085ef11cd514cb97113064e87c0a24129b4b4fc95abba2b915534b1384177536e24d37ca93dc4b237b1c22a8752b06b0148827a2361b84f7324477f78354b81bc3b20e16533754ab5ae9b59e4c220299614f5e7880ba0a8b7db4bd055b6f9c70186ff95b4d890fb695a6964a5cba445880537aaa259b60d80f1512320aba1a6421c9932a8026194a700606ac753c1282b361d9a4b1115c0f4461ded672ade6027dfaacf3e35f8b872968ab9c987665951a0f97459819b148bb7acfb5a95c0e5e17a7cf674993817efc418ae88945d8af9eace5aa84f10670b57ed68611d29fed20b1f9f8f1b70f4a913a99f5e48ba78e59c58bc903a65a73b7cebc405055d928c00a6812077a1c09480176b413395130c2b4aec9f41dc29f2d5076
DetectorKey: 69 bytes | 0100000001400c1c9456791f7c97060198fb3f87c5be7eade4f81fbb2eaf56b66643540c1275549950410a91cecfe0e9f4b659dd949e673f57a9cf550dc65788f9e67cfa80
==============
==============
crypto scheme 1, privacy level 2
RootSeeds: 133 bytes | 01000000028c791e5870ec7721c02125588c78e758914d0b5803298921fdab3b1a38a1be36f6af37ac7b10d4a7f6a0ab917746f0b6af1cee0cba5eb5cfcbe0e6261d607c89fed73502cc1e2d24881dbd934816f21b0e21dcafab6fa529a039151064ee1debb6b8cd127ac8f7fc95d7e8d60948fff16fb35a08f2c034b7d29891d5c388e8b5
CryptoAddress: 198 bytes | 010000000202625876cc3eb02454925d517a0bbeff3d9ebc81bc1080d98066dd9cab1c3d05580507024a0b2f554a9a286e6bc555ae8a8137669249e2cf4fa030dc9c57c1d004f687a22a450fdf4ebe35c73fb6adb89930d4e87fe55c9d059b7b8252c5385a211dba7a8799019dbf1a61ffe06394c78edd87ce823471c8d9c500de7144f9bb227ed662ceb6ba7ba7d4e9c684e124be4a85b7575b34d874e631abeb819e6c06fec14c4d2df676b6bcaab9270c31100a25b9ead1fe214ac55c36b3c2fc3c043d6b
SpendSecretKey: 9990 bytes | 010000000202cd827a0aead095bb8e16910ab3f5c8d2db1c96628801e9f35fa391e592f9f51e7c05f30ddf00da5aa6bb45e5cf81b9b444a72f36eff250cc48242075c5731b513fac46ef914d40da4815c0aa13c6fe7a4cffd50ed6f09d30deaf9624f4e837021fa0f0c71317203d6ce30a37ceee45f61ff233d0004422032724b71f28fb7a23316c84c40cb67403e741995b7c8a0936386187adf3b11ad4e6102b9ce075230dcbcfb955180bf236fe92756d34d283c75f7cd888e1854e6a3fbf5e20ccee5108fa5d86b5c7d6e2bf5ca247e0cc67ab7b0f8edc9c3750e66bc0b9ada9575a53c88642ec99298931bd770e66537e26744895bc56e088ae760069f6559af53729d7ad1ee8cd8c92699c045cc981d26715da1a86741364a0e69f3f17e609003f19371cfc605b55bbcde882516b3261eb3e14cd67ce4687f8a82fadb596d0b32599f5fdb45ba3b6cf9c7eacf8893a50168276fc6aeb04ed6c1378091b6029445ab2af18506a0929eb21a01c9aaf11ba67d8695dd4a1cd2f8881ccfd60ef59fb8af67c01fd310af4798458cb10a1a95b7c3a164f572b67c870412031b44b04701e8266bd2f2e99ca665fe321eae8703b8a2cb2c603a16025524ba1f9415277a8d2d4cc13a32ac229092ac96d8381e54ff0201c070f6a17e4ac65c7d331a328ce0a3a6945d11eb6b9dd45a71a69568dfc61b23d5bb8477604c54ad63bc5383180aa8624b86ac03c67648d1c432d6beb26b371abd7c2479315389e058ba68a4e428ee6d8c198d73acf5df01c79dfa5e7e3275239415f7105e3cb8b4b437b0cebfcc12eed4a7ccd48041aa3981fb0790f4513ce2389e06d8a6fa40abd70f833082a29f0e074fa051e0366b1c90b9dcd9fd15e6e9249853425ba8e9bb53ee18d9a511fd2b772b737d44fcd3bacac2e3b196d014427388548a25e63da51a65b9d9bbaa4c78ccd2403704f113327c9e2b0b92a3f652ca181e164cad8f99227d6f30bc68fa645cc835c2e89f406e2e968f9ba83b487281b40e0bb82f46bd87740e25ef6fc3bf663c1b363d72b74e58583c49fea66caa00ec5cc986bed5a335da5857da1b86486aafca59451b9dd870088a1d079b5328cea89cb700612710cb237abf3982e6642ff19ff61772914e063c513613510c5f2053457bdc2ba85bd6b85989f693eb356ccea968747d4bd9000e0b1e5532244f4eb519a3eb95ee7c4ccc67543ae3afa4cac42f904842528cf839ddaf0d9307727ceec412e7acdb0aea7dc18f53b2e81e310e589f91e143927d62542492f39a1aeb68a8c737fbb5214d1e4dae2d3ddd7013f45fec2da2ac9c3d8ce2858d9dc554b44058075378f6c84e637a573a072a0975377057a7f33c29d566c1a8b4974a73851a7213143c3546f3329170eefb2d383a2ac957b2e947f60c8e0106c1171350fa302483dbb079df7259640231eebda279c1be25156ea7f99e1a3d883ce30ff3d8950c81e1b9b76916c1c8d4b30a8433a81705ec95252608a52e6f305da13ac3d358f05bce5ab85dc0ab695d9b9c37e1581ec1cb489b2976c279bea6c4ac0955b8ce52d52b14c6edfff227f89d50223623d97ed51366e06c07c8cb95474da73d7ec7ea14540f5cc2df430e093e3f142811f221b3a47d6d7e9ae5722ba972538a9cb5e63513cbebba334f5ed337d391ff6197f25052fc99b3d0546862c003fb0e19fe752fdfc91bf7495c5887937939edd30d4613aac2252477a392755de856ccf55fcf367c464a4055acf6b3541b039e8ba5bf46fd65fbbbb842c4ebf30f606a5928cb1c7e140056ad1308328ec2da0cc88b7cd96e9ca09a83060f84197bd57d09aced3c6b1fd8b1510d0b8027d5938d1fb41a49d6c57dbc47cec58f33101939382f6f4d2f48c54d467b755ffba87099934fd5b75a574750f4fd59f54acc6b9b402d6d9fa4d6b6b0452ea7ea79b86559621ad063dcc9cdb740ac5694718982b17c9d728ad7114cd2000496879eb23f4492863387743eec351af32633415eaabca34a695d76f7e0d4f50c267acb7a664f7fd6be87cee8e16e4c7ba331def44fdebb7281fdcb388b7928607aae3b5712181895e9091b9ee03d1599344003a09bf52f60cb6099aed3e023f8746650e90d2aa409101e7014dbcf9d417d205b4633327e0681903a7399047f27f331f4fd608b9a140e448312925b69d2141b63c9f7510ec1c518274fea16c3221f93d2ac39078415d577970c7a694460ca53a02b6657c9fd3aa8ca3ef6f16c6a5961eb6b8d552012d82ba835301d3a8098d974332bfb5f6ecf447262849a4baf1eb27aa7c7eb975b519ab0361590b5cb87c14772f2573c8b46417f4753249a1ca2fc572d90bc635a70c21e36f8ee668326808a7db4c59a58d39293aa127f745d945df2f8218d7eb3b4414dfcc0c20d583071141ab05b6213e73a4b37454475b0f714d4265397c864c517362bfafe4beb657f3816009291d860e465fc3d593e9090857a9a9e56d66770b7f36a358bd6d5766c171c849c945045936dea10267415067f56eb1f89777802cf0cbcbc10c8feb381d04d44c5c535ec0bdae22ce2071415b6f66363313bca6a9f87251a2d2880420b121e1b3d6119470ba764f09c7deefb0857a310c83821b153b4f2ae96b58c14246c39eee39fdb8e6f3c9d3f9f6f1d6363fba058b3c3992a9f1b6862603f1ed0706a5542db3c2a939d17130e537ebdd916450a998e862f79325a694a34561d97ff48d0fd08e5f307cc86115d324da32195c434f093263d256fc6fa7d49b141ad5e3c6dd83d58b5af049e471eb0890d33ff8d0b8cf30b3334b76b2bb6fd74cfc517e3fe13ed43c87de8397bdd6f61e238dfcad2129a2a2182e3961a97dacfb6637b5b8050c576df8f34f81da5032b52f05a040c6bf13d93b13604350413ca9b45a18f2c62074ebe0adf5c8c96cf6733c4f75fa537cdac59513e7cd871120cbacea57d6d06a4f094d58c900c47e2efd43e67aa7627cacf63d04cdbeb4321229db9a5694298e45cbcd6cc58ed227ee7136a8146dd77655c97e65110cc75b6f2e8936bf93ecb015a836f74337c4ff4036861e3b9c15b9f8444ca51156dcef218ad9700d58e6f1c81601d72cd4d659d2bf5b497f0a177d5257d1e9c0a0ff1dad47e47d0d37457e6e0dbd1a6ba1ecd79ec889bb1a1c27d60dc0767c8e8f72c5c3e4d08c0a630b98f6ca9eb052c490ca2fddfc9317e00af7fbea92864c043e411584a8afbaea5c055d9a730592cda4205b321c46546508b8d4912ddc22f0a93c4591b9aabfcbf1a71797f64225fd6313e34d0e392361761209a20725e9a5357eb4a923df3fcc5fee69855cea67d67777e8b8c0db6ecea20db5e2789611ea2743963056b0a0569957648739853beb1a8e46b53526a6e6495a5d0b583ef9cb3ac6a86120cd8070d58c432e039c90d90bcaaefbee0e34002dd962e5d007fe9bbb4ea0a60f6d16f94cde7a503fbc371c7763a8eff4caba882dd3b76e05318423d026f3a3f6d4e62c5d563e8633a286b2b23e4394259e1f9e49fd1820cba4d55ac949f1414e0fe56304e0ebb40258a17517258f11d468edd2589d26c0b28585f2720e31c8ff73df5fbd346bd990ef6c9e2b4a02fe58847762f0b03bac3d032ac2bb0b67e82bb14e8ed8dd0528f4d026169cc5b195a1145a22313cb4f1cf3e6f0f3044e4bd5c803507db2080dd73b884be73c7b7f6b26c67cc864f55d8aed0d56d6c17201b953560ed3f8004d5f6f4c57ca882ee9d82eb62cc7395971bbb5707ff04d396c8fb22c920beabd4c6ecae861605cf3fd93c9c48bedd70172c2f56e9ec0a178988d3313c2b015c52c369aa3265353189e3fc5fb675c3787979c911847fba2fe444fbcd9286cf2d34aeca0830d051350d816b0cf9605590dd7579270d9d0f9f0ca874e37fbab4129b1fa5c17d4335c64014fc67d2160450c4d759afa574db5469cbfa7fa9674690609a60cb9322f4e2be418e111aa14defb90189fe4794581afb757ca809db0f4c757c295030ad5bdcd5e5b044d1de01675028ac701a6ecded0f7bcd80a52879b58b6123865e617d31dc0a962d18f9c172a773ad960963765f4884db5c9fadebfef019f209179b459c239478ec9fd47a4ee1ab96b706e57228c303518bc4d8deae59ba192e993c6825e20c5eb6aecbfe31e6ab1930638ee9ea1cde1f7182be75d8baed0cec192f3a569e6518f28525faf485dfdb86cc3ea614ca31e2f651c7629e4a5954fadf519d10929bb86b0ec30c110c8907d8198aea6db76fa2ae1ef6e0abcc0e4d42c61bf65716426332e6445a0104061a5eb4dc47c11df3b3f2766edbaddba7387d59fbc7f478c4c5ed7b00ecf4bd1f8f7e0d99b4b61d9a0a86bdd0f915b8081208644c949d96df12462db39c6ecb80e96ad3e2cd44de8387ece6bd615918f92ff9d93b6ad1f2e132e369b951bcba62c2fa588b28f89808523794677837d83e1e2b29a0ba4671626fa85e057cb55499db9ab40201bff617bf1dd7c917e01beba83e754f7602243b6a83d1ba2fc066d0ec60ab8aedc3206ca75bd6495146daa995a1515ba04f9930f7adc5ef1c52d90c3d24446ac4603233c90dbc56818aefd0db8d086eda00876b056590afeace4525b602e512d0a7c0b0521c6e40087b8c5c0c17ee9974fc564d9a0b33c011abb16e189adcf6810018f9695985c0d3b767e62cbb7571afa76a8069998f20cc9893ce78dc1d4569db3fde15862dd2af344f93b6b6362cea2a48d0c4fb1e5a2322bf0865836ee0c9f279b85bb44afef814292d0d9311aaee9582d583e6e40568349e92763e8495aa95c32253c1d871c308a1fd2f75138b9df0629399525f1d0e2205e4b812c7d442d84b5517a0e66a2c885df76ba79f886335a3abfc492edf44a7fb5597363972059f5bea2487836151d06ce0fb81465844a65e46e30e44bf16428c9a22411df639fc3a9cb8306b8e41eeb847736c397d4dbe8d0016fc3ce23098ecf1c5f1165104560c56367c4a3b2deced94c49e1f7bafb2ecd757ebd5fb927a536927ce06d7b0eb8fa7604857bc0cfc42097451904475dc3cb30fc41ce1320269f6224b11636d080f28ae457e10e64f3047a341fadcb1fa54eaba2c075a672a72d8031d3d6670edc7dfe22beb28469f2e1e0e01def0dbb47525f7d6f3788aa35e464ec0c6207ce9b2d83ce961458a07d6db3bf40223599bcd10b3a8af7a77ece93b9c81f888b20b18c11c4064c4832c30b548bf502ad4bf77b838716b1a2f9ace8104a35addd14276951177d90a3a51b90782c675b867c44a66942c746b68ca060540b6ee8765b2bbf6752d422ac39557ea1467243e9e0ca25b715deedc965a9b4ce55ce86526404009d875f6088487e1fc7f056dad59ebf3de577ba7ee080703100ac1e1d85b9da07c3d61daa62a315deb7198c9abcf6443569626ba861b8f7de1299f442efd4ad56468f4146dfd002691d6ccb6c55e7b3eed59489456bbc280e78cca7c91b5939f92395455d40a3e75ac2a14d7289b20f55558b4a374915841163f41127f5a226a4a590da7d212204286549752c7d5e54272b327f10676095a00ae15ceca351d75d522baaa80f6731ea2b5ce72866014ca72bfcf5903c14954168f7c93c3e987fe794f400fb18dc5ba668c7868fa34938f7224b1131fd964d495110ad9103933f775a30ca8fb4e4f8295633a5241da2c1c6a292c4b347df5b191cf4994bf5f0ff687a3d72af7c1b35b0e7ed594ef305b540ad7fb2ed37ec2223929b54591164233092a324699935f67fdd2754fd6c38bd3d7b9b52d3ca67d3ae816b994e9b8a8ba9e3d63c0552e0d6b7f0065284e8b01bdc079b8cc3703f66de551542eeebd199b0104954e3d24a11b9d8b326a6b1075596e323b24e78d2b68b12cadb9ed68276b59200da11a3cebf13be066e79a106bed307de7e3fc597240f7bc2a119e0749252895a1ae0ab48ea01f8e7f5498643a93e2c688bc069d33e109e79f2096ccd235dc1576408338cb3e44f4d653bd457d3f86b3c935cfbc73a1c4d2573f1d83047d9efd7ba8067c2124749df3178ba912b4864ec5f8572a06e6d72c117674f640a1b6699995f41db3490d80a0325682f4e010f87422b72776d28b64ced293ab2b4047f2d7d8394c339d00090a1b085dd52096b3627ec125927d0676fde929b903d0d88f9129bf5f22706eee31fd93d28bf55842aca4df1e32be080086a1f8958b636c9eda45240fc1f1ecd79f979f588615a92af3959768330a783b78d43bf79c2cdd95babb2546afd37facd7f573e8bb6b36578e67c71c4c620a1199cc292909bd4eb5ab723a4f4cd37920866bc715264c17bba8e4037603d7bcab4e478a4baa006b5ccf258aa7810f25986250265f64dba7e310b862c19d0d6476c33334c97909b6a6d9291289fae2e5041db8cdfca0d79deb20b4253ca46eff70d3d3270da1475f724d1700e86a69d0b25328c3836ee954a82f13d500f4128b4a199d04e6a0996e2f8ad8454914d80cd1dcf70d96d3b467ff8cb1a7209f660c19468d8d038399e680ea5ec06d2463b937fe713a27a96e2eb8058633702dfa3faa43a95fa670d191464e49414253d2754e658ec3706f9f55ac89d9ee1f2cc2c821cacecac681057b7736fad2e6b56a612b9176a556b5ccc505d9b0a9045c27d547eca8325abbe6d8ab77685e565ff0cf704053006338acfa9ceaea5434b5a4d3d03e6c532df2cdbe0d5c89ea183f43f259aea5f1df2857370294b65fdd846adbfec79aedaa11ed9c8c633cd1107a32133b79ece584f0869b03906d160343b70a4f0bc04ed5ab9f5bdb5a6e8c3135770d15bc995b99450f73597b8e148529a3cbc9e0452bed36203f68eaf9ae3d038fd35b0e90e79549c52d02207db000c4e890cbbbdedd48ee35c60b6198d3782a6e6dad46950848f76dbf52ccce85fca81c069a9d07d751ac80c75d8cc9b1eff3dcd177e15149c13db41e8b5fef32719c557e2e15b7a569359194bc76184c9eaa6f2e0df3873588d4c10a5cf215011a3891dd9faa97bf7c74cf04baeeee73d0325a65ec546ab5b52e696db8fe878d9b383ca1ba9e1627f7d5b4c1465e8a377f8071de612b6443b8f1abe8cb07c04353597587b6112c5362b1d99eb2928bb887782ebfd4f765adaec2fc41dfac58738a3d28e4753b27c7491bbaf26ebbe521b91d7182a733c8993e40d6361af6f8e53eb4fe9c189915dc02e4a6c7130b089244f27ff2e8a9c1b997a70a09b395dbd28329d6c63436a19637ae49fe1811576435663eb960e256d7b592040d0590c7e33d8673eb34a680bc2bc152e3b6a48cc6bc7a17e9898b33f69a31a909be8e4a26b89465f209f0c64ba6e6ba5af494cf787ba27ebce64d2299c889ab3f64fc54725490974736b8c066040c5c13bbedbfd64cc30e2a035028cd20ff87759c26b5dbd75806f3c6a602cd8397b3b5102c0772b077ab8a27483e6a49d4187e4ffdfbc8077b5fa4fe61ac774b1e3f6ab76dac9d223e3c8ff1e45f5320fe050b30d3bfa6995a33821628e3f93518137540e3108cb0314b3bbf714edb60f279ca89872f3ff808db89d5579d7c9d17cd6f7858e70f2511bfbf781cdd2b621b90ef740ed4064788578ccf3cf62e0e800271316fa86b46d0cee7cc1373f2dabf23285ceb147476d26fcff82131e0e28034498762a806dcafb6231ece705f823bb0b13680a42c6db4bf41cbdc45802320758ab0d57a2e536b77052e520bb0e55b88af86d47c0383663f6c518cef454115ca581f37cf1ddb0db0bd0d38f6f57bbcc2b8abd6311bdfa7ee4b1c78d7e78fca12355f52dfc65c609b12cdd2ed7847cd2eeae6db02bdd76d295198ddbf866eb640a0646ca19ee0dd72ece297a99c5cd6aa0211c1ce02113b177c20d77e09c24cb1b1714a0d5f626e514b1a178d7723991cdc82f4f7030c8fc3e0c79a5f652c3e2baa383da5e0dbd73c2246307628f213db74864dde536fdaf89fc3c136531fa554777fa53b64cac535865536d5d977355277b5969ad0846fa0b967b3e65ac41df85c60c6b8f5d0e18d99e2a0929ecca0d055f83a25b172731ef64dc354e6764d4680984baf146d48db127827470161252de5b489a594ab3ea2b80c028c0156f9b098a58a7294dc2b7d7703e7a87164fd246d6808e8ffca3d7b422015ebeed2a4890120a8e9578e8f390c684bd10f7584232f38672349ab5fe834640743b4f7d5f2b7a916afdbc0bc4d450a696601d5c5f0220d593c761b7e16d438cd3a2984054c7e5266f779305c62934dfd473ce1a522ec958a7796887a4ce94bfadb292f38af90062f4b403c786c072e9ec463da5f635e60f3638de1bd3293192172c753e16125f4b5fd8a539a8345c5fcfae8d947b4b3bb5d1d5fea0e45eef6aa8fd4b855e8e06a6de97210f14faba8adfc45ef4bac22bffe4989236426a586d0ad161ee31f6c72b8bd61935554f9755540292098148b25aff4d04dd22cc5b8f55d3dee63f5cc97a915dc590596f14417004a1582096feb5cd1179e9b3b0f2ed8b3a0dad971b5967b8f4827bf190ac8c33f6e2304041848eafdba4a013f691a11f661dcc8e890a14c1ba582b46d72e7832f89beaccf2bd15e21e5b97db48a88d0763cb5163a4ffee65ac4940cbf4ff6504dba65119799d6dc66cb9ba1690ce1b442c52f70936dd5979061d5ff8e0e22daed48ef1e5ee284e85210c7f49893403025bca7a2a051e37b09d35ac9919b953914dd6c4e7acd267e942c2b11dd8c1ebbe4a0c6a27f0d1724e16549e04bb76c29b96634c7c3d4edf1a5708651068d54c8f8f99f300a633ac4b0f906f35a4054697f93569c2f88d42ba9e0a90871f04a5994aa29ee180be46048e734056d06715e6490fe6ba3814f1e658681bb34e6318dfb0b60e704e4ba2daa3e6e0bb11cd00c0567f457b62bdeab6fb4a5d1960e7f707795cfd0af45a4f36dc94a57c4d4649478d6ea0bd9299bc906e806f0d64b7e38557179e1d64cd09e081dd5e2af9b52c027abb06aaf05ea597d0fb16686a4603494e92faf12fdf8b2eec3c00a340879977572fabb1455566ee4573150f9ce2538374d6909bd62648176f9d1c3ba001ad1933369f8ea3d197faeaf78d6f943b171090aacf8e34337d11cbe9952ba9056dd2a73ebeb7375b24bb19b3902790d030d475fc00db2015d30caab3cfbf2f301416ecf95d68e12e887399603b7b036583ff4c4fdc3214b93c991c3afda482a0a9b5c8807708f382120b0814cfdc46362af8fcb0ec5fbe62952ad244fcd766248d6599708224088fc0593c117de270774dc1ad40a44e5c8d74b6da6ac9b1cafeff44982fe139b4312c7abffe20136a83dc83a9d700636918aa76292aad337dea46b26e561f7cab3e7a017b16ebd3897db0faf3e918b0b10bccf649cea513e4eac33e84a0bb9a8a42d4499f90e3f2829aeae66ab6b1657e88215b627ca16b643b0581338d62d3a480af79a00b5476d1f2e71338169512c5445bf54579753a0230f7bd42e6f0618f2e9d95e436abe7e29d32c60af44d91972bcdcec661a293093df5b0d0a956056895d49dc5b2b1da0645d795586736676245f4e86bc011917129c44778edf90500358e451304b9cea0b489a82306c5d62bcb04e6da64049657c46488a285fa00361f8258a8698d31556d99c16e50d940bf10a0022353122493e46a4c8a518ae4faab3d24225ec623e9244c370328619c2d77a16d6cfea7b170cc64377efadc9cb29cbc7a73346e32aa142872012ddd53ec77702a35f10c38055a06486508aa13a572afca1e2695b99354bf34d1833f08eae7d76d52b3a4f2072205e4f540f5ca4efb6d91e0e12808ec78d4010bff1507d9bd3388494ad7f49ef7888c63b477655b6c3eaa06e3c2dd486cc77f84fb57b8e0716cc4d9be9a31983f0e94ac711475d7f63576bfd1a8f4778decacc742a895eff61e23bc6fd7e16fd0f671d132142f9d56be1a2756e19031107992efecdf8d5b2f1fd66fa31b44d4d457f4ce98de461debdbf6c4bff4d8326f4748188dff0786457873269011a04033a54f3d352a5f3aedfa336d20946310128fb05782d0f318c40c0bb0f31751b88300676ce53344f4c6d71267f97a740a90006b59e46cd175d4b8bfc4e0deaebc49450e087136079c59f264973217e42b17d900305a13c0d397e291c62583d2895dc60e996bc51dd3dc77ad8003cc4d67b592352ae5292f8f2e22a7faa4f8b97746dc73dc50fa3cc866a19927ff5796f01bb061ef92de98d2769be0b7cf0c6d0aff483fa13c1345e8dc84e5b56fe42d5663422a342f2810802a5c13e08a5b80ace7186e2d910622064fe6fe6842266eddabb3a0a9ec13b9fb43d52d650a6b29bfc321a350c64781f20ea6175864f1e08743037e28a8045714d79232cdb9ab1c727bc239086a385669557950305034ab1c1b7d5bb1f7e4d54dd67a39048ac3af759d3ddf19b9235be8aae5fcca73f8bf1cd8d271a8a149fa7aaf73a0b06a18d36c0c8b61fe02edf1c5f93106bb5c71106700cc2b93140dba2087463ec1ac4bcfd773048dc576392095394899dc1fadeb6d5a1632bb03eb18792174c63284c216262a134e60ea1c5b454a0ecee1d0a623d60b85f3fba238e600724c37dcf0a69148a69f33197d422081396347538ad546c149c9a046d4e036a96b3189698ae4ec8498723620c5064bb80d745ee38351f85356450fd901fb8c08d2702b4cae5ce54206a55323ba4e6d81d83b4d6389f9c1568d5ee24bedae963c55d4c4097dad6db62095e43a59a2d910b36bdc03a8100fc3f9a98de59d642e2ad22a8c16067b2e8e2e27922f3a28d546a07b26bafdc41ac8ec17d6b58bc7f707ab0b739ccec24d675153534b665b747a36a8f1612790dcddd0e6e6a06dde95d08dae7e91ebdc09eb3ae27da4d066ccc48ffbac55e3ff6e414c4e36a2886004d17c4c54f204c44506cd2332c2048814cd3db06803150abeb5356c3e02f75c66c1e53802fe237e96a855c4ab6ebbf4e57e24b539ba55c316d1ab987f2e3dba9be4e1fc51539f0decfd2aca04c8d182586787cbd4cc249c3848f093ca2ea25b21b2146d68d44f4d5cb1a200c91270ac9ca9386f621c205a9f97b05ec221e19c9b8bfa154be4603bfb07675f690f79562da0578fe3b84020f63a615934ca0a318cb70447ed492d94a14be28addb2f7dee1872a67c591c0e7fd23e5ae3195ff7fd5be62efed3c8e98229dde5ee7dccea68dc02918b6d8f692842ed902097d3e7c1f4ee1196dd9e6d9b24809fdeadd4463cbc9da1d27eca4a4f1c0efb9007bed761dda128e60e538d0004459d143b4aaee5452a97d433a92d51385fd57ad006b7553d48caf2984b456e98469f5293374b4c6b1c361e06bfecd960022af3493d84571bcbb75be7a5a85270a7d76768dc70c8c1a57372d11e77f92dfe93f4647dc69457cea27216ee01928688af6a15c35e6d827c01e2c4e74f3959ff8d7881241ad82d2c858b9d852f9013dd4f70d2ed087b13fb5d98de45cab46a0dad37add213bcbbbebf75dfa6c31fcfd8e037d437e7d63233541b170e994cd8d9a010564cb8486e00d09e775f78fe64ba73ad52f1e6c07bc0022c268932bb0da0d09be3c6037595ea1b8c865dfce28613bdb31fd92d517828ed43e9957a28ab65483b8e06e7313176e8f322943cfb89bee648adfcfdf35deae81c6859e0cc8933af6f638ced9f5a483fbf09ec42773fd12d6e3d922c6d84dc746472e9d34d64017d46b6c0b28a171704ec14e61e71093a90c25fbe1696cc9732aac263b9517d364730d404903165dac17707a6ee7b9d0cee2584df5c8d5b73c2100bca7a276899c17f709ae11ed5f8c496a49e7566f523979fd56b20b104762d885cb308f1f4e08f6763b00d99a8cbb0870a60029b1fb2d2b618f8d92d6a3d2912bed6ff36fb07fa137560bdf2ef141a508afbc3ae2e92138d5e800b62c38365fd40ac3bebd4ea52f9d0aee7caa87ddc6e0648e8780ac1056bf8e9a9b04fca22dcfea7ee902b9be99a81aaa6b05eb8662eaa6e52fa9a3af289e297ecebaa399ae8ee86cadf8a0d8e9ee8a606800608e7ea344afaad38e301933c0e92031fc480a90f34f8990beb9da5db89aa6a916a7bd36f79892ba98a829eb2fa953aea72b123024347aa49aa29b068fd20a662e265ebab020da6c4b3818ada75aab3c98720494ac23be826a9984202513904c5125a0cc64515112646040e494c9b21818db344a5410259486e8d72266a825aad33aa919a29a79b2dea49ad038e22a6b1db0db7baa7a08269b0e9a00b7debad84ab7a563a0962a20bf68a452ade74c96bd3eacaa766a7a293a244842245b8d6230a1e524829458140e41cb686557010349c304b1aa91ad011a24b0f6a139e2be9bd252f68a0e29ace7fbeadebc7b94599abb02cbe9fb5046486296d50f829dda22a36ae80aded397ea38a02a76628e6aaca09cad7a722eae0117321a30e47d4b1e7f649004d72c30049022c0a4483aa6629d101e809994dc9c5b8d97f232f9ba892b294a9b28e57c29a02e298a8baa49bf2808dbe184336fddc66e9abfd6db93e9a7380b5276ff0a28ac0181b9b958508aa9a1aaa133176ace87a71c148e0ac911a29741c0d6a10e44a9c6e6450c0759c88328b20a5634124abfefe92ea984ae8ab2b6faaab41ba9763ee6dc726f1d88cd821a8988bacded1f9fcc911266b6a3ba9bac9a6aa5d6a886bee2065e0ab8eae0939e6eba0248abafb8f2ac27bf3079cb596c02a0a2ce98aee0a1076dc882d03f544bc2a40b944438b2a36ae59f85ae090449a45a78894e7e42efdba14aa3d58d7da3ac6d93a6917c6ab2bbce7a2a84a22ac12c52a9f9378acb7cb73d248b9459856fa3af25678660135c280080aa998785ef026a995781219e55932a580b161de5b280e126c1c54196f766c6b359aac678f8c939a2b1d3a9268baaa8f5a21ad60a88c9ae8f2ca9ae869a9a787b0aa939d6e699deaaa43eeaeea10e97ca44e5ceaa892b42be21aa832254522319a504268263ba0c09ad83a2898c19732a4dca1d3e04622cfc8958099d2a8100698b50bb067a57ea026141c3b9b45aa3989b6a632f9aa0a4a82e529a2102b362aea49e2dc26b48c8e52fecac743dfe9e0a2eae20f4ae569b4f279478a028114546014201520a68dc41202080c43d2d20aac0b9e19ab98cd2328dc1491999e29d2eba2a59aa6e1a2a58ad9ea04d512a9092741bdccf860b5a8cb35c22a7c6b657f18efaa4a01d816a6eba51482f79ad3c8e9019eb8156bd6928f70a42042d8cdd19c84b880e05260cac0b4846705070f0208b80cd190c8a00c97b0c4b88ecb6643847468188be25060a7aaf765a922c8d6aeadba5512480a682293a0539864aaeaabe8e2aa6d3e687c32e9acb69cd5636b4a4e9e88b0b8e27d9eb6ffae090104920cd4dcc485b8621022040101b49d982866566c2c182333c8ce36f59e7edeb8aa84aaaf25a838ba6bad78b95a408bfb2eeaa76a6608ccb6feac16a0e27caaa48e4e821af2b8ecbd09d2bd66a9e8869a16e2c4a8e9a672b2b528feca7bea0d7ee0c4e56602fbd35d245a6f8068862b184d6e8056e62091085e55648e78a4aa3ebb315bc4ba758630c8ba4aaaea997be236c67a84422a6f228aa7d992fa429a3a988c26fd72d0752a2973e2808a388ba8986a786b252a7eaa6be00e08c66045814f486a532bd785876053991a0f70a8e48434528c68eb721460f7812256d770c54aa7a2c69f6e5a166aae182a746a5289995086c672442aa746d6b96a6da47c5a7a21c37ae9a286fab9aa6b66ca8594227f66adda99dfaba9ea48a09a908450916300f14214a0089805d78116421644495cd1264509404786b06b2988b8a8ad8a80a9da9ecaa666d6e0bcfa7b658c56daabc1c8a3babbcde26fa562632c79c4646420e26bd8a7aa5142b1ba70d282a9deec8a6b3261098873c42ea6c7ec2e28290884687f24818b9afc9a8751420800195800c14418ba9a55005828943aa857712528228d8e60ea3a92889a2af2ac29aabea67b009861a2d9a8982e134a7de166eb1bc1aeabca2fb7fa9e8a2b04174c9ee86a1d5657da7a36f25761ea04410021037c012bace2060542888c1760481db893d7ad1310221802b1451de4
SerialNoSecretKey: 0 bytes |
ViewSecretKey: 0 bytes |
DetectorKey: 69 bytes | 0100000002265496603994736591ba8cd40bfe6a8825aa257facefb2a537f0a05fccd10b7b241e86a64e3eb6a27faf1a1760ac4ee774172245da1903be6a0b1a1f3f127bcd
==============
The SpendSecretKey
, SerialNoSecretKey
、ViewSecretKey
and DetectorKey
are the keys corresponding to the CryptoAddress
. All of them can be derived from Seed
.
It is IMPORTANT to note that the key "SpendSecretKey" is used to control the ownership of the assets (coins) on corresponding address,
it should be kept as secretly as the root seed, and shall not be disclosed to others. Otherwise the security of the asset will be seriously threatened.
Other keys are used for asset inspection or audit purposes. When leaked, they will damage privacy but will not endanger the security of assets.
The specific role of each concept is as follows:
RootSeeds
: Random data used to generate address keys pairsCryptoAddress
: Address to received coinsSpendSecretKey
: Secret key to sign transaction and must keep private.SerialNoSecretKey
: Secret key to generate a unique tag (for privacy property) of consumption for a coinViewSecretKey
: Secret key to decode the amount in coinsDetectorKey
: Secret key to help to detect coin ownership
Another point that must be mentioned is that the address keys generated by calling the crypto.GenerateCryptoKeysAndAddressBySeedBytes
method using one RootSeeds
are different.
If there is a need to regenerate the same address and keys, you can refer to the following code, although low-level cryptographic APIs are unlikely to be used directly in your applications.
package main
import (
"bytes"
"fmt"
"github.com/pqabelian/abelian-sdk-go-v2/abelian/crypto"
)
func main() {
seeds, err := crypto.GenerateSeed(crypto.CryptoSchemePQRingCTX, crypto.PrivacyLevelFullPrivacyRand)
if err != nil {
panic(fmt.Errorf("fail to generate crypto seed: %v", err))
}
serializedSeeds, err := seeds.Serialize()
if err != nil {
panic(fmt.Errorf("fail to serialized generated seed: %v", err))
}
cryptoKeysAndAddress, err := crypto.GenerateCryptoKeysAndAddressBySeedBytes(serializedSeeds)
if err != nil {
panic(fmt.Errorf("fail to generate address with root seed: %v", err))
}
// extract public rand from generated crypto address
publicRand, err := crypto.ExtractPublicRandFromCryptoAddress(cryptoKeysAndAddress.CryptoAddress)
if err != nil {
panic(fmt.Errorf("fail to extract public rand from crypto address: %v", err))
}
reGenCryptoKeysAndAddress, err := crypto.GenerateCryptoKeysAndAddressByRootSeedsFromPublicRand(serializedSeeds, publicRand)
if err != nil {
panic(fmt.Errorf("fail to generate crypto address: %v", err))
}
// compare with origin address
if !bytes.Equal(reGenCryptoKeysAndAddress.CryptoAddress.Data(), cryptoKeysAndAddress.CryptoAddress.Data()) {
panic(fmt.Errorf("fail to re-generate crypto address: un-matched crypto address"))
}
}
1.4 Txo and Txo Ring
The Abelian blockchain system utilizes the UTXO-based model, assigning a unique identifier, known as an outPoint
,
to each transaction output (TXO), which is composed of a transaction ID (txid) and an index number.
The mechanism to implementation privacy can be simply described as taking the coins generated within a certain period of time, sorting them according to specified rules, and dividing them into groups based on the sorting results, each group being called a ring.
Considering the concepts of outPoint and TXO, it is natural to introduce two concepts: outPointRing
and TXORing:
outPointRing
, contains mainly the outPoints that make up the corresponding ring, in addition to some metadataTXORing
, contains mainly the TXO that make up the specified ring, and also contains some metadata
2 Fetch Data from Blockchain
When scanning coins and submitting transactions using the Abelian SDK, it needs access to blockchain.
By default, the Abelian SDK fetch data on the chain through the official blockchain node called abec
, you can find more info in Abelian Foundation .
There is an example in the directory rpcclient to show fetch data from blockchain node. The connection information used in the example can be found in common.
The output example is as follows:
chain info: &abelian.ChainInfo{NumBlocks:300792, IsTestnet:false, Version:1000000, ProtocolVersion:70002, RelayFee:1e-06, NetID:0x0}
block hash is 00000000c19dad3e658788bba7ba1e3f335f6c361b64ced5cb7ca184330dccbc at height 0
block with id 00000000c19dad3e658788bba7ba1e3f335f6c361b64ced5cb7ca184330dccbc: &abelian.Block{Height:0, Confirmations:300793, Version:268435456, VersionHex:"10000000", Time:1650198200, Nonce:0xd84e61cd, Size:20855, FullSize:20823, Difficulty:1, BlockHash:"00000000c19dad3e658788bba7ba1e3f335f6c361b64ced5cb7ca184330dccbc", PrevBlockHash:"0000000000000000000000000000000000000000000000000000000000000000", NextBlockHash:"000000006cdb7f2586fb92c3d9cf322ae1bd010de794fa7279dc67449803f257", ContentHash:"f708bcec9c6feb5969004a6dcff3974bc72467a85aa786b34395f0cb5c3e7a07", MerkleRoot:"4e44bfa1a3a7cfdb2558105c21fa5226632e39c3f3a96f580e0da5615db05507", Bits:"1d017c38", SealHash:"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", Mixdigest:"0000000000000000000000000000000000000000000000000000000000000000", TxHashes:[]string{"19809396d07f240e97680b284db5e887428384f475a9956618088102ec14a0b1"}, RawTxs:[]*abelian.Tx(nil)}
tx with id 19809396d07f240e97680b284db5e887428384f475a9956618088102ec14a0b1: &abelian.Tx{Hex:"010000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000101000000fdee4fb2a377cd687d7d1787bbe20d027874b9c81db0df127c458b101485bf2f32c29165f03f2135cad0e74505d9210ab01776e3b9cafc04bd34096c28a55cb9388404082785f483efbe727e5e446cd222dbc6efbdd990e70f7cdd3130be0dc82cd161c48de4983723437d2df3c543708fe07c9dc282e0849cd45dac9066d584cdeb53ac4959a67b1a2e70fbb23b3c19a248f49de1196b8f9064f3887cda01b4fe056397481c4de8f00dc7542d0d16f116e5959190fa77e645bdce67a4969727a56ed302356526cdc15b35b1397976119163a2ef38dd6ebcfb92a9776c8e96e202f8744964301730bf6d3ad2420c56d8526a375417a7d7434e0ce0e93064732fe738b16d697d7e2f8cdf5eeaf17a937756c619553dfb54163c27119c45b5cff74daabded23df196afaf69fef296b1485135013e87195f09cd2505ec8d1bd811ca0c3bcbe1287bf767f77fcbd153fe71be1118c2ff718d2c0afa30add2e121fe170ca66cbba5e5e53aae489a34c87909e32103fc2f13ceadc14b599ec11695c1f14698c0adbbf16842861f855590668dabe09be337c0d3b0bfd929c078b6ecfb8f5cf07b75c709230b23fa3d8238d2cb1aef2190354f6ca801a83da44360155d25f9662863c2d309003035345bb9f28ca6262ce85868e1777520006c56f26dbf7d106c706c6306144119d171057ee7ebaea12a6cfc9ef33d9e53384587b375d9f9a96c179231cc489e1083cd4bcdb6a91cbd2a1bd8bc0d6be1d41375a47c8b0fb21320a90404d0803fd760f023c1566107e5a544f35497cdef31eb5fcde679def6f5d822945a7eb33f0480f4f5e6b6ea3d8bc5134fd812b67f8ca1983e8746df41cf2da6dc8a3d40fe3fd94f1dca69af462e78acbb183db2881f72c10501608587405e0c1c369af0d7e84e5d14f308f764c9eba0d0f7666428b1ca97ac76f788557cdb50f92b899a46785016d5df68c337eef64af88deba0914039ac8c083cea294d3591055117ca4f497bed51dc701200c351476cb1fd5330cccad75fe5c6cf40cef4afc0a95c6e79d4eae5b228035ca98757d255fcf773f763a69171ca7d97a7d614acbb8a2185fc25d807194d9b2fef79e62ceaab38e2b5a1ac6d5770311a3ee51b189a51f4dabc04e30d10d93108aff2d8042f53974a48f9a223a08746f0bb78ee3810f4e9cafcdf8ec131b044ae3e176e7fd782faa2d9ae44c7c223db0df4cb06a4fa30a230ff46e1ce76b296d20e73cbe6ab46dbb8bb4545da2e82507a8e99146006ec7e419840057421c076d70b947aad45ca934a9971eaeb74819f4046b9d09a7e721ed755caa9f26c58b393beec1648d604ba05bbd9e744f03072b5db788fb7df62523d260dfbb5be6dd330557f28bcbcb38e74b268f92a441eff8b8521a466e744145cb455a4116132d4ff4ab38f5a532f79a2e2a278e8c64303a12d2502f1026e8280bc9474d0c6d22907579db1d2819ceb88541b147fc3e9d133fbf99db0f4207dd6335f9abff3be175d80251d9134280e19443bd6a0f121399fc45be9096db86721fc2aa25ec446365cad061eb2772b2f20d19bce25447ea094ba691df00561117358bae77656253c515022dda508c5f98e05be4a70c14f59ac0ee942c54e9c3a656b7b0dac34291a91e704c52ffd67e6a0ac1e334c9b4e6e8b180ba528156d8bc0c935ac0306b60a065554fe2fae230b1c2275e43b99c35031aa5d00b948517a8da9dd44eac52025c7ceed370e6206be6021468539b3be430a886f51aad7d68987d5630f9213526647cbe40e44ed94c2e8947c5a09028118a2cd75da305e2788ebaf23200b705fb11d3498ff0bb7e39898eae272c07e433c42e1f7ad8358f6975a61933fadded5a1fc315dc9fa10ef118fa3e75840db6d175968397179f10466af32b3d3ad91f21d2b441d7287c12e75aca315191f056d5ce3abced587cd798942e2f3374f36ba635aeffddce4bfa2c18123bde50bc104ddabfe6d5ac3586f5c4f442e0a76ca84a4e47a6d5dcbcf2a6b53cec8264d788dfba694a47d569b995341cf944f53c909337bdb637738f3b70297eb4cbc66c0124fb148685bf2b699e5efea4aa2de6b2565f46969c0dfd6548d09168f31a36a9f76eb9ba30c3e35594a416b9d335bf3f907a9afb86c65ec8c2dac2e2da1980c1963984f5cafbc1837caccd4dd1861d0f2c3a108c2e0ac88f4d2ac7c7117084fbd7c7d1166953bfebfe8d32401140003c08ac8582475891c160abe33170fe78883c78a5b6618c6df290dae0463a066784e5b078da4b36878b7e0491bfbf37b0de5f1b3b3d837f433aefca646d71f7ff500051b05d59f366b1267312c748e65b21c12badf8657e4ccff084cb3ba33c66de9ad5b396c9079e0b9a071f0911839ea10aca7a996e022fb4b74b403e280976127c05828bbba5e8acf0aaf54bb8d4f9782ee4bca546db9ae92db82928b0d7d3c1e24cc478ceb05498e16a854410a10ade80d565b668a84535121c023edad1730660eacf0105dcffb897a2b53c715ee3ec816ef26be25d47eff9e1f901d26ca7e87185c3ca387efc7c91fc7cee56d39568542d0d483e32a3bbc22ae9f5e9b68bd4aecfa0071367fd3d9aae147513fa8cb8f2b3ec0344ae8988f6e3138c04ccd4c35790d48823fead259527a0de94bb1b3d3390cae45a758e35fe176cb397fd0a95ed178118a4b5dd2df760c7d7011d31b6c48c24e008dbb3c93f177a3234c3ae1ca28c5a4dc1d8622db086a29fe5032338d7672ef6b7427ffddaca2f48e07f97ab2f2af1efbcc07c8658a1b18194b1fa2a8f6794420cd0ea85fd2296ef9f6a5ed9dcd29b8e68e334dfcb6d95a2c54e0644c04a57c340e9c2eab3264ea7f91cf4327b3e33971634f0ef9a7cc0de2fa82a63c9d87739a938082ca1c70cd9078b1dd3dc520378a9960ca7f4b0142ea1dc5d8f7f20476bb0787952c6b020f8dd31480cbdbbb710693631f5e68d5004ee74a3cb6b434944fc45fa5804a4053ee77516136913039574ab09d0c845cd8109977aadba423d8118c037500be70b17e1511f51b136c8f5db5b1ee2e1e573853a803aa1eea605b3e45bb497a1cac0789c3ce024d0e88046121c45c50e42d77fbb4edd9115177844c7792d38459c553de5967593fc9bcae616b091069082559fa320784eec57865b38bbebf970ed5ec262713f7a9720a7a1dde1446c2755adbf4e1655db3a9636a408d208b1bae92187cd8d025d362b33107169a12548133dd5723d55368f0addcd359f960bbed25721bfd3df0c277c9a65a4522cb6c8326cf9019a72650d855fdb3a2c7a0c255b547404c01f92edc76c908a870ac3284f035ca1ebf6d9d532815bebceaafae9c4843eec242375b9f787ad1aafbe12e681cc5c63e14137f515b9e5b719d7ac6ef00a07bac79a41b21184ebe575968a80683e1b8d54583c25e59d69029c8f903cd1e9c2324fcf5094ec1d500c68b07837cd00ca37f9a28f56d9bc430923ae33fb57a4b2c45c444ecf6a9690441a16fe93c83302da382d587110dafba719d7006cedd01d253c5d49c0dfdfa126e14e1d24f0acaa1856cf6e393e8f69606a575b59575551ad8e3619f8a5dda563486c66fabef0aeb36a5768a3614724468f72ae8ceafffb72c518edc780626a6f1b916c83f48ac8cea629b1946fb203912442d2b13861b636026d7caa9c8d9a2b40f679fb1be0ea8578b136def667d273066a1cbeba638300369c91e41e90420a1eade6b63528ce5c49d88842395da7b57f4d1644a8159ae86c46350e60104df4571e5308f4703f3d2e338dc0a3e736b02305ae82d5c06f9abaf18cefed8d26e25a49574414c64713e601087bc11571ae85d723900cd1f6f6f682f69f6b63aa46ecdf6ef486b1100394f2bd71c7175eda92532229afdceca708cb6e2b1dfadb4f4a7b21752af5c8989b20d2e90aa67bb9c3a9c118d11172dd869da3418b77afd6514f1093801226cd7a2387146e81330f04335edcd4ae9102046b60010f4a7930cdce154ffaab9cfdbd9ec2fc406a82a52b3193e25a4de0f2abc5b83c76dff345c75bf82e277241d5721765c756fedb8814af2f548d3dff35989d048b27894d1d0eeeb930702468d9f5f4831c0b20c056aea2952d6a21cd3426dfe70ee48d9a939989585e65deda0bf089912dba761c0b296002728fcfba2fd3b28e0e67e0d2c5796fbc5ac65ab392bd914d723391b6c869401b676f569fa7e330cd2a96e23932cc379c04e06f7a5dbe9e9b4e28a9722d13c4ea29cc9150c1b30d08dccf2306d1d5dea0cae8a8a7a47d4ba9f20a4b32a1dd6b67dddcc5078a0977c39f78fd19c44e28fad02cd7d899a62822f69e4c164de93b7c84d1313401546713f6e103d2ff4d895add1be1c70575b5dd9a0c7fc6be2321cbd27281f01c209fd2d29bce53c788c21bc9df8077c3095d90ce443fc402367266bf4fca2e06e097249eb93237684d45b5e2cc8502ce5c36cf262970f35823941c9289bec5c022b5c2a725fc15c91ecee15b40cb3eda58dd813ad8f2899d11cccddd74f4b67f53c556fb411c493662098ded50b5bf8ecb7967712a01f1260d5f15d02f2e46355c52b15cf7860d1292974984e63078d217dbfa817ac7a5f66a352e480cc4e009793fb4e86fa084439a6869164f65d1876155384e1644c28f66366b978283d212be5436c04783822e129d107b3c8cf14596e8a8b636e40965ac4ac16c2a0c4fd2d2e86d99277d6139914d2ad4ba960720676c7bfe6d7fc2b3c225bc4f374359f4487f5d3d24b9129ccc2d277460526ff4b4f4c11d6c1cfa238edc0c7e5b4cc3ab14a2ba8719c624687a988313c222b2129caa826bd286d5cee9483ca8e2ef7a6207b7fe7b7e594a56479fdb95db8144adef3b7a5b7e27458cd18ad9d4906cbd2548e8343a2368a9c6d9465fcc6712ca2d931ce22e96273c98ffadd5264d9a89cc84ebbd33d41b2051426a29df0ea463e3d9b38be25fa7bd764d462ed7cc861076fb3952e9079468b8e6eca4276df1070fa99f89e26d22f13dfa0eb1cf4325aaa6f40c9a802e92f946a3acb65ba1665f6f9c2b51b25cf9a29ec7d05d3ff259058ff0d451a09283fe2c9ba9bdc855631f0c2fa4cc8765befb80372ed6d66061f723029b9ef455772c61a0947f131342fc81fa03dc1caddc7679d0fc5754be7f0c94b0715ae0bac6ed444b3ebb1d48317a7a189dba183ded3a8f23acbc1b62febb622b9ebf7c32738a4a748541c7844de5761491b4630dc79c030e1132a4db8d9a05d9a2ffc1151cb6a0a167de3e51db4e429a9e4f171bafeae850eed26a9f0ab60798b34e833337c5debf8cb2d1184d16f0f49511ad1ef21cee2ec753812d96cd30489c932eb02b86574dc9b27ec5640e61fca1ec520945c3d575928421414c56c329cdae3f3732e8a34b7082862297333a7165a1926f9e809f0ebcd5a3f4cf83c466db314f349d5e965d5de39972632d7bdbbff3a368057eb8c8ab697aa67d843c4a86437c1b35016deea132517d280bba3c26dab4fa5ef4655460237b4b6bb3b35c57d0b161ab79dd67919562121dc2c103b47b0f286aa1bc3cdccb0e11a7712438adb5637ebd797671bb6ac33aef52a300e3e94071a62fda773c8f585f3e947bb393365e3c7f58bc205b06e12b4a10e9615fafce38910c02894ea9b00aeab8d88afe5ab09636dc8916cdbd25b0e1210f139936d5af459535de95d32de1a4e52038b3b001e45f3824599131f83a697cd1a88ac18d1d60bdb44290849fb7b6545fbe9c346b30b17806c05d5871acfc334a3fa62b133d3fb2c6f619784ac6cd7aba8db93c6a7479100ab8050b2bdd4420041b894e069d0f74b86d95e88b13b6cb4e18d3b6f5eadba36cfc8cbfd89d287b2ec7a3a1a3ce767d0528f9026c1ccd7341b6ce3d76c3518b33be74098697de1b76d316fd2612aa30f18e77e12b13773e50cdbaa1118aa8cf1f6248517a755be9844617e52b659db16f7e881054f58f3dc65381754475eadb1edb88dfec39692f13300072ffdc0bea69e936ebbb7a4a61a8b71bd09240e9bd336d4013ec683b28241b732bd041be96da3929a9138d593f1cc9dc9a69ea4b2cb872f12f858d362e86926f6d69420a76791976a5fbe3ccdbc53221f1a7b7bacd0f4bca76d82f5fc08eb4d4da5c7c8061ab678c7793657014d20e4a8c1096bfa7957c2901cdcfcef1f71baf46a4cbf180130805f02588146eaef4903e6e2b6bca93bf7c03153426e73fd60cc1a2e65dcd3b1b6484b14a34096781659d2ae48a2784ad4d037123326baa9316efcf28081944461e2b552627f146cf584a8eeefc37a81d5e82a52f1918a29ee105605d9af6fbf93a48b758c1b692af135947088bd3f825a99768d32ff4fce3aa4dc47176f979c05d90c7e987c70099afa559b3ce56102db7886e6cb04d0da9d487c83139face1b7cfd9dc250ece082cea6de1d30249fcc8fa718026577a4f780c004c487dfa55579855164f54f47184256295bc0aa5381ad84244d6a423a13b8e0889da8f09269792c29232dcc05d7f62329a73ae0ba0d5dd94dae03068be42afe22d4ead9a2f2513d2b7075de63c65fd01a087cf671c8ec23eeaf2999517bda3fcebe97f68f0c9a67a77ad0631d0be89e35636f62b05b3b21b11e967d8d91d85dc69dbd23c55b041d6368c63afac62419e8a7735abc897f8e8478aec544e7e1f82e0182d06ec1a4031400a2a6118d64a194cb4362ea3da80f8091d6f763b6eaeb48da64d210f143d478d97a6cf0196484488984084b2656a5cf73a2a7c5053f41807f8d5265c3b0fa6573e8546374522d6991956837ac0f838ea273471761bfbedca1efd4c57d16714062d699ea7699a80806267330da140c894cf5e30723b0a049e21cc875a7c5a04316fc18dbce1ec47c6751f5633f94ebe3f297dcc638f61bfffd2ce9bdc4ed142be7a585aeb03a1301624ffcf2243d930515ccf4ff40e9a5a6c2554defc5c3f13febaa8c9b7da1c76d8ac2e92a7a904db13141069617ec2b3563dba58d787e22fea1ea2d0499396e040a8cc120ff1c5e6a07dec15324031b783332543a1faf457e1464de38996ef9fa240c4bc531d227faadbb91593478bfbd950e2215c4041b237fbb683152bf84e944d7f4bab168075b409525b94a14f3f692b6dcb467393e80fb499fa6229ebfa98b690e4d5dc18d4fc9861b39f5a072e7c2b55db3687df372ed33f25bd4438f57819b2eb3d25474ee317484b5613d7520e27c4e2e7cffd3df7f1d889eba7c9f16e0b5537fc5d22da419d1d6f5196949360c435f1702fb44b80642747129d01c6d04adcc3cadc90bb65dc790ea763b3dac2f78c8dd35f01b4d289a93c98ab2bf35dc04dfd8a2891d768c7e5adeee769ef9b0037eb120d2dc0045084e23c71a75b69e99d935f515dffb839e608215dac39b29c34eb6dddb46800540bee13b0c90eea5aba599a436d8c62491cc856ca3f95c53b9768320a516fa290610a52adda3b6352502ac0fe43d0ece3169c10b5b49525c42120d637ad4318526d242a74288e023183c31edecc59f3cc84adf0d51e39ee5611ab378f4b75f754fe9c232176f775f1c1f6ded5d07f1cdf1b3e8efa515d4cc0b7f9c1c8e09ff403a3e7fa8281cbc560b4a181aa5d8f832fd68501ea7c55f7bc952c41a6c84621bc1bd874b7431bdcd1ee4f352d563731456a39f33b7f7eae13a04261d41def68b0b9929cf0cee6334b130bd2afab4c699eb63a1355d832f9f9b6a7de42b526d7a86d73c9f81baca751acb717ed388231306f68ec281cf9b7c68236a2b4d9a198a245356c94f801027a509f9ff12f81d476c2b435f7ed4a941d72a83842535fe47b97fffa55f4546f67e780630d8719eab784ea9446b32403244c8d0cdda410066e7c916af66504e78a6fce24917db733ebcc9b74dd23dddd74fbd65c0e113e26660672667386322eed1887fa0f5a356255ae8808873cec1acc66e4e13d6cbabeb3c193240ff61dc2e99efcfae8cb43586602c42179c93b394466234a15336c4461e483d9298cda1153d6f6ac98f9ed3edd77ed470cc2eccd4b238f6cebfe30265922e81c32e1107d94e43da235962626573fd1b6f67386800332989c4d0a0b41254176a91997d8e0caf94d458476e22bf00f9ba0b94a4dd4f847e602ce3c9adbcc1a605aaddf942d4f1bf66ce54ca8ac7983be60d71a717a643436a2a96e281a4f3a592112945618cee2ef48dbac4ca81f068da301eb9da2bc8aaab63d059e588744058ad55b6ec2df186f461147092f9a83543d32d215d8cdaf7d834088938b7c79a20d92cb4c722310391b24921e4b4e4d3c70fae74705fdf85f1f9dab86114d9302c7beabc0813b68b6963cfc3c5f58a3c802eaaa68abd3f7fce8901aa9c92a1bb39d97c8282c4fc5b347f78de19a94f44806b7885a52f183b02d10df5b21e5272023f3332c2d7ff5efbbcd9d8746c607d1703d20cf1e891defef384dea62c320fc99f0e1b20223f00588443c3cb46c015d237da032a539d1e682466a2efabb1e7e057c18193514c4268b68f12187b81cd696451021d442a60257ecdc190fc0a2592204b9a600f6717d69b7e92e8b4abe157e85669457acde9591bc54fd3c5ae77a3db155fbc62c37a473f20359648f497485ad815b1c66b2969eeca631a42a64feab1b206bbcb143fe1fd081a6655826da17445c13231f868c17b8305e2c4a43dc3e711ad0747536d67d8dff51ec36f1900df54c2f2073cc535c78911f6a126a36d2ce303ee4ac92f8c87c792cfe4ed5612d7364a895826a81dac2f0829b2b281a13cbf3f2985cb9e700608c91114f0a2f1be7442a3b9090cd8a2e3c5be0c5ca8233820b182023e1031eb098ce3631b5f94435a63228162349a07a9792a97586872ea5f76a470182d8efe69477581a0ae09f0c0364c9e9e7eba9e6178526f0e05082d773f1daddea7b32216b083073a33c6ac675ed1b566b4380d0d48bbad3df03eb1d011e4e4c286319f7df15ed2299e71363ba540bff37ba059e5f5d2f23b1927a004a6ef04572cf4ece5601f00fc6654f6dc61b56a7d21e9714f61942cd770f78ecaf1231f5eedc8ed1bad93e60a16786848faf89bca93e7308002e48fee867a8d7983cefa7c23909210ceed76bfbe56339107800380cdcb3bff8c5b9234b1febfd51c7d6ea710e9e9c11b8088c581c0ba57968dfc6dc8cc483fb58382c93a617bfad1214f3b136f3b2844770d166b4ef7d0a717bc3235255e9cded0442db3259323b1e0231c5d4a85434717316d7afe3150d814c58d769a0fdcb15741fb669952639afe81da4bb76d3063315921ffb7ec96b23269ae067f9596d38d4a6c60aad79539b8e06f2ec3a0c545619ed7dfb0cf50c90ebc8d8297bcc1acd441cd612d69175e9c12deae38369a1de812ea51b7fa8b5cf68796f32328a16304817a41a3cb7564fab487f50128fe4703574a2bd2ba55326f6812dbaefdf76088f4709eae24aa09e445ff41d265bb57a7d409eb7d3c7bea8d57e3f3c2435e45b2c087bba4b785d326e8faf1266c3b12ffc3dec490cb1b92a721e00faa441ac33be07ceab64621cde6048be3044041054e6de8ef3153b7a40f3848afb69edc43cf5f5eab743c13f0e405b1d34c12aad365b9decfe1cd023ff96e38d3dbab87f585efc342776a799fea05e57c0690b2283eab285f72e4bf2797a96fc06e7fbb4467b3dc13ee18d94e8c3ce2646a2ce809bbb23ee060aa92d5e9d35f6c3364bdb13a378cf2e899b1d2f5b0a076fda49737fd6d7b74ddb54d9c107c8a46d4c6eb3ee5b4d2cf3107be86820e0488e4ab3caf632c8017b13c1ffe1e451851214eb1b3232a127e5ac4ccbf4762faea0158a2dd99e76afcf12fef537e69a71e30f563ffc03398590c1acd9cdacb8e27e6506384818dba3070d10e219ccb27eee6c70428068927a4ec082ab5d6c73515a0ce39ad051515780bd4593b6f01ce7d76c0eaff9ef1672589a2c7ec3d7c9b1f85bc5c7255d0acbf2f8d9f1711930272c880fcbfab7141be2dd3fc838765489c6f600a72853e9e0e0a8c610b57a40c660095f577d32b88435ce433f55028fc1a1238277f77f5c1abd853e460e79e6b23539482d1f898a52ad953ec46fd5ae13b2fd881c3cf3f1732cf96fb019066827cad231512a86dc9327c57821f95d3276a65c31f01e7ace14f26f99213570f0f46f36aa93ca6020faa3a7c6512c445aa94bbeab2b93c4398874fd84acaa8bd0d0d69dccd17d74b698312228badb990ee5812a7c057568cb7c8ed0eb61e81fb7f68b16ca0ed775888743b8682d2c23981d7dd23df6f4b06e111e84c6c9701c6b1306faf5073893cf0bf4cb97b3a9965d3779de20c2b78c662f8d6e8e8f15fafaf0c1a597029efdaad6e8c753d1de0734c4f272b91921e2d93f5d936cb84ead9a6d74279928b7d46fd9351267b338744a39e290f61a4a8eae2a498a0a0a5eb8189ba8fbe1e8c8f8d83d2bc94016515731f0ada75313278a7b348c59eb4ca4a04d573376153d819c5c029550ec61d1383ab7926d2b79168abe7f578261f4efcf1ff3e286b586d1c218e798657f5df7849886fc18c5f6700564d516c62318125bcbf02045a30f768e5fead7ec9daefac7711420362c00b9f71b8dfed6f6d70bf7a61562d12d4b7ee844be7b9fa83fcb4a22a1700f07f33122078846d2828e93bb9dffaa58c0dbcdf5ffce202defb9a7d0c90e9227c0f34b919a029155d4eea7a5ccd217792bf2a87a7b25a197c272f06e46a26277d17d00efcbb2814d1d007c40c25bf0ef1847dea413cabcddd36ac43ce17bc801bf8381829d838145fd1e8bf6ff3388c7af25d380bea8654c2d1b66de98b771d4197ff5f9d9d65e98be21fc5a31e32758106dc980c056395f3c1b357ef09d7a8036dd8e0902c5454c558dd6f4f2c9962765285d6fd0699c0f3074a8eda7ae23e0e8c55f2c35cbfa2de49f9ff71e96f7b630be9649959851dc26c40b6d0a1739c2bf138a2638faf66aeb3e32d1f161652d0558d069928a6d26cf3fabc49b8ce1f7b697046db0bf7a828dd4e17ee14922e262847340b36e8c88163352fae66ae84249738d2be2a7ff1a8fb7c4c36c418bea4428d8a802ffdb53dd0b4a8a1095f6e7e17a9e5dd2c962656ea374fb9dbeffe4bdbb126ec110739dfffb295df7ef003a446a2988d34a27bcafe89523a1cbfcc5c74528b2173ee03a79c9127b45674efe4648de6393c9a51cb8e498b107e3bb7f909b1f202b21185db4bc323d821e7cc6a2b7525cad923bef16e9e3c20e593f97eb3d08e4e125c547a97cb1ba6f8e95eaf8b52c7d103306d19193f4d84099ecb47a76fd3c2335b2c15e974713a5fe0ea5e83bc3433b9741552f179a23651e21d0cda8891efc8226780348eddaec8ba4b7b55bee42b7a0f823b3e65a885b5a33813683ef1a1583eb287a8ee5aa263a5b3d04c038303c074c9b3f28e99ac15684aecd05e6c2ea57725fcc56e71513f1af939f214f4488b54d70ccdb003dd743e5cf6aa7b22a438e84f1c74f4d3030d83bea3d10aef72998bc6f945bc5b8437f3cf3e8b24875d62ee24faca84af33d134c408ad39b18dbfc8a29e1cd3639ef58417829f145c670cb0e8ce686bda7442824b69eba61a57072102d1428e3308aba1766470deab8ba588ee3f9ebe2222b82c01d5be9dc69da07efa17cd51353ecf2c105a7f8cdb799313d40eebffb8a1b54e69d1c7584b8d1d64d18289afdc94cb0ad27e2089be565208f4552f8e9446d55cfdbf1db1cb51cb4f30014dfcdfb49c4a79613cbb773bff1d50fcdbfe457c4f762208f5e1ef04e7b2ba5bc14530537a7c0de359d91d43107ac4a7db458628140cb44959841f2812825d78d0e6a2bad121ad43e714f277806f01f6d19e6a69163ea66584d4a448bee885f5f23ecfba00610463a2fdc9fdf44a2646631660756c2d5df9c3cdbdf9ff59d7538c1878009c7fbf122f4b90694e64636a9e817ebf244b521181d3c2fab488adbcc6a9c724f6d080cb3054fd2383257f3d498b181c6842f48fc8fb3787edad47437dfd2658908c7219fc6bace182a55cb2c5db5b071c673fbf6d36b751b644f70275e2fa1a626f75c308c193aa21d3c942c8897b64a3210c5e3a571d637a39762ee45aa30c4be272f0c8c658528e3b8959964d282f4d88db6c3a4cad24031f20bf791e9f22de60d403fc7760bab43c86d682e2dc77c15db0e16868df4db742efe156a857a62cc754a415e05e70e73872df1157ebc6a3ab7b517441ffb8a90e1fedf245ee5aa38fb2f98f2290bf892bf36d4df20102c5d9225362f7c823a6a9667fa4b37bf1e7977b71d3dfd9d022b2e8b6a359203f0f73138f17f6693c059e0fb1533ce75cd91ea128ca5efbfa19ec4feca403627350f4d9102dc394b69c483cec08df9fbb6049b3c1f344213b7b913aab8de84a7f23a0107b68791aaef33d17dbaf261385713a57cc4eaa3026332df5d157d4fd36cd649e6dfefad2c31f367734125c9f87e24567dc7944b765bb31445832b1538d975fa0587bb135c8e544843d60c4ac9045632c14b906ba9dc01d4fc5a03355199709d794b5042eedb3a2b493f3c671a7ad3600ec0f762acdb5e08f8fd45eede848900763b5842764d423a753ed05eca2ce061c5021c2c85b76e499c6f59456e333c0af9bfb05afe1f78296d6538c788d47b5574f2fcdeee278e27fd2cfec13d59ab7380d833ac996f838791aa3d55e570cf282d7f0290cfe644deab47a663bdf30a0801caeead23a527b12bc82b3d020179777505064ce1f8cf254954c8cf176a6ac7d4222a053d9b625ac9a4148a4818518a83fc6bec1506f9e9c06fb045936943ba9fda8d7f824d79483d8203c078e370ae73e57afe82bd9d9b649edc7d4152c45f8c6d32ff16807098e7de10285f31a094774456a8d308a8128158c4d87779f7889965a20ac1a6568b8b23aae48cfeccdc4ddcc2324dbf164ae97f2636a2108d4f35230754079288e38b5091a97fd885b4e9a69e922b4d5ff1c2e0c455e2b894e10a2a862a1732ad92dae530548811eea442696f0f013284ded348ef4798938bd5317d91af25418ae17311998d89825d22b475d806e7b4ff31851c92f522f2a242d31650de36d1a200e6cca5d798c11c2eae2087d496e104f6a65f4d6736dd7176bdbd963438ead4ead2e503b4676dcd318bada72f29ff32a979c7647cf0d14562b85c522923c3407dbff3cbc874c569539b1332c92e9af9b96e9f4b252806f36bb9a8d4e42505d332d5a0f7952ec61367c3d9e202ec3b84a4dc01e4f5b5269eeebbc13007f7722cdce2ac2580cf8bdd1debe3ca639ae765e6fb3f55049c2ceb9663a3179c2078596b1bd2f3d71f27b1c46bc52e634afb55b921534efaac0972cb475bb7b65331589c03ba90252565fc4a784b513700d91a94c81e4c8ab8e86920832e24331f84dd3ccdd8729a0b1701eb997dd6e9dbf3033fa2d4f9b9d90f5f6199cd01fd20e066764e4c68aa208c8feb74f6a84f478ff577edb0bf1cfce817aaec0f678e2b5b46738f3537214fcf80d0446df7ff2cd34074cb0705ab673f3db5bcbfd33510832699e5f0f07f384d2b70ea10c0a34b26f55898df03af5dcb3f4da0e86f9f55caf1e0d49951c8e9454092a81f3c54c6e0315d7617ff7e8f40a4ec33c92c00a45819317445a01eb30c83a29be0010188ed91c1708c17f1accc170f02da70158cb83fd2b24d49c87d60c5e8371b9ca9f0fdc5e84e661df078c0c27de01a10e5e5617d8d3ba06b0ae3b42ab32f3a4e07637a7f902d74d75781b880280016ccb8247f5ff94777aa86ff34345e1c79c12faeb36550989b4024293b3482fbefb182df598035af3e350224a30ca0d4d0acfb02117062fa6d631be72098d847ece068bf31d6017fd7ee60eebc72934b67c0abeb3df0bb9b7ffc529a3d4beca036b5e4f111581f98ea29da8b073f448df00100c6201a27aa4195261fd4b94ce95ddccf5a4333e9770f9f2844ef0182714fcffde207a5af70d9ff7483d0887f3b4de0f5e9a7c0a9d42c643a40701c459f4364a76f08eb61a2d983ff380dcd612483bf28375594e6f6cff597d2afff315fa49f0c0836b3efdb48f3f9d0a6f013ef827d3085e0d6c48978ac4b3fac8fb6d5a38d60bc2c5e739a57b0405b48e8d5e280e46e9de917331f892e06d62d1d20683020e147a81080aa1c345ebc7f205fd3af631c4f3871c4d480c8ffcda14faf06f91fa9a9c7f776d7afaa0e9232031f6ff121c863eecbd04a8bb10b05910ffbfc5ad86f995f8f7dafc2a15be07663b7c4d800e0ca3753ae43b85043f9758dfe11cfec57ec7b44db1fb0f81cf24c9d80dd6ac07976f43fca188773e9f5ffcebe377d8188a09136207dc6553f70c5ee8aef3e0f6a92fcf6ce518f463b4242e01f4f40ef4f2da133df96d11736e395df13c2b09a3cefeffbffed38bca170616bae6203230fe2ffb8b526bb8fc2b9a1d7af4dc006a3265e09508f2b1fdb6537992f348fc3d4deac0096de8890c3607fbf26abeb1153e0d2f25f33907f2022f2f1a6392fc0fa592f334437ef761a4acd7262bf165aac963e4def9bc9a7741179400e1e4dff5acb90abe01ba4f6536064368f553ec2107fd471b774804f054fd7dba81ddfc07db606a6475fd102e1f333d9d00f669aa15d2a303dc3a33b3545bf4397107eedae3fa44ae4e0fec5b06249710fdc95b00de944e06129bf6ce9f68dd73a2fd1212f5377a04f84dee5d2af595fa05b5b5dde459f75df819d6251fff5840bbe10e4c0599ab3b88bffffa5000e52951020126a19105fd2906494494f5f353f29933f5a5fbdff45123831f6e5ff76ccf2b935acdf59fff6b73d9eafe6c69ef88cec90b662d2d04fd77fc5dc270d40cfc0452af7db5c600f72c7479a24d80f70ee9f3b3fed5024bc245e58495f94311fff78a71f36875217f5cf8f43a54bfc59e8cf17390c0f006b8fa090f1de6006907cc8859fb8eb0f9519002779cb20f126e25854547035db83329161af7dd28037eb0ab079cefaec8879cf258d65601a4a6f4742ed8f5a4e9f06df0bf9fd6d2f87ab893e5cf65fb7725d2f0605df637ad2389404cfb3e0378c8759b0a9000d70cd2ee0b0d475e538342f3e79473a55f0ff5a30aec48bf9f0cc5b3cdef1faf0d751ea77b28450bc3821fd892a30ff658dd00bfb806866ae123ca1ff69d69a6645ba6fafea6ac0294cf03f044512454b3f4ec1ebfc9a4f8f6a925c93970fe0e74c89004f0dcf190187543c9310d4fcad84d912af02850903d41460277f396796f45022dbeaca9d354fadaef703edd0308c0aa1b73ced8f4db5bc7797b88048fafd246cbe5011f571f9a544bff0c89555a64d3f93dcee52d0fea0df611df1cbef5fe6527ba8a5b950190022c70f33002778170b25a310bb218a1696e2104bceee34dae5707c4db487756bf0e440640ec6cb80a372ec6e1c2b00f94e41e8b2e9a04ff6bc881b03a07651a3482eaadfc82535a28e11002531cfbf0c5a1003ff8d6e5b709f394d8a86945ef0a2478c04904d809961b420d38f40ed31fce0d643709419aa4ebb70df583566195921af0a97176ad47a4f8382647d121f1081e0abce8ebb30458ec9dedeb5cf957299e4a6714f26cca068bfd4b01461f47dd02ee010a93ca4ef3810aac6e546428970b16dc032de350fe8237eb92270bf8acaa06e06b6b0e656e28c82440f613c55b23ae4204ec9967aef21c08664a73fa3c370d5149f1a6bd8c00e559f34879330f52e979ac3893f9c2ee4be06fdbff348c65b0df6c05dc5fbc5a37e2f9d28a6b98e0350ff0b39b01f220045c31673917e5fb5e432b1319c80e421ba1b83fab0ff427147e8d37fb0b8c9b8dbd1f02bcf97054f5ae09673a832a7309f327b8d480a1a3f7cd8ebd78e388099e59ccfd9ffa0ecb5bcf10f4bd0021fad6811c44fc268d0fa969d20cf4f49098a4dd0ec062496f3184fbdf278050568f01ffeb9e3a958c057f0f978496eafd2c8075679eb605f982d8f88d74f269efd1bcbc6b09c5e4cb7e59af07b494a8b039e308f2be42670e440eafde5c99f126085fc1f8ebde4a01e64f91ff60540dd809510768bafa818b50248fd7fa965a6ecb0a6f0f76d05ce3fd56f4c9ef276da75efd35ff8d9d14490271f5435bdd3b0afb37f6fa9897029a81e4ebbc2f03829425dd7474f14035b8e555230081a7b070df21fedb775c6cc4a50d8e535d15dd80f9a0b9fd99a6c5fbfaa01fa4a3fefff3cd0595cc450a12175451df1cfef508c30750c1000517f9973e8bf0fdef21906111fab0313897355cf664f520c42ecc01dd220366f7c90776cf678fa9c3fac8cf4dacd632f9c7c67b20460708ed5e866c1d720d79129eb8fc5ffe3f1f4351d366f79b3fe9ae3b420f0ce863a49a71fab64fbada0955f1f9ccda35b71a097ed71a2e67cb0abe0fa138725d047f438e1764bcf3493e86912f4efadbf5e422c190fdc3747153b55a051896857e908cf35b22d3d4dd42ff8e2e5b96ee1004bd014aeec4baffed20ae17b51e01659332b2cc0e0a9b66a5d50f620a2d783a22b7a301ff84e4972690f8ac05441713bc07f242fcbcc5ddf9e3080de00d120990260422d8ed0a7a8ed132e3bb06303f788ff80b09b5fc027b0f37f9b87fecebb723030027126e00f3f60b8e58a95ee20ce12259c851ec099802eafe42d8068c6f340e58a1f1d10b5b7dd52d0c043c2e7ac2e1004aacf6b03bc4f02a82fdd1974b0a791bea9a96b20e2e43df71ff1c0e3ba25708853f02d6e5161f8d73fbbd69057c8a7ef3ab33b56408c70249e3e8fd2d60ffe0e406e08066fa17e5ceb408090d00e212f8e80d0700f622b67a670f5040606c69ee0a74bd0b6286680e4ea099cfd4eef4ff40ccf0299b03c844c060a17cf0c0a8cc8765720f776f9ccbe575fd35054a1efbb2f8c3229092e029f3937ecfecb409fafe08632873a5f81d2f7b13de9ffb3d74b73e151bf1a808332c2b05fde5945dbee408f39519c267a682f0f8eb9ddade9f0f354e6e655ffc09c8dd68669ebf0733f0ae1df29cf968743e38f1f30ae9651fdbe30002f1a0ebb7b9c703af591d76aa8ef0baf227f7e7d100a9071aee533af8f2e4c78cb23a0a53e99067ed4efcae1a16f6cc050710ac751bea7ff24d0ee235675d0caf11a5f28dea08bf1f62a25cc0f365489feb85b9f6336d2a925f89096849a90f8ae8fa4b7bbbc160cb076fe12dbe5663050cfcc70c5a49f9a2d3099a7c81f18c77ef994cb10d3a8313e530ab0794d7eb4317700aabcba708d6b306ca82fe0585700afe35ae7cea860c304fe5c7a8d2fa661b3c1ff3c0fad632fbb00c97054be17b85e8b4fa5dca5b7394ce02dca4b66010c10b74fee1cc071df2cc0128d6cb7af0454197e2498301670c4d89aa68f30b8a231c3ce00a0af080fb5c9c069cca595d6a85f613fa1213e3d804843d83ebee63064508227bcd1a0408c0a15c6648050d69b567ad18f33daeeac91bbaf944002b02350507e07828c872700938642fde80ba0c8f2678a2af1ffefa628d38692c0b6dc2a9196738f180388116e1b7f355429d8713a3ff059db0965b75f5cd2d0a0c8e97ff169f44d9c86ff58a43a3d94327095f7eb52eeb030a21cc2b0ea946064e052da6b1e30c768e338a72cd0348f6ed373ca10cb198baef794ef976b0868a790ef1fc4956975a7006259dbe5b4084f1b6b534526e230365fc8ecc490b0dba95ff4bedd901a4450eb94f3e0a40aa6a30a4ce045ed43337e31f088cf584673bbd020e76d86abbaf0b2881825d4e38fb2e55d6dca4b4fa30ea437c0edc03803ede8fe052f54e722418462703dfb5d7cc56090af64117425860fc0d26080998bc0d228709a9a8b207703a2d71b8ff02a3465370a950f1a5a165d7deac03305a99bfe898f8c7935c73db90f590ec3cbf176404ca7da6070fab06ee81e004175302f25a0ae195b8fbc17188a3ec620499ab29581bfa0aceee1304aa940b8a1ed2a71e48fe2c6625df6fc3f9b5113c29f21207c6d772b0c71cf901b34965bb18fca5b3f248194705e5e545feb1eb0d3564e8e8fbdf05071ba1cd33e30728d2dcd0bc840b22bb8899b563090d05b756d7d7faca6eff46eecdf67b817eb82813fc61b3815d738efb77899ba9a681fef8127b2f08c4fe2300502eae3d01076847617f36f6507125ecc22a0cf1c7d5671e2a058342cb0da67e06d841348126ec041103f3bbf53b08bdfc9e4c6f4f0cf64cf7aa0957f7b97ae4fe76cf0fd582d2c370bd0aa908762ab60af9fc9b2c39e2eb0b8a6c0b87a5c200cefaa70a6b4f01ac35bd6fa9a30c8ef81f9d90550117cdd0161466fd5c04cd8e7756fe61a16e22b822f76980d983cb1ef5280064be30e7fca6aca4c3c92c0c518b0d240de3fa16c9819dce64f20642b90aad9700ab2d660031b6fd70a99fd1c30a04f83c11a4f4bef929e3cd2ce7340649a8434d9745f6e4fdccaf9999fd4f8b2af5b08ef2e41a233c4999f9608fa2c6b5d1089823a9ad416bf50a83607ff537f7847b89114239023b3442b08ee0f7473d842ebe15045f3f4e22775704aea2ab4a2780ff245665c44744002cd475c203b90ddf3a9f8e72ac04ad23bc3aac45f2d31cbcd14137f7c128f30fde590fc5c7304c6581084ce1e5877fab08d100a9b420770155f067dd076a06773be729fd56030aa738a872bb087aecb7eafe420f4ead78bf15b4fa639ddfc012dff96e1388f60dca0e3b3a09e72f7ef308e8b85c683708bf5232acc731f82095fd6674ce0cd1b887f18b93fbbf5b2fa4f4f00fccdb5c7dca52070337b9e834da0261953212faaefad916d1992ec1f96206a2bf9874079a4447810658040c8f9dede733069b61e88be1eff5d46b0231db650f3696aa01249a09386598157e6ff44d4759bb013e0110b306b2a6a5f8f48dc39c28250bd392cf2c040600dbdb7fd992a70ca4d5d36a32a30217e49a2d488f0bee8382299968f03efda2eb45e909d969f2a77ae9f23d40a1c56a37f3f7dce299367008f4e431064ea1f3c8663ab4fc80f90a419f9dde5901185f4cd475be0ac1166babc54df453dd0e495938fc28806ff1174d09655e0363453f027aea50a92842f835d288a1b3e3f8caee74d09cb5fca4a9ac2e4a9f098c0d7f4ce417f052b21b28a93a08bc472a366b5006133ef49c3e68f1d9a7e3f2f98ef66de8322a078806bf4c876e789d09dfaabab2ad14fc4f3402a7edb9f28f4aef6c214ef921611cf1937404abb9767bf99df498796797a0dd0be05f741584da0af28e04f252fc0cb68e3f39ef40018a46a87ceccff2831d576f48c0f8ad2c83fc652bf5bcae98b8d8120a0dc8c5697632029e863f3a13faf4cd47ad559ee8f75b1b6cf51096f4259e78798914f14d9fab9fc9ed0090fd430cc86eff1037c909f2920637d4197f68edfc28f12b0c43d107a86093e79386033810e9a4129509e1f8100f73a3051cbbb9aa6a1e06afdd437fed1a0782b8e73db645f26fb340d56d960c7105c028fde6061fc991cc5bae0920b38c8c105bf232cbf4a445e1fe167cc71e10d40103841e271420fa20bca5b13a850116ab77a5181e0ac13fc3acd988f842d859102d7f0d04620dc43a56074d36bc50c256f78f56c4f0c27403379c1774a50e0ca591c447732a0eb764763a5175088e51801a7ffcf8d18b0c5d574d0d4f68f8a22aa70173eb9fbc26e10c79f46d53ea5502eb22bede678407522db88714ff0be7c1e4be8f41f337ede1bcfc2cf8302e77fdf94efc80a749b5944c0404347303b2acf739541d173050086432bc73269c0287a3ce546728f3c100a09dde4d0a51e16c98319ffa5b01f35b8dccf542728d4bceb4f51e1a3a73067904478a13a958b2049683a3cca08ff742f49fbb38c5080d6f28fd3f1af7cd57d7bd78d7fbb891b4738240fccb4a4cd440c40dcc6c1c7a54630409273ea8a1edf426ad0d8f861c084bc38d52088d028a9891d884e7f82d6899976202f758710ab26f6e077e50e76472160fe989eed28edc06d59861a888e2f3ccb7f2e58706015614282b2d9a04617905744825fe8fb7a7beeb3807c17f1a195c0b04ff137c9064f0f58b9f3cf4131a025a8c7ceb6c37f5c475d886cb67fdec14f568ab5ff0b52becffb87afd467785226d7af5f73678394edd00bdf02df267e40bfcd21d216853064e60b043c65c0b6e552cb62d56f5314af34cc2c30f38c11e032b68f319a4beb4a79afcf459846f6863056c68946a21a3f6d657c2183888f40adb7ae3af5bfa8fdbc15103c0fa81fb74e9f3460ca4cf40c20f6b01eaf46b3e5b71066fe649614ed60eb0ab8619e56a0cc2ee56218bc4fe52f38731073d012ff16db3b7020a8d132f645e89f76c9dd14c0503fb63f9a2dcf298f5412de1e01a6c0ab5779a2804ca093f2021703572f993957600235cfedacacb345412fedcb61355a1ad05ca968b2fecbbf4c5f973b33e3ffc028bd45887f3f87f486f4398f0002d86f54a49a807ba04c44f49e2f7b87281968215026af62d15f8c2f11efc62d77ffef129fef65fcb2df26e927a76d536004ce969345f90f8a5d28e854c6e05ace0a83c6a15010ce370b115acf69a9cc2c7ddd8ff6997e5dc7b27ff47def9a72b3f085ad66c89964e05686c36b906e1f26afd6a261c2ff94c26173b486e01f7d5d5fdc5250bea4f6a9f0a33024070fc9b938807aed7e01861e2fc0d2dda0093ecfd0f58136368f0f0aa796a3a6abe0b9914804b8ba5f54e668bdba273f8a65fde09cc2a04ff3c4a884d84f299acfd3f34c20b41b80b0d667e0b90c255168cfefc185a47195b100c4b7408b463d50d03ad78360c960dc46d1034b28c0dcf509726c80e0fbad45ee9dde3f799a17744fd0009a40989f457120d9c0f450cfe040a33d36a3bae51faf1d94d2ec1f10f003f48d56bc70b19b7e6fb87eb029b97ecc85ada0a37f33d1573c3f22db069abca9802b3cc2eac875206451ee50f6a01f324ca625bdf59f48e505e81bd4a0d13077b5f1b0bf31608d3c4bc84f1bea5463ba9bff3fb4143ffbc1ffbde232eeea94b098a20b96bdda2f8ff58b5a5e33005c3b78c2abf2efbff2edaa32842fcec3ce24485cf0b6eeaaff96678f0ede2035243840d5a8f8971f4600d64d2ba61503f06a3a772ac6063f69e8b1776859e065dc3faa72245fc0c21e4722e58fc4fa86606a95809d16166d42d590d58d7fbef9d590b4e26f1d7c3150be6abd814e59d0a85922d7c4ea6ff95629e86d85ef5ec2ca9e99f1307034f7ab56e3bfb969ce68574de0802e3a493c16b095efd7a72ef5d084f7a37c5063efa6cc6b558da0806ad355c224e520da407aac668760f7f9ce5c28d0d0c08052a640885f4428e6716c7dd0b5e7798c0a3930881e0c058ce270ef7b80284e23909c458e904eb32079f433ec821970162b22f034d01f356a363825822f2694d1f6f6a1ff5a44e367bbce2f94eb09aeb17bcf144dc33dc7a58f64db82e35ff3df27aa3727dffce0472eccacaad150f7997f1962b9103bfbc880535670fcd882f3808c5fab14fb652e69709c35147c8c84701c8e69845b6470e441aed05813b08ce882d73dd420d6fa6c908769aff6ccd45d624d40f0767b48f1a070f793e3bb9b1d8f4faf840636504fa3371dfda43990114e03010886ef6186579eccc9d0146c1ed34efee0d468084a18da20aeee6ffa70cb0f9370158519683fdc592e7b7111c0dfe4e32ad5563ffb0a295aff540047eb376d00686f0f3ba68dd84b00dadc5df70f222ff90d8b7329a4e0245b65a0ec53d0d7bdc656987bf0a5728636210cd0aab96128fc21207944fa76f41a0098db7ed5b14fbf6378879e4681df23e49f76b3eef0e3a859c89fb47faa13f7eea70aafcdf9ff4a15a420bfd99c7d72a9009ee99ad7615c40eabef0f2184d103ee3d8e70382a02a14310df2396f0071f3a29f73afc46d7aef0508ffb4290a797e8e6fee89c29be11c7fba2ee588e225204a2c034d8c4400c3b83396db447f3c057595bd64a0db5d29bf236e003d3328cbd4ee20dd8aef72613a3f5d2b306faaa91fe781fea4ce48bf5387f55e0aa67f22f4bddaa5643f9ec336229321f097d260321339af03ecb244c1450f674eb69ed519a0ef1620cd68192f1f4092a0139c10a5ed8f3ceead2084bca0e7180acf9f27d2ebf40830775b3045814e20a1e701fb9ca79fdbc350978edfdf4c9076c8ab78d01d02cbb6f0d040da3690d10b0f7f1edf2fe6f519c03d646c3c04dca0bd6ae5e2c65210cc604426dcacb0844da393b007cf808f8fba31198f4f3ad2bab5a6bf97c1ad6f2e3470ab41dbf19cfae0f177b171bba79fc41da21b7300af45ed9a6d3546d0c72eca077ff26f3d488a6e1c09ff7a38c22e7b1f90db59b025cbea203c725fb85c449fc1a5d43398624f9dbf9e1279a07ffdc9954938a6ff0d0cdb5bb6252fe9c0f4f3aa49a00ef8dc403c1dcf93961c80ddfeafdd1e11bdb237cf8447d75675d5c0be54586de94f90de98223f9331406dde85290e1fcfd9567878334dd0b66c001e3f52f0bcf28b51e6cea0573574526d4320fc8f7180f84e3f4fe08af4a41280fc17b4457a187fdb78568339eab05be1eb53273de05c7d80f5d3c2c0ea30362d2709a0d6a4b13b93517fb21fd4241d33b06b920e1e154130df6fb238f61fb09948f61c52f59f466154b4b693b00f7cd84fa533801b393ff107fb5fcf69d288e81eff2112cb4717c99053873247820f6f1d07212eea9ae08faae23aeffc907a1bdc3b2b1e3f0e5709b18c82df78f88d1fdf92c066f03187f3d15f73369af81bed3f7ce95aa88721302a8e829e281890e23fa802df915fd99c09fc42576f0895408162181013d3766c9f81a024802d602dd1f0d799bd2022563fe3952cf5c7e9afc97cae9818d16050a74ad861ddbfdfb1f5ecbe1200709ec3b84598af8c97c46627077f85e1ee3667add04004ab9c00c66f86d6cc0499894f2b40582ef0159f6dc83e75b18a102f71c13dafb180f01e87d5a5d5cfbcd1a810bd0340117642160394b014542499ec78bfc237c7cd598ddf478473349dc98fe105e1626b538fdf0ffcab4b448f5d63b283594070237ba82bf16d00b22f4f98fe066068b2ee6f1511309b6ac11a4f78708c5aebcb43b93f6ca46d36e046af62a132823fafb00f8c16fecd2d4053e4e7c0cce1f0f180b51253f6f0fc346489d93f5f171531781d55df79219d590a2b7f8c21e43745664fcb5296ce06b240ead6c79026c2ef1a953751a3b4f0cac328bc158da05b364927e8215047ec9d7bef309fad26a3f0c0200fd06c3a58d20d9fbbe13a11fabd70be0f9f9c789f3f7f6dbffb77d4d0b31161e2921d8f35f3bd54e8fd403d7d2453c0a490f7b1508129d5affa3fce75250de0f9d7420348f2905e7e0078da710fcb6cb734931cdf8ea7cbfd0d36e0bc54eab1b87250e3a84931a2fd609c9ea31ca25be0e7dcedd10c65ef5f08790bfaf120dd59a51bef8d00baa12f455cb8cf39ce30a0f9465f285ff986966e00e75da9b1d7e76f768cd59005ceff525974910a75bfeea8c74a3b617f16d944a7574530d52cb1e79e6fe0ec47172cc7d74f2da76520a36800a9ae4632baa5dfc2e7fceecb26e0e9f5f37a10bc90cfd73f2fad507075a0504b12caaffbdf88616b9ac0c77bfc094bfce062c80f0215c43f554461f3380be0ce88710da7f5902e88cd5baa2af0117ad9a91dd2efd15dea0d7fe320abd2187809f8202a09000d742c403085a91f223d30401b456a41651fc272d623e90c4fb8ba7c64b5443fc4d20e32852e5ff09227deb2a00030e4338c911740973a6fe94283cf55a5e60243b39011c6cf89056b2fcf136524f74d604193e8e5f89f00fe44946fb0061f1fd61985cf1560ddb2eb37d906ef5fadd61d822d20ff387a2aa9485f9729fafd5311a0940217f4ac922f70bc3fb02901bf6bf5bc8ed568df4feed6aebd929fd4814a22c18f9f8f00fc79b6355f18465d833ee0cf17f74abf55edaf702320325807c0e48f8c3b287e408e4853be8dd7f0dcc8c4451fa2b02795b10ebf9a2ffad85c3b68e7dfdaa6c3f3e4a350984e603b2f582f9ed92a6d955b20d3345dad6af9309cc08c610303609333e99facd320bd87bacf68e0c0b00424102a0a9f8fe1007eada8bfcee3d3970a1c602c5149df2ec0afd2c388694676cf4363b82747c3ff4b0db44a65d0902c593b20a6a3402213bedd8345900a52baa73a654fcc01be9442946fbb69534647ed5f61533b71c34def4602fd003f85e077a774c08b14d0dc62fed401fc4f991c2bf28ae290633e1f323ddc4fbb08b179035d3f7cd02e3883ca2f91378497e21d30f082ec3dec4e102654a51fe62a1041cc591f0bb6f08101a229f116b0da2bf412bce61fa5937b7c2aa96f724f2b1f411cbf727439e4132e5f05be5d5ad6f01f7661fe2fc61a20947fefb58cce7f28468e3af8b8b09ded0f8def3d509c3243836ff07019ca44f4ad1acfcdc09a9c237eb036b40ab4fd7b2ff52f107d7326f092e1453cd455bfc333c563c9924fc750ead07c2e30975421527d2dc07fc33609fea44f6e53f1b13b994fee39e5ea719f205ca8cdd60eda20e5a6aed10749bf8b2e23bfe40a70fd4155882c30d05bfd8425d2c7d0202861526e906f71b4d4aba7e710a69f89b896fc9f784b47c8512910a4556e0040e440dbeca29a0f224fc32bf16468717fde99a3028a62bf68b4e78e761850775d006c2f738fe1e6a1de145760b65a314d9d093f40891c68ac704f2d538bb17eebf0e1e2563eab353fea8d0d48cb0c0f721467de05016097d782f2f4f210d133bf85e5e9e037c717b6c4892012aee3be1445bf732e31d421f24088c8ea2097ab9fa1d64b5e05f8fffe3138ba38fb00d8b64ed2ae50c02ef5253f91015f7470b19294239fbd63f771aed8503d991abe6f429f76562693c1609f7601def33915cf42ef52bda1a930f6038d024eb3a065cd49de9e477f4c0238199aa9ef8329aefad03a30979476fdb52ddfcf4906a5795d000f5754f33c4a7f040af66a51c04ffa5f77dd1e2c1f9685204dad0e90db499a47f06e0f6e3557de9b13cf62f65d25c3e4ef82434b3666daa0bd0ddc72b6b52ffa39a6b38037b004b7da4b424a8f6392bbe5f6610060b39a7bdd5dc043495baea604b0b8ffce75c2cf00ce7ace06a4dbaf065cf3d5d1446f6a5c9bf22e9aef66f0b5fb82181f94635898c495c0c44126022bd36f4f3a56644d87b027ad184549e4cf65f0a2eef3f09f72adbc8cbd462f9a736fd7570470577c337a7e4a005dbf0716508c6fee5754020ec2dfece6cc526608dfb4e879bce281ef87964a988a261f5e3474d85ac6efe1f4a0c5e8991f503babb3d28ea0db340df01354ef7ab290d4377c70283ecf7a02271f05a8c339cbcc7f69bdffa34d901f1bdb1d86895cf0b76ffa3999d91f67df0f629f410f18b5fc64d25dc042df24626c824f39950cb7cc3160be0fb39f2d319031333bd35fd5ff0a0ee20002a360561241420aeb80deebf839fdfccfcb7da4d96dc74f67da8ed34b919fb8ea88b7f3f810a34c32b9becacfc807ac06b7202f25e83904b7883f2fb63dd2911d50fda780dbbe080fa46e5fb6417cefa223985e99e5b07cd96155ba7e0fbe78ee4f36d6af5a6cf2fd9069ef1d4065dfbd9a9f881713839d5eaf3df8f637e3b46fcc2cbf04c0ddf049dd14518f66ffadc43accb952506394322e21e030dba65f3f7cf85f4ca8b2a8a5bf6f0f5ab22cb1be6f6d2c783a0dd98f9dbe5c62ab2a6010940be97f7da018e2fd85a2d160e539c9ba4358af09789e81ba3baf6d4af69db224e0bed1bfcf92ccc064cf1f0b02a31f3ec59f16b41d203f4819fe394170e6af8db6b6697fc2d3b11540891056cec3063f36bf501983ad87df6f1ebfb6efc4830070966ed4f821c02c0d9a310a9fd042597c2dbc221fe8c95e8754d55fbf23c2bcdd9ea038f338bc0f72ff9f78e4cc1a6070a06c35e9dd0a8ff9992acb2ac8f07cb96bde0392e0771d714227daaffca3a4ea9ae55f6a8a1985953c3fa3fa9edd642ab0964a75e9d190301b4735eb8f875f3ad4ccba9921207dfb9692e64c6f64cd0a378600607fcd9e7330bcff8628f9819df98092aa11a84167c0e86e86bf1957b066716b297259a0ccc5ce91dc745f991dda99d24b0f1299c8df4e8200101fe6e0460eb01d58a6a63d610fb52f67d6f7780f41c194f521e3f0fb31cd79c638cfae6238597629af2bb4f396e1f47f66106aeb383f00f98053bffcc920d1f8d37fef2f6f6a3ad1b6e25da0dcbc87b046d000d2ecc510c25cf09eb1861193daffc930e9dd256ef08747600b41e8701fbdd1e1be75501b5b7eec549b1f530a0121c98b6f8605b1c8d7162090ac5abfe21c20836a40f3da6eafad94f4be494730efba132f66df606e0b188bc2819faf362d5fbefdaff14918d034b67fd0e8884f59b8d030a15d9965d9efcf69db36226980a1e298bd392e6fc82df4dbf9bf2f4ee0d75250e58f042989ec2c98ff795fde334078ff21df639e632dcfc9bb512fe85690677cf82828a370f449cd31542acfdb2a5385abd9cff7afa6ceec79803aaa4202f19480c8a75fcd3419d03386143b86b6c0a9b1b824298f807f952028bbd4206f6725b88c1e801a533e05be1ba0bf16609704fc4fb48dab5b3fc670b3ebf84e3787b0a80631490b812ff51648c9d91eef3eaf4c129fc0afbbfe400c986fefc9ee6b0b02f63fbcc2f7b966586fe0b71fecefda0f8edfdda930dabf8c10fa1ec08b4f4e07d8bb643cf089279cefa35ac07a39020821fc90bca077d3f3c6bfb1cfead0f82b60d2b8feff92a590435d73968f8040e332207838a020457091539c749f1ce2481b6ce89066d49164324cdfe3ff2ea6593b3f42e660bfa7d2bf11f46effd668af088bf74ba3b490d3038d09b2219065d4cb0a1fdc60c44dc1d8eec0efe5c49e9c8d8ba04b43511972d4300e00fee2b754f03c674287ebb0a0aa696ecff3979f87623bc60e3ccffbe2d8d0c91f4f0b9323abb9e8208f446cf94b4290235307ef73bbcf947512d2ba88301d5660b4e21a00c5ee968cec618064e2e8ae0ae6908be5098d2d4e400b31db9d0b528f8ee7b4dff3a700fd2af7d35afc6fcee615a27f7ab099b1e00bf6e160646ff9f29eb5b0506f21c81d436f52326490ad457f749b97b7238f7f24c855c4201d30cb027806aadb305a90be448556ef426f27b496e6eff9ac485bbef9bf26d284c8e2566040601cdcb5d34f8588ea8857a610eb94259829564f54e5549f48f360529580053cdff0757efa95cb83ff508402be877c0f071881ee7b382f1683b0eae8350f8a095b7f7aefef733f684fa9d5cff0041c2b020dff92b0216de3d4502a99fc0027e9ff77d90f3b9dcc40c0c9f072ee705f94cea74d53d9803fd440401000000cf9959c408ad6d09b4fcbceb530b889e52e062a1ef7d3a30065a062d44ca47b22354bdb4de4a1b0c8df7a372dab912e4e3d3f6efa9b64990b81aab50e3309ad64f1aad0949c07b822ca41025f803aafbe4b9cc731bf8a69133945330287e5023fcd5465a916d41694f63fa5e7fe499b01750379c5b014cd9deaa9cc49afd2014167988e4b4b54eae3c1e3d760feba77ae06af0182f93912c5f9c0d858b72d53cd24e176e67b994f2dedfa6e681fe888fb8a8e7cad52b20c47d89cbc19d25530210f138e10945e4b1bb9ee67bfa59af31574f449bf94c3e0e1e4b73fdffdd4d49584caf9b0add3e238de47a3c7cbd909d45bd0f8f72777bd4af8bf72af30ca95b7635b87a04c6e08a307c1401b5b2f3b966176c35104da5074c00590c014012c813ef792531b98218b689c3eae28851d612f0354f56154b9d0acb08a1e6a1ce2e682382be5cb0cb40947957aa63425497207b84089e53b0e1d981305689d8029fb5869dedd28c7e592f0660878b518bacf51b137dcbc2d7d394e4e45a48395f7bf5c7d575edb22318d0e81d3ecd41535e4f7f8de58a3b18a1171065ecb5f2639728545a5219ea49f6643430d1329a39051bbff24e625012dd9223b16fdf589457c2487d4333426917de9d964a9330a6a919e12abc5e298e0026af41776cf117baedcac1cb04436cc363be428f837e489a66d8fba397e414f3db382929e9e2eeb69d4461d7909d39f26b8463a602c1762b812feded02f0e0b3fb9f973db22bcbbe11cf86d3a445ace5013bcf393b0eadeaae16ec329832d51ad91f82068b3fa386203fdd98fa8d6cae1f3af76e10eb018e231e42511abb90ab82cc1475597df455ffc101ad10575bde4bdad8dbbe2be3c0aad73b758c2239fcbc87cb3c2b172a43db13dce088d2a15dbe2f71f2ac8519a23a36cec72ad274ec13b53d3a63dc03f943e6708e5f25733bb149f5f9c73785651c69184c15920f89bb639e15024857fad3008a4e8de30c5d6c7cc8d3e89e5d203e7611faca3788f81c1d79b04380b9fa096d9ed710bd0c97613cfa7b81852aa292b2d7a0c1cff60c7a3886c23fc4bac712928f8575d3dd3dac8a63c52a6e8616819357a4653c6d4b81a4c4df89ef3cb75c1998018c982a184529c9586f33e44eac380c611747796dad9949456c2a92f5c3c1b27fd602c3d5a5822fe1ea1bbc771740700be00d9b55937031370b72c51a56c601515a9b48cb79da6cdffc959b2a3b685ac486c3fb1f50264257d7ed33131e174b670cc070bb64d534e5553ffc5de12779616e3bf0300ba2fdd5d73bc4e84d57c4bb6c2fba98ffbd70b75b951c47ff01fb121939c506be69043daf3d4c5a06a2bdfe09e2f8cd3e2c04be3b97275390e0f7cf669a68827d4bda9db5405cd59db5972bd4368bfc5859372021fe0422650add5c8d27bbec21c6369bdddc87615c43b47867f6f378ccb7e4a2b07b84f8b1f33f8f5e67c5bb885a26036376d222f1d0333d75b596d2be255d7e64641c91cb595e0b804bf71a69aa1833acde3c93ffff1fca802cbb000038416c6c206d79206c6966652773206566666f7274732c2062757420746f20636f6d706c65746520746865206f7264696e617279206c696665", TxID:"19809396d07f240e97680b284db5e887428384f475a9956618088102ec14a0b1", TxHash:"19809396d07f240e97680b284db5e887428384f475a9956618088102ec14a0b1", Time:1650198200, BlockHash:"00000000c19dad3e658788bba7ba1e3f335f6c361b64ced5cb7ca184330dccbc", BlockTime:1650198200, Confirmations:300793, Version:0x1, Size:20741, FullSize:20742, Memo:"416c6c206d79206c6966652773206566666f7274732c2062757420746f20636f6d706c65746520746865206f7264696e617279206c696665", Fee:2.05799813685247e+07, Witness:"", Vin:[]*abelian.TxVin{(*abelian.TxVin)(0x140000a00a0)}, Vout:[]*abelian.TxVout{(*abelian.TxVout)(0x14000414018)}}
mempool has no unconfirmed transactions.
3. Account
Account is the key concept of Abelian SDK. In Abelian SDK v1, an account contain an address and keys pair, and scan the blockchain will determine the account's current available balance and the history of transactions on blockchain.
This kind of account can be viewed as single address account, and named CryptoKeysAccount
in Abelian SDK v2.
In the subsequent steps, based on the concept of accounts, the procedure for how to use accounts to scan TXOs (coins) in a block and how to get the Ring information of TXOs would be discussed.
Thanks to the application of the new cryptographic scheme, it makes it possible to use Root Seeds
as an account named RootSeedsAccount
.
An RootSeedsAccount
, which is recommend to use in Abelian SDK v2, that can contain any number of CryptoKeysAccount
, and naturally contain multiple addresses.
There is an example in the directory account to show generate RootSeedsAccount
.
The account generated by this example will be stored in the local database in sqlite3
, named abelian_sdk.db
in the working directory.
You may use any sqlite3 GUI client or the sqlite3
command to view the content of the databases.
To ensure demo application is working properly, there are 4 built-in accounts that are automatically initialized as the program runs. The built-in accounts in database will be used for subsequent examples to show how to receive coins and transfer through Abelian SDK.
4. Demo Application
In the directory examples, there are three examples to show how to use Abelian SDK to receive coin and transfer:
- coin shows how to scan coins in blockchain, record ring info for coins, and track status of coins
- transaction shows how to make an unsigned transaction, sign unsigned transaction and submit transaction to blockchain
- transactionTracker shows how to track the status of transaction
Another thing that must be mentioned is that you need to specify the corresponding connection information for blockchain node.
4.1 Scan and track coins in blocks
Each block on the blockchain will contain at least one transaction, and each transaction will contain at least one output. The first transaction in block will be coinbase transaction, it would has no input and at least one output. The subsequent transaction in block will be transfer transaction, it would has at least one input and at least one output.
In the directory coin, there are functions to show how to scan and track coins in blocks:
ScanCoins
check every output (newly generated coin) in a transaction with specified view accountTrackCoins
check every input (consumed coin) in a transaction with specified spend accountHandleCoinMaturity
mark coins spendable and update their metadata such as ring info and status in the database according to the specified height
For each coin, it would be in four states:
Immature
: the coin is not spendable yetMature
: the coin is spendable nowSpent
: the coin is spent by a transaction but not confirmed yetConfirmed
: the coin is spent by a transaction and confirmed by blockchainInvalid
: the coin is invalid because of some reason such as rollback
The main program would fetch blocks with specified range, and for every transaction in block, call ScanCoins
and TrackCoins
,
and for every block call HandleCoinMaturity
.
As the program runs, the coins would be inserted into table coin
of database. These coins would be used to build transaction in transaction.
And the balances of account can be build based on for complex application.
4.2 Make and submit transaction
For each transfer transaction, it would contain at least one input and at least one output. For each input, it would be a spendable coin, and for each output, it need to specify the target address and value.
In the directory examples/transaction
, the main program would generate an unsigned transaction, sign it and submit result transaction to blockchain.
Without loss of generality, the transaction is constructed in two steps, and it can be demonstrated that the transaction can be completed even when
the signing key is stored in isolation.
It is important to note that both the inputs and outputs of a transaction should be ordered according to the rules that are specified by blockchain.
And the function abelian.SortTxInDescs
and abelian.SortTxOutDescs
would be used to sort inputs and outputs, respectively
When building an transaction, it need to specify the corresponding target addresses and corresponding values, and specify which accounts of coins to consume (in example, we use build-in account), meanwhile, define a custom filter for spending coins.
When signing an unsigned original transaction, it need to know which account's coins are in the input and in order.
A signed transaction would be submitted to blockchain by calling SendRawTx
function of client
.
4.3 Track transaction status
A signed transaction may be in three states:
Pending
: the transaction is still not recorded on the chain.Confirmed
: the transaction is recorded on the chain.Failed
: the transaction is rejected because of some reason such as double spending
The demo application track the status of transactions by scanning blocks, which is a trivial comparison with transaction id.
An example can be found in directory examples/transactionTracker
.
It should be noted that the confirmation of the transaction means the consumption of some coins,
and this task is done in the example examples/coin
.
For mainnet
, if the transaction is successfully submitted to blockchain node, you can search tx_id
on the Abelian Explorer to see if it is confirmed.
5. Summary
In this document, we have learned how to use the Abelian SDK, understand the concepts of Abelian, understand and create account in the Abelian SDK, scan coin and manage coins with database, and make a transaction with the demos.
You may also read the source code of the demos to learn how to use the SDK to develop your own applications.