PathrockNetwork Gno Explorer
HomeBlocksTransactionsRealmsPackagesValidatorsAnalytics

PathrockNetwork Gno Explorer — an independent explorer for Gno.land Mainnet (gnoland-1), operated by PathrockNetwork. Not an official Gno.land service.

gnowebarchive RPC

Transaction

successcanonically verified

Overview

Hash
F4A7D05E72D4682D331CECA8…331F9C4DD3080394
Block
37,105 (index 0)
Time
2026-09-14 10:22:17 UTC
Signers
g1manfred4…cedlf5
Fee
485,985 ugnot
Gas wanted / used
485,984,531 / 373,834,245 (77%)
Memo
Posted from gnoblog-cli
Canonical block
F42A0F5F8866…23A4E7B2

Messages (63)

#0 vm/execgno.land/r/gnoland/blog.ModAddPost(intro, Intro to Gnoland - The Smart Contract Platform to Improve Our Understanding of the World, _Welcome to Gno.land. This is the official site to learn about the Gnolang (Gno) programming language and the Gno.land smart contract platform, as well as understand the motivations behind Gno and our core values and mission. We’re starting a series of blog posts and holding regular community calls and AMAs so that you can stay up to date with upcoming developments and dive deeper into the Gno World Order. Stay tuned._ ## What Is Gno.land? Gno.land (pronounced no-land) is a layer 1 smart contract platform invented by Jae Kwon, co-founder of Cosmos and Tendermint, to address multiple issues in the blockchain space — in particular, the ease of use and intuitiveness of smart contract programming platforms. Beyond offering succinctness, composability, expressivity, and completeness not found in any other smart contract platform, we aim to challenge the regime of information censorship that we find ourselves living in today. By using the programming language Gnolang (Gno), an interpreted version of the widely-used Golang (Go) language, using a state-of-the-art VM written in Go, we want to lower the barrier to entry to web3 and make it simple for developers (particularly existing web2 developers) to write smart contracts and other blockchain applications without having to learn a programming language that is limited by design or exclusive to a single blockchain ecosystem. ### Gnolang (Gno) Is Essential to Broader Adoption of Web3 For web3 to grow in a sustainable way, we need technological solutions that are designed for the blockchain with programming languages that are universally adopted, secure, composable, and complete. The main programming language currently used for creating smart contracts, Solidity, is designed for one purpose only (writing smart contracts) and lacks the completeness of a general-purpose language. Solidity removes many of the complexities that blockchain programming requires (such as memory management, ensuring that the code is deterministic, and understanding how the entire tech stack is implemented) allowing developers to quickly build succinct smart contracts. However, Solidity is only used for smart contracts on EVM-compatible blockchains (like Ethereum, Polygon, or EVMOS) and its design is limited by the limitations of the EVM. In addition, developers have to learn several languages if they want to understand the whole stack or work across different ecosystems. Go, on the other hand, is a well-designed complete programming language with its foundation based on composable structures, designed by the creators of Plan 9. This allows developers to rapidly accelerate application development and adopt a modular structure by reusing and reassembling existing modules without building from scratch. They can embed one structure inside another in an intuitive way while preserving localism, and the language specification is simple, successfully balancing practicality and minimalism. Go is widely used, especially among existing web2 developers. It’s easier to learn and can be used to program almost anything, such as GoEthereum or Tendermint. Every part of the Gno.land stack is written in Go so that one person can understand the entire system just by studying a relatively small code base. The Go language is so well designed that the Gnolang smart contract system will become the new gold standard for smart contract development and other blockchain (and even non-blockchain) applications. ### Security Is a Built-in Feature of Go (Golang) Beyond object embedding, closures, importing of modules, composability of programs, and interfaces that allow you to implement a specific set of functions, Go supports secure programming through exported/non-exported fields, enabling “least-authority” design. It is easy to create objects and APIs that expose only what should be accessible to callers while hiding what should not be simply by the capitalization of letters, thus allowing a succinct representation of secure logic that can be called by multiple users. Another major advantage of Go is that the language comes with an ecosystem of great tooling, like the compiler and third-party tools that statically analyze code. Gno inherits these advantages from Go directly to create a smart contract programming language that is safe and helps developers to write secure code relying on the compiler, parser, and interpreter to give warning alerts for common mistakes. ### How Gnolang (Gno) Differs from Golang (Go) [![Go and Gno](https://gnolang.github.io/blog/2022-11-21_intro/src/thumbs/go-and-gno.png)](https://gnolang.github.io/blog/2022-11-21_intro/src/go-and-gno.png) _Image 1: Gnolang - Like Go but specific to the blockchain_ Gno is around 99% identical to Go and most people can code in Gno from day one, even minute one. The Gno.land programming environment comes with blockchain-specific standard libraries, but any code that doesn’t use the blockchain-specific logic can run in Go with minimal processing. On the other hand, some libraries that don’t make sense in the blockchain context are not available in the Gno.land programming environment, such as network or operating-system access. Otherwise, Gno loads and uses many standard libraries that power Go, so most of the parsing of the source code is the same. Under the hood, the Gno code is parsed into an abstract syntax tree (AST) and the AST itself is used in the interpreter, rather than byte code as in many virtual machines such as Java, Python, or WASM. This makes even the Gno VM accessible to any Go programmer. The novel design of the Gno VM interpreter allows Gno to freeze and resume the program by persisting and loading the entire memory state. This allows (smart contract) programs to be succinct, as the programmer doesn’t have to serialize and deserialize objects to persist them into a database (unlike programming applications with the Cosmos SDK). The composable nature of Go/Gno allows for type-checked interactions between contracts, making Gno.land safer and more powerful, as well as operationally cheaper and faster. Smart contracts on Gno.land will be light, simple, more focused, and easily interoperable — a network of interconnected contracts rather than siloed monoliths that limit interactions with other contracts. [![Gnolang code example](https://gnolang.github.io/blog/2022-11-21_intro/src/thumbs/code-example.jpg)](https://gnolang.github.io/blog/2022-11-21_intro/src/code-example.jpg) _Image 2: Code snippet from the Gno programming language_ Today, Gno.land is the only blockchain instance in the world that supports Gno but tomorrow, there will be many chains with different names such as mydapp.zone, or mydao.xyz. Gno.land is the name of ONE chain and is not a name that will be used by other Gnolang-powered chains. Gno.land will remain a minimal hub with three main utilities: * Managing cross-Gnolang-chain fees/licenses * To be the (or an) official home for the best smart contracts * To provide new models of governance (w/ DAO modules) ### Earning Rewards Through Proof-of-Contribution (PoC) There are four main ways to earn rewards through PoC on the Gno.land chain: * Pre-defined tasks (technical or otherwise) * Pre-defined bounties * Retroactive bounties * Vesting-style rewards for core members Bounties rewards (both pre-defined and retroactive) will be decided with “local rules,” through the agreement of the DAO with everything on-chain and transparent. If one human were to abuse the system, it would trigger and the bad actor would be slashed. We’ll go into depth on how you can earn rewards in an upcoming post. ### Durable Solutions to Improve Our Understanding of the World One of our inspirations for the Gno.land project is the gospels, which built a system of moral code that lasted for thousands of years. Part of Gno.land’s endurance will be having a minimal production implementation that becomes a reference for other implementations and a basis for education to elevate people's understanding of blockchains. Gno.land aims to appeal to web developers, dApp developers, and blockchain builders to create solutions that help people improve their understanding of the world. With the barrage of misinformation delivered today from various factions, it’s impossible to separate the real from the fake. This causes a state of gridlock. We are living in a regime of information censorship spanning all important topics from climate change to global pandemics — a vast coordinated effort to prevent people from understanding the truth. By just browsing Reddit, searching with Google, and scrolling through Facebook, Twitter, or Instagram, people are deliberately being [misled](https://twitter.com/lhfang/status/1587095890983936000) about key global issues that we all deserve clarity on. This is as malevolent as any type of censorship regime in the world — and we need to come together to challenge it and break the wall of censorship to achieve a functional democracy at last. ### Gno.land’s Current Phase of Development Gno.land is currently running in its third testnet and there will be several more testnets before the platform is production ready. Modern civilization wasn’t built in a day, and neither will Gno.land rush into committing to an exact launch date. However, the next development, an incentivized testnet called ‘Game of Realms’, is scheduled for Q1 2023. Game of Realms will be similar to ‘Game of Stakes’ on the Cosmos Hub and will reward the earliest and best contributors. If you would like to find out more about Game of Realms, Gno.land, Gnolang, or anything else, join us for our first community call with Gno.land Founder, Jae Kwon on November 22nd, at 4pm UTC on our [Discord channel](https://discord.gg/YFtMjWwUN7). We look forward to seeing you. , 2022-11-21T17:13:00Z, christina,jae,manfred, gnoland,gnosh,gnot,permissionless,consensus,proof-of-contribution,dao,governance,ibc,democracy,freedom)

Events (63)

StorageDepositEventgno.land/r/gnoland/blog
+20,756 bytes · 2,075,600 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+24,900 bytes · 2,490,000 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+16,648 bytes · 1,664,800 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+19,122 bytes · 1,912,200 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+19,317 bytes · 1,931,700 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+19,337 bytes · 1,933,700 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+24,004 bytes · 2,400,400 ugnot

Response

Log
msg:0,success:true,log:,events:[]
msg:1,success:true,log:,events:[]
msg:2,success:true,log:,events:[]
msg:3,success:true,log:,events:[]
msg:4,success:true,log:,events:[]
msg:5,success:true,log:,events:[]
msg:6,success:true,log:,events:[]
msg:7,success:true,log:,events:[]
msg:8,success:true,log:,events:[]
msg:9,success:true,log:,events:[]
msg:10,success:true,log:,events:[]
msg:11,success:true,log:,events:[]
msg:12,success:true,log:,events:[]
msg:13,success:true,log:,events:[]
msg:14,success:true,log:,events:[]
msg:15,success:true,log:,events:[]
msg:16,success:true,log:,events:[]
msg:17,success:true,log:,events:[]
msg:18,success:true,log:,events:[]
msg:19,success:true,log:,events:[]
msg:20,success:true,log:,events:[]
msg:21,success:true,log:,events:[]
msg:22,success:true,log:,events:[]
msg:23,success:true,log:,events:[]
msg:24,success:true,log:,events:[]
msg:25,success:true,log:,events:[]
msg:26,success:true,log:,events:[]
msg:27,success:true,log:,events:[]
msg:28,success:true,log:,events:[]
msg:29,success:true,log:,events:[]
msg:30,success:true,log:,events:[]
msg:31,success:true,log:,events:[]
msg:32,success:true,log:,events:[]
msg:33,success:true,log:,events:[]
msg:34,success:true,log:,events:[]
msg:35,success:true,log:,events:[]
msg:36,success:true,log:,events:[]
msg:37,success:true,log:,events:[]
msg:38,success:true,log:,events:[]
msg:39,success:true,log:,events:[]
msg:40,success:true,log:,events:[]
msg:41,success:true,log:,events:[]
msg:42,success:true,log:,events:[]
msg:43,success:true,log:,events:[]
msg:44,success:true,log:,events:[]
msg:45,success:true,log:,events:[]
msg:46,success:true,log:,events:[]
msg:47,success:true,log:,events:[]
msg:48,success:true,log:,events:[]
msg:49,success:true,log:,events:[]
msg:50,success:true,log:,events:[]
msg:51,success:true,log:,events:[]
msg:52,success:true,log:,events:[]
msg:53,success:true,log:,events:[]
msg:54,success:true,log:,events:[]
msg:55,success:true,log:,events:[]
msg:56,success:true,log:,events:[]
msg:57,success:true,log:,events:[]
msg:58,success:true,log:,events:[]
msg:59,success:true,log:,events:[]
msg:60,success:true,log:,events:[]
msg:61,success:true,log:,events:[]
msg:62,success:true,log:,events:[]
Data (return value)

Raw data

Raw transaction payload (content_raw from tx-indexer)
Tx{0AD44F0A0A2F766D2E6D5F63616C6C12C54F0A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F73743205696E74726F3258496E74726F20746F20476E6F6C616E64202D2054686520536D61727420436F6E747261637420506C6174666F726D20746F20496D70726F7665204F757220556E6465727374616E64696E67206F662074686520576F726C6432FD4C0A0A5F57656C636F6D6520746F20476E6F2E6C616E642E205468697320697320746865206F6666696369616C207369746520746F206C6561726E2061626F75742074686520476E6F6C616E672028476E6F292070726F6772616D6D696E67206C616E677561676520616E642074686520476E6F2E6C616E6420736D61727420636F6E747261637420706C6174666F726D2C2061732077656C6C20617320756E6465727374616E6420746865206D6F7469766174696F6E7320626568696E6420476E6F20616E64206F757220636F72652076616C75657320616E64206D697373696F6E2E205765E280997265207374617274696E67206120736572696573206F6620626C6F6720706F73747320616E6420686F6C64696E6720726567756C617220636F6D6D756E6974792063616C6C7320616E6420414D417320736F207468617420796F752063616E207374617920757020746F20646174652077697468207570636F6D696E6720646576656C6F706D656E747320616E6420646976652064656570657220696E746F2074686520476E6F20576F726C64204F726465722E20537461792074756E65642E5F0A0A2323205768617420497320476E6F2E6C616E643F0A0A476E6F2E6C616E64202870726F6E6F756E636564206E6F2D6C616E64292069732061206C61796572203120736D61727420636F6E747261637420706C6174666F726D20696E76656E746564206279204A6165204B776F6E2C20636F2D666F756E646572206F6620436F736D6F7320616E642054656E6465726D696E742C20746F2061646472657373206D756C7469706C652069737375657320696E2074686520626C6F636B636861696E20737061636520E2809420696E20706172746963756C61722C207468652065617365206F662075736520616E6420696E747569746976656E657373206F6620736D61727420636F6E74726163742070726F6772616D6D696E6720706C6174666F726D732E204265796F6E64206F66666572696E672073756363696E63746E6573732C20636F6D706F736162696C6974792C206578707265737369766974792C20616E6420636F6D706C6574656E657373206E6F7420666F756E6420696E20616E79206F7468657220736D61727420636F6E747261637420706C6174666F726D2C2077652061696D20746F206368616C6C656E67652074686520726567696D65206F6620696E666F726D6174696F6E2063656E736F727368697020746861742077652066696E64206F757273656C766573206C6976696E6720696E20746F6461792E0A0A4279207573696E67207468652070726F6772616D6D696E67206C616E677561676520476E6F6C616E672028476E6F292C20616E20696E7465727072657465642076657273696F6E206F662074686520776964656C792D7573656420476F6C616E672028476F29206C616E67756167652C207573696E6720612073746174652D6F662D7468652D61727420564D207772697474656E20696E20476F2C2077652077616E7420746F206C6F77657220746865206261727269657220746F20656E74727920746F207765623320616E64206D616B652069742073696D706C6520666F7220646576656C6F706572732028706172746963756C61726C79206578697374696E67207765623220646576656C6F706572732920746F20777269746520736D61727420636F6E74726163747320616E64206F7468657220626C6F636B636861696E206170706C69636174696F6E7320776974686F757420686176696E6720746F206C6561726E20612070726F6772616D6D696E67206C616E67756167652074686174206973206C696D697465642062792064657369676E206F72206578636C757369766520746F20612073696E676C6520626C6F636B636861696E2065636F73797374656D2E0A0A23232320476E6F6C616E672028476E6F2920497320457373656E7469616C20746F2042726F616465722041646F7074696F6E206F6620576562330A0A466F72207765623320746F2067726F7720696E2061207375737461696E61626C65207761792C207765206E65656420746563686E6F6C6F676963616C20736F6C7574696F6E732074686174206172652064657369676E656420666F722074686520626C6F636B636861696E20776974682070726F6772616D6D696E67206C616E67756167657320746861742061726520756E6976657273616C6C792061646F707465642C207365637572652C20636F6D706F7361626C652C20616E6420636F6D706C6574652E20546865206D61696E2070726F6772616D6D696E67206C616E67756167652063757272656E746C79207573656420666F72206372656174696E6720736D61727420636F6E7472616374732C20536F6C69646974792C2069732064657369676E656420666F72206F6E6520707572706F7365206F6E6C79202877726974696E6720736D61727420636F6E7472616374732920616E64206C61636B732074686520636F6D706C6574656E657373206F6620612067656E6572616C2D707572706F7365206C616E67756167652E0A0A536F6C69646974792072656D6F766573206D616E79206F662074686520636F6D706C65786974696573207468617420626C6F636B636861696E2070726F6772616D6D696E67207265717569726573202873756368206173206D656D6F7279206D616E6167656D656E742C20656E737572696E6720746861742074686520636F64652069732064657465726D696E69737469632C20616E6420756E6465727374616E64696E6720686F772074686520656E74697265207465636820737461636B20697320696D706C656D656E7465642920616C6C6F77696E6720646576656C6F7065727320746F20717569636B6C79206275696C642073756363696E637420736D61727420636F6E7472616374732E20486F77657665722C20536F6C6964697479206973206F6E6C79207573656420666F7220736D61727420636F6E747261637473206F6E2045564D2D636F6D70617469626C6520626C6F636B636861696E7320286C696B6520457468657265756D2C20506F6C79676F6E2C206F722045564D4F532920616E64206974732064657369676E206973206C696D6974656420627920746865206C696D69746174696F6E73206F66207468652045564D2E20496E206164646974696F6E2C20646576656C6F70657273206861766520746F206C6561726E207365766572616C206C616E67756167657320696620746865792077616E7420746F20756E6465727374616E64207468652077686F6C6520737461636B206F7220776F726B206163726F737320646966666572656E742065636F73797374656D732E0A0A476F2C206F6E20746865206F746865722068616E642C20697320612077656C6C2D64657369676E656420636F6D706C6574652070726F6772616D6D696E67206C616E677561676520776974682069747320666F756E646174696F6E206261736564206F6E20636F6D706F7361626C6520737472756374757265732C2064657369676E6564206279207468652063726561746F7273206F6620506C616E20392E205468697320616C6C6F777320646576656C6F7065727320746F2072617069646C7920616363656C6572617465206170706C69636174696F6E20646576656C6F706D656E7420616E642061646F70742061206D6F64756C6172207374727563747572652062792072657573696E6720616E64207265617373656D626C696E67206578697374696E67206D6F64756C657320776974686F7574206275696C64696E672066726F6D20736372617463682E20546865792063616E20656D626564206F6E652073747275637475726520696E7369646520616E6F7468657220696E20616E20696E7475697469766520776179207768696C652070726573657276696E67206C6F63616C69736D2C20616E6420746865206C616E67756167652073706563696669636174696F6E2069732073696D706C652C207375636365737366756C6C792062616C616E63696E672070726163746963616C69747920616E64206D696E696D616C69736D2E0A0A476F20697320776964656C7920757365642C20657370656369616C6C7920616D6F6E67206578697374696E67207765623220646576656C6F706572732E204974E28099732065617369657220746F206C6561726E20616E642063616E206265207573656420746F2070726F6772616D20616C6D6F737420616E797468696E672C207375636820617320476F457468657265756D206F722054656E6465726D696E742E2045766572792070617274206F662074686520476E6F2E6C616E6420737461636B206973207772697474656E20696E20476F20736F2074686174206F6E6520706572736F6E2063616E20756E6465727374616E642074686520656E746972652073797374656D206A757374206279207374756479696E6720612072656C61746976656C7920736D616C6C20636F646520626173652E2054686520476F206C616E677561676520697320736F2077656C6C2064657369676E656420746861742074686520476E6F6C616E6720736D61727420636F6E74726163742073797374656D2077696C6C206265636F6D6520746865206E657720676F6C64207374616E6461726420666F7220736D61727420636F6E747261637420646576656C6F706D656E7420616E64206F7468657220626C6F636B636861696E2028616E64206576656E206E6F6E2D626C6F636B636861696E29206170706C69636174696F6E732E0A0A2323232053656375726974792049732061204275696C742D696E2046656174757265206F6620476F2028476F6C616E67290A0A4265796F6E64206F626A65637420656D62656464696E672C20636C6F73757265732C20696D706F7274696E67206F66206D6F64756C65732C20636F6D706F736162696C697479206F662070726F6772616D732C20616E6420696E7465726661636573207468617420616C6C6F7720796F7520746F20696D706C656D656E74206120737065636966696320736574206F662066756E6374696F6E732C20476F20737570706F727473207365637572652070726F6772616D6D696E67207468726F756768206578706F727465642F6E6F6E2D6578706F72746564206669656C64732C20656E61626C696E6720E2809C6C656173742D617574686F72697479E2809D2064657369676E2E204974206973206561737920746F20637265617465206F626A6563747320616E6420415049732074686174206578706F7365206F6E6C7920776861742073686F756C642062652061636365737369626C6520746F2063616C6C657273207768696C6520686964696E6720776861742073686F756C64206E6F742062652073696D706C7920627920746865206361706974616C697A6174696F6E206F66206C6574746572732C207468757320616C6C6F77696E6720612073756363696E637420726570726573656E746174696F6E206F6620736563757265206C6F67696320746861742063616E2062652063616C6C6564206279206D756C7469706C652075736572732E0A0A416E6F74686572206D616A6F7220616476616E74616765206F6620476F206973207468617420746865206C616E677561676520636F6D6573207769746820616E2065636F73797374656D206F6620677265617420746F6F6C696E672C206C696B652074686520636F6D70696C657220616E642074686972642D706172747920746F6F6C73207468617420737461746963616C6C7920616E616C797A6520636F64652E20476E6F20696E68657269747320746865736520616476616E74616765732066726F6D20476F206469726563746C7920746F20637265617465206120736D61727420636F6E74726163742070726F6772616D6D696E67206C616E67756167652074686174206973207361666520616E642068656C707320646576656C6F7065727320746F2077726974652073656375726520636F64652072656C79696E67206F6E2074686520636F6D70696C65722C207061727365722C20616E6420696E74657270726574657220746F2067697665207761726E696E6720616C6572747320666F7220636F6D6D6F6E206D697374616B65732E0A0A23232320486F7720476E6F6C616E672028476E6F2920446966666572732066726F6D20476F6C616E672028476F290A0A5B215B476F20616E6420476E6F5D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032322D31312D32315F696E74726F2F7372632F7468756D62732F676F2D616E642D676E6F2E706E67295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032322D31312D32315F696E74726F2F7372632F676F2D616E642D676E6F2E706E67290A0A5F496D61676520313A20476E6F6C616E67202D204C696B6520476F2062757420737065636966696320746F2074686520626C6F636B636861696E5F0A0A476E6F2069732061726F756E6420393925206964656E746963616C20746F20476F20616E64206D6F73742070656F706C652063616E20636F646520696E20476E6F2066726F6D20646179206F6E652C206576656E206D696E757465206F6E652E2054686520476E6F2E6C616E642070726F6772616D6D696E6720656E7669726F6E6D656E7420636F6D6573207769746820626C6F636B636861696E2D7370656369666963207374616E64617264206C69627261726965732C2062757420616E7920636F6465207468617420646F65736EE2809974207573652074686520626C6F636B636861696E2D7370656369666963206C6F6769632063616E2072756E20696E20476F2077697468206D696E696D616C2070726F63657373696E672E204F6E20746865206F746865722068616E642C20736F6D65206C6962726172696573207468617420646F6EE2809974206D616B652073656E736520696E2074686520626C6F636B636861696E20636F6E7465787420617265206E6F7420617661696C61626C6520696E2074686520476E6F2E6C616E642070726F6772616D6D696E6720656E7669726F6E6D656E742C2073756368206173206E6574776F726B206F72206F7065726174696E672D73797374656D206163636573732E0A0A4F74686572776973652C20476E6F206C6F61647320616E642075736573206D616E79207374616E64617264206C6962726172696573207468617420706F77657220476F2C20736F206D6F7374206F66207468652070617273696E67206F662074686520736F7572636520636F6465206973207468652073616D652E20556E6465722074686520686F6F642C2074686520476E6F20636F64652069732070617273656420696E746F20616E2061627374726163742073796E746178207472656520284153542920616E64207468652041535420697473656C66206973207573656420696E2074686520696E7465727072657465722C20726174686572207468616E206279746520636F646520617320696E206D616E79207669727475616C206D616368696E65732073756368206173204A6176612C20507974686F6E2C206F72205741534D2E2054686973206D616B6573206576656E2074686520476E6F20564D2061636365737369626C6520746F20616E7920476F2070726F6772616D6D65722E20546865206E6F76656C2064657369676E206F662074686520476E6F20564D20696E74657270726574657220616C6C6F77732020476E6F20746F20667265657A6520616E6420726573756D65207468652070726F6772616D2062792070657273697374696E6720616E64206C6F6164696E672074686520656E74697265206D656D6F72792073746174652E205468697320616C6C6F77732028736D61727420636F6E7472616374292070726F6772616D7320746F2062652073756363696E63742C206173207468652070726F6772616D6D657220646F65736EE2809974206861766520746F2073657269616C697A6520616E6420646573657269616C697A65206F626A6563747320746F2070657273697374207468656D20696E746F20612064617461626173652028756E6C696B652070726F6772616D6D696E67206170706C69636174696F6E7320776974682074686520436F736D6F732053444B292E0A0A54686520636F6D706F7361626C65206E6174757265206F6620476F2F476E6F20616C6C6F777320666F7220747970652D636865636B656420696E746572616374696F6E73206265747765656E20636F6E7472616374732C206D616B696E6720476E6F2E6C616E6420736166657220616E64206D6F726520706F77657266756C2C2061732077656C6C206173206F7065726174696F6E616C6C79206368656170657220616E64206661737465722E20536D61727420636F6E747261637473206F6E20476E6F2E6C616E642077696C6C206265206C696768742C2073696D706C652C206D6F726520666F63757365642C20616E6420656173696C7920696E7465726F70657261626C6520E280942061206E6574776F726B206F6620696E746572636F6E6E656374656420636F6E74726163747320726174686572207468616E2073696C6F6564206D6F6E6F6C697468732074686174206C696D697420696E746572616374696F6E732077697468206F7468657220636F6E7472616374732E0A0A5B215B476E6F6C616E6720636F6465206578616D706C655D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032322D31312D32315F696E74726F2F7372632F7468756D62732F636F64652D6578616D706C652E6A7067295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032322D31312D32315F696E74726F2F7372632F636F64652D6578616D706C652E6A7067290A0A5F496D61676520323A20436F646520736E69707065742066726F6D2074686520476E6F2070726F6772616D6D696E67206C616E67756167655F0A0A546F6461792C20476E6F2E6C616E6420697320746865206F6E6C7920626C6F636B636861696E20696E7374616E636520696E2074686520776F726C64207468617420737570706F72747320476E6F2062757420746F6D6F72726F772C2074686572652077696C6C206265206D616E7920636861696E73207769746820646966666572656E74206E616D65732073756368206173206D79646170702E7A6F6E652C206F72206D7964616F2E78797A2E20476E6F2E6C616E6420697320746865206E616D65206F66204F4E4520636861696E20616E64206973206E6F742061206E616D6520746861742077696C6C2062652075736564206279206F7468657220476E6F6C616E672D706F776572656420636861696E732E20476E6F2E6C616E642077696C6C2072656D61696E2061206D696E696D616C206875622077697468207468726565206D61696E207574696C69746965733A0A0A2A204D616E6167696E672063726F73732D476E6F6C616E672D636861696E20666565732F6C6963656E7365730A2A20546F2062652074686520286F7220616E29206F6666696369616C20686F6D6520666F7220746865206265737420736D61727420636F6E7472616374730A2A20546F2070726F76696465206E6577206D6F64656C73206F6620676F7665726E616E63652028772F2044414F206D6F64756C6573290A0A232323204561726E696E672052657761726473205468726F7567682050726F6F662D6F662D436F6E747269627574696F6E2028506F43290A0A54686572652061726520666F7572206D61696E207761797320746F206561726E2072657761726473207468726F75676820506F43206F6E2074686520476E6F2E6C616E6420636861696E3A0A0A2A205072652D646566696E6564207461736B732028746563686E6963616C206F72206F7468657277697365290A2A205072652D646566696E656420626F756E746965730A2A20526574726F61637469766520626F756E746965730A2A2056657374696E672D7374796C65207265776172647320666F7220636F7265206D656D626572730A0A426F756E7469657320726577617264732028626F7468207072652D646566696E656420616E6420726574726F616374697665292077696C6C2062652064656369646564207769746820E2809C6C6F63616C2072756C65732CE2809D207468726F756768207468652061677265656D656E74206F66207468652044414F20776974682065766572797468696E67206F6E2D636861696E20616E64207472616E73706172656E742E204966206F6E652068756D616E207765726520746F206162757365207468652073797374656D2C20697420776F756C64207472696767657220616E642074686520626164206163746F7220776F756C6420626520736C61736865642E205765E280996C6C20676F20696E746F206465707468206F6E20686F7720796F752063616E206561726E207265776172647320696E20616E207570636F6D696E6720706F73742E0A0A2323232044757261626C6520536F6C7574696F6E7320746F20496D70726F7665204F757220556E6465727374616E64696E67206F662074686520576F726C640A0A4F6E65206F66206F757220696E737069726174696F6E7320666F722074686520476E6F2E6C616E642070726F6A6563742069732074686520676F7370656C732C207768696368206275696C7420612073797374656D206F66206D6F72616C20636F64652074686174206C617374656420666F722074686F7573616E6473206F662079656172732E2050617274206F6620476E6F2E6C616E64E280997320656E647572616E63652077696C6C20626520686176696E672061206D696E696D616C2070726F64756374696F6E20696D706C656D656E746174696F6E2074686174206265636F6D65732061207265666572656E636520666F72206F7468657220696D706C656D656E746174696F6E7320616E64206120626173697320666F7220656475636174696F6E20746F20656C65766174652070656F706C65277320756E6465727374616E64696E67206F6620626C6F636B636861696E732E0A0A476E6F2E6C616E642061696D7320746F2061707065616C20746F2077656220646576656C6F706572732C206441707020646576656C6F706572732C20616E6420626C6F636B636861696E206275696C6465727320746F2063726561746520736F6C7574696F6E7320746861742068656C702070656F706C6520696D70726F766520746865697220756E6465727374616E64696E67206F662074686520776F726C642E2057697468207468652062617272616765206F66206D6973696E666F726D6174696F6E2064656C69766572656420746F6461792066726F6D20766172696F75732066616374696F6E732C206974E280997320696D706F737369626C6520746F20736570617261746520746865207265616C2066726F6D207468652066616B652E2054686973206361757365732061207374617465206F6620677269646C6F636B2E20576520617265206C6976696E6720696E206120726567696D65206F6620696E666F726D6174696F6E2063656E736F7273686970207370616E6E696E6720616C6C20696D706F7274616E7420746F706963732066726F6D20636C696D617465206368616E676520746F20676C6F62616C2070616E64656D69637320E280942061207661737420636F6F7264696E61746564206566666F727420746F2070726576656E742070656F706C652066726F6D20756E6465727374616E64696E67207468652074727574682E0A0A4279206A7573742062726F7773696E67205265646469742C20736561726368696E67207769746820476F6F676C652C20616E64207363726F6C6C696E67207468726F7567682046616365626F6F6B2C20547769747465722C206F7220496E7374616772616D2C2070656F706C65206172652064656C696265726174656C79206265696E67205B6D69736C65645D2868747470733A2F2F747769747465722E636F6D2F6C6866616E672F7374617475732F31353837303935383930393833393336303030292061626F7574206B657920676C6F62616C20697373756573207468617420776520616C6C206465736572766520636C6172697479206F6E2E2054686973206973206173206D616C65766F6C656E7420617320616E792074797065206F662063656E736F727368697020726567696D6520696E2074686520776F726C6420E2809420616E64207765206E65656420746F20636F6D6520746F67657468657220746F206368616C6C656E676520697420616E6420627265616B207468652077616C6C206F662063656E736F727368697020746F206163686965766520612066756E6374696F6E616C2064656D6F6372616379206174206C6173742E0A0A23232320476E6F2E6C616E64E28099732043757272656E74205068617365206F6620446576656C6F706D656E740A0A476E6F2E6C616E642069732063757272656E746C792072756E6E696E6720696E2069747320746869726420746573746E657420616E642074686572652077696C6C206265207365766572616C206D6F726520746573746E657473206265666F72652074686520706C6174666F726D2069732070726F64756374696F6E2072656164792E204D6F6465726E20636976696C697A6174696F6E207761736EE2809974206275696C7420696E2061206461792C20616E64206E6569746865722077696C6C20476E6F2E6C616E64207275736820696E746F20636F6D6D697474696E6720746F20616E206578616374206C61756E636820646174652E20486F77657665722C20746865206E65787420646576656C6F706D656E742C20616E20696E63656E746976697A656420746573746E65742063616C6C656420E2809847616D65206F66205265616C6D73E280992C206973207363686564756C656420666F7220513120323032332E0A0A47616D65206F66205265616C6D732077696C6C2062652073696D696C617220746F20E2809847616D65206F66205374616B6573E28099206F6E2074686520436F736D6F732048756220616E642077696C6C2072657761726420746865206561726C6965737420616E64206265737420636F6E7472696275746F72732E20496620796F7520776F756C64206C696B6520746F2066696E64206F7574206D6F72652061626F75742047616D65206F66205265616C6D732C20476E6F2E6C616E642C20476E6F6C616E672C206F7220616E797468696E6720656C73652C20206A6F696E20757320666F72206F757220666972737420636F6D6D756E6974792063616C6C207769746820476E6F2E6C616E6420466F756E6465722C204A6165204B776F6E206F6E204E6F76656D6265722032326E642C2061742034706D20555443206F6E206F7572205B446973636F7264206368616E6E656C5D2868747470733A2F2F646973636F72642E67672F5946744D6A5777554E37292E205765206C6F6F6B20666F727761726420746F20736565696E6720796F752E0A3214323032322D31312D32315431373A31333A30305A3215636872697374696E612C6A61652C6D616E667265643266676E6F6C616E642C676E6F73682C676E6F742C7065726D697373696F6E6C6573732C636F6E73656E7375732C70726F6F662D6F662D636F6E747269627574696F6E2C64616F2C676F7665726E616E63652C6962632C64656D6F63726163792C66726565646F6D0AE96F0A0A2F766D2E6D5F63616C6C12DA6F0A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F73743209746563682D616D6131322B476E6F2E6C616E6420436F6D6D756E69747920546563686E6963616C20414D41202331202D20526563617032C56D0A0A596F7572207175657374696F6E732C206F62736572766174696F6E732C20616E6420666565646261636B2061726520766974616C20746F206F757220636F726520646576656C6F706D656E74207465616D2E204E6F74206F6E6C7920646F2074686579206769766520757320616E20756E6465727374616E64696E67206F6620746865207479706573206F66206170706C69636174696F6E7320616E642066656174757265732074686520636F6D6D756E69747920776F756C64206C696B6520746F207365652062757420746865792068656C7020757320666F726D756C6174652062657474657220696465617320666F7220646576656C6F70696E6720476E6F2E6C616E6420617320776520676F2E204265666F7265207765206469766520696E746F206F7572207365636F6E64202A2A446973636F726420414D41206F6E204E6F76656D6265722032326E64204034706D205554432A2A2C20636865636B206F75742074686520636F6D6D756E697479207175657374696F6E732066726F6D206F757220666972737420746563686E6963616C20414D412062656C6F7720616E73776572656420627920636F726520476E6F2E6C616E642064657673204A6165204B776F6E20616E64204D616E6672656420546F75726F6E2E0A0A232323205768792064696420796F752063686F6F736520476F6C616E67206F76657220527573743F0A0A2A2A4A61652A2A3A20E2809C5769746820706172616C6C656C69736D206F6666657265642062792049435331205B496E746572636861696E20536563757269747920315D2C2074686520626F74746C656E65636B206265636F6D6573207370656564206F6620696E6E6F766174696F6E2077697468207361666520636F64652C20726174686572207468616E2062617265206D6574616C20706572666F726D616E63652E20536F20686572652C206761726261676520636F6C6C656374696F6E2C20636F6E63757272656E63792C20656D6265646461626C6520737472756374757265732C20616E6420636C65617220737065632061726520676F6F64207072696D69746976657320666F7220746865206E6578742D67656E65726174696F6E20736D61727420636F6E7472616374206C616E67756167652E0A0A5275737420286F7220636F6D706F6E656E7473206F6620527573742A2A206D6179206265207573656420746F20696D706C656D656E742066617374657220636C69656E747320666F7220676E6F2E6C616E6420696E20746865206675747572652C2062757420696E207465726D73206F66206D696E6473686172652C204920646F6E2774207468696E6B20527573742063616E20666C697020476F2064756520746F206974732064657369676E2063686F696365732E20546861742773206E6F7420746F207361792074686174205275737420697320616E7920776F727365207468616E20476F3B20746865792061726520646966666572656E742EE2809D0A0A2323232057696C6C20476E6F20626520697473206F776E206875623F2057696C6C20476E6F2070726F76696465204943532D6C696B6520736563757269747920746F20697473206F776E20636F6D6D756E6974793F0A0A2A2A4A61652A2A3A20E2809C476E6F2E6C616E642063616E206265206120226875622C22206C696B6520226769742068756222206973206120226875622C2220627574207468617420646F65736E2774206D65616E2069742077696C6C206F66666572204943532E204966206F7468657220636861696E7320736F6C76652049435331206265747465722C206974206D616B65732073656E736520666F7220676E6F2E6C616E6420746F206265204942432D636F6E6E656374656420746F207A6F6E6573207468617420617265206E6F742049435331207265706C6963617465642F73656375726564207769746820676E6F2E6C616E642076616C696461746F72732E0A0A496620776520636F6E736964657220746861742076616C696461746F7273206F6620676E6F2E6C616E64206172652062657474657220617320636F6E7472696275746F727320746F2074686520676E6F2E6C616E642065636F73797374656D2028726174686572207468616E2067656E6572616C2076616C696461746F7220736572766963652070726F7669646572732A2A207765206D6179206265206D6F726520636F6D666F727461626C6520636F6E747269627574696E6720746F20616E20617765736F6D652065636F73797374656D20627574206E6F7420656E746572696E67207468652076616C696461746F722D61732D612D7365727669636520627573696E6573732E0A0A4974206D616B6573206D6F72652073656E736520746F206D65207468617420436F736D6F73204875622076616C696461746F72732073686F756C64206F776E207468617420627573696E6573732C2077686963682077696C6C206576656E7475616C6C7920726571756972652076616C696461746F727320746F2072756E207468656972206F776E2073657276657220737461636B7320616E64206861766520646174612063656E74657220696E6672617374727563747572652EE2809D0A0A23232320486F772063616E206F6E65206265636F6D6520612076616C696461746F723F0A0A2A2A4A61652A2A3A20E2809C46697273742C206F6E652068617320746F206265636F6D652061206D656D6265722E2057652068617665206E6F742079657420646566696E6564207468652066756C6C206D656D6265722073797374656D2C206275742077652077696C6C206669677572652074686174206F757420616C6F6E6720746865207761792E20466F72206E6F772C2077652063616E2073617920746861742077652077616E7420666972737420616E6420666F72656D6F7374206D656D626572732077686F20616C736F2076616C69646174652C20726174686572207468616E20696D7061727469616C2076616C696461746F72732074686174206F6E6C792076616C69646174652EE2809D0A0A23232320486F7720646F657320476E6F2076616C696461746520776F726B3F20506F533F2050726F6F66206F6620436F6E747269627574696F6E3F0A0A2A2A4D616E667265642A2A3A20E2809C54686520636F6E7472696275746F72732044414F2077696C6C20656C6563742076616C696461746F727320616E642076616C696461746F72732077696C6C2068617665207468652073616D6520616D6F756E74206F6620706F7765722E2054686579276C6C20626520666F6375736564206F6E2076616C69646174696E6720616E642077696C6C2072656365697665207265776172647320666F722074686174206A6F622EE2809D0A0A23232320576861742069732050726F6F66206F6620436F6E747269627574696F6E3F2057686174206B696E64206F6620636F6E747269627574696F6E2077696C6C2062652063726564697465643F0A0A2A2A4D616E667265642A2A3A20E2809C50726F6F662D6F662D436F6E747269627574696F6E20697320612077617920746F207265706C6163652050726F6F662D6F662D5374616B6520776974682061206D6574726963206261736564206F6E2074686520636F6E747269627574696F6E732E2049742773206120766172696174696F6E206F662050726F6F662D6F662D417574686F726974792077686572652074686520617574686F7269747920697320612044414F206F6620636F6E7472696275746F72732E20416674657220746865202747616D65206F66205265616C6D732A2A20636F6D7065746974696F6E2C207765276C6C2072657761726420746865206265737420636F6E7472696275746F72732077697468206120746965726564206D656D6265727368697020696E207468652066697273742076657273696F6E206F662050726F6F662D6F662D436F6E747269627574696F6E732044414F2E2054686520766F74696E6720706F77657220616E642065766572797468696E672072656C6174656420746F207374616B696E672077696C6C206265206469737472696275746564206163726F73732074686520636F6E7472696275746F72732E0A0A4C617465722C207765276C6C20616464206D6F726520666C65786962696C69747920746F20746865206D656D6265727368697020776974682024474E4F53482C20616C6C6F77696E67206D6F726520616363757261746520616E64206661697220726577617264732E2056616C696461746F727320776F6E2774207265636569766520766F74696E6720706F7765722077697468207374616B696E672E205468652044414F2077696C6C20656C656374207468656D2C20616E6420746865792077696C6C20616C6C2072656365697665207468652073616D6520616D6F756E74206F6620706F7765722E2056616C696461746F72732077696C6C2072656365697665207265776172647320666F7220746865697220746563686E6963616C20776F726B2C206E6F7420666F722074686520616D6F756E74206F66207374616B656420746F6B656E7320746865792061726520626F756E6420746F2EE2809D0A0A232323204973207468657265206120646F63756D656E74206F72207265736F7572636520746861742064657363726962657320746865206B657920636F6E636570747320696E206120476E6F20736D61727420636F6E74726163743F0A0A2A2A4D616E667265642A2A3A20E2809C576520686176652079657420746F2067657420612073696E676C6520746F702D6C6576656C20646F63756D656E746174696F6E2C20736F7272792E20596F752063616E2066696E6420646F63756D656E746174696F6E20696E2074686520636F64652C20524541444D452066696C65732C206973737565732C206574632E205765206E65656420746F20696D70726F766520746869732E2054686520636F6D6D756E6974792077696C6C2062652061626C6520746F20776F726B206F6E207468697320647572696E672047616D65206F66205265616C6D732EE2809D0A0A2323232049732074686572652061206269672D70696374757265206469616772616D206F66207468652065636F73797374656D3F0A0A2A2A4A61652A2A3A20636F736D6F7320687562203C2D2D20226563322B44544343220A676E6F2E6C616E64203C2D2D202267697468756220666F7220676E6F220A28636F736D6F7320687562206574632920494353207A6F6E6573203C2D2D2022686F6C7920677261696C22207363616C61626C6520736D61727420636F6E7472616374730A796F757220636861696E203C2D2D2022676E6F20696E73696465220A796F757220617070203C2D2D2022696D706F727420676E6F2E6C616E642F2E2E2E220A626C6F636B636861696E2D626173656420636F6D6D756E69636174696F6E732F636F6F7264696E6174696F6E2F646973636F7572736520706C6174666F726D203C2D2D2075730A2F2F20445443433A202268747470733A2F2F7777772E696E766573746F70656469612E636F6D2F7465726D732F642F647463632E61737022202F2F206D7920706F696E742069732C206265206120676F6F642072656C6961626C6520746F6B656E20687562207769746820676F6F6420676F7665726E616E63652EE2809D0A0A2323232049276D206120646576656C6F70657220285048502C20507974686F6E2A2A2E20486F772063616E2049206265636F6D65206120476E6F20646576656C6F7065723F20506C6561736520616476697365206D65206F6E20776865726520746F2073746172742E0A0A2A2A4D616E667265642A2A3A20E2809C5374617274206C6561726E696E6720476F21204F6E65206F6620746865206C6F6E672D7465726D20676F616C73206F6620476E6F20697320746F206D616B652077726974696E6720636F6E74726163747320617320656173792061732077726974696E67207765623220617070732E20546865206C616E677561676520697320616C7265616479207374726F6E6720696E207468617420646972656374696F6E2C20627574207765207374696C6C206E65656420746F20636174636820746F6F6C696E672C20646F63756D656E746174696F6E2C207475746F7269616C732C20616E64206C616E677561676520696D70726F76656D656E74732E20596F75206E65656420746F2068617665206120676F6F64206C6576656C207769746820476F6C616E6720616E64206265206175746F6E6F6D6F757320746F207374617274206275696C64696E67206F6E20476E6F2E0A0A4F6E65206F66207468652047616D65206F66205265616C6D7320747261636B732077696C6C20626520746F20776F726B206F6E2065766572797468696E672072656C6174656420746F206F6E626F617264696E67206D6F72652070656F706C652E20546869732077696C6C20626520746865206265737420706C61636520746F207772697465207370656369666963207475746F7269616C7320746F206F6E626F6172642070656F706C652066726F6D206F746865722065636F73797374656D73206F72206C616E6775616765732EE2809D0A0A5768617420617265205265616C6D732C20616E642077686174206973207220626F6172643F0A0A2A2A4A61652A2A3A20E2809C41207265616C6D206973206120476E6F207061636B61676520776974682073746174652C207468617420726570726573656E7473206120736D61727420636F6E747261637420776974682073746F7261676520616E6420636F696E732E20546865206F7468657220476E6F207061636B6167657320646F6E277420686176652073746174652C20616E6420736F2061726520227075726522207061636B6167657320746861742063616E20626520696D706F727465642066726F6D206F74686572207265616C6D206F72206E6F6E2D7265616C6D207061636B616765732E204C696B65206C616E642D7461782C207265616C6D73206D7573742062652077686974656C6973746564206F72207061792073746F726167652075706B65657020666F722074686569722073746174652E20596F752063616E20637265617465206E6577207265616C6D732062792075706C6F6164696E672061206E6577207061636B616765207769746820746865207061636B616765206469726563746F7279207374617274696E672077697468202F722F5245414C4D2F4E414D452E0A0A2F722F64656D6F2F626F61726473206973206120476E6F207061636B61676520746861742072656E646572732061206D65737361676520626F6172642E20497420697320612070726F6F66206F6620636F6E63657074206D65737361676520626F617264207772697474656E20696E20476E6F2E2053696E6365207765206E65656420746F207072657365727665206D657373616765732C206974206973206120737461746566756C20287265616C6D2A2A207061636B6167652E20596F752063616E20736565207468652066696C6573206F66207468652064656D6F20626F617264732C206C696B653A0A0A68747470733A2F2F74657374332E676E6F2E6C616E642F722F64656D6F2F626F617264732F626F6172642E676E6F0A0A23232320486F7720646F2065787465726E616C207061636B616765732067657420696D706F727465643F0A0A2A2A4D616E667265642A2A3A20E2809C4578616D706C653A207768656E20796F752063616C6C20796F757220736D61727420636F6E74726163742066726F6D20476F20647572696E672074657374696E672C20686F772063616E2F73686F756C64207468617420736D61727420636F6E7472616374206C6F61642065787465726E616C207061636B616765733F0A0A4120676E6F6C616E672063616E206F6E6C7920696D706F7274206F7468657220676E6F6C616E6720636F6E7472616374732F6C696272617269657320746861742077657265207075626C6973686564206F6E2D636861696E2E20496620796F752077616E7420746F20696D706F727420616E2065787465726E616C20476F6C616E67206C6962726172792C20796F75206E65656420746F20706F727420697420746F20476E6F2C20616E64207075626C6973682069742061732061206C6962726172792C207468656E20796F752063616E20696D706F72742069742066726F6D206120746F702D6C6576656C20636F6E74726163742E0A0A676E6F646576207465737420697320616E20657863657074696F6E2C206974206261736963616C6C79206372656174657320616E20696E2D6D656D6F727920476E6F6C616E6720564D2C207075626C69736865732074686520646570656E64656E6369657320286175746F6D61746963616C6C792064657465637465642A2A2C20616E642065786563757465732074686520746573742E2054686520746F6F6C2063616E2061637420646966666572656E746C792066726F6D20746865207265616C206F6E2D636861696E20657870657269656E63652E204E6F74652074686174207765276C6C20696D70726F76652074686520676E6F64657620736F2069742063616E206175746F6D61746963616C6C7920646F776E6C6F6164206F6E2D636861696E20636F6E747261637473206F722075736520637573746F6D206C6F63616C2070617468732C20746F20737570706F727420616476616E63656420646576656C6F706D656E7420776F726B666C6F77732EE2809D0A0A2323232057686174206973206120476E6F64653F0A0A2A2A4A61652A2A3A20E2809C4920646F6E2774206C696B6520746865206E616D652022476E6F6465222062656361757365206974277320746F6F2067656E657269632C2062757420746865206964656120697320746F206275696C6420476E6F2D6261736564206275696C64696E6720626C6F636B7320666F7220476E6F44414F732C206173204D79476E6F646520656D6265647320636F6D706F6E656E747320286F66206F776E6572732C2074726561737572792C20626F6172642C206574632E2A2A20686572653A0A0A68747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F636F6D6D69742F623931323862316436396630326462623439626538383365306337306665396433666334306463630A0A2A2A4D616E667265642A2A3A20E2809C57652063616E206368616E676520746865206E616D6520F09F99822E204120476E6F646520697320612044414F20696D706C656D656E746174696F6E207468617420696D706C656D656E747320616E20696E7465726661636520616C6C6F77696E67207468656D20746F20696E7465726163742E204120476E6F64652063616E2068617665206120706172656E7420616E642068617665206368696C6472656E2E20546F702D646F776E20696E746572616374696F6E73206D61792062652066756E64696E672C206772616E74732C20616E6420617070726F76616C732E20426F74746F6D2D757020696E746572616374696F6E73206D6179206265207265706F7274696E67206F7220766F74696E672E2054686520696D706C656D656E746174696F6E20697320666C657869626C652E20596F752063616E20686176652044414F73206D616E6167696E67206120476E6F64652C206974732074726561737572792C20616E6420766F74696E67207468652063726F73732D476E6F646520696E746572616374696F6E732E20596F752063616E206861766520476E6F646573207769746820616E20656C6563746564206C6561646572206F72206F6E652064726976656E206279206120626F74206F7220616E6F7468657220626C6F636B636861696E2E204F6E65206F662074686520676F616C73206F662047616D65206F66205265616C6D732077696C6C20626520746F2070726F706F736520766172696F757320696D706C656D656E746174696F6E73206F6620476E6F6465732E0A0A417420746865206C6576656C206F6620476E6F6C616E642C2077652077696C6C2070726F6261626C792068617665206120746F702D6C6576656C20476E6F6C616E6420476E6F6465206D616E6167696E67206120676C6F62616C20747265617375727920616E6420766973696F6E2E205468656E20766172696F757320746563686E6963616C20616E64206E6F6E2D746563686E6963616C206368696C6420476E6F646573206D616E6167652073756273657473206F662074686520747265617375727920616E64207468656972207461736B732E2054686579206D617920616C736F2068617665206368696C6472656E2E205769746820494243322C20476E6F64657320636F756C64206265206469737472696275746564206163726F737320646966666572656E7420636861696E732EE2809D0A0A2323232057686174206973207468652074696D656C696E6520666F7220494243323F0A0A2A2A4A61652A2A3A20E2809C416674657220746865206C61756E6368206F6620676E6F2E6C616E642C2049424332206973207065726D697373696F6E6C65737320696E6E6F766174696F6E20616E796F6E652063616E2074727920666F722C20736F204920696D6167696E65206E6F74206C6F6E6720616674657220746861742E20416674657220696E697469616C20696D706C656D656E746174696F6E732C2049206265742077652077696C6C2077616E7420746F20747765616B2F6F7074696D697A6520746865204D65726B6C65207472656520667572746865722C2062757420746869732063616E20636F6D6520616674657220494243322064656D6F732EE2809D0A0A2323232043616E20796F752074656C6C207573206D6F72652061626F75742047616D65206F66205265616C6D733F0A0A2A2A4D616E667265642A2A3A20E2809C47616D65206F66205265616C6D73206973206120636F6D7065746974696F6E20746F206275696C642074686520666972737420636F6E747261637473206F6620476E6F6C616E6420616E64206578706572696D656E7420776974682070726F6F66206F6620636F6E747269627574696F6E732E205468652066697273742073746570206F662074686520636F6D7065746974696F6E2077696C6C20626520746F206275696C6420746865206D697373696E6720746F6F6C7320666F7220746865207365636F6E6420737465702E20536F2070656F706C652077696C6C20636F6D7065746520746F207772697465207468652044414F20746861742077696C6C2072657669657720746865206F7468657220636F6E747269627574696F6E7320616E6420616C6C6F6361746520706F696E74732E0A0A5468652072657374206F662074686520636F6D7065746974696F6E2077696C6C2062652061626F757420636F6D706574696E6720746F20777269746520746865206265737420636F6E74726163747320666F722077656C6C2D6B6E6F776E2063617465676F72696573206F72206D616B65206E6F6E2D746563686E6963616C20636F6E747269627574696F6E732E2041742074686520656E642C207765276C6C2068617665207374726F6E6720666F756E646174696F6E7320286C69627261726965732C2072756C65732C207475746F7269616C732C2064417070732A2A20746F2068656C70207570636F6D696E67206275696C6465727320746F20737461727420696E2062657474657220636F6E646974696F6E732E20546865206265737420636F6E7472696275746F72732077696C6C206561726E207265776172647320616E64206D656D6265727368697020696E20746865206675747572652044414F206F6620636F6E7472696275746F727320746861742077696C6C20636F2D6F776E2074686520636861696E2E0A0A5765276C6C2068617665207468652066697273742076657273696F6E206F6620612050726F6F662D6F662D436F6E747269627574696F6E732D62617365642044414F206F6620636F6E7472696275746F72732E20466F637573206F6E206F6E65206F6620746865206F6666696369616C20747261636B733A206275696C64206120636F6E747261637420737569746520746F20636F6D70657465207769746820436F736D6F732720676F7665726E616E6365206D6F64756C6520746F206576656E7475616C6C7920636F6D706C65746520436F736D6F732048756220676F7665726E616E63652E205265616C6D20626F61726473206172652062617369632064697363757373696F6E20636F6E74726163747320746861742063616E206265207573656420666F722064697363757373696F6E732C20616E6420626520657874656E64656420666F7220676F7665726E616E63652C206C61756E63687061642C206F72206F74686572207468696E6773206D6978696E672064697363757373696F6E7320616E642044414F20616374696F6E732EE2809D0A0A23232320497320697420706F737369626C6520746F206275696C6420636F6465207769746820676E6F2E6C616E64206469726563746C79206F6E6C696E653F0A0A2A2A4A61652A2A3A20E2809C57652077696C6C206D616B65207468652073616E64626F782073746167696E672E676E6F2E6C616E6420656E7669726F6E6D656E74206561737920746F206163636573732C20616E6420746861742077696C6C2062652070726566657261626C6520746F2074657374696E67206F6E20676E6F2E6C616E64206469726563746C792E2054686520676E6F20636F64656261736520747269657320746F2072656D61696E206D696E696D616C20736F2069742073686F756C646E277420626520646966666963756C7420746F2072756E206974206C6F63616C6C792EE2809D0A0A2A2A4D616E667265642A2A3A20E2809C49277665207365656E2070656F706C652077726974696E6720636F6E7472616374732066726F6D205653436F6465206F6E20616E206F6E6C696E65205653436F646520696E7374616E63652E20536F6D656F6E6520636F756C64206372656174652061205653436F64652074656D706C61746520636F6E6669677572656420746F20636F6D6D756E696361746520776974682073746167696E672062792064656661756C74207769746820612064756D6D792077616C6C657420636F6E7461696E696E6720746F6B656E732EE2809D0A0A232323204973207468657265206120706C616E20746F2062652061626C6520746F207573652074686520476E6F20564D2077697468206120436F736D6F732053444B2D626173656420636861696E3F0A0A2A2A4D616E667265642A2A3A20E2809C54686973206973206F6E65206F662074686520706C616E732C207965732E20416E64206E6F74206F6E6C79206F6E20436F736D6F732053444B2E2042757420776520646F6E27742068617665206120636C65617220706C616E2061626F757420686F772069742077696C6C2068617070656E207965742EE2809D0A0A23232320486F772061626F757420696E7465726F7065726162696C6974793F0A0A2A2A4A61652A2A3A20E2809C526567617264696E6720696E7465726F7065726162696C6974792C2077696C6C206974206265206265747765656E20476E6F20636861696E732C207769746820436F736D6F732C206F722077697468206D6F726520636861696E73206F757473696465206F6620436F736D6F733F204966206974206973207769746820636861696E73206F757473696465206F6620436F736D6F732C207768696368206F6E65732C20696E207468652073686F727420616E64206C6F6E67207465726D3F2049207468696E6B20696620746865206C6174746572207765726520746F20636F6D6520746F20706173732C2074686520776F726C64206F66207765623320616E64204E465420636F756C6420626520617765736F6D652E2053686F72742072756E2C20436F736D6F732053444B2D626173656420636861696E732077697468204942433120666F7220636F646520696D706F727420616E642063726F73732D636861696E20736D61727420636F6E74726163742063616C6C733B20627574207769746820494243322F476E6F2069742773207265616C6C7920757020746F2074686520736D61727420636F6E7472616374206C6F6769632EE2809D0A0A2323232041726520476E6F2E6C616E6420746F6B656E6F6D696373206465666C6174696F6E6172793F0A0A2A2A4A61652A2A3A20E2809C54686572652077696C6C2062652024474E4F542C20616E64207468697320746F6B656E2077696C6C206265207573656420666F72207370616D2070726576656E74696F6E20666565207061796D656E742C20616E642069742077696C6C206265206465666C6174696F6E6172792E2050726576696F75736C792C207765206469736375737365642024474E4F53482061732061207365636F6E6461727920746F6B656E2C206275742077652068617665206D6F76656420617761792066726F6D207468652024474E4F542F24474E4F5348206D6F64656C20616E642077696C6C206B6565702024474E4F54207768696C65206D616B696E6720676E6F2E6C616E64206D6F72652061626F7574206D656D6265727368697020616D6F6E67206C6576656C73206F662070656572732E0A0A49207468696E6B207765206E65656420616E20616C7465726E617469766520746F2074686520436F736D6F73204875622074686174206973206D6F72652070656F706C652D63656E74726963207468616E207374616B652D63656E747269632C20616E6420776865726520616C69676E6D656E74206973206E6F7420626F75676874206F7220736F6C642062757420646570656E6473206F6E20636F6E747269627574696F6E7320616E642076616C756520616C69676E6D656E742070726F76656E206F7665722074696D652E2054686520686F70652069732074686174206279206D6F76696E6720617761792066726F6D2061207075726520746F6B656E6F6D69637320706572737065637469766520616E64206D6F76696E6720696E746F20746865207265616C6D206F6620706F6C697469637320616E642065746869637320616C6F6E6720776974682067656E6572616C2065636F6E6F6D6963732077652063616E20637572617465206120646966666572656E74206B696E64206F662063756C747572652EE2809D0A0A2323232041726520746865726520616E7920636F6C6C61626F726174696F6E732077697468206F746865722070726F6A6563747320746F206275696C64206F6E20476E6F3F0A0A2A2A4A61652A2A3A20E2809C5965732C2077687920646F6E2774207765206D616B652074686973207472756C79206F70656E2C20696E20746865207374796C65206F66206672656520736F6674776172652C20736F20746861742077652063616E206275696C642075706F6E206120636F6D6D6F6E20564D2064657369676E3F20546865206F6E6C79207468696E6720492077616E7420746F2072657461696E20636F6E74726F6C206F76657220666F7220612074656D706F72617279206475726174696F6E206F662074696D652069732074686520726567756C6174696F6E206F662074726164656D61726B732C206C696B652022676E6F222C2022676E6F2A2A222C20222A676E6F22202862757420796F752063616E2075736520746865206C6963656E736520746F20666F726B20746869732070726F6A65637420686F776576657220796F752077616E74293B20616E642077652077616E742070726F706572206174747269627574696F6E2C2062757420746865204147504C20666F726B206C6963656E736520737567676573747320686F772077652063616E20776F726B20746F67657468657220636F6C6C61626F7261746976656C792E0A0A54686520474E4F20564D2063616E2062652075736564206F6E20616E7920636861696E20696620697420666F6C6C6F777320746865204147504C207374796C65206C6963656E73652C207768696368207765206172652063616C6C696E67207468652022476E6F2047504C222E20426C6F636B636861696E732063616E207374696C6C20626520636F6D706F736564206F6620636F6D706F6E656E7473206C6963656E736564207769746820636F6D70617469626C65206F70656E20736F7572636520736F6674776172652E2057652063616E20636F6C6C61626F7261746520696E6469726563746C7920627920776F726B696E6720616E6420636F6E747269627574696E6720746F207468652073616D6520636F6465626173652C20616E64206B6E6F7720746861742074686520636F646520776520617265206275696C64696E6720746F6765746865722077696C6C20616C7761797320626520617661696C61626C6520666F7220796F7520746F2075736520666F7220796F757220636861696E2C206173206C6F6E672061732069742072656D61696E7320616E64206973206F66666572656420617320474E4F206672656520736F6674776172652E0A0A536F20616E796F6E652063616E206275696C6420474E4F20736D61727420636F6E74726163747320696E746F20746865697220636861696E20666F7220667265652C206163636F7264696E6720746F20746865206C6963656E736520776520617265206465726976696E672066726F6D2074686520474E5520286E6F7420474E4F2A2A204147504C206C6963656E73652E20596F7520646F6E2774206861766520746F2070617920676E6F2E6C616E64206F7220616E796F6E6520696620746865206C6963656E736520697320666F6C6C6F7765642E204578616D706C653A2077652077696C6C20636F6C6C61626F7261746520776974682074686520436F736D6F732048756220616E6420436F736D6F732F41544F4D20636F6D6D756E69747920746F206F6666657220676E6F2044414F7320746F20626520686F7374656420627920494353312C20616E642068656C70206272696E6720636F6C6C61626F726174696F6E20746F6F6C7320666F7220436F736D6F732E20536F207468697320697320686F7720676E6F20776F726B73207769746820436F736D6F732048756220617373756D696E67204943533120697320736F6C7665642E20417320666F7220676E6F2E6C616E642C2077652063616E207374617274206F6666207769746820616E20696E646570656E64656E7420676E6F20696E7374616E636520666F722074686520436F736D6F7320487562277320676E6F207368617264732C20616E64206C6174657220616C6C6F77207468652049424320696D706F7274696E67206F662076657474656420636F64652066726F6D20676E6F2E6C616E642F2A2EE2809D0A0A2323232041706172742066726F6D204164656E612C2061726520746865726520616E7920706C616E7320666F7220616E6F746865722077616C6C65743F0A0A4A61653A20E2809C49207468696E6B2077686174207765206E6565642061726520612066657720636F6D706574696E67206261736520696D706C656D656E746174696F6E7320746861742062657374206C6576657261676520746865206672616D65776F726B2074686579206275696C642075706F6E2C20726174686572207265616374206F72206D696E696D616C207675653B20616E6420746F2063726561746520636F6D6D6F6E20636F7265206C696272617269657320616C6F6E67207468652077617920696620726561736F6E61626C652E20427574207468657265206F7567687420746F206265206D6F7265207468616E206F6E6520617070726F61636820666F7220737563682061206B657920636F6D706F6E656E742C2077697468207370656369616C20636172652074616B656E20696E746F20636F6E73696465726174696F6E20666F722073656375726974792E204C696B652C204920646F6E27742061677265652077697468204B65706C722061736B696E6720736F20656173696C7920666F7220612031322F32342D776F7264206D6E656D6F6E69632C206576656E2069662074686520696D706C656D656E746174696F6E206973207365637572652C20697420697320676F696E6720746F206265636F6D6520612070726F626C656D2E20505341206274772EE2809D0A0A2323232057656E206D61696E6E65743F0A0A2A2A4A61652A2A3A20E2809C536F6D652074696D65206279205132206E657874207965617220776F756C6420626520676F6F642E2042757420617320706F6C6963792C2077652063616E277420636F6D6D697420746F206120646174652C20626563617573652065766572797468696E672068617320746F206265207265616479206669727374206265666F726520746865206F6666696369616C206C61756E63682E204F757220746865736973206973207468617420686176696E67207468652044414F2077697468207375622D44414F732077696C6C20616C6C6F7720757320746F2072656163682074686520656E6420726573756C7420696E206120666173746572207761792076696120736F6D6520666F726D206F6620706172616C6C656C69736D2E2046697273742C207765206E6565642044414F7320746F20617373657373206E657720636F64652C20616E642062657474657220555820666F72206D616E6167696E6720736F6D657468696E67206C696B6520757067726164657320746F2074686520436F736D6F73204875622E204F6E63652077652068617665207468652044414F2072756E6E696E67206F6E2074657374782E676E6F2E6C616E642C20666F7220736F6D652078203E20342C20616E64207765206861766520636865636B656420616C6C20766974616C20544F444F732C2077652077696C6C206B6E6F7720746861742077652061726520726561647920666F7220226D61696E6E65742E220A0A5F446F20796F752068617665206D6F7265207175657374696F6E7320666F72204D616E66726564206F72204A61653F20576F756C6420796F75206C696B6520746F206B6E6F77206D6F72652061626F757420476E6F2E6C616E642C20476E6F6C616E672C2047616D65206F66205265616C6D732C206F72207761797320746F20636F6E7472696275746520746F206F75722067726F77696E672065636F73797374656D3F2044726F702075732061207175657374696F6E206F6E20446973636F726420616E64206265207375726520746F206A6F696E20757320666F72206F7572207365636F6E64202A2A414D41206F6E20446563656D62657220367468204034706D205554432E2A2A5F0A3214323032322D31322D30355431363A31353A30305A320B6D616E667265642C6A61653266676E6F6C616E642C676E6F73682C676E6F742C7065726D697373696F6E6C6573732C636F6E73656E7375732C70726F6F662D6F662D636F6E747269627574696F6E2C64616F2C676F7665726E616E63652C6962632C64656D6F63726163792C66726565646F6D0ABC360A0A2F766D2E6D5F63616C6C12AD360A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374320A676F722D6C61756E6368323E47616D65206F66205265616C6D73204973204F6E3A2057696E205265776172647320666F7220436F6E747269627574696E6720746F20476E6F2E6C616E6432D8340A0A5068617365206F6E65206F662047616D65206F66205265616C6D732C206120776F726C647769646520636F6D7065746974696F6E20746F206275696C6420746865206265737420476E6F6C616E6720736D61727420636F6E7472616374732C202A2A6973206E6F77206F70656E2A2A2E2047616D65206F66205265616C6D73206973206120686967682D7374616B657320636F6E746573742077697468206120746F74616C207072697A6520706F6F6C206F66202A2A3133332C3730302041544F4D2A2A20746861742077696C6C20736565207061727469636970616E747320636F6D7065746520666F7220746965726564206D656D6265727368697020746F20636F2D6F776E2074686520476E6F2E6C616E6420626C6F636B636861696E2C20746865206E6578742D67656E65726174696F6E20736D61727420636F6E747261637420706C6174666F726D207468617420757365732074686520476E6F6C616E672028476E6F292070726F6772616D6D696E67206C616E67756167652E204120736572696573206F6620636F6D706C657820746563686E6963616C20616E64206E6F6E2D746563686E6963616C207461736B732077696C6C206368616C6C656E676520636F6E7472696275746F727320746F2063726561746520696E6E6F766174697665207061747465726E73207468617420707573682074686520636861696E20746F206E6577206C696D6974732E20496620796F75E28099726520696E746572657374656420696E2068656C70696E67206275696C6420746865206D6F737420696E7475697469766520736D61727420636F6E747261637420706C6174666F726D20696E2077656233E280947768696C65206761696E696E67207265776172647320666F7220796F757220636F6E747269627574696F6EE280946A6F696E20746F646179206279206F70656E696E672061205B505220686572655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F292E0A0A5468652047616D65206F66205265616C6D7320636F6E746573742077696C6C20616C6C6F77207061727469636970616E747320746F206765742061206665656C20666F722074686520476E6F2E6C616E6420706C6174666F726D207768696C65206275696C64696E6720736D61727420636F6E74726163747320616E64206170706C69636174696F6E7320696E207468652065636F73797374656D2E2049742077696C6C2074616B6520706C61636520696E2074776F207374616765732C207068617365206F6E6520616E642070686173652074776F2E205068617365206F6E652069732061626F7574206275696C64696E672074686520636F726520696E6672617374727563747572652C20746F6F6C732C20616E64207475746F7269616C73206E656365737361727920746F206F70656E2074686520676174657320746F2062726F616465722070617274696369706174696F6E20616E642077696C6C2062652068656C64206F66662D636861696E2E2050686173652074776F2C206F6E20746865206F746865722068616E642C2077696C6C2074616B6520706C61636520616674657220746865207375636365737366756C20636F6D706C6574696F6E206F66207068617365206F6E6520616E642062652068656C64206F6E2D636861696E2C20776865726520636F6E7472696275746F72732077696C6C206275696C6420736D61727420636F6E747261637473206F6E2074686520706C6174666F726D2E0A0A496E206164646974696F6E20746F207468652041544F4D207072697A6520706F6F6C2C20746865206265737420636F6E7472696275746F72732077696C6C20616C736F206265206177617264656420286D6F73746C792920696E697469616C2D6C6576656C206D656D6265727368697020746F20676F7665726E20746865207570636F6D696E67206D61696E6E65742E204D656D626572736869702077696C6C20626520616C6C6F6361746564206163636F7264696E6720746F20746865207175616C69747920616E6420657874656E736976656E657373206F662074686520636F6E747269627574696F6EE280947468652068696768657220746865207175616C6974792C20746865206869676865722074686520746965722C20616E642074686520677265617465722074686520766F74696E672072696768747320616E6420726577617264732E2054686520746F7020657175616C206D656D626572732077696C6C20626520636F6D706F736564206F662070656572732077686F206861766520636F6E747269627574656420746865206D6F737420746F207468652065636F73797374656D20616E64206861766520616E20756E6465727374616E64696E67206F662069747320636F726520636F6D706F6E656E74732E20546F70206D656D626572732077696C6C20616C736F206861766520616C69676E656420636F7265206D6F72616C2076616C7565732E205468697320697320657373656E7469616C20736F2074686174206D656D626572732063616E206D61696E7461696E2074686520636861696E20746F676574686572206163636F7264696E6720746F2069747320436F6E737469747574696F6E20285442442A2A20616E6420756C74696D6174656C79206372656174652061207375737461696E61626C652065636F73797374656D2074686174207265776172647320616C6C2076616C7561626C6520636F6E747269627574696F6E732E0A0A23232047616D65206F66205265616C6D73202D205068617365204F6E6520284F66662D436861696E290A0A5768696C652077652061696D20746F20656E636F75726167652063726F73732D636F6C6C61626F726174696F6E206265747765656E206465767320616E64206E6F6E2D74656368732C207068617365206F6E65206F662074686520636F6E74657374206973207265636F6D6D656E64656420666F7220616476616E63656420646576656C6F706572732077686F20617265206D6F7265206175746F6E6F6D6F757320616E642063616E20636F6E747269627574652077697468206C696D697465642067756964656C696E657320616E6420737570706F72742E204163636F756E74696E6720666F722061726F756E64206F6E652D7468697264206F662074686520746F74616C202A2A3133332C3730302041544F4D2A2A207072697A6520706F6F6C2C2067657474696E6720612068656164737461727420696E207068617365206F6E652077696C6C20616C6C6F7720736561736F6E6564206465767320746F206B69636B20746865207469726573206F6E2074686520476E6F2E6C616E6420706C6174666F726D2C20636F6E747269627574652077697468206C696D6974656420636F6D7065746974696F6E2C20616E64206275696C642074686520746F6F6C73206E656564656420746F206F70656E20746865207365636F6E642070686173652E0A0A447572696E67207068617365206F6E652C207061727469636970616E74732077696C6C206F70656E2050527320616761696E7374207265706F732066726F6D2074686520476E6F6C616E67206F7267616E697A6174696F6E2E205068617365206F6E6520636F6E7472696275746F72732077696C6C20626520657870656374656420746F20646F63756D656E7420616E6420736861726520746865697220776F726B20656666696369656E746C7920746F20656E61626C65206F746865727320746F2075736520697420776974686F757420636F6E666C696374732E20596F757220636F6E747269627574696F6E20697320766974616C20746F207468652073756363657373206F662074686520636F6E746573742C2074686520476E6F2E6C616E6420706C6174666F726D2C20616E642074686520436F736D6F732065636F73797374656D206174206C617267652C20657370656369616C6C79206E6F772C20776974682064697363757373696F6E7320746F206D6F76652074686520436F736D6F7320487562E280997320636F7265206F7065726174696F6E73206F6E2D636861696E2062792065737461626C697368696E6720612044414F2073797374656D2E0A0A5468652066697273742044414F20746F20626520637265617465642077696C6C20626520746865205B446563656E7472616C697374732044414F5D2868747470733A2F2F6769746875622E636F6D2F646563656E7472616C697374732F44414F292C2077686963682077696C6C2070726F7669646520436F736D6F6E617574732077697468207472616E73706172656E63792C206163636F756E746162696C6974792C20616E6420646563656E7472616C697A6174696F6E2E2054686520446563656E7472616C697374732044414F2077696C6C20696D70726F766520646973636F757273652C206F7267616E697A6174696F6E206D616E6167656D656E742C20646576656C6F706D656E742C20616E6420636F6E666C696374207265736F6C7574696F6E207468726F75676820736D61727420636F6E7472616374732C20616E642077696C6C206F7267616E697A6520697473656C6620696E746F206120736574206F662074696768746C792D616C69676E6564207375622D44414F732064656469636174656420746F20737065636966696320746F706963732C207375636820617320656E67696E656572696E6720616E642066756E64696E672E0A0A536F2C20686F7720646F657320746869732072656C61746520746F2047616D65206F66205265616C6D7320616E6420776861742074797065206F6620636F6E747269627574696F6E7320617265206A7564676573206C6F6F6B696E6720666F723F20486572652061726520736F6D65206578616D706C65732C20696E206F72646572206F66207072696F726974793A0A0A2A202A2A446566696E6520616E6420496D706C656D656E7420616E204576616C756174696F6E2044414F3A2A2A20466F72207468652047616D65206F66205265616C6D7320636F6E746573742C2061207375622D44414F20E2809320746865204576616C756174696F6E2044414F20E28093206973206E656564656420746F206576616C7561746520636F6E747269627574696F6E7320647572696E672070686173652074776F20616E64206174747269627574652072657761726473206163636F7264696E676C792E205573696E6720612044414F2077696C6C20616C6C6F7720636F6D6D756E697479206D656D6265727320746F20766F7465206F6E20746865206265737420636F6E747269627574696F6E7320666F722074686520706C6174666F726D2E20496D706C656D656E746174696F6E206F6620746865204576616C756174696F6E2044414F20697320746865206F6E6C7920737465702074686174206D75737420626520617070726F7665642062792074686520636F7265207465616D2062656361757365206F6620697473206B657920726F6C6520696E2074686520636F6D7065746974696F6E20616E642074686520667574757265206F662074686520706C6174666F726D2E204F6E6365207468652044414F20697320696E20706C6163652C20616C6C2070726576696F757320616E64206675727468657220636F6E747269627574696F6E732077696C6C20626520726576696577656420636F6C6C6563746976656C792062792044414F206D656D626572732E0A0A2A202A2A437265617465205475746F7269616C7320746F204F6E626F617264204D6F7265205061727469636970616E74733A2A2A205765206E65656420657870657269656E636564206465767320746F207772697465206F72207265636F7264207475746F7269616C7320746F2068656C70206D6F72652070656F706C6520676574207374617274656420647572696E672070686173652074776F206F662074686520636F6D7065746974696F6E2028616E64206265796F6E642920616E6420746F2068656C702067726F772074686520476E6F2E6C616E6420646576656C6F70657220636F6D6D756E6974792E205468657365207475746F7269616C732063616E20696E636C75646520746F70696373206C696B6520696E746572616374696E6720776974682074686520636861696E2066726F6D2074686520434C492C20737465702D62792D737465702067756964657320746F206372656174696E6720736D61727420636F6E74726163747320696E20476E6F2C207469707320666F722072756E6E696E672061206C6F63616C2064657620656E7669726F6E6D656E742C20666173742070726F746F747970696E67207769746820676E6F6465762C206F7220746865792063616E206265207475746F7269616C732064656469636174656420746F206365727461696E2061756469656E6365732C207375636820617320646576656C6F7065727320636F6D696E672066726F6D20536F6C6964697479206F7220776562322E20416C6C207475746F7269616C732073686F756C6420626520616464656420746F20746865205B617765736F6D652D676E6F20476974487562207265706F5D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F617765736F6D652D676E6F292E0A0A2A202A2A446566696E6520616E6420496D706C656D656E74206120476F7665726E616E636520436F6E74726163742053756974653A2A2A20496E2074686973206368616C6C656E67652C20646576656C6F706572732077696C6C20626520657870656374656420746F20646566696E6520616E6420696D706C656D656E74206120676F7665726E616E636520636F6E74726163742073756974652063617061626C65206F6620636F6D706574696E672077697468206578697374696E6720636861696E73E2809920676F7665726E616E6365206D6F64756C65732E20496620796F75207468696E6B20796F752063616E20696D70726F76652074686520676F7665726E616E63652073797374656D206F6620436F736D6F73204875622C207468697320697320796F7572206368616E636520746F2073686F7720757320686F77210A0A5068617365206F6E65206368616C6C656E6765732077696C6C2073746179206F70656E20647572696E672070686173652074776F2E204E6F20636F6D7065746974696F6E20706F696E74732077696C6C206265206174747269627574656420647572696E6720746869732070686173652061732074686520706F696E74732077696C6C20626520726574726F2D66756E646564206279207468652044414F20616E64206177617264656420647572696E672070686173652074776F2E0A0A23232047616D65206F66205265616C6D73202D2050686173652054776F20284F6E2D436861696E290A0A50686173652074776F206F662047616D65206F66205265616C6D732077696C6C206F6E626F617264206D6F72652070656F706C6520746F2074686520706C6174666F726D20616E6420626567696E20617320736F6F6E2061732073756666696369656E74206D6174657269616C732061726520636F6D706C657465642066726F6D207068617365206F6E652E204163636F756E74696E6720666F722061726F756E642074776F2D746869726473206F662074686520746F74616C203133332C3730302041544F4D207072697A6520706F6F6C2C2070686173652074776F2077696C6C206265206F70656E20746F20626F746820646576656C6F7065727320616E64206E6F6E2D746563686E6963616C732077686F2063616E20666F6C6C6F77207475746F7269616C732C2063726561746520736D61727420636F6E7472616374732C206F722070726F76696465206F7468657220696D706F7274616E7420636F6E747269627574696F6E7320746F2077696E207265776172647320616E64207363616C652074686520706C6174666F726D2E2041732070686173652074776F2077696C6C2062652068656C64206469726563746C79206F6E2D636861696E2C20636F6E7472696275746F72732063616E207375626D697420746865697220636F6E747269627574696F6E7320746F207468652044414F20776974686F7574207075626C697368696E67207468656D206F6E20746865206D61696E20476974487562207265706F2E20486F77657665722C207765207374726F6E676C7920656E636F757261676520796F7520746F2075736520476974487562206173206974E280997320616E20696D706F7274616E74207265736F7572636520746861742068656C70732074686520636F6D6D756E697479206761696E20612062657474657220756E6465727374616E64696E67207468726F756768207370656369666963206578616D706C65732E0A0A5F5765206172652063757272656E746C7920707265706172696E6720746865206368616C6C656E67657320666F72207061727469636970616E7473206F662070686173652074776F20616E6420617265206C6F6F6B696E6720666F7220796F757220696E7075742E204C6574207573206B6E6F7720776861742074797065206F6620736D61727420636F6E74726163747320796F7520776F756C64206C696B6520746F2073656520286D696E696D616C206F722077697468206D756C7469706C652066656174757265732920696E206F7572207570636F6D696E672047616D65206F66205265616C6D7320414D41206F6E20547565736461792C204A616E75617279203234206174203420706D205554432E204E6F7465207468617420746869732069732061207465787420626173656420414D4120736F206D616B65207375726520746F2061646420796F7572207175657374696F6E73206265666F7265206F7220647572696E672074686520414D4120696E207468652023414D412D7175657374696F6E73206368616E6E656C206F6E20746865205B476E6F2E6C616E6420646973636F72645D2868747470733A2F2F646973636F72642E67672F53386E4B5571776B506E292E0A5F4F6E6365207765206861766520636F6C6C656374656420796F757220666565646261636B20616E642072657175657374732C2077652077696C6C2066696E616C697A6520746865206368616C6C656E67652063617465676F726965732E20596F752063616E20766973697420746865205B47616D65206F66205265616C6D73207265706F5D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F67616D652D6F662D7265616C6D732920666F72206D6F726520696E666F726D6174696F6E2E5F0A3214323032332D30312D31385431353A33363A30305A3200321D676E6F6C616E642C67616D652D6F662D7265616C6D732C6C61756E63680AFE450A0A2F766D2E6D5F63616C6C12EF450A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F73743208676F722D616D61313230476E6F2E6C616E6420436F6D6D756E6974792047616D65206F66205265616C6D7320414D41202331202D2052656361703285440A0A576974682047616D65206F66205265616C6D73206F6666696369616C6C7920696E207068617365206F6E652C20636F726520646576204D616E6672656420546F75726F6E206A756D706564206F6E20446973636F726420746F20616E7377657220476E6F2E6C616E6420636F6D6D756E697479207175657374696F6E732061626F757420746865206F6E676F696E6720686967682D7374616B657320636F6D7065746974696F6E2E2046726F6D207374617274696E6720616E6420656E6420646174657320746F2070617274696369706174696F6E20726571756972656D656E747320616E642061206465736372697074696F6E206F66207461736B732C206C6F6F6B20666F7220796F757220616E737765722062656C6F772E20496620796F7520686176652066757274686572207175657374696F6E73206F722077616E7420746F206A6F696E206F757220636F6D6D756E6974792C20636F6D6520616E642066696E64207573206F6E20746865205B5D476E6F2E6C616E6420446973636F72645D2868747470733A2F2F646973636F72642E636F6D2F6368616E6E656C732F3935373030323232303338343138323331322F31303635363436393633383235303636303434292E2054686520636F7265207465616D2077696C6C20626520686F7374696E6720726567756C617220E2809C6F666669636520686F757273E2809D2073657373696F6E7320736F6F6E20736F20796F752063616E206469736375737320796F75722069646561732077697468207468656D206469726563746C792E0A0A232320512E20486F772061726520746865207461736B7320696E20746865206973737565732061737369676E65643F0A0A5765207265636569766564207175657374696F6E732061626F757420686F7720746865207461736B7320696E207468652047616D65206F66205265616C6D7320697373756573206172652061737369676E65642E2053686F756C64207375626D697373696F6E7320636F6E7461696E207468652077686F6C6520696D706C656D656E746174696F6E3F2049732074686520666F6C6C6F77696E67207461736B2022617661696C61626C652A2A207768656E207468652070726576696F7573206F6E6520697320636F6D706C657465643F20486F772069732074686520E2809C73796E63E2809D2068617070656E696E673F0A0A2A2A412E2A2A20544C3B44523A0A0A45766572797468696E672073686F756C6420676F20736D6F6F74686C7920616E642077652077696C6C206265206C656176696E6720726F6F6D20666F72206E65676F74696174696F6E20696620616E7920726576696577206C6F6F6B7320696E76616C69642E204F6E636520697420686173206265656E2065737461626C69736865642C20746865206576616C756174696F6E2044414F2077696C6C20656E666F72636520686F7720746F207375626D6974206120636F6E747269627574696F6E2E20496E20746865206D65616E74696D652C20746865726520617265206F6666696369616C20636F6D6D756E69636174696F6E206368616C6C656E676573207468617420776520656E636F7572616765207061727469636970616E747320746F207573652E2050656F706C652061726520616C736F206672656520746F20776F726B20696E20737465616C7468206D6F64652C207769746820746865207269736B206F662066696E697368696E6720746F6F206C617465206F72206C6F73696E6720706F696E747320666F72206265696E672062616420617420636F6C6C61626F726174696E672E0A0A2D2D2D2D0A0A576520657870656374207468652063757272656E742069737375657320746F20626520646F6E65206279206D756C7469706C652070656F706C652C20696E206D756C7469706C652073746570732E2042757420616E796F6E652063616E2074727920746F206D616B652065766572797468696E6720696E20737465616C7468206D6F646520616E64206F70656E206120505220776974682065766572797468696E672E204C657427732064697363757373207468652063617365732077652062656C696576652077696C6C2068617070656E3A0A0A232323204361736520310A0A576527726520696E20706861736520312C2070656F706C652077616E7420746F20636F6E74726962757465206275742063616E2774206D616E61676520746F20646F2065766572797468696E672C20736F20746865792077696C6C2074727920746F207061727469636970617465206173206D75636820617320746865792063616E2E20546865792077696C6C207061727469636970617465206F6E20746865206973737565206F7220696E20446973636F726420627920696E6469636174696E672074686569722064657369726520746F2070617274696369706174652C2062792073686172696E672069646561732C20726576696577696E67206F74686572732720776F726B2C20676976696E6720666565646261636B2C20636C6172696679696E672C206F72207768617465766572206D616B65732073656E73652E0A0A546865206F6E6C79207468696E6720697320746861742077652772652066756C6C792072656D6F74652E20576520646F6E2774206B6E6F772065616368206F746865722C20736F2065766572796F6E65206E6565647320746F20626520676F6F6420617420636F6D6D756E69636174696F6E2E2041742074686520656E64206F66206120626967207461736B2C20692E652E20746865204576616C756174696F6E2044414F2069732066696E69736865642C2074686520636F7265207465616D2077696C6C2074616B6520616C6C2074686520736D616C6C20636F6E747269627574696F6E7320616E64206964656E7469667920636F6E7472696275746F72732C20616E64207468656E207375676765737420686F7720746F2073706C697420746865207461736B207072697A652E205765276C6C2070726F706F7365207468652073706C697420616E6420616C6C6F7720726F6F6D20666F72207075626C6963206E65676F74696174696F6E732E0A0A232323204361736520320A0A576527726520696E20706861736520322C20616E64206120736D616C6C20636F6E747269627574696F6E20697320646F6E6520627920616E20696E646976696475616C2E205765206A757374207265766965772069742C20616E642074686174277320646F6E652E0A0A232323204361736520330A0A576527726520696E20706861736520322C20616E64206120636F6E747269627574696F6E2069732062696720616E6420726571756972657320736D616C6C2073746570732E2050726F6261626C792C20746865204576616C756174696F6E2044414F2077696C6C2061736B20696E646976696475616C207061727469636970616E747320746F207375626D697420746865697220636F6E747269627574696F6E7320736F20746865792063616E20616C6C6F6361746520706F696E747320666F722074686520696E646976696475616C20636F6E747269627574696F6E732E20427574206D6179626520746865204576616C756174696F6E2044414F207072656665727320746F2072657669657720626967207461736B7320617320612077686F6C652C20616E64207468656E2073706C697420746865207072697A652C206173207765276C6C20646F20696E20706861736520312E20576520646F6EE2809974206861766520636C6172697479206F6E207468697320617420746869732073746167652C2061732069742077696C6C20626520757020746F2074686520696D706C656D656E74657273206F6620746865204576616C756174696F6E2044414F20746F2064657369676E2074686520626573742073797374656D20666F72207468617420636173652E0A0A232320512E2057696C6C2074686572652062652061206C6561646572626F61726420616E6420706C6163652077686572652077652063616E207375626D69742065766964656E636520666F72207461736B733F0A0A2A2A412E2A2A204E6F74207965742E20546865206C6561646572626F6172642077696C6C20636F6D6520696E20706861736520322E204F6E65206F662074686520637269746963616C207061727473206F6620746865204576616C756174696F6E2044414F2077696C6C20626520746F20616C6C6F7720636F6E7472696275746F727320746F207375626D69742065766964656E636520666F72207461736B732E20566F74657320616E6420706F696E7420616C6C6F636174696F6E732077696C6C20616C736F206265207472616E73706172656E742E20546869732077696C6C206D616B652073656E736520666F72206675747572652050726F6F662D6F662D436F6E747269627574696F6E732C20746F6F2E205765276C6C20616C736F20646576656C6F702061206C6561646572626F61726420746F206D616B652069742065617369657220746F20666F6C6C6F772074686520636F6D7065746974696F6E2C2062757420746869732077696C6C2070726F6261626C7920636F6D6520616674657220746865204576616C756174696F6E2044414F2069732072756E6E696E672E0A0A232320512E20576861742077696C6C20746865206F766572616C6C207461736B7320636F6E73697374206F663F0A0A2A2A412E2A2A20486572652069732061206E6F6E2D65786861757374697665206C6973743A0A0A2A204F6E626F617264206D6F726520636F6E7472696275746F727320285B637265617465207475746F7269616C7320616E6420646F63756D656E746174696F6E5D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F343038290A2A20496D70726F7665207468652070726F6A65637420616E6420696D706C656D656E74206D6F7265207468696E67730A2A20426F6F747374726170206F75722067656E65736973206F6620636F6E7472696275746F727320666F722074686520667574757265206D61696E6E65740A2A204578706572696D656E7420776974682050726F6F66206F6620436F6E747269627574696F6E20627920686176696E6720612073696D706C65722073797374656D3A204576616C756174696F6E2044414F0A2A204964656E74696679207468652062657374207061727469636970616E747320746F2070726F706F7365206A6F62730A2A204964656E74696679207468652062657374206F7267616E697A6174696F6E7320746F2070726F706F736520706172746E657273686970730A0A232320512E204174207768617420706F696E7420696E207468652047616D65206F66205265616C6D732074696D656C696E652F7068617365206172652077653F0A0A2A2A412E2A2A205765206172652061742074686520626567696E6E696E67206F6620706861736520312E20576520706C616E20746F206372656174652061207765627369746520736F6F6E20736F20796F752063616E206B65657020747261636B206F66207468652073746174757320616E642C2061732049206D656E74696F6E65642C2061206C6561646572626F6172642077696C6C20636F6D6520696E20706861736520322E0A0A232320512E20576861742077696C6C2062652074686520636F6E747269627574696F6E732C20686F772077696C6C20706F696E74732062652063616C63756C617465642C20616E6420617265207468657265207461736B7320666F72206E6F6E2D70726F6772616D6D6572733F0A0A2A2A412E2A2A20447572696E6720706861736520312C20746865207461736B73206172652072656C61746976656C792077656C6C20646566696E65642C20706C65617365207265616420746869733A0A0A68747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F3339300A0A546865726520617265206D6F7265207461736B7320666F722070726F6772616D6D6572732C20627574206D756C7469706C652070617274732061726520666F72206E6F6E2D70726F6772616D6D65727320746F6F2E0A0A447572696E6720706861736520322C2069742773206861726420746F20626520737572652061626F757420616E797468696E67207965742E2047616D65206F66205265616C6D73206973206120636F6D7065746974696F6E20746F206578706572696D656E7420776974682050726F6F662D6F662D436F6E747269627574696F6E2C2077686963682077696C6C207265706C6163652050726F6F662D6F662D5374616B65206F6E20476E6F2E6C616E642E204966207468696E677320676F207468652077617920776520696D6167696E652C207468656E20636F6E7369646572207468617420746865207374616B65686F6C646572732028636F6E7472696275746F72732A2A2077696C6C20616C6C6F6361746520706F696E747320746F20636F6E747269627574696F6E732074686174206D616B652073656E736520666F72207468652070726F6A6563742E2054686520636F6E7472696275746F727320776F6E2774206C6F736520706F696E74732C2062757420627920616C6C6F636174696E6720706F696E74732C20746865792077696C6C2064696C757465207468656972206F776E20706F696E7420737461636B2E0A0A57652065787065637420746865204576616C756174696F6E2044414F20746F2061747472696275746520706F696E747320746F207768617465766572206D616B65732073656E736520746F206D616B65207468652070726F6A656374206265747465722E205765276C6C206861766520736F6D65207461736B20696465617320666F7220706861736520322C20696E636C7564696E6720666F72206E6F6E2D70726F6772616D6D6572732E20596F752063616E206C696B656C7920636F6E73696465722074686174206576656E2069662074686520636F7265207465616D20646F65736EE280997420636F6E74726F6C207468652044414F2C206974732073756767657374696F6E732077696C6C20626520617070726F76656420627920746865204576616C756174696F6E2044414F206265636175736520776520646565706C792077616E74207468652070726F6A65637420746F206265206120737563636573732E0A0A232320512E2057686174206172652074686520726571756972656D656E747320746F2073746172742070617274696369706174696E673F0A0A2A2A412E2A2A205468657265206973206E6F20726571756972656D656E7420746F2073746172742070617274696369706174696E672E20596F75E280996C6C206E65656420746F20646F20736F6D65204B59432061742074686520656E64206F662074686520636F6D7065746974696F6E20746F20726563656976652061207072697A652E204665656C206672656520746F2066696C6C206F75742074686520666F726D206C696E6B656420696E207468652052656769737465722073656374696F6E206F662074686520666F6C6C6F77696E672069737375653A0A0A68747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F3339300A0A546869732077696C6C20616C6C6F7720757320746F20636F6E7461637420796F752061626F75742074686520636F6D7065746974696F6E207468726F756768206F7572206E6577736C657474657220616E6420736574207570207072697A65207061796D656E74206C617465722E205573652074686520636F6D6D656E742073656374696F6E206F662074686520697373756573206F722064697363757373207468656D206F6E20446973636F726420696620796F7520706C616E20746F20776F726B206F6E207370656369666963207461736B732C20736F2077652063616E20736565207468617420796F75E280997265206163746976656C7920776F726B696E67206F6E206120746F7069632E204974206D61792062652062657474657220746F20776F726B2077697468206F746865727320616E642073686172652061207072697A6520696E7374656164206F662074616B696E6720746865207269736B206F6620696D706C656D656E74696E672065766572797468696E6720696E20737465616C7468206D6F646520616E64206E6F74206265696E67207468652066697273742E0A0A232320512E204973207468657265206120666978656420706572696F64206F662074696D6520666F722074686520656E643F0A0A2A2A412E2A2A204E6F2E20506861736520312077696C6C2062652066696E6973686564207768656E20776520636F6E7369646572207468617420656E6F756768206D6174657269616C732068617665206265656E20696D706C656D656E74656420746F2073776974636820746F20706861736520322E20546869732077696C6C2070726F6261626C792074616B65206265747765656E20312D33206D6F6E7468732E2054686520656E64206461746520666F7220706861736520322077696C6C20626520616E6E6F756E63656420647572696E6720706861736520322C2077686963682077696C6C2070726F6261626C79206C617374206265747765656E20322D33206D6F6E7468732E2054686973206973207768656E207765E280996C6C2073656E6420746865207072697A6520726577617264732E2041667465722047616D65206F66205265616C6D732C2070656F706C652077696C6C20636F6E74696E756520746F206561726E20636F6E747269627574696F6E20706F696E747320627920636F6E747269627574696E6720746F207468652070726F6A6563742C2077686963682077696C6C2067697665207468656D206D656D6265727368697073206F6E2074686520667574757265206D61696E6E65742E0A0A232320512E20497320697420706F737369626C6520746F20696E7374616C6C2061206C6F63616C20746573746E657420746F2067657420612070726F706572206C6F63616C20646576656C6F706D656E7420656E7669726F6E6D656E743F0A0A2A2A412E2A2A20596F752063616E2066696E642074686520616E7377657220696E2074686973204769744875622069737375652E2053756273637269626520746F2074686520697373756520746F2067657420757064617465733A0A0A68747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F3437380A0A546865726520617265206D756C7469706C65207761797320746F20696E746572616374207769746820476E6F3A0A0A2A205573696E6720676E6F64657620616C6C6F777320796F7520746F207573652074686520476E6F564D2C20776974686F7574206120626C6F636B636861696E2E2054686973206D6574686F64206973207375706572206661737420616E6420616C6C6F777320796F7520746F2075736520646576656C6F706D656E74207061747465726E73206C696B65205444442C20776865726520796F75207465737420796F757220696D706C656D656E746174696F6E206D756C7469706C652074696D657320706572206D696E7574652E0A2A2052756E6E696E672061206C6F63616C6E65742C2062792072756E6E696E672074686520676E6F6C616E6420636F6D6D616E6420616E64207468656E20636F6E6669677572696E67206F757220746F6F6C73206C696B6520676E6F6B657920746F20757365206C6F63616C686F73743A33363635370A2A205573696E67207468652073746167696E67206E6574776F726B20686F73746564206F6E2068747470733A2F2F73746167696E672E676E6F2E6C616E6420726573657420726567756C61726C7920616E6420796F752063616E20757365207468652068617264636F6465642074657374206B6579206F722075736520746865206661756365740A2A205573696E6720746865206F6666696369616C20746573746E6574730A0A496620796F752070726566657220746F2072756E20612066756C6C20626C6F636B636861696E206E6F646520696E7374656164206F66206A75737420706C6179696E67207769746820476E6F564D2C20796F752073686F756C6420706C617920776974682074686520676E6F6C616E642062696E6172792E205468697320766964656F2073686F777320686F7720746F20646F207468697320696E2070726163746963653A0A68747470733A2F2F7777772E796F75747562652E636F6D2F77617463683F763D2D426C6E455843733065490A0A42656C6F7720697320612066757274686572207265736F757263652074686174206D617920616C736F2068656C7020796F753A0A0A68747470733A2F2F74657374322E676E6F2E6C616E642F722F626F617264733A74657374626F6172642F350A0A232320512E2057696C6C2074686572652062652061206C697374206F662077686174206E6565647320746F206265207465737465643F205768656E2077696C6C207468652074657374732073746172743F0A0A2A2A412E2A2A20546865206265737420706C61636520746F206C6F6F6B206973206F6E2047697448756220686572653A0A0A68747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F3339300A0A447572696E6720706861736520312C207468657265206172652033206F6666696369616C20666F63757365733A0A0A2D204576616C756174696F6E2044414F0A2D205475746F7269616C730A2D20476F7665726E616E6365204D6F64756C650A0A54686520636F7265207465616D2077696C6C206163746976656C7920726576696577207468697320616E6420646563696465207768617420636F6E747269627574696F6E20646573657276657320746F20676574207072697A65732E0A0A447572696E6720706861736520322C207765E280996C6C2075736520746865204576616C756174696F6E2044414F20646576656C6F70656420647572696E67207068617365203120746F20726576696577206F6C6420636F6E747269627574696F6E732C206576656E20636F6E747269627574696F6E73206D616465206265666F72652074686520636F6D7065746974696F6E2C2061732077656C6C206173206F6E676F696E6720636F6E747269627574696F6E732E205269676874206E6F772C207765206861766520616E20697373756520676174686572696E6720696E746572657374696E6720746F7069637320666F72207068617365203220686572652C2062757420616E7920636F6E747269627574696F6E2063616E206265207265766965776564206279207468652044414F2C20696E636C7564696E67207468696E6773207468617420617265206E6F74206C69737465643A0A0A68747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F3335370A0A54686520636F6D7065746974696F6E20776173206A75737420616E6E6F756E6365642C20627574207765E280996C6C2072657669657720636F6E747269627574696F6E73206D61646520696E2074686520706173742C20746F6F2C20736F206974207374617274732066726F6D2074686520666972737420636F6D6D69742C207E312D32792061676F2E0A0A5F446F20796F752068617665206D6F7265207175657374696F6E7320666F72204D616E667265643F20576F756C6420796F75206C696B6520746F206B6E6F77206D6F72652061626F757420476E6F2E6C616E642C20476E6F6C616E672C2047616D65206F66205265616C6D732C206F72207761797320746F20636F6E7472696275746520746F206F75722067726F77696E672065636F73797374656D3F2044726F702075732061207175657374696F6E206F6E20446973636F726420616E64207761746368206F757420666F72206F7572206E65787420414D41206F6E2054756573646179203720466562206174203420706D205554432E5F0A3214323032332D30322D30335431353A34343A30305A32076D616E66726564323B67616D652D6F662D7265616C6D732C676E6F6C616E642C70726F6F662D6F662D636F6E747269627574696F6E2C64616F2C676F7665726E616E63650AB24B0A0A2F766D2E6D5F63616C6C12A34B0A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374320A676F722D7068617365313234416C6C20596F75204E65656420746F204B6E6F772041626F75742047616D65206F66205265616C6D733A205068617365204F6E6532DB490A0A47616D65206F66205265616C6D732C2074686520776F726C647769646520636F6D7065746974696F6E20746F2066696E6420746865206265737420636F6E7472696275746F727320746F20476E6F2E6C616E642C2069732063757272656E746C7920756E6465727761792E20556E6C696B6520736F6D6520636F6E746573747320796F75206D6179206861766520656E74657265642C20776527726520646F696E67207468696E67732061206C6974746C6520646966666572656E746C792E2057652077616E74207061727469636970616E747320746F20626520696E737472756D656E74616C20696E206275696C64696E672074686520476E6F2E6C616E6420706C6174666F726D2077697468206D65616E696E6766756C20636F6E747269627574696F6E7320746861742068656C702073686170652074686520646972656374696F6E206F66207468652070726F6A65637420E28093206569746865722062792077726974696E6720746865206265737420476E6F6C616E6720736D61727420636F6E747261637473206F7220636F6E747269627574696E6720746F2074686520636F726520626C6F636B636861696E2E204974E2809973206E6F74206A7573742061626F75742077696E6E696E67207072697A657320627574206265636F6D696E672061206D65616E696E6766756C20636F6E7472696275746F722E20576520656E636F7572616765207061727469636970616E747320746F20636F6C6C61626F72617465206F6E20746865206368616C6C656E67657320E2809320796F757220636F6E747269627574696F6E2077696C6C206265207265776172646564206F6E20696E646976696475616C206D657269742E0A0A2323205068617365204F6E653A20546865204261736963730A0A5068617365206F6E65206F662047616D65206F66205265616C6D732069732061626F7574206C6179696E672074686520666F756E646174696F6E7320746F206F6E626F617264206D6F72652070656F706C6520746F2074686520706C6174666F726D2E20596F75E280996C6C206E65656420746F20626520616E20616476616E63656420646576656C6F7065722077686F2077616E747320746F2063726561746520636F7265206D6174657269616C73207468617420706F7765722074686520706C6174666F726D206576657279206461792E20596F752073686F756C6420616C736F2062652077696C6C696E6720746F20646F63756D656E7420796F757220776F726B20616E64206576656E207772697465207475746F7269616C7320616E642067756964657320746861742068656C7020757320616476616E636520746F20746865207365636F6E64207068617365206F662074686520636F6D7065746974696F6E2E0A0A5468657265206973206120746F74616C207072697A6520706F6F6C206F66203133332C3730302041544F4D20617661696C61626C6520647572696E67207468652047616D65206F66205265616C6D7320636F6D7065746974696F6E2C206F6E652D7468697264206F66207768696368202834342C3132312041544F4D292077696C6C20626520616C6C6F636174656420746F20636F6E747269627574696F6E732066726F6D207068617365206F6E652E20447572696E67207068617365206F6E652C2077686963682077652065787065637420746F206C617374206265747765656E20312D33206D6F6E7468732C207061727469636970616E74732077696C6C206F70656E2050527320616761696E7374207265706F732066726F6D2074686520476E6F6C616E67206F7267616E697A6174696F6E2E20466F72206164646974696F6E616C20696E666F726D6174696F6E206F6E2074686520636F6D7065746974696F6E2070686173657320616E642074696D656C696E65732C206265207375726520746F20636865636B206F75742074686520666F6C6C6F77696E67207265736F75726365733A0A0A2D205B47616D65206F66205265616C6D7320626C6F6720706F73745D2868747470733A2F2F74657374332E676E6F2E6C616E642F722F676E6F6C616E642F626C6F673A702F676F722D6C61756E6368290A2D205B47616D65206F66205265616C6D7320414D412072656361705D2868747470733A2F2F74657374332E676E6F2E6C616E642F722F676E6F6C616E642F626C6F673A702F676F722D616D6131290A0A2323205068617365204F6E653A20546865204368616C6C656E6765730A0A2A2A4576616C756174696F6E2044414F2A2A3A20546F20656E7375726520636F6E747269627574696F6E7320696E2047616D65206F66205265616C6D732061726520726577617264656420666169726C792C207765206E65656420616E204576616C756174696F6E2044414F2E20416C6C6F77696E6720636F6D6D756E697479206D656D6265727320746F20766F7465206F6E20746865206265737420636F6E747269627574696F6E7320616E642064656369646520686F77206D75636820746865792061726520776F7274682070726F76696465732061206C6576656C20706C6179696E67206669656C6420666F7220616C6C2E205765E280997265207468657265666F7265207365656B696E6720796F757220736B696C6C7320696E2044414F20646576656C6F706D656E7420616E6420696D706C656D656E746174696F6E2E2054686973206973206F6E65206F6620746865206D6F737420696D706F7274616E74206368616C6C656E676573206F66207068617365206F6E6520616E6420746865206F6E6C79206368616C6C656E67652074686174206D75737420626520617070726F76656420756E696C61746572616C6C792062792074686520636F7265207465616D2062656361757365206F6620697473206B657920726F6C6520696E2074686520636F6D7065746974696F6E20616E642074686520667574757265206F662074686520706C6174666F726D2E2052656164206D6F72652061626F757420746865205B4576616C756174696F6E2044414F206368616C6C656E6765206F6E2047697448756220686572655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F343037292E0A0A2A2A5475746F7269616C73202620446F63756D656E746174696F6E2A2A3A20536F20746861742077652063616E2070726F677265737320746F2070686173652074776F20616E64206F70656E2075702074686520476E6F2E6C616E6420706C6174666F726D20746F20612062726F616465722061756469656E63652C207765206E656564207772697474656E20616E64207265636F72646564207475746F7269616C732C206775696465732C20616E6420646F63756D656E746174696F6E2066726F6D207068617365206F6E65207061727469636970616E74732E2054686572652061726520616C6D6F7374206E6F20696E737472756374696F6E206D616E75616C73207768656E20697420636F6D657320746F2074686973206E65772066726F6E7469657220617320746865206F6E6C7920736D61727420636F6E747261637420706C6174666F726D207573696E672074686520476E6F6C616E672070726F6772616D6D696E67206C616E67756167652E2048656C7020757320746F20637265617465206D6174657269616C7320746861742077696C6C206F6E626F617264206D6F726520636F6E7472696275746F727320746F20476E6F2E6C616E642E2052656164206D6F72652061626F757420746865205B5475746F7269616C73202620446F63756D656E746174696F6E206368616C6C656E6765206F6E2047697448756220686572655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F343038292E0A0A2A2A476F7665726E616E6365204D6F64756C652A2A3A2057652077616E7420476E6F2E6C616E6420746F2061646F707420746865206661697265737420616E64206D6F73742065666665637469766520676F7665726E616E636520736F6C7574696F6E20706F737369626C653B206F6E65207468617420656E636F75726167657320766F7465722070617274696369706174696F6E20616E64206973207472616E73706172656E7420616E64206163636F756E7461626C652E205765E280997265206C6F6F6B696E6720666F7220636F6E7472696275746F727320746F20646566696E6520616E6420696D706C656D656E74206120676F7665726E616E636520636F6E7472616374207375697465207468617420726976616C73206578697374696E67206F6E65732C20737563682061732074686520436F736D6F73204875622C20616E6420626520696D706C656D656E746564206279206F746865722070726F6A656374732E2043616E20796F7520696D70726F7665206F6E20746861743F2053686F7720757320686F77212052656164206D6F72652061626F757420746865205B476F7665726E616E6365204D6F64756C65206368616C6C656E6765206F6E2047697448756220486572655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F343039292E0A0A416C6C207068617365206F6E65206368616C6C656E6765732077696C6C2073746179206F70656E20647572696E672070686173652074776F2E204E6F20636F6D7065746974696F6E20706F696E74732077696C6C206265206174747269627574656420647572696E6720746869732070686173652061732074686520706F696E74732077696C6C20626520726574726F2D66756E64656420627920746865204576616C756174696F6E2044414F20616E64206177617264656420647572696E672070686173652074776F2E0A0A2323204A756467696E67204372697465726961202D20576861742057696E7320506F696E74733F0A0A576861742077696C6C20746865206A7564676573206265206C6F6F6B696E6720666F72207768656E20617373657373696E6720636F6E747269627574696F6E733F20596F752063616E2066696E6420696E646976696475616C2064657461696C73206F6E2074686520636F72726573706F6E64696E672047697448756220697373756520726567617264696E672065616368206368616C6C656E67652C2062757420746F2067657420796F7520737461727465642C207468652047616D65206F66205265616C6D7320636F6E74657374207072696F726974697A657320636F6D6D756E69636174696F6E20616E6420636F6C6C61626F726174696F6E2E20576520656E636F7572616765207061727469636970616E747320746F20776F726B20746F67657468657220746F2066696E6420746865206265737420736F6C7574696F6E732E20596F752077696C6C206265206177617264656420696E646976696475616C6C7920666F7220796F757220636F6E747269627574696F6E2062757420776F726B696E672061732070617274206F662061207465616D20697320686967686C792076616C7565642E20476F6F6420646F63756D656E746174696F6E2074686174206578707265737365732068696768206C6561726E696E6720656666696369656E637920616E642073686F777320686F7720746865207461736B2077617320636F6D706C6574656420696E20616E20656475636174696F6E616C207761792077696C6C20616C736F2077696E206164646974696F6E616C20706F696E74732C2061732077696C6C20612068696768207374616E64617264206F66207175616C6974792C2067726561742055582C20616E6420746865206162696C69747920746F20666F6C6C6F772074686520636F6E747269627574696F6E2067756964656C696E65732E0A0A41732074686973206973207072696D6172696C79206120646576656C6F7065722D6F7269656E74656420636F6D7065746974696F6E2C206D6F7374206F6620746865206F7267616E697A6174696F6E20666F722047616D65206F66205265616C6D732069732068617070656E696E67206F6E204769744875623B20636F6D6520627920746865207265706F20616E64205B766973697420697373756520233430385D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F3430382920746F20636F6E7472696275746520746F207475746F7269616C20616E6420646F63756D656E746174696F6E2077726974696E6720666F7220476E6F2E6C616E642E0A0A23232052756C6573206F6620456E676167656D656E740A0A416C6C207061727469636970616E7473206D757374206B65657020696E206D696E6420612073747269637420636F6465206F6620636F6E6475637420616E642073706563696669632072756C657320616E6420637269746572696120746F20656E73757265206661697220706C61792E205468726F7567686F7574207468652047616D65206F66205265616C6D7320636F6D7065746974696F6E2C206E6F20706C616769617269736D2077696C6C20626520746F6C65726174656420617420616E792074696D652E205061727469636970616E7473206D6179207375626D69742077686174207468657920776973682C20686F77657665722C20616E792070726F6A65637420746861742068617320616C7265616479206265656E20616C6C6F63617465642072657761726473206F7220726563656976656420636F6D70656E736174696F6E20696E20616E79206F74686572206861636B6174686F6E206F722073696D696C617220636F6E746573742077696C6C206E6F74207265636569766520646F75626C65207061792E0A0A54686174E280997320616C6C20666F72206E6F772E20496620796F752068617665206D6F7265207175657374696F6E732061626F75742047616D65206F66205265616C6D73206F7220476E6F2E6C616E6420796F752063616E206A6F696E20757320696E206F7572206E657874204F666669636520486F7572732073657373696F6E206F6E20547565736461792C204D617263682031342C20323032332C206174203420706D205554432E20596F752063616E20616C736F20636F6E6E6563742077697468206F74686572207061727469636970616E747320696E20746865205B476E6F6C616E6420446973636F72645D2868747470733A2F2F646973636F72642E636F6D2F696E766974652F53386E4B5571776B506E292E0A0A23232047616D65206F66205265616C6D7320506861736520313A204641510A0A42656C6F772061726520736F6D65206672657175656E746C792061736B6564207175657374696F6E732061626F7574207068617365206F6E65206F66207468652047616D65206F66205265616C6D7320636F6D7065746974696F6E2E20496620796F752063616EE28099742066696E6420796F757220616E737765722062656C6F772C206A756D7020696E746F206F757220446973636F726420616E642061736B2C206F72206A6F696E20757320666F722061206C69766520E2809C4F666669636520486F757273E2809D2073657373696F6E20776974682074686520636F7265207465616D2E0A0A23232320512E20486F772061726520746865207461736B7320696E20746865206973737565732061737369676E65643F0A0A412E20546865726520617265206F6666696369616C20636F6D6D756E69636174696F6E206368616C6C656E676573207468617420776520656E636F7572616765207061727469636970616E747320746F207573652E0A0A23232320512E2043616E204920776F726B20696E646976696475616C6C79206F722073686F756C64204920776F726B2061732070617274206F662061207465616D3F0A0A412E20596F7520617265206672656520746F20776F726B20696E20737465616C7468206D6F64652C2062757420706C65617365206B65657020696E206D696E64207468617420796F75207269736B2066696E697368696E6720746F6F206C617465206F72206C6F73696E6720706F696E747320666F72206265696E672062616420617420636F6C6C61626F726174696E672E20576520657870656374207468652069737375657320696E207068617365203120746F20626520646F6E65206279206D756C7469706C652070656F706C652C20696E206D756C7469706C652073746570732E2042757420616E796F6E652063616E2074727920746F206D616B652065766572797468696E6720696E20737465616C7468206D6F646520616E64206F70656E206120505220776974682065766572797468696E672E0A0A23232320512E20486F772063616E20492066696E6420636F6C6C61626F7261746F72733F0A0A412E205061727469636970617465206F6E20746865206973737565206F7220696E20446973636F726420627920696E6469636174696E6720796F75722064657369726520746F2070617274696369706174652C2062792073686172696E6720796F75722069646561732C20726576696577696E67206F74686572732720776F726B2C20676976696E6720666565646261636B2C20636C6172696679696E672C206F72207768617465766572206D616B65732073656E73652E0A0A23232320512E20486F772063616E204920656E7375726520676F6F6420636F6C6C61626F726174696F6E3F0A0A412E2053696E6365207765206172652066756C6C792072656D6F74652C20636F6C6C61626F726174696E672063616E2062652061206368616C6C656E676520616E6420746865206265737420636F6C6C61626F7261746F72732077696C6C2062652072657761726465642E20576520646F6E2774206B6E6F772065616368206F746865722C20736F20686176696E6720676F6F6420636F6D6D756E69636174696F6E206973206B65792E0A0A23232320512E20486F772077696C6C206D7920636F6C6C61626F726174696F6E206265206576616C75617465643F0A0A412E2041742074686520656E64206F66206120626967207461736B2C20692E652E20746865204576616C756174696F6E2044414F2069732066696E69736865642C2074686520636F7265207465616D2077696C6C2074616B6520616C6C2074686520736D616C6C20636F6E747269627574696F6E7320616E64206964656E7469667920636F6E7472696275746F72732C20616E64207468656E207375676765737420686F7720746F2073706C697420746865207461736B207072697A652E205765276C6C2070726F706F7365207468652073706C697420616E6420616C6C6F7720726F6F6D20666F72207075626C6963206E65676F74696174696F6E732E0A0A23232320512E20486F77206D75636820697320746865207072697A6520706F6F6C3F0A0A412E205468657265206973206120746F74616C207072697A6520706F6F6C206F66202A2A3133332C3730302041544F4D2A2A20617661696C61626C6520647572696E67207468652047616D65206F66205265616C6D7320636F6D7065746974696F6E2C206F6E652D7468697264206F6620776869636820282A2A34342C3132312041544F4D2A2A292077696C6C20626520616C6C6F636174656420746F20636F6E747269627574696F6E732066726F6D207068617365206F6E652E0A0A23232320512E205768656E2077696C6C20492072656365697665206D79207265776172647320666F72206D7920636F6C6C61626F726174696F6E3F0A0A412E20526577617264732077696C6C20626520616C6C6F636174656420726574726F6163746976656C7920627920746865204576616C756174696F6E2044414F20647572696E6720706861736520322E0A0A23232320512E2057696C6C2074686572652062652061206C6561646572626F61726420616E6420706C6163652077686572652077652063616E207375626D69742065766964656E636520666F72207461736B733F0A0A412E204E6F74207965742E20546865206C6561646572626F6172642077696C6C20636F6D6520696E20706861736520322E0A0A23232320512E20576861742077696C6C20746865206F766572616C6C207461736B7320636F6E73697374206F663F0A0A412E20486572652069732061206E6F6E2D65786861757374697665206C6973743A0A0A2A204F6E626F617264206D6F726520636F6E7472696275746F72732028637265617465207475746F7269616C7320616E6420646F63756D656E746174696F6E290A2A20496D70726F7665207468652070726F6A65637420616E6420696D706C656D656E74206D6F7265207468696E67730A2A20426F6F747374726170206F75722067656E65736973206F6620636F6E7472696275746F727320666F722074686520667574757265206D61696E6E65740A2A204578706572696D656E7420776974682050726F6F66206F6620436F6E747269627574696F6E20627920686176696E6720612073696D706C65722073797374656D3A204576616C756174696F6E2044414F0A2A204964656E74696679207468652062657374207061727469636970616E747320746F2070726F706F7365206A6F62730A2A204964656E74696679207468652062657374206F7267616E697A6174696F6E7320746F2070726F706F736520706172746E657273686970730A0A23232320512E20417265207468657265207461736B7320666F72206E6F6E2D70726F6772616D6D6572733F0A0A412E20546865726520617265206D6F7265207461736B7320666F722070726F6772616D6D6572732C20627574206D756C7469706C652070617274732061726520666F72206E6F6E2D70726F6772616D6D65727320746F6F2E20447572696E6720706861736520312C20746865207461736B73206172652072656C61746976656C792077656C6C20646566696E65642C20706C65617365207265616420746869733A0A0A68747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F3339300A68747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F3534300A0A23232320512E2057686174206172652074686520726571756972656D656E747320746F2073746172742070617274696369706174696E673F0A0A412E205468657265206973206E6F20726571756972656D656E7420746F2073746172742070617274696369706174696E672E20596F75E280996C6C206E65656420746F20646F20736F6D65204B59432061742074686520656E64206F662074686520636F6D7065746974696F6E20746F20726563656976652061207072697A652E204665656C206672656520746F2066696C6C206F75742074686520666F726D206C696E6B656420696E207468652052656769737465722073656374696F6E206F662074686520666F6C6C6F77696E672069737375653A0A0A68747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F3339300A0A546869732077696C6C20616C6C6F7720757320746F20636F6E7461637420796F752061626F75742074686520636F6D7065746974696F6E207468726F756768206F7572206E6577736C657474657220616E6420736574207570207072697A65207061796D656E74206C617465722E205573652074686520636F6D6D656E742073656374696F6E206F662074686520697373756573206F722064697363757373207468656D206F6E20446973636F726420696620796F7520706C616E20746F20776F726B206F6E207370656369666963207461736B732C20736F2077652063616E20736565207468617420796F75E280997265206163746976656C7920776F726B696E67206F6E206120746F7069632E0A0A23232320512E204973207468657265206120666978656420706572696F64206F662074696D6520666F7220706861736520313F0A0A412E204E6F2E20506861736520312077696C6C2062652066696E6973686564207768656E20776520636F6E7369646572207468617420656E6F756768206D6174657269616C732068617665206265656E20696D706C656D656E74656420746F2073776974636820746F20706861736520322E0A0A23232320512E20497320697420706F737369626C6520746F20696E7374616C6C2061206C6F63616C20746573746E657420746F2067657420612070726F706572206C6F63616C20646576656C6F706D656E7420656E7669726F6E6D656E743F0A0A412E20596F752063616E2066696E642074686520616E7377657220696E2074686973204769744875622069737375652E2053756273637269626520746F2074686520697373756520746F2067657420757064617465733A0A0A68747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F3437380A0A23232320512E2057696C6C2074686572652062652061206C697374206F662077686174206E6565647320746F206265207465737465643F205768656E2077696C6C207468652074657374732073746172743F0A0A412E20546865206265737420706C61636520746F206C6F6F6B206973206F6E2047697448756220686572653A0A0A68747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F3339300A0A447572696E6720706861736520312C207468657265206172652033206F6666696369616C20666F63757365733A0A0A2A204576616C756174696F6E2044414F0A2A205475746F7269616C730A2A20476F7665726E616E6365204D6F64756C650A0A54686520636F6D7065746974696F6E20776173206A75737420616E6E6F756E6365642C20627574207765E280996C6C2072657669657720636F6E747269627574696F6E73206D61646520696E2074686520706173742C20746F6F2C20736F206974207374617274732066726F6D2074686520666972737420636F6D6D69742C207E312D322079656172732061676F2E0A3214323032332D30332D31325431343A30323A30305A3200321A676E6F6C616E642C67616D652D6F662D7265616C6D732C6661710AD9480A0A2F766D2E6D5F63616C6C12CA480A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374320D6D6F6E74686C792D6465762D31322A546865204D6F726520596F7520476E6F3A20476E6F2E6C616E64204D6F6E74686C7920557064617465733289470A0A5765206D6164652070726F6772657373206163726F73732074686520626F61726420617420476E6F2E6C616E64206C617374206D6F6E74682C2066726F6D206F6E626F617264696E67206D6F7265206465767320746F20726563656976696E6720616E20696E666C7578206F6620636F6E747269627574696F6E7320746F207468652047616D65206F66205265616C6D7320636F6E746573742E20546F20656E636F757261676520646576656C6F706D656E7420616E6420646973636F757273652C2077652073657420757020612062697765656B6C79207075626C696320646576656C6F7065722063616C6C20696E206164646974696F6E20746F206F75722062697765656B6C79204F666669636520486F7572732073657373696F6E732E20416E796F6E652063616E206A6F696E2C2061736B207175657374696F6E732C20616E6420676976652074686569722073756767657374696F6E73206F6E20686F7720746F2073686170652074686520476E6F2E6C616E6420706C6174666F726D20616E64206265636F6D65206120636F6E7472696275746F722E204C617374206D6F6E74682C20776520636F7665726564207365766572616C207072657373696E6720746F706963732066726F6D20476E6F2049444520616E6420476E6F2E6C616E642077656273697465206C616E67756167652C20746F20476E6F564D2C204942432C20616E64204943532E204A616520616C736F2063616D65206261636B20746F20746865206369726375697420696E204D6172636820776974682074776F2049524C20776F726B73686F707320666F7220646576732061742073696465206576656E747320647572696E672045746844656E76657220616E642047616D6520446576656C6F70657220436F6E666572656E636520284744432920696E2053616E204672616E636973636F2E0A0A232320446576656C6F70657220557064617465730A0A596F752063616E2066696E6420746865206C6976652073747265616D73206F6620746865206E65772062697765656B6C79207075626C696320646576656C6F7065722063616C6C73206F6E205B476E6F2E6C616E6420596F75547562655D2868747470733A2F2F7777772E796F75747562652E636F6D2F405F676E6F6C616E642F766964656F73292061732077656C6C2061732061636365737320746865206167656E646173206F6E205B4769744875625D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6D656574696E67732F626C6F622F6D61696E2F6E6F7465732F323032335F30335F31355F6465765F63616C6C5F6E6F7465732E6D64292E20546865206D61696E2074616C6B696E6720706F696E74732074686973206D6F6E7468207765726520476E6F204944452C20476E6F2E6C616E642077656273697465206C616E677561676520616E642055582C206761726261676520636F6C6C656374696F6E2C206275672066697865732C20616E6420686F7720746F206272696E672049424320616E642049435320746F2074686520706C6174666F726D2E2057652061726520776F726B696E67206F6E20616C6C2074686573652069737375657320636F6E63757272656E746C792062757420746865206F72646572206F662072656C656173652077696C6C20626520476E6F2E6C616E64206D61696E6E65742C204942432C20616E64207468656E20494353202874686973206973207265666C656374656420696E20746865204441472062656C6F77292E0A0A5B215B476E6F2E6C616E64206D696E69204441475D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032332D30342D31355F6D79672D6D617263682F7372632F7468756D62732F6D696E692D6461672E706E67295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032332D30342D31355F6D79672D6D617263682F7372632F6D696E692D6461672E706E67290A0A232320476E6F2E6C616E642057656273697465204C616E67756167650A0A57652077616E7420746F20616464206D6F726520666561747572657320666F7220646576656C6F706572732C2073756368206173206C696272617269657320746F206D616B652077726974696E6720696E74657266616365732062657474657220616E64206D6F726520636F6E73697374656E742E20546865726520697320616E206F70656E20746F70696320666F722066726F6E74656E6420646576656C6F706572732077697468207479706F67726170687920736B696C6C7320616E64206C69627261727920646576656C6F7065727320746F206372656174652061205549206672616D65776F726B20666F72206D61726B646F776E206F72206120637573746F6D2072656E646572696E672073797374656D2E0A0A496E7465726E616C6C792C206F757220636F7265207465616D20697320776F726B696E67206F6E20696D70726F76656D656E747320746F20476E6F2E6C616E64E280997320776562736974652C206D616B696E672069742065617369657220746F206E6176696761746520776974682073686F7274657220636F6C756D6E73207768696C6520656E737572696E67207468652074657874206973206D61726B646F776E2063656E7472696320616E64207265616461626C6520696E20706C61696E207465787420616E6420746865204769744875622072656E646572696E67206D616368696E652E20576520686F706520746F20616368696576652074686973207573696E672043535320616E6420686176696E6720636C617373657320666F7220766572746963616C20636F6C756D6E732C20776974686F757420686176696E6720746F206D616B6520616E20657874656E73696F6E20746F20746865206D61726B646F776E207061727365722E0A0A232320476E6F204944450A0A476E6F2E6C616E6420646576656C6F70657220657870657269656E6365207465616D20697320776F726B696E67206F6E2061207765622D626173656420476E6F2049444520666F7220717569636B6C79206275696C64696E6720476E6F207265616C6D7320616E64207061636B61676573207269676874206F6E20796F75722062726F77736572206279206A757374207669736974696E67206120776562206170702E20476E6F204944452077696C6C2070726F76696465206D75636820696D70726F76656420555820666F722065766572797468696E672061726F756E64206275696C64696E672061207265616C6D2028696E636C7564696E67206D616B696E67207468652074657374696E6720656173696572292C20616E64206164646974696F6E616C206665617475726573206C696B65206175746F636F6D706C6574696F6E20696E2074686520656469746F722E20476E6F204944452077696C6C20636F6E7461696E20616C6C2074686520666561747572657320796F7520776F756C64206578706563742066726F6D20616E204944452061732077656C6C2061732076616C7561626C65204150497320666F722064657673206275696C64696E6720746F6F6C732061726F756E6420476E6F2E6C616E64207769746820746865207075626C696320476E6F20496E6672617374727563747572652E0A0A5B215B476E6F204944455D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032332D30342D31355F6D79672D6D617263682F7372632F7468756D62732F676E6F2D6964652E706E67295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032332D30342D31355F6D79672D6D617263682F7372632F676E6F2D6964652E706E67290A0A476E6F204944452077696C6C2068617665206D756C7469706C65206D6F64657320746F20737570706F727420646966666572656E74207573652063617365732E20546865206E6F726D616C206D6F64652077696C6C206265207573656420647572696E6720657665727964617920646576656C6F706D656E74732028617320796F75E2809972652066616D696C69617220776974682066726F6D206F7468657220636F646520656469746F7273292E205468652070726573656E746174696F6E206D6F646520697320666F722068696768206163636573736962696C69747920616E6420726561646162696C6974792E20596F752063616E2075736520697420647572696E6720766964656F2063616C6C73206F7220706879736963616C20776F726B73686F7073207768696C652070726F6A656374696E6720796F75722073637265656E20746F20616E2061756469656E63652E2054686520746869726420616E642070657268617073206D6F737420696E746572657374696E67206D6F64652069732074686520656D626564646564206D6F64652E205573652074686973206D6F646520746F20656D626564207468652049444520696E746F20776562736974657320616E6420626C6F67732E2054686973206665617475726520697320657370656369616C6C792075736566756C20666F72207475746F7269616C7320746F2074657374206F75742073616D706C6520636F64652C2072756E206974206F6E20746865207265616C20746573746E6574732C20616E6420706C617920776974682069742E0A0A23232049424320616E64204943530A0A417320646570696374656420696E20746865204441472061626F76652C20476E6F2E6C616E64206D61696E6E65742077696C6C206C61756E63682066697273742C20666F6C6C6F7765642062792049424320616E64207468656E204943532E2057652077696C6C20666F637573206F6E20696D706C656D656E74696E6720494243312C206173207765207374726F6E676C792062656C6965766520696E2074686520494353206D6F64656C20616E642077616E7420746F206265206120636F6E73756D6572206F6620616E206578697374696E6720436F736D6F7320636861696E2E2057652077616E74206120636F6D6D6F6E2049435320696D706C656D656E746174696F6E207468617420776F726B73206163726F7373206D616E792068756273206265636175736520476E6F2E6C616E6420697320612074797065206F662068756220746861742077696C6C206E65656420697473206F776E2049435320746F207363616C65207768696C652070726F766964696E6720476E6F564D206F6E20636F6E73756D657220636861696E73206F6E2074686520436F736D6F73204875622E204F7572206E6578742073746570206E6F7720697320746F2066696E642074686520626573742077617920746F20636F6E6669677572652049435320666F7220476E6F2E6C616E6420616E64206D616B6520476E6F564D20617661696C61626C65206173206120636F6E73756D657220636861696E20696E2074686520436F736D6F73204875622073797374656D2E0A0A526567617264696E67204942432C2077652077696C6C20757365207468652063757272656E7420696D706C656D656E746174696F6E207468617420776173207772697474656E20666F722074686520436F736D6F732053444B20616E6420706F72742074686174206F76657220746F2054656E6465726D696E74322E20576520616E746963697061746520736F6D652069737375657320616C6F6E67207468652077617920696E636C7564696E6720736563757269747920706174636865732074686174206E65656420746F206265206170706C69656420746F206F757220636F646520626173652E20546865726520617265206D756C7469706C65206F6E676F696E6720646972656374696F6E7320616E642064697363757373696F6E732061626F757420686F7720746F2062726964676520476E6F2E6C616E64E280997320736D61727420636F6E74726163747320746F204942432C2077686963682061726520657373656E7469616C6C7920496E746572636861696E20736D61727420636F6E747261637420696E746572616374696F6E732E0A0A4F6E6520706F73736962696C69747920697320746F206861766520616E204150492074686174207375626D697473206576656E747320746F2061207175657565206F66206F7574676F696E67206576656E74732C20616E6420616E6F7468657220717565756520746F207265636569766520616E6420636F6E73756D65206576656E7473206173796E6368726F6E6F75736C792E2054686973206D656368616E69736D20636F756C6420776F726B20666F72204942433220746F2068617665207269636820696E7465722D636F6E747261637420496E746572636861696E2066656174757265732C20616E64207468652073616D652041504920636F756C6420776F726B20666F7220496E746572636861696E20706C757320736D61727420636F6E747261637420696E746572616374696F6E732074686174207265717569726520616476616E636564206F7074696F6E732E2057652064697363757373656420612070726F706F73616C20746F206372656174652061207374616E6461726420666F7220496E746572636861696E20636F6E74726163747320736F2074686174204942433220636F756C64206576656E7475616C6C79206265207374616E64617264697A656420656C696D696E6174696E67206C696D69746174696F6E73206279206170706C79696E67206974207769746820616E2045564D2C206F74686572206C616E6775616765732C20616E6420436F736D5761736D2E0A0A546869732070726F746F636F6C20636F756C64206265206261736564206F6E2050726F746F627566206F7220612073696D696C61722077656C6C2D6B6E6F776E2073796E74617820646566696E6974696F6E2070726F746F636F6C20736F20746861742077652063616E20707573682074686520496E746572636861696E20746F20746865206E657874206C6576656C2E20494243322077696C6C206265207361666520616E64206661737420616E64207265706C6163652076756C6E657261626C652061746F6D69632062726964676573206265747765656E206D756C7469706C6520746563686E6F6C6F676965732E20546869732069732061206D616A6F722075706461746520746861742077652061726520636F6D6D697474656420746F20646576656C6F70696E6720616E64207765206E6565642068656C70206964656E74696679696E6720616C6C20746865206368616C6C656E67657320696E766F6C7665642E20576F726B696E67206F6E2049424320696E746567726174696F6E2C2073657061726174652066726F6D2074686520476E6F2E6C616E64206D61696E6E6574206C61756E63682C2077696C6C2072657175697265207369676E69666963616E742074696D6520746F20756E6465727374616E6420686F7720746865206C6967687420636C69656E742073797374656D20776F726B732E20496620796F75E28099726520696E746572657374656420696E2074616B696E67206F6E2074686973207461736B2C206C6574207573206B6E6F7720616E64207765E280996C6C2073657420757020612067726F75702E204942432077696C6C206C696B656C7920626520746865206D6F737420696D706F7274616E74206368616C6C656E6765206F662047616D65206F66205265616C6D7320706861736520322E0A0A2323204761726261676520436F6C6C656374696F6E0A0A43757272656E746C792C206F757220776F726B206F6E206761726261676520636F6C6C656374696F6E20646F6573206E6F742061646472657373207468652070726F626C656D20696E2074686520747261646974696F6E616C20476F6C616E672073656E7365206F66206465616C696E672077697468206D656D6F727920656666696369656E63792E20496E73746561642C207765206172652070726F67726573736976656C79206F7074696D697A696E6720616E6420696D70726F76696E6720746865206D61696E2073746174652074726565206279206175746F6D6174696E672074686520636C65616E2D7570206F66206F727068616E206E6F6465732E20546865206E6578742070686173652077696C6C20626520746172676574696E6720746865206F6666696369616C206761726261676520636F6C6C6563746F7220636F6D706F6E656E7420746F20626567696E20776F726B206F6E206D656D6F7279206D616E6167656D656E74206173207765206861766520736F6D6520636F6D6D6F6E20476F6C616E67206761726261676520636F6C6C656374696F6E206368616C6C656E6765732C2062757420617265206964656E74696679696E6720736F6D6520756E636F6D6D6F6E206F6E657320746F6F2E0A0A5765206E65656420746F20636F6E736964657220656C656D656E7473206C696B6520776865726520746F20686F6C64206F7572206F626A6563747320626563617573652074686973206973207469656420746F2072656C656173696E67207468656D20696E206120636F6E63757272656E74206C6F636B2D66726565207761792E20576520616C736F206E656564206120676F6F642064617461207374727563747572652E2054686973206973206F6E676F696E67207265736561726368206173206F66206E6F7720746F20696D706C656D656E7420612064656469636174656420726F7574696E6520746F2073796E6368726F6E6F75736C7920636C65616E20737475666620696E2061206E6F6E2D626C6F636B696E67207761792E0A0A23232047616D65206F66205265616C6D730A0A54686973206D6F6E74682C2077652068617665207365656E2061206D6173736976652075707469636B20696E20636F6E747269627574696F6E7320746F2047616D65206F66205265616C6D73207068617365206F6E652077697468206120746964616C2077617665206F66206973737565732C2067656E6572616C2064697363757373696F6E732C20616E64205052732E204F6E65206F66207468652062696767657374207468696E677320776520776F726B6564206F6E2077617320616464696E6720737570706F727420666F72204D4F442C20776869636820697320612076657273696F6E206F6620476F206D6F64207769746820616E2065617369657220696E7465726661636520746F206D616E61676520796F757220646570656E64656E6369657320616E642076657273696F6E20796F757220646570656E64656E636965732E20596F752063616E20747261636B20746865206F6E676F696E67206973737565206F6E20476974487562205B686572655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F333930292E0A0A54686572652068617665206265656E20736F6D65207265616C6C79207374726F6E6720636F6E747269627574696F6E7320746F20746865204576616C756174696F6E2044414F20616E6420676F7665726E616E6365206D6F64756C652C2061732077656C6C20617320612062696720434C49207265666163746F7220746861742077656E7420696E746F206F757220636F646520626173652E20576527766520616C736F207365656E2070656F706C6520636F6E7472696275746520636F6E747261637473206C696B65204752432031313535206F722067656E6572616C20696D70726F76656D656E747320746F206578697374696E67207265616C6D732C2077697468206D616E792073756767657374696F6E7320666F7220666978696E6720627567732E2046696E64696E67206275677320616E64207265706F7274696E6720776861742070656F706C652077616E74206973206120676F6F6420696E6469636174696F6E20746861742074686520476E6F2E6C616E6420706C6174666F726D206973206265696E67207069636B656420757020616E64206761696E696E672061646F7074696F6E2E0A0A596F752063616E2066696E6420746865204F666669636520486F757273207265636F7264696E6773207468617420636F7665722047616D65206F66205265616C6D73206F6E20596F7554756265205B686572655D2868747470733A2F2F7777772E796F75747562652E636F6D2F77617463683F763D4A546D4E672D62364C6373292E0A0A232320446576656C6F706572204576656E7473205374617465736964650A0A476E6F2E6C616E6420686F737465642061206C6976656C79206D656574757020647572696E672045746844656E766572206C617374206D6F6E746820776865726520476E6F2E6C616E6420666F756E64657220616E6420636F726520646576204A6165204B776F6E206761766520612074616C6B20666F7220536F6C696469747920646576656C6F706572732063616C6C656420E2809C476E6F2E6C616E642C2074686520496E6576697461626C65204E6578742047656E65726174696F6E20536D61727420436F6E747261637420506C6174666F726D2E2220486520636F6D706172656420616E6420636F6E7472617374656420476E6F2E6C616E6420616E6420476E6F6C616E6720746F20536F6C69646974792C20616E642073686F77656420457468657265756D20646576656C6F7065727320686F772074686520476E6F564D207368696674732074686520736D61727420636F6E747261637420706172616469676D2E20596F752063616E20776174636820746865205B7265636F7264696E6720686572655D2868747470733A2F2F7777772E796F75747562652E636F6D2F77617463683F763D494A3078656C386C723463292E0A0A416C736F20696E204D617263682C204A616520686F7374656420612067616D696E6720776F726B73686F7020617420612073696465206576656E7420647572696E672074686520696E66616D6F75732047616D696E6720446576656C6F70657220436F6E666572656E636520284744432920696E2053616E204672616E636973636F2E20E2809C476E6F2E6C616E6420666F722047616D6520446576656C6F706572732C204275696C64696E6720596F75722041707020696E20576562332C222073686F776564207061727469636970616E747320612073616D706C652067616D696E6720617070206275696C74206F6E2074686520476E6F2E6C616E6420706C6174666F726D20616E64206F666665726564207468656D20746865206368616E636520746F207472792074686569722068616E642061742077726974696E67206120736D61727420636F6E747261637420666F7220746865697220617070207769746820476E6F2E0A0A2323205669727475616C204576656E7473202D20486F7720746F204275696C64206120466F72756D0A0A436F72652074656368206C65616420617420476E6F2E6C616E64204D696C6FC5A120C5BD69766B6F7669C4872068656C642061207669727475616C20776F726B73686F7020666F7220476F20646576732063616C6C656420E2809C486F7720746F204275696C64206120466F72756D2EE2809D2048652073686F77656420686F7720476E6F6C616E672069732061206661737420616E642073696D706C652077617920746F206275696C6420616E64206C61756E636820736D61727420636F6E747261637473207573696E672074686520476E6F6C616E6720696E746572707265746572207669727475616C206D616368696E65207468617420696E746572707265747320476E6F20616E6420656C696D696E6174657320746865206E65656420666F7220616E792073657276657273206F72204F524E732E0A0A54686520564D20616C6C6F777320666F7220746865206D656D6F7279207374617465206F6620796F757220476E6F2E6C616E64206170706C69636174696F6E20746F2070657273697374206175746F6D61746963616C6C79206166746572206576657279207472616E73616374696F6E616C2066756E6374696F6E2063616C6C2C207768696368206973206120636F6D706C6574656C79206E65772077617920746F2068616E646C65207472616E73616374696F6E20766F6C756D6520616E64206D656D6F727920726563616C6C2E20596F752063616E20776174636820746865205B66756C6C207475746F7269616C20686572655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F776F726B73686F7073292E0A0A2A5765E2809964206C696B652074686520636F6D6D756E69747920746F2067657420696E766F6C76656420696E20476E6F2E6C616E64E2809973206D6F6E74686C7920757064617465732C20736F20696620796F75E280997265206275696C64696E67206F6E20476E6F2E6C616E6420616E642077616E7420746F20686967686C6967687420796F757220646576656C6F706D656E742C2070726F6A6563742C206576656E742C206F7220696465612C206C6574207573206B6E6F7720616E64207765E280996C6C20696E636C75646520796F757220636F6E747269627574696F6E2E2A0A3214323032332D30342D31355431333A33373A30305A3209636872697374696E613211676E6F6C616E642C676E6F766D2C746D320A8A6D0A0A2F766D2E6D5F63616C6C12FB6C0A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374320D6D6F6E74686C792D6465762D32322E546865204D6F726520596F7520476E6F3A20476E6F2E6C616E64204D6F6E74686C792055706461746573202D203232B66B0A0A4F76657220746865207061737420666577207765656B732C206F757220636F7265206465767320616E642065636F73797374656D20636F6E7472696275746F72732068617665206265656E206D616B696E67206D6173736976652073747269646573206F6E20476E6F2E6C616E642E205468657265E28099732061206C6F7420746F20636F76657220696E20746865207365636F6E642065646974696F6E206F66202A546865204D6F726520596F7520476E6F2A2C2066726F6D2075706461746573206F6E2054656E6465726D696E743220616E6420476E6F564D20746F20737461636B2F6672616D6573206D616E6167656D656E742C20476E6F204944452C20616E6420706C656E7479206D6F72652E205765E280996C6C20616C736F20736565207768617420736F6D65206F66207468652065787465726E616C207465616D7320636F6E747269627574696E6720746F2074686520706C6174666F726D2068617665206265656E20757020746F2C20696E636C7564696E6720476E6F2E6C616E64E280997320666972737420646563656E7472616C697A65642065786368616E67652C20476E6F537761702C20616E64204164656E6120636F6D7061746962696C697479207769746820475243323020746F6B656E732E20436865636B206974206F75742E0A0A23232054656E6465726D696E74320A0A5765E280997265206D616B696E672073746561647920646576656C6F706D656E742070726F6772657373206F6E2054656E6465726D696E74322C20776869636820666F6375736573206F6E2073696D706C6963697479206F662064657369676E2C206D696E696D616C20636F64652C206D696E696D616C20646570656E64656E636965732C206D6F64756C617220646570656E64656E636965732C20616E6420636F6D706C6574656E6573732E20466F72207468652074696D65206265696E672C2054656E6465726D696E74322077696C6C207374617920696E20746865206D61696E207265706F20696E206120746F702D6C6576656C20666F6C646572206E616D65642054656E6465726D696E74322E205468697320697320746865206F6666696369616C206C6F636174696F6E20746F20646576656C6F7020616E6420696D70726F76652074686520636F6E73656E7375732070726F746F636F6C20756E74696C20697420697320737461626C6520656E6F75676820746F206265206578747261637465642066726F6D2074686520476E6F207265706F20616E64206265636F6D652061207374616E64616C6F6E652070726F6A6563742E2043757272656E746C792C2054656E6465726D696E743220646570656E6473206F6E20476E6F564D2C20686F77657665722C2077652061726520776F726B696E6720746F20756E6C696E6B207468697320646570656E64656E637920616E64206275696C6420612062617369632064656D6F2054656E6465726D696E743220636861696E20616E6420436C69656E742E0A0A54656E6465726D696E7432204A532F545320436C69656E742069732061204A6176615363726970742F5479706553637269707420636C69656E7420696D706C656D656E746174696F6E20666F722054656E6465726D696E74322D626173656420636861696E732E2054686520636C69656E742077696C6C206D616B652069742065617369657220666F7220646576656C6F7065727320746F20696E74657261637420776974682054656E6465726D696E743220636861696E732C207769746820612073696D706C69666965642041504920666F72206163636F756E7420616E64207472616E73616374696F6E206D616E6167656D656E742C2072656D6F76696E67206120746F6E206F66206D616E75616C20776F726B20616E6420616C6C6F77696E6720646576656C6F7065727320746F20666F637573206F6E206275696C64696E672074686569722064417070732E20596F752063616E205B72656164206D6F72652061626F75742074686520636C69656E7420686572655D2868747470733A2F2F7777772E6E706D6A732E636F6D2F7061636B6167652F40676E6F6C616E672F746D322D6A732D636C69656E74292E20496E206164646974696F6E20746F207468652054656E6465726D696E7432204A532F545320636C69656E742C20776520616C736F2063726561746564206120476E6F204A532F545320636C69656E742074686174206A75737420657874656E64732074686520544D32206F6E6520746F2070726F7669646520476E6F2D73706563696669632066756E6374696F6E616C6974792E20596F752063616E2072656164206D6F72652061626F7574207468697320686572652E0A0A23232047616D65206F66205265616C6D730A0A54686520696E63656E746976697A656420636F6D7065746974696F6E20746F2066696E6420746865206265737420636F6E7472696275746F727320746F20476E6F2E6C616E6420636F6E74696E75657320696E207068617365206F6E652C207769746820736C6F7720627574207374656164792070726F6772657373206265696E67206D6164652E204E69723132313820696E6974696174656420616E204576616C756174696F6E2044414F204B69636B6F66662064697363757373696F6E20696E205B6973737565203739325D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3739322920746F20696E6974696174652074657374696E6720636F646520666F7220746865206B657920736D61727420636F6E747261637420696E66726173747275637475726520746861742077696C6C20706F7765722074686520476E6F2E6C616E6420706C6174666F726D2E2057652061726520616C736F20696E74657276696577696E67206172636869746563747320666F722074686520636F7265207465616D207769746820657870657269656E636520696E20676F7665726E616E6365206D6F64756C657320616E64206372656174696E67206E65772065636F6E6F6D696573206F6E2D636861696E2C20616E642061206E65772044657652656C207465616D206D656D6265722077696C6C206265206A6F696E696E6720757320736F6F6E20746F2063726561746520617765736F6D65207475746F7269616C7320616E6420646F63756D656E746174696F6E20746F20616476616E63652047616D65206F66205265616C6D7320667572746865722E20476E6F2E6C616E64206D757374206265206275696C742062792074686520636F6D6D756E69747920616E642077652077696C6C206E6F74207275736820746F20707573682047616D65206F66205265616C6D7320746F20746865207365636F6E6420706861736520756E74696C207765206861766520666F756E64207175616C69747920636F6E7472696275746F727320746F20636F6D706C65746520746865206368616C6C656E6765207461736B7320616E64206265636F6D652074686520706C6174666F726DE280997320666972737420666F756E64696E67206D656D626572732E0A0A232320476E6F204944450A0A4F757220636F726520646576656C6F706D656E74207465616D20697320776F726B696E67206F6E2061207765622D62617365642049444520666F7220476E6F2E6C616E6420746861742077696C6C2067726561746C7920696D70726F76652074686520646576656C6F70657220657870657269656E63652C20616C6C6F77696E67206275696C6465727320746F20717569636B6C79207370696E20757020476E6F207265616C6D7320616E64207061636B61676573207269676874206F6E2074686569722062726F7773657273206A757374206279207669736974696E67206120776562206170702E2043757272656E746C79206E616D656420476E6F2049444520627574207769746820612072656272616E64696E67206F6E2074686520686F72697A6F6E2C207468697320696E747569746976652070726F6475637420666F6375736573206F6E2065617365206F662075736520616E6420696D70726F7665642055582C20616E642077696C6C20696E636C75646520616C6C2074686520666561747572657320796F75E2809964206578706563742066726F6D20616E204944452C2073756368206173206175746F20636F6D70696C6174696F6E20696E2074686520656469746F722C20646562756767696E672C20657874656E736976652074657374696E67206361706162696C6974792C20616E6420706F77657266756C2041504973206C696B6520496E74656C6C694A20746F20737570657263686172676520796F75722070726F6772616D6D696E672E0A0A476E6F204944452063757272656E746C7920686173206D756C7469706C65206D6F64657320746F20737570706F727420646966666572656E74207573652063617365732C20696E636C7564696E672061206E6F726D616C206D6F646520666F722065766572796461792070726F6772616D6D696E672C2073696D696C617220746F2061207374616E6461726420636F646520656469746F722C20612070726573656E746174696F6E206D6F646520666F7220766964656F2063616C6C73206F722073637265656E2073686172696E672C20616E6420616E20656D626564646564206D6F646520746F20657874656E642066756E6374696F6E616C6974792C20616C6C6F77696E6720796F7520746F20656D6265642074686520494445206469726563746C7920696E746F20776562736974657320616E6420626C6F67732E20596F752063616E20616C736F2063686F6F736520746F206564697420796F757220636F646520696E20456D616373206F722056696D20616E6420656173696C7920737769746368206265747765656E2073746570732C2066726F6D2070726576696F757320746F206E6578742C206D616B696E67206372656174696E6720796F7572207475746F7269616C7320616E6420626C6F6720706F737473206D6F726520696E747569746976652E205761746368206F757420666F72206D6F726520746F20636F6D65206F6E20476E6F2049444520736F6F6E2C20616E6420696620796F752077616E7420746F20636F6E74726962757465206279206372656174696E67206120706C7567696E20666F7220796F7572206661766F7269746520656469746F722C206F70656E206120505220746F2077696E20636F6E747269627574696F6E20706F696E74732E0A0A232320537461636B2F4672616D6573204D616E6167656D656E740A0A54686520737461636B2F6672616D657320697320616E20696E74656772616C2070617274206F6620746865207669727475616C206D616368696E652028564D2920616E6420746865206C616E67756167652E20537461636B2F6672616D65732070726F7669646520636F6E7465787420666F7220736D61727420636F6E747261637420646576656C6F706572732C20656E61626C696E67207468656D20746F206163636573732075736566756C20696E666F726D6174696F6E2C207375636820617320746865206F726967696E616C2063616C6C65722C206F7220746F2064657465726D696E65206966206120636F6E7472616374206973206265696E672063616C6C6564207468726F75676820616E6F74686572206F6E652E205468652063757272656E7420696D706C656D656E746174696F6E206973206C696D6974656420696E2073636F706520616E642072656C696573206F6E20666978656420706F736974696F6E7320696E2074686520737461636B2077686963682063616E206C65616420746F20696E636F6E73697374656E636965732E0A0A546865726520697320616E206F6E676F696E67205B697373756520363833206F70656E20686572655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F3638332920616E64207765206861766520636F6E74696E75656420746F20776F726B206F6E20656E68616E63696E6720737461636B2F6672616D657320646576656C6F706D656E74206F76657220746865206C617374206D6F6E74682E205765E28099726520616464696E672061206E65772066756E6374696F6E20696E20746865207374616E64617264206C696272617279207374642E507265765265616C6D202870726576696F75736C79204765745265616C6D43616C6C6572292E2043757272656E746C792C207765206F6E6C792068617665204765744F72696743616C6C65722C2077686963682072657475726E732074686520757365722063616C6C696E6720746865206669727374207265616C6D2E2054686973206973206E6F742073656375726520616E64207765206E65656420612077617920746F2063616C6C207468652070726576696F75732063616C6C65722E20546869732077696C6C20616C6C6F772061207265616C6D20746F2068616E646C6520475243323020747265617375726965732E20536565205B6973737565203636375D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3636372920616E64205B6973737565203633345D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F3633342920666F7220667572746865722064657461696C732E0A0A2323204465616C696E6720776974682050616E69637320696E204E61746976652046756E6374696F6E730A0A576520686176652064657669736564206120736F6C7574696F6E20666F72206465616C696E6720776974682070616E69637320696E206E61746976652066756E6374696F6E732C205B7365652070756C6C2072657175657374203733325D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F373332292E2050726576696F75736C792C207768656E2074686572652077617320612070616E696320696E2061206E61746976652066756E6374696F6E2C20776520636F756C64206E6F74207265636F76657220697420696E20476E6F20636F64652E20416E206578616D706C65206F662074686973207761732074686520617373657274206F726967696E2063616C6C2C2077686963682070616E69636B6564206966207468652063616C6C20776173206E6F742061206469726563742063616C6C2066726F6D2061207472616E73616374696F6E2E204261736564206F6E2064697363757373696F6E73207769746820636F6E7472696275746F72732C207765E280997665206167726565642074686174206E61746976652066756E6374696F6E732073686F756C64206E657665722070616E69632C2062757420696620746865792070616E69632C20746865792070616E69632077697468206D616368696E656420476E6F2070616E69632E2054686973206769766573207573207468652063686F69636520696E2061206E61746976652066756E6374696F6E20746F20636F6465206120476E6F2070616E69632C206F722C206966206974277320612076657279206261642070616E69632C2075736520476F2070616E696320736F2074686174207765206B6E6F772074686520476E6F20636F646520697320756E61626C6520746F207265636F7665722069742E0A0A2323204C6F67696320557067726164696E670A0A4D616B696E6720697420706F737369626C6520746F207570677261646520796F7572206C6F67696320697320646566696E6974656C79206F7574206F662073636F706520666F72207468652066697273742076657273696F6E206F6620476E6F2E6C616E642C20686F77657665722C206974E280997320616E20696D706F7274616E742069737375652074686174207765206861766520626567756E20746F206469736375737320736F20746861742077652063616E20706C616365206365727461696E207265737472696374696F6E73206F6E2069742C207375636820617320616C6C6F77696E67207570677261646573207768656E20776520636F6E7369646572207468656D207361666520656E6F75676820746F20626520636F6D70617469626C65207769746820696D706F7274732E20416E6F74686572206964656120697320746F20776F726B206F6E206372656174696E6720776F726B666C6F7773207768657265206D6967726174696F6E73206265636F6D6520736F6D657468696E67206F6666696369616C2E2054686973207761792C20776520636F756C6420646566696E65207761797320746F206D696772617465206120636F6E747261637420636F6D706C6574656C7920696E20612073696E676C65207472616E73616374696F6E2061742074686520636861696E206C6576656C2E204F6E63652065766572797468696E6720697320776F726B696E6720616E6420617070726F766564206173207468652070726576696F757320636F6E747261637420697320706172736564206F722061726368697665642C20746865206E6577206F6E6520676574732074686520646174612E2057652077696C6C2072657669736974207468697320746F706963206166746572207468652066697273742076657273696F6E206F6620476E6F2E6C616E64207265616368657320746865206D61696E6E65742E0A0A2323204761726261676520436F6C6C656374696F6E0A0A496E207465726D73206F66206761726261676520636F6C6C656374696F6E2C20776520646F6EE28099742068617665206D656D6F7279206C65616B7320617320737563682062757420776520646F2068617665206465666163746F206D656D6F7279206C65616B732E2042792074686520564D20686176696E67207265666572656E63657320746F20616C6C206F626A656374732C207468657920776F6EE28099742062652072656C656173656420627920476FE280997320756E6465726C79696E672047432E205765206861766520736F6D6520666F726D206F66207265666572656E636520636F756E74696E6720627574206974206973206F6E6C7920646F6E652061742074686520656E64206F662061207472616E73616374696F6E2E205765206861766520696D706C656D656E7465642061206D61726B2D616E642D7377656570206761726261676520636F6C6C6563746F7220616E642061726520776F726B696E67206F6E2074686520564D2072756E74696D6520746F206D616E61676520746865206F626A6563747320616E64207369676E616C20746F20746865206761726261676520636F6C6C6563746F7220746F2072656C65617365207468656D207768656E207468657920617265206E6F206C6F6E676572206E65656465642E205468697320697320646F6E6520627920616464696E6720746865206E6F74696F6E206F66206120686561702C207768696368206973206D616E6167656420627920746865206761726261676520636F6C6C6563746F722E0A0A232320476E6F564D0A0A446576656C6F70696E6720476E6F564D20697320616E206F6E676F696E67207461736B20616E642077652077696C6C206C696B656C79206E65656420746F20666F726B2074686520476E6F564D20746F2063726561746520646966666572656E7420636F6D706574696E672076657273696F6E732E20476E6F564D2077696C6C20626520636F6D706C6574652C206C696D6974656420696E2066656174757265732C20616E6420736572766520617320746865206F6E6C7920696E7465727072657465722C20616E20656E647572696E67207265666572656E636520706F696E74206F7665722074696D652E204675747572652076657273696F6E73206F6620476E6F564D2077696C6C2062652064657369676E656420746F20696E636F72706F7261746520436F736D5761736D20736F207468617420616C6C20436F736D6F7320636861696E732063616E206861766520436F736D5761736D20656E61626C656420616E642074686520564D2063616E2072756E206469726563746C79206F6E207468652062726F7773657220616E642065786563757465207461736B73206F6E207468652062726F7773657220776974686F757420726571756972696E6720746F206D616B6520616E204150492063616C6C2C206D616B696E67206974206661737465722E20546F20646F20746869732C2077652063616E206D616B65206120476E6F20636F6D70696C657220696E20576562417373656D626C7920776974686F7574206368616E67696E672074686520636F6465206265636175736520476F20737570706F727473205741534D2063726F73732D636F6D70696C6174696F6E2E0A0A576520706C616E206F6E206D616B696E67206120636F6D706574696E672076657273696F6E206F6620746865206F726967696E616C206D696E696D616C69737420476E6F564D2C2073756368206173206120527573742076657273696F6E20776974682061204A495420636F6D70696C6572207573696E67204C4C564D2061732061206261636B656E642E0A0A23232045636F73797374656D20557064617465730A0A53696E6365206F7572206C617374207570646174652C2074686520476E6F2E6C616E6420636F6D6D756E69747920636F6E74696E75657320746F20657870616E64207769746820617765736F6D65207465616D7320616E6420636F6E7472696275746F7273206275696C64696E6720636F6F6C20696E66726173747275637475726520616E642070726F6A65637473206F6E2074686520706C6174666F726D2E2042656C6F772C2077652074616B652061206C6F6F6B20617420746865206C61726765737420646576656C6F706D656E7473206F6620746865207061737420666577207765656B7320616E6420657874656E642061207370656369616C207468616E6B7320746F2065766572796F6E652068656C70696E67207573206275696C6420476E6F2E6C616E642E0A0A23232054657269746F72690A0A54657269746F726920626C6F636B636861696E20616E64206D756C74692D636861696E20687562206C61756E6368656420696E204E6F76656D62657220323032322C20616C6C6F77696E672049424320616E64206E6F6E2D49424320636F6D6D756E697469657320746F20636F6E6E6563742C206372656174652067726F7570732C2065786368616E676520746F6B656E7320616E64204E4654732C20616E64206C61756E6368206E65772070726F6A656374732E2054657269746F7269E2809973206964656120666F72206275696C64696E67206F6E20476E6F2E6C616E6420697320746F206372656174652061206D756C74692D636861696E20657870657269656E636520666F72207573657273207769746820612077656220706F7274616C2C204E4654206D61726B6574706C6163652C20616E6420736F6369616C206665656420746861742077696C6C2067726F772074686520636F6D6D756E6974792C20616E64206772616475616C6C7920696E7465677261746520736D61727420636F6E74726163747320616E64207265616C6D732E20546869732077696C6C2070726F6D6F746520476E6F2E6C616E6420746F206D6F726520646576656C6F7065727320616E642073686F776361736520616C6C20746865206441707073206265696E67206275696C74207468726F75676820616E20656173792D746F2D6E6176696761746520644170702073746F72652E20496E2074686520636F6D696E67207765656B732C2054657269746F72692077696C6C20776F726B207769746820746865204F6E626C6F63207465616D20746F20696E746567726174652074686520417468656E612077616C6C657420696E746F20746865697220706F7274616C2061732077656C6C206173206469736375737320696465617320666F722070726F6D6F74696E672047616D65206F66205265616C6D7320746F206E657720646576656C6F706572732E0A0A2323204F6E626C6F630A0A4F6E626C6F63206973206F6E65206F662074686520476E6F2E6C616E642065636F73797374656DE2809973206D6F73742061637469766520636F6E7472696275746F72732C20726573706F6E7369626C6520666F72206275696C64696E6720746865204164656E612077616C6C657420616E642074686520626C6F636B206578706C6F72657220476E6F7363616E2E20546865207465616D2068617320616C736F206265656E20776F726B696E67206F6E206372656174696E6720616E206F6666696369616C20476E6F2053444B20746861742077696C6C20616C6C6F7720646576656C6F7065727320746F20696E746572616374207769746820476E6F2E6C616E64206D6F726520656173696C792C20616E642072656D6F766520736F6D65206F66207468652063757272656E74206672696374696F6E2E204F6E626C6F63206F70656E6564205B6973737565203730315D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F37303129206F6E20476974487562207072696D6172696C7920666F7220646576656C6F706572732077686F206569746865722068617665207468656972206F776E2077656220617070206F7220617265206275696C64696E672061204A6176615363726970742061707020616E642077616E7420746F20776F726B207769746820476E6F20696E20736F6D65207761792E2043757272656E746C792C20646576656C6F70657273206E65656420746F20646F2061206C6F74206F66206D616E75616C20776F726B2C20776869636820476E6F2053444B2077696C6C20616273747261637420617761792C20696D70726F76696E672074686520776F726B666C6F7720616E6420646576656C6F70657220657870657269656E63652E20496620796F75206861766520616E79206964656173206F7220666565646261636B2C20706C6561736520636F6E7472696275746520746F207468652061666F72656D656E74696F6E65642069737375652E0A0A496E20616E6F7468657220636F6F6C20646576656C6F706D656E742C204F6E626C6F632068617320726F6C6C6564206F75742061206E6577206665617475726520696E204164656E6120616E6420476E6F7363616E20746F2070726F7669646520737570706F727420666F7220475243323020746F6B656E732E20546F2073746F726520616E642073656E6420746F6B656E732C20796F752063616E206F70656E20796F7572204164656E612077616C6C65742C20636C69636B206F6E20224D616E61676520546F6B656E73E2809D2C206E6176696761746520746F2074686520437573746F6D20546F6B656E20706167652C20616E642073656520776869636820475243323020746F6B656E732061726520617661696C61626C65206F6E20476E6F20546573746E657420332C20736561726368696E67206279207468652073796D626F6C206F7220706174682E20546F207265736561726368206F6E206F7220646973636F76657220746F6B656E732C2068656164206F76657220746F2074686520546F6B656E732070616765206F6E20476E6F7363616E20666F7220612066756C6C206C697374206F6620475243323020746F6B656E732E20596F752063616E20636C69636B206F6E20616E7920746F6B656E206F6E20746865206C69737420666F722064657461696C656420696E666F726D6174696F6E2C20737563682061732074686520746F74616C20737570706C792C206F776E65722C206F72206F7468657220617661696C61626C652066756E6374696F6E73206275696C7420696E746F2074686520746F6B656E2E20546865204163636F756E742044657461696C7320706167652068617320616C736F206265656E207570646174656420746F20646973706C617920616C6C20746F6B656E73206F776E6564206279206561636820616464726573732E20596F752063616E2068656C7020627920636865636B696E67206F7574205B6973737565203736345D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F373634292C2077686963682064697363757373657320616464696E6720626967696E7420746F20737570706F7274206120776964652072616E6765206F66206E756D6265727320616E6420656E636F64696E672062696E6172792C20616E64205B6973737565203831365D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F383136292C20776869636820686967686C6967687473206120736D616C6C2062756720746865207465616D2072756E7320696E746F207768656E20636F64696E672E0A0A4F6E626C6F632068617320616C736F20637265617465642061206E6577205B746F6B656E207265736F757263652070616765206F6E204769744875625D28687474703A2F2F6769746875622E636F6D2F6F6E626C6F632F676E6F746F6B656E7265736F75726365732920666F7220616E796F6E6520746F207368617265206F722075706C6F6164207265736F7572636573206173736F636961746564207769746820746865697220476E6F2E6C616E642070726F6A6563742E20546869732077696C6C207365727665206173206120736861726564206B6E6F776C6564676520706F6F6C2061626F757420616E792064417070206F6E2074686520706C6174666F726D2E20496620796F752077616E74656420746F20637265617465206120646563656E7472616C697A65642065786368616E67652C20666F72206578616D706C652C20796F7520776F756C64206E65656420616C6C2074686520696E666F726D6174696F6E2061626F75742074686520746F6B656E7320617661696C61626C65206F6E20476E6F2E6C616E642C207375636820617320746865697220696D616765732C2073796D626F6C732C206465736372697074696F6E732C206C696E6B7320746F2077656273697465732C206574632E204E6F7720796F752063616E2066696E64207468697320696E206F6E652068616E647920476974487562207265706F7369746F72792E20496620796F75E280997265206120646576656C6F706572206F72206275696C6465722077686F2077616E747320796F7572206C6F676F206F7220616E79206F7468657220737461746963206461746120706F737465642C206265207375726520746F207375626D697420612050522E0A0A416E6420737065616B696E67206F6620646563656E7472616C697A65642065786368616E6765732C204F6E626C6F6320697320616C736F206275696C64696E6720476E6F737761702C207468652066697273742044455820746F20626520706F776572656420627920476E6F2E6C616E642C2064657369676E656420746F2073696D706C6966792074686520636F6E63656E747261746564206C697175696469747920657870657269656E636520616E6420696E637265617365206361706974616C20656666696369656E637920666F7220747261646572732E2049747320696E74657266616365206973206275696C74207573696E67205479706553637269707420746F20626520757365722D667269656E646C792C207365637572652C20616E642061636365737369626C6520666F722073747265616D6C696E696E6720636F6D706C6578206D656368616E69736D7320737563682061732070726963652072616E676520636F6E66696775726174696F6E7320616E64207374616B696E672061732070617274206F662069747320636F726520736572766963652E20436F6E7472696275746520746F2069747320696E74657266616365205B686572655D2868747470733A2F2F6769746875622E636F6D2F676E6F737761702D6C6162732F676E6F737761702D696E74657266616365292E0A0A417320666F722074686520636F6E747261637420736964652C204F6E626C6F63206973206163746976656C7920776F726B696E67206F6E2069747320646576656C6F706D656E7420776974682068656C702066726F6D2074686520636F7265206D656D62657273206F6620476E6F2E6C616E642E2054686520636F64652077696C6C206265206F70656E2D736F757263656420666F722066756C6C207472616E73706172656E6379206F6E6365207468652062617369632066756E6374696F6E73206172652072656164792E0A0A2323204E657720436F726520436F6E7472696275746F72730A0A5765E280997265206578636974656420746F2077656C636F6D652074776F206E657720636F7265207465616D206D656D626572732C20416E746F6E696F20616E64205A61636B2E20416E746F6E696F206A6F696E656420757320696E20417072696C20696E2074686520636F7265207465616D2C206272696E67696E6720776974682068696D207661737420657870657269656E636520696E20495046532C20616E642077726974696E6720476974207365727665727320696E20476F2E205A61636B206973206F757220666972737420E2809C74696E6B6572657220696E207265736964656E6365E2809D20616E642077696C6C2074727920746F20626F6F747374726170207468652065636F73797374656D206F6620736D616C6C20636F6E74726163747320616E6420736D616C6C206C69627261726965732E2048652077696C6C20616C736F2062652077726974696E67206170707320616E642068656C70696E672075732064657369676E20612073797374656D20746F2062657474657220736861726520616E642073686F7763617365206F757220776F726B2077697468206120737570657220555820666F72207465616D206275696C6465727320616E64206F70656E2D736F7572636520616464696374732E0A0A416E746F6E696F20697320616C7265616479206861726420617420776F726B207265736561726368696E6720612062656E63686D61726B696E672064617368626F61726420746861742077696C6C2073686F7720706572666F726D616E636520696D70726F76656D656E7473206F722072656772657373696F6E73207768656E207765206368616E67652074686520636F64652E204865E280997320617373657373696E67207768657468657220746F2075736520476948756220746F20747261636B20616374696F6E73206F722072756E206F7572206F776E206D616368696E6520746F20657865637574652047697448756220616374696F6E732E2054616B652061207065656B2061742068697320726573656172636820736F20666172206F6E205B69737375652037383320686572655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F373833292E0A0A5A61636B20697320776F726B696E67206F6E2061206D6963726F626C6F672070726F6A6563742E20417320616E20657870657269656E636564207765623220476F2070726F6772616D6D65722C205A61636B206973207472616E736974696F6E696E6720746F20776562332E2053696E6365206865E280997320696E746572657374656420696E20696E63656E746976697A656420736F6369616C206E6574776F726B732C20746865206D6963726F626C6F672070726F6A6563742077696C6C20626520686973206669727374207265616C6D2C206173206120547769747465722D7374796C6520626C6F6720776974686F7574207469746C65732C2077686572652065616368207573657220686173207468656972206F776E2070616765206261736564206F6E20746865697220616464726573732E20436865636B206F7574205B6973737565203339315D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3339312920666F72206D6F72652064657461696C732E0A0A232320446576656C6F706572204576656E74730A0A4F76657220746865207061737420666577207765656B732C206F757220636F726520646576732068617665206265656E206D61696E6C7920666F6375736564206F6E206275696C64696E67206275742074686579E28099726520707265706172696E6720746F20737065616B20617420736F6D65206578636974696E67206576656E747320696E2074686520636F6D696E67206D6F6E7468732E2043617463682075702077697468204D616E6672656420617420425549444C20417369612C20696E2053656F756C2C20536F757468204B6F7265612C2066726F6D204A756E652035202D20392E205765E28099726520636F2D686F7374696E6720612073696465206576656E742077697468204F6E626C6F632C20436F6465205374617465732C20616E6420436F736D6F73746174696F6E206F6E204A756E6520352C20736F206265207375726520746F20726567697374657220696620796F75E28099726520696E20746F776E21205765E280996C6C20616C736F2062652061742045746842656C677261646520696E205365726269612066726F6D204A756E652032202D20342C20616E6420476F70686572436F6E20696E204265726C696E2066726F6D204A756E65203236202D2032392C20736F2073746F7020627920616E64207361792068656C6C6F2E0A0A2A446F20796F752077616E7420746F20636F6E7472696275746520746F20476E6F2E6C616E64E2809973206D6F6E74686C7920757064617465733F20496620796F75E280997265206275696C64696E67206F6E20476E6F2E6C616E6420616E642077616E7420746F20686967686C6967687420796F757220646576656C6F706D656E742C2070726F6A6563742C206576656E742C206F7220696465612C206C6574207573206B6E6F7720616E64207765E280996C6C20696E636C75646520796F757220636F6E747269627574696F6E2E2A0A3214323032332D30352D32365431333A33373A30305A3209636872697374696E613211676E6F6C616E642C676E6F766D2C746D320A92600A0A2F766D2E6D5F63616C6C1283600A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374320F66756E64696E672D70726F6772616D3232416E6E6F756E63696E672074686520476E6F2E6C616E642046756E64696E6720616E64204772616E74732050726F6772616D32AA5E0A0A496620796F75E28099726520696E746572657374656420696E206275696C64696E6720696E20476E6F2E6C616E6420616E64207573696E672074686520476E6F6C616E672028476E6F29206C616E677561676520746F206D616B652061206D65616E696E6766756C20636F6E747269627574696F6E2C207765E280997665206C61756E636865642074686520476E6F2E6C616E642046756E64696E6720616E64204772616E74732050726F6772616D20746F20737570706F727420796F75206F6E20796F7572206A6F75726E65792E20496620796F75E280997265206120646576656C6F7065722C2074696E6B657265722C20726573656172636865722C206F72206564756361746F7220616E6420796F75E2809972652065786369746564206279207468652069646561206F66206372656174696E6720696E6E6F7661746976652064417070732C20746F6F6C696E672C20696E6672617374727563747572652C2070726F64756374732C206F7220736D61727420636F6E7472616374206C6962726172696573206F6E20476E6F2E6C616E642C206E6F7720796F752063616E206170706C7920666F722066756E64696E672E0A0A23232041626F75742074686520476E6F6C616E642046756E64696E6720616E64204772616E74732050726F6772616D0A0A5765E280997265206275696C64696E6720476E6F2E6C616E6420746F20656E6475726520776974682074696D656C65737320636F646520746861742077696C6C2073657276652061732061207265666572656E636520706F696E7420666F72206D616E7920796561727320746F20636F6D652E20536563757265642062792061206E6F76656C20636F6E73656E737573206D656368616E69736D2C2050726F6F66206F6620436F6E747269627574696F6E2C20476E6F2E6C616E64207265776172647320636F6E7472696275746F727320666169726C792C2061646472657373696E67206F6E65206F662074686520626C6F636B636861696E20696E647573747279E280997320626967676573742070726F626C656D732E2054686520646576656C6F70657273207468617420617265206D6F737420616374697665206F6E2074686520706C6174666F726D2077697468207468652068696768657374207175616C69747920636F6E747269627574696F6E732077696C6C2073656375726520746865206D6F737420726577617264732E20576520616C7265616479206861766520612067726F77696E6720636F6D6D756E697479206F6620476E6F6D657320696E6E6F766174696E6720616E64206275696C64696E67206F6E20476E6F2E6C616E6420616E64207765E280997265206C6F6F6B696E6720746F20616464206D6F726520636F6E7472696275746F727320746F20657874656E64207468652075736162696C697479206F662074686520706C6174666F726D20616E642069747320736D61727420636F6E7472616374206C6962726172792E0A0A4F7572206772616E74732070726F6772616D2077696C6C20656E636F757261676520667572746865722070617274696369706174696F6E20627920616C6C6F636174696E672066696E616E6369616C2061776172647320616E6420636F6E747269627574696F6E7320746F20696E646976696475616C7320616E64207465616D732077686F2077616E7420746F206275696C642064417070732C20636F726520696E6672617374727563747572652C2070726F64756374732C206F72206665617475726573206F6E20476E6F2E6C616E642C20696E63656E746976697A696E67206D6F7265206C696B652D6D696E64656420476E6F6D657320746F2074657374207468652050726F6F66206F6620436F6E747269627574696F6E206D656368616E69736D20616E6420707573682074686520636861696E20746F206E6577206C696D6974732E20546865206772616E7420616D6F756E7420616E64206475726174696F6E2077696C6C20646570656E64206F6E207468652073636F706520616E6420616D626974696F6E206F66207468652070726F6A6563742061732077656C6C2061732074686520776F726B20696E766F6C7665642E0A0A2323205479706573206F6620436F6E7472696275746F72730A0A54686520476E6F2E6C616E642046756E64696E6720616E64204772616E74732070726F6772616D206973206469766964656420696E746F20666F757220646966666572656E742063617465676F7269657320E280932074696E6B657265722C206275696C6465722C20726573656172636865722C20616E64206564756361746F7220E2809320746F20656E73757265207468617420776520636174657220746F206120646976657273652072616E6765206F662070656F706C6520616E6420776F726B696E6720707265666572656E6365732E2048657265E280997320686F7720776520646566696E652074686573652063617465676F726965733A0A0A2D2054696E6B657265723A20596F752077616E7420746F206578706572696D656E7420616E6420696E76656E740A202020202D204275696C642064417070732C20696D70726F76652066656174757265732C20616E642066696E6420616E6420646576656C6F70206E65772069646561730A2D204275696C6465723A20596F75206861766520616E206964656120616E642061726520726561647920746F206275696C642069740A202020202D204275696C642064417070732C20696E6672617374727563747572652C20746F6F6C696E672C2070726F64756374732C206F7220706F727420796F7572206578697374696E67206170707320746F20476E6F0A2D20526573656172636865723A20596F752077616E7420746F20646973636F76657220616E6420616E616C797A650A202020202D2044656570206469766520696E746F20746F70696373206C696E6B656420746F2074686520476E6F2E6C616E6420756E6976657273650A0A2323205768617420576520417265204C6F6F6B696E6720466F720A0A546F207175616C69667920666F72206120476E6F2E6C616E64206772616E742C207765E280997265206C6F6F6B696E6720666F72206D6F7469766174656420616E642070617373696F6E6174652070656F706C652077686F2063616E20636F6E7472696275746520627920646576656C6F70696E672064417070732C20636F726520696E6672617374727563747572652C2075736566756C20616E6420696E6E6F7661746976652070726F64756374732C206F72206665617475726573207468617420696D70726F7665207468652075736162696C697479206F662074686520476E6F2E6C616E6420636861696E2C207370656369666963616C6C793A0A0A2D20446563656E7472616C697A6564204170706C69636174696F6E7320286441707073290A202020202D2057686174207479706573206F6620644170707320646F20796F752077616E7420746F20736565206F6E20476E6F2E6C616E643F2053686F772075732E0A202020202D204275696C642C20746573742C20616E64206C61756E63682061207375697465206F6620476E6F2E6C616E6420644170707320666F722074686520636F6D6D756E6974792C20666F637573696E67206F6E20646976657273652075736520636173657320616E6420696E6475737472696573207375636820617320446546692C2067616D696E672C20737570706C7920636861696E206D616E6167656D656E742C20616E6420736F6369616C206D656469612E20456E737572652074686174207468657365206170707320636174657220746F20626F746820696E646976696475616C20757365727320616E6420627573696E65737365730A202020202D2054686573652064417070732073686F756C6420696E74656772617465207365616D6C6573736C792077697468206578697374696E6720476E6F2E6C616E6420696E6672617374727563747572652C20656E636F7572616765207573657220696E746572616374696F6E2C20616E642070726F6D6F7465207468652061646F7074696F6E206F6620476E6F2E6C616E642073657276696365730A2D20496E6672617374727563747572652C20446576582C205175616C6974790A202020202D20446576656C6F7020636F6D70726568656E736976652047697448756220616E642041575320696E746567726174696F6E20666F7220476E6F2E6C616E642C20696E636C7564696E672073747265616D6C696E6564206465706C6F796D656E742070726F6365737365732C20636F6E74696E756F757320696E746567726174696F6E20616E642064656C697665727920706970656C696E65732C20616E64206D6F6E69746F72696E6720746F6F6C730A202020202D204372656174652048656C6D2063686172747320666F722065617379206465706C6F796D656E7420616E64206D616E6167656D656E74206F6620476E6F20636C7573746572732C20656E61626C696E6720757365727320746F20717569636B6C792073657420757020616E64207363616C6520746865697220476E6F20696E6672617374727563747572650A202020202D2044657369676E20616E6420696D706C656D656E7420616E206576656E742073797374656D20666F7220476E6F2E6C616E6420636F6E7472616374732C20616C6C6F77696E6720666F72207265616C2D74696D65206D6F6E69746F72696E672C20616E616C797369732C20616E64206175646974696E67206F6620636F6E74726163742D72656C61746564206576656E74730A202020202D20456E68616E636520476E6F2E6C616E6420736563757269747920627920636F6E64756374696E6720726567756C61722076756C6E65726162696C697479206173736573736D656E74732C2070656E6574726174696F6E2074657374696E672C20616E6420696D706C656D656E74696E6720626573742070726163746963657320666F722073656375726520736D61727420636F6E747261637420646576656C6F706D656E740A2D2050726F64756374730A202020202D20446576656C6F7020616476616E6365642070726F6A656374206D616E6167656D656E7420736F667477617265207461696C6F72656420746F20746865206E65656473206F6620476E6F2E6C616E6420646576656C6F7065727320616E64207465616D732C20776974682066656174757265732073756368206173207461736B20747261636B696E672C20636F6C6C61626F726174696F6E20746F6F6C732C20616E6420696E746567726174656420476E6F2E6C616E642073657276696365730A202020202D2043726561746520636F6D70726568656E7369766520646F63756D656E746174696F6E2C20696E636C7564696E67206775696465732C207475746F7269616C732C20616E6420415049207265666572656E6365732C20746F2068656C7020757365727320756E6465727374616E6420616E64207574696C697A6520476E6F2E6C616E64277320666561747572657320616E64207365727669636573206D6F7265206566666563746976656C790A202020202D2044657369676E20612063656E736F72736869702D726573697374616E7420736D61727420636F6E74726163742073797374656D2C20656E61626C696E672073656375726520616E64207472616E73706172656E74207472616E73616374696F6E7320616E6420696E746572616374696F6E73206F6E2074686520476E6F2E6C616E6420706C6174666F726D2C20667265652066726F6D2065787465726E616C20696E746572666572656E63650A2D20496E7465726F7065726162696C697479202620496E746567726174696F6E0A202020202D20496D706C656D656E742063726F73732D636861696E20636F6D7061746962696C69747920616E6420696E7465726F7065726162696C6974792C20616C6C6F77696E6720476E6F2E6C616E6420746F20636F6E6E65637420616E6420696E7465726163742077697468206F7468657220626C6F636B636861696E206E6574776F726B732C20657870616E64696E672069747320706F74656E7469616C2075736572206261736520616E6420696E6372656173696E6720697473206F766572616C6C2072656163680A202020202D20446576656C6F70206120706F77657266756C20696E746567726174656420646576656C6F706D656E7420656E7669726F6E6D656E74202849444529207370656369666963616C6C7920666F7220476E6F2E6C616E6420646576656C6F706572732C2077697468206665617475726573206C696B6520636F646520636F6D706C6574696F6E2C20646562756767696E6720746F6F6C732C20616E64207365616D6C65737320696E746567726174696F6E207769746820476E6F2E6C616E642073657276696365730A202020202D2044657369676E20616E64206C61756E6368206120757365722D667269656E646C792077616C6C657420666F7220476E6F20746F6B656E732C20666561747572696E6720612073656375726520616E6420696E7475697469766520696E746572666163652C20737570706F727420666F72206D756C7469706C6520646576696365732C20616E64206561737920696E746567726174696F6E207769746820476E6F2E6C616E642064417070730A0A5468652061626F76652067756964656C696E657320617265206279206E6F206D65616E73206578686175737469766520616E642061726520696E74656E64656420746F20737061726B20796F757220696D6167696E6174696F6E20616E642067697665206578616D706C6573206F6620746865207479706573206F6620636F6E747269627574696F6E73207765E280997265206C6F6F6B696E6720666F7220696E20476E6F2E6C616E642E205765E280997265206F70656E2D6D696E64656420616E642077696C6C696E6720746F2061737365737320616C6C206772616E742070726F706F73616C732C20736F20696620796F75206861766520616E20696465612074686174E2809973206E6F74206F6E20746865206C697374206F7220612073756767657374696F6E207468617420796F75207468696E6B2077696C6C2062656E65666974206F75722076696272616E7420636F6D6D756E6974792C206C6574207573206B6E6F772E20496620796F7572207375626D697373696F6E20646F65736EE2809974207175616C69667920666F722061206772616E742C207765E280996C6C20646F206F7572206265737420746F2070726F7669646520796F752077697468206F70656E20616E6420686F6E65737420666565646261636B20616E6420706F696E747320666F7220696D70726F76656D656E742C2061732077656C6C206173206964656E7469667920616E79206F70706F7274756E697469657320746F2067657420696E766F6C76656420696E206F7572206F6E676F696E6720696E63656E746976697A65642047616D65206F66205265616C6D7320636F6D7065746974696F6E2E0A0A2323204D656574204F7572204669727374204772616E746565730A0A232323204F6E626C6F630A0A4F6E626C6F63206973206120626C6F636B636861696E20736F66747761726520636F6D70616E79206275696C64696E6720636F726520696E66726173747275637475726520666F7220476E6F2E6C616E6420616E640A0A68656C70696E67206F74686572206441707020646576656C6F70657273206F6E626F61726420746F2074686520476E6F2E6C616E642065636F73797374656D207365616D6C6573736C792E20546865207465616D2068617320646576656C6F7065642074686520476E6F2E6C616E6420446576656C6F70657220506F7274616C2C2077686963682070726F766964657320636F6D70726568656E7369766520696E74726F647563746F727920646F637320666F7220646576656C6F706572732C20746865204164656E6120776562332077616C6C657420666F7220476E6F2E6C616E642C20616E642074686520476E6F7363616E20626C6F636B206578706C6F7265722E20417320476E6F2E6C616E64E2809973206D6F73742061637469766520636F6E7472696275746F722C204F6E626C6F63206973206C656164696E67206D616E7920636F6D6D756E6974792D64726976656E20696E69746961746976657320616E64207765E280997265206578636974656420746F20657874656E642061206772616E7420746F20746869732070617373696F6E61746520536F757468204B6F7265612D626173656420646576656C6F706D656E74207465616D20746F20636F6E74696E756520746865697220696E6372656469626C6520776F726B20646576656C6F70696E67207468652077616C6C657420667572746865722C20697465726174696E672074686520476E6F7363616E20626C6F636B206578706C6F7265722C20616E64206275696C64696E6720476E6F2E6C616E64E2809973206669727374204445582C20476E6F737761702E0A0A496E206164646974696F6E20746F20746869732C2077652077616E7420746F20656E636F7572616765204F6E626C6F6320746F20636F6E74696E756520746865697220616D617A696E6720776F726B20776974682074686520636F6D6D756E6974792C20636F6E747269627574696E6720746F206D656574696E67732C207265706C79696E6720746F20636F6D6D656E7473206F6E206F757220736F6369616C20706C6174666F726D732C2077726974696E6720636F646520626173652C206F7267616E697A696E67206C6F63616C206576656E747320616E64206D6565742D75707320696E20536F757468204B6F7265612C20616E64206372656174696E672070726F6475637473207468617420657870616E642074686520476E6F2E6C616E642065636F73797374656D2E0A0A2AE2809C4F6E626C6F6320697320746872696C6C656420746F20626520612070617274206F662074686520476E6F2E6C616E64204772616E74732050726F6772616D2E204173206F6E65206F6620746865206561726C6965737420636F6E7472696275746F72732C206F757220656E646561766F7273206861766520696E766F6C7665642072656C656173696E6720746563686E6963616C2067756964657320616E64207265736561726368207265706F7274732C20646576656C6F70696E6720696E66726173747275637475726520746F6F6C7320666F722064417070732C206372656174696E67204465466920736D61727420636F6E7472616374732C20616E64206D6F72652E20576520617265206578636974656420746F206C657665726167652074686973206772616E7420746F206675727468657220656E68616E636520746865207175616C697479206F66206F75722070726F647563747320616E6420737472656E677468656E206F757220776F726B666F7263652E20546865206772616E742077696C6C20656E61626C6520757320746F20636F76657220736F6D65206F6620746865206578697374696E6720657870656E73657320616E642068697265206164646974696F6E616C20646576656C6F7065727320746F20666F637573206F6E20736D61727420636F6E74726163747320616E642074686520636F72652073696465206F6620476E6F564D2E2057652065787065637420746865736520656E646561766F727320746F20707573682074686520476E6F2E6C616E6420626C6F636B636861696E20746F206E6577206C696D69747320616E6420616363656C65726174652074686520616368696576656D656E74206F6620746865206D696C6573746F6E6573206F6E206F757220726F61646D61702E20576974682074686520737570706F72742066726F6D2074686520476E6F6C616E64207465616D2C2077652061726520636F6E666964656E7420696E206F7572206162696C69747920746F206D616B65207369676E69666963616E74207374726964657320616E64206675727468657220636F6E747269627574696F6E7320746F20666F73746572207468652067726F777468206F662074686520476E6F6C616E642065636F73797374656D2EE2809D2A0A0A2A446F6E67776F6E205368696E2C2043454F2C204F6E626C6F632A0A0A2323232054657269746F72690A0A54657269746F726920697320612073757065722D644170702070726F6A65637420616C6C6F77696E6720696E646976696475616C7320616E64206F7267616E697A6174696F6E7320746F20696E7465726163742C206F7267616E697A652C20616E6420636F6D6D756E696361746520696E2061207261646963616C6C7920726573696C69656E7420616E6420646563656E7472616C697A6564207761792E204261736564206F6E20616E20696E7465726F70657261626C6520766973696F6E2C20746865206170706C69636174696F6E206973206275696C74206F6E2061206D756C74692D636861696E20657870657269656E636520617070726F6163682C206772616475616C6C7920696E746567726174696E6720476E6F6C616E67206173207468652066756E64616D656E74616C20746563686E6963616C20627269636B206F66207468652073797374656D2E2043757272656E746C7920696E204265746120285B617661696C61626C6520686572655D2868747470733A2F2F6170702E74657269746F72692E636F6D2F29292C2074686520617070206973206D616B696E67206D6F64756C617220746F6F6C7320616E6420644170707320617661696C61626C6520746F2075736572732C207769746820612073696E676C652067616D6966696564207573657220657870657269656E63652E2054657269746F72692773207068696C6F736F70687920697320746F206F6666657220757365727320616E6420646576656C6F70657273206120706C61636520746861742062656C6F6E677320746F207468656D2C207468656972207465727269746F72792C207769746820616E20656D706861736973206F6E20696E7465726F7065726162696C6974792C206D6F64756C61726974792C20616E6420637573746F6D697A6174696F6E2E0A0A55736572732063616E20696E7465726163742077697468206120736F6369616C206E6574776F726B2C204E4654206D61726B6574706C6163652C2044414F206C61756E636865722C2073657276696365206D61726B6574706C6163652C2067616D65732C206574632E2C20616E6420696E74656772617465206120706C6574686F7261206F66206441707073207468616E6B7320746F2074686520644170702073746F72652C2077686572652054657269746F72692077696C6C2070726F6D6F746520616C6C20476E6F2E6C616E6420644170707320746F20656E636F7572616765207468652067726F777468206F66207468652065636F73797374656D2E205573696E672074686520476E6F2E6C616E64206772616E742C2054657269746F72692077696C6C20636F6E74696E7565207468697320616D617A696E6720776F726B20616E6420646576656C6F702061206D6F6465726174696F6E2044414F20746F2070726F7669646520636F6E74656E74206D6F6465726174696F6E20746F20476E6F2E6C616E6420696E2061206865616C74687920616E6420646563656E7472616C697A6564207761792C2061206368616C6C656E676520746861742066616365732074686520656E74697265207765623320696E6475737472792E20427920323032342C20746865205558206F662054657269746F72692076312077696C6C206265206261736564206F6E20646563656E7472616C697A6564206D6573736167696E6720776974686F757420626C6F636B636861696E2C20616C6C6F77696E6720757365727320746F20636F6E766572736520696E206120226E61747572616C2220776179207768696C6520616464696E67206D6F64756C657320616E6420776562332066656174757265732E204372656174696E6720616E64206D616E6167696E67206120476E6F44414F20636F756C642062652061732065617379206173206D616E6167696E6720612057686174734170702067726F75702E0A0A2AE2809C41742054657269746F72692C2077652077616E7420746F206D616B6520646563656E7472616C697A6564206F7267616E697A6174696F6E732061636365737369626C6520746F20616C6C20616E64206578706572696D656E742077697468206E657720676F7665726E616E6365206D6F64656C7320666F722068756D616E732C20736F6369616C2067726F7570732C20627573696E65737365732C20616E642064697665727365206F7267616E697A6174696F6E732E20476E6F2E6C616E6420656E61626C657320757320746F206275696C64207468697320766973696F6E20696E2061206D6F64756C61722C206675747572652D70726F6F662C20616E642063656E736F72736869702D726573697374616E74207761792E205468616E6B7320746F20746865204772616E74732050726F6772616D2C207765276C6C2062652061626C6520746F20616363656C6572617465206F757220646576656C6F706D656E742C20636F6E74696E756520746F20636F6E747269627574652070726F6163746976656C7920616E64206275696C64207573657220657870657269656E636573207468617420656E61626C65206173206D616E792070656F706C6520617320706F737369626C6520746F20646973636F7665722074686520476E6F6C2E616E642065636F73797374656D2E205765277265207374617274696E6720776F726B20646576656C6F70696E6720612044414F206C61756E636865722C207769746820646966666572656E74207374616E646172642074656D706C6174657320666F722044414F732C20696E20706172746963756C61722C2044414F7320656E61626C696E67206D6F6465726174696F6E2077697468696E206E6577732066656564732C20666F72756D732C206F7220736F6369616C206E6574776F726B732E20546869732077696C6C2072617069646C79206F70656E206D616E7920646F6F72732C20737563682061732074686F7365206F6620636F6E666C696374207265736F6C7574696F6E2044414F732C206F6E2D73657276696365206D61726B6574706C616365732C206F722070726F6A656374206D616E6167656D656E7420736F6674776172652E20476E6F6C2E616E64206973206120706C617967726F756E6420776865726520616E797468696E6720697320706F737369626C6521205765276C6C20626520646F63756D656E74696E67205B6F7572206A6F75726E657920686572655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F6973737565732F37236973737565636F6D6D656E742D31353838313937313837292C20616E642073686172696E67206F75722070726F6772657373206173207765207374617920636F6E6E656374656420746F20746865206E65656473206F662074686520636F6D6D756E6974792EE2809D2A0A0A2A5A6F6F6D612C20436F7265204C6561642C2054657269746F72692A0A0A232323205A61636B0A0A5A61636B206973207468652066697273742074696E6B657265722D696E2D7265736964656E636520617420476E6F2E6C616E642E2057697468206120646565702D726F6F7465642070617373696F6E20666F7220696E6E6F766174696F6E2C20686520656D62726163656420476F206561726C79206F6E20696E203230313320616E6420657665722073696E63652C20686173206265656E206861726E657373696E672069747320706F77657220746F20637261667420706565722D746F2D706565722070726F6772616D7320616E6420646576656C6F702077656232206170706C69636174696F6E732E205768696C6520476E6F2E6C616E64206D61726B73205A61636B277320696E697469616C20666F72617920696E746F207765623320646576656C6F706D656E7420616E6420626C6F636B636861696E2064417070732C2074686520476E6F6C616E67206C616E677561676520616C6C6F7765642068696D20746F206566666F72746C6573736C79206170706C792068697320476F6C616E67206578706572746973652E20546869732068617320656E61626C65642068696D20746F20666C6F75726973682077697468696E20616E2065636F73797374656D2074686174207265766F6C7665732061726F756E6420646563656E7472616C697A65642073797374656D732C207365616D6C6573736C79207472616E736974696F6E696E672068697320736B696C6C2073657420746F2063726561746520756E6971756520646563656E7472616C697A656420736F6C7574696F6E732E0A0A2AE2809C49206861766520616C77617973206265656E20637572696F75732061626F7574207765623320616E6420626C6F636B636861696E20746563686E6F6C6F67696573206275742068617665206E6F7420646576656C6F7065642065787065727469736520696E20736D61727420636F6E7472616374206C616E67756167657320616E64207374727567676C656420746F206B65657020757020776974682074686520666173742D6368616E67696E672065636F73797374656D2061726F756E6420626C6F636B636861696E20746563686E6F6C6F676965732E20417320616E206176696420476F2070726F6772616D6D65722C20476E6F20616E6420476E6F2E6C616E64206372656174656420746865206F70706F7274756E69747920666F72206D6520746F20646576656C6F7020646563656E7472616C697A6564206170706C69636174696F6E73206F6E20626C6F636B636861696E732062792070726F766964696E672061206672616D65776F726B20616E642065636F73797374656D207468617420697320636F6E73697374656E74207769746820476F6C616E6720696E207465726D73206F662073796E7461782C207375737461696E6162696C6974792C20616E642073746162696C6974792E20546865206164646974696F6E616C207765623320666561747572657320696E20476E6F20616E6420476E6F2E6C616E642070726F76696465206875676520706F74656E7469616C20666F7220696E746572657374696E67206170706C69636174696F6E732074686174204920686F706520746F20756E6C6F636B20746F206D6F7665206265796F6E64207765623220616E64206861726E65737320626C6F636B636861696E20746563686E6F6C6F677920666F72206E6F76656C207573652063617365732E20546865206772616E742070726F766964656420666F722074696E6B657265722D696E2D7265736964656E63652077617320746865206B657920746F20676976696E67206D6520746865207265736F757263657320746F206D6F7665207468726F75676820746869732065636F73797374656D20617320492074727920746F207468696E6B206F7574736964652074686520626F7820666F72207768617420776562332063616E20626520616E64207768617420626C6F636B636861696E2063616E20646F20666F722061207765623220646576656C6F706572206C696B65206D7973656C662EE2809D2A0A0A2A5A61636B205363686F6C6C2C2074696E6B657265722D696E2D7265736964656E63652A0A0A2A2A486F7720596F752043616E204170706C792A2A0A0A416374696F6E7320737065616B206C6F75646572207468616E20776F7264732E20556E74696C20476E6F2E6C616E6420697320636F6D706C6574656C79206F6E2D636861696E2C20746865206265737420706C61636520746F20737461727420697320627920636F6E747269627574696E6720746F2050527320616E6420697373756573206F6E2074686520476E6F2E6C616E64207265706F73206F722070617274696369706174696E6720696E207468652047616D65206F66205265616C6D7320636F6D7065746974696F6E2E20496620796F752077616E7420746F206170706C7920666F722061206772616E742C20796F75E280996C6C206E65656420746F20666F726B2074686520476E6F2E6C616E642045636F73797374656D2046756E64207265706F20616E64206F75746C696E6520796F75722070726F706F73616C20696E20796F75722070726F6A656374206E616D65E28099732066696C652E204F6E6365207765207265636569766520796F7572206170706C69636174696F6E2C206F7572207465616D2077696C6C2072657669657720697420616E642067657420696E20746F7563682069662077652062656C69657665207468617420796F7520666974207468652063726974657269612E205B5365652047697448756220666F722066756C6C20696E737472756374696F6E735D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F65636F73797374656D2D66756E642D6772616E7473292E20537461792074756E65642C207765E280996C6C20626520686F7374696E6720612046756E64696E6720616E64204772616E74732050726F6772616D2051264120696E20746865206E65787420666577207765656B73210A3214323032332D30362D32375431333A33373A30305A3212636872697374696E612C6D696368656C6C653216676E6F6C616E642C66756E64696E672C6772616E74730ADA4D0A0A2F766D2E6D5F63616C6C12CB4D0A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374320D6D6F6E74686C792D6465762D33322E546865204D6F726520596F7520476E6F3A20476E6F2E6C616E64204D6F6E74686C792055706461746573202D203332864C0A0A5765E280997665206265656E20627573792073696E636520746865206C6173742065646974696F6E206F66202A546865204D6F726520596F7520476E6F2C2A20776974682074686520476E6F2E6C616E6420636F7265207465616D20616E642065636F73797374656D20706172746E6572732070726573656E7420617420766172696F757320676C6F62616C20646576656C6F706572206576656E74732E205765E2809976652076697369746564206D616E7920676E6F6D65732028616E6420676E6F6D65732D696E2D7468652D6D616B696E67292061726F756E642074686520776F726C642066726F6D204265726C696E20746F2042656C67726164652C20737072656164696E672074686520776F72642061626F757420476E6F2E6C616E6420616E642067726F77696E67206F757220657870616E64696E6720636F6D6D756E6974792E2041736964652066726F6D20616C6C20746865206E6574776F726B696E672C20476E6F2E6C616E642069732074616B696E6720736861706520776974682061206E657720697465726174696F6E206F66206F757220776562736974652C2074686520476E6F2E6C616E642046756E64696E6720616E64204772616E74732050726F6772616D2C20616E64206120686F7374206F6620646576656C6F706572207570646174657320617320616C776179732E204C6574E2809973206469766520696E2E0A0A232320476E6F206279204578616D706C650A0A576520726563656E746C79206C61756E63686564205B476E6F206279204578616D706C655D2868747470733A2F2F676E6F2D62792D6578616D706C652E636F6D2F292C206F7572206571756976616C656E7420746F20626F7468205B536F6C6964697479206279204578616D706C655D2868747470733A2F2F736F6C69646974792D62792D6578616D706C652E6F72672F2920616E64205B476F206279204578616D706C655D2868747470733A2F2F676F62796578616D706C652E636F6D2F292C20776865726520796F752063616E20736565207475746F7269616C7320616E6420636F646520736E69707065747320746F2068656C7020796F75206C6561726E20616E6420676574206D6F726520656173696C79206F6E626F617264656420746F20476E6F2E6C616E642E20476E6F206279204578616D706C652069732064657369676E656420746F20626520636F6D6D756E6974792D72756E207769746820612066726F6E742D656E642061707020616E64207475746F7269616C7320696E206D61726B646F776E2E205468657265E280997320616C736F2061207370656369666963206D61726B646F776E2073796E74617820776865726520796F752063616E20656D626564206365727461696E2066696C6520667261676D656E747320746F206D616B6520796F7572207475746F7269616C73206D6F726520737472756374757265642E205765E2809964206C6F766520746F206275696C64207468697320696E746F2074686520756C74696D617465207265736F757263652063656E74657220666F7220476E6F2E6C616E642C20736F206665656C206672656520746F205B636F6E747269627574655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2D62792D6578616D706C65292077697468206E6577207475746F7269616C7320616E642073656374696F6E732E20436F6E747269627574696F6E7320686572652061726520656C696769626C6520666F7220726577617264732066726F6D207468652047616D65206F66205265616C6D7320636F6D7065746974696F6E2E0A0A232320476E6F564D0A0A576520636F6E74696E756520646576656C6F70696E6720476E6F564D20616E6420696E7669746520796F7520746F2070726F7669646520666565646261636B206F6E20776861742063616E20626520696D70726F7665642E2054686973206D6F6E74682C2074686572652068617665206265656E2061206C6F74206F662064697363757373696F6E732061626F757420686F7720746F20696D70726F7665206E61746976652062696E64696E677320616E64207573652074686520476E6F206D616368696E6520696E206E61746976652066756E6374696F6E2063616C6C732E204E61746976652066756E6374696F6E2063616C6C73206172652077656C6C2D646566696E656420696E20476F20636F64652067656E65726174696F6E20616E6420476F2074656D706C6174657320627574206E65656420736F6D65206D6F64696669636174696F6E7320666F7220476E6F564D2E20466F72206578616D706C652C2073696E6365206E6577206E61746976652066756E6374696F6E7320616C726561647920657869737420696E2074686520476E6F20636F64652C207768656E2077652074727920746F20646566696E652061206E61746976652066756E6374696F6E2C2063616C6C696E67207468652066756E6374696F6E20646F65736EE2809974207969656C6420746865206465736972656420726573756C742E205765E280997665206372656174656420612062756E6368206F662070616E69637320616E642074726965642077726974696E67206F7574206E61746976652066756E6374696F6E7320746F20736565207768617420676F6573206F6E20666F72207468656D2C20696E20616E20696E7665737469676174696F6E20746861742077696C6C20676F206F6E20666F7220746865206E65787420666577207765656B732E20476F7420616E792069646561733F20506C6561736520636F6E747269627574652E20285B5052203835395D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F38353929292E0A0A232320546573746E6574730A0A54616C6B2061626F757420746573746E6574732068617320636F6D652075702061206C6F7420696E20726563656E74207765656B7320616E6420686F7720746F20626573742070726F636565642E20536F6D6520676E6F6D6573206172652061736B696E6720666F722061206D756C74692D6E6F646520746573746E657420746F20616C6C6F7720666F72206772656174206578706572696D656E746174696F6E2C2077686572656173206F74686572732070726566657220746F206B6565702074686520746573746E65742073696E676C652D6E6F64652E2054686572652061726520616476616E746167657320616E6420646973616476616E746167657320746F20626F746820617070726F616368657320616E6420776520617265207374696C6C206C697374656E696E6720746F20666565646261636B20616E642069646561732E20486F77657665722C2077652077696C6C206C696B656C79206B65657020746573746E657420332073696E676C652D6E6F646520616E6420666F637573206F6E20746865206C616E6775616765207768696C6520686176696E672061207365636F6E6420646564696361746564206D756C74692D6E6F646520746573746E657420776865726520646576732063616E206765742063726561746976652C207468696E6B206F757473696465206F662074686520626F782C207465737420706572666F726D616E63652C20636F6E73656E7375732C20616E642065766572797468696E672074686579206E65656420746F20707573682074686520636861696E20746F20697473206C696D6974732E205765E28099766520637265617465642061206E6577205B4861636B657273706163655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B6572737061636529205265706F7369746F727920666F7220746865206D756C74692D6E6F646520746573746E657420746F2070726576656E74207370616D206F6E20746865206D61696E207265706F2C20736F20706C656173652075736520697420746F20736861726520796F757220736372697074732C20706F7374732C20736E6970706574732C206574632E0A0A2323204E617469766520436F696E7320616E64204752432D323020546F6B656E730A0A576520756E636F766572656420736F6D65207369676E69666963616E74206973737565732077697468207468652062616E6B6572206D6F64756C6520285B5052203339335D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F333933292920726567617264696E67206D696E74696E6720616E64206275726E696E6720746F6B656E73207769746820746865207061636B616765206D696E7465722E20497420776173206E6F742073636F70696E672C2066696C746572696E672C206F72206D696E74696E6720746F6B656E7320636F72726563746C792C206D616B696E6720697420706F737369626C6520746F206D696E7420616E64206275726E20756E6C696D6974656420746F6B656E732C20696E636C7564696E6720474E4F542E2057652077616E7420746F20616C6C6F7720616E79207265616C6D20746F2063726561746520697473206F776E20746F6B656E20616E642072756E206D756C7469706C6520746F6B656E73206F6E20746865697220636861696E732C20627574207765206E65656420612070726566697820666F7220736563757269747920746F207265736F6C76652074686520697373756520616E6420616C6C6F7720616E796F6E6520746F2063726561746520475243323020736D6172742D636F6E74726163742D626173656420636F696E7320627574206E6F74206E617469766520636F696E732E20576520636F6E74696E756520746F20776F726B207769746820736D616C6C206669786573206F6E207468697320697373756520616E642077696C6C2072656F70656E2074686520505220736F6F6E2E0A0A232320476E6F2E6C616E642046756E64696E6720616E64204772616E74732050726F6772616D0A0A4C617374206D6F6E74682077652072656C6561736564206F75722046756E64696E6720616E64204772616E74732050726F6772616D20746F20656E636F7572616765206D6F726520646576656C6F706572732C2072657365617263686572732C206564756361746F72732C20616E642074696E6B657265727320746F20696E746572616374207769746820476E6F2E6C616E642E20496620796F75E28099726520696E746572657374656420696E206578706572696D656E74696E67207769746820476E6F6C616E672028476E6F2920616E64206275696C64696E6720696E6E6F7661746976652064417070732C20746F6F6C696E672C2070726F64756374732C206F7220696E6672617374727563747572652C20636865636B206F7574206F757220476974487562205B46756E64696E6720616E64204772616E74735D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F65636F73797374656D2D66756E642D6772616E747329207061676520666F72206675727468657220696E666F726D6174696F6E206F6E20686F7720796F752063616E206170706C792E20537461727420636F6E747269627574696E6720746F20476E6F2E6C616E64206F722047616D65206F66205265616C6D732061732074686973206973206120707265726571756973697465206F66207468652066756E64696E6720616E64206772616E74206170706C69636174696F6E2070726F636573732E0A0A232320446576656C6F7065722052656C6174696F6E730A0A54686520476E6F20636F7265207465616D2069732067726F77696E67212057652068697265642061206E65772044657652656C206C617374206D6F6E746820616E6420617265206C6F6F6B696E6720746F2074616B65206F6E20616E6F746865722064657620666F722074686973206F70656E20706F736974696F6E2C20736F20696620796F75E28099726520696E74657265737465642C2068656164206F76657220746F206F7572205B6361726565727320706167655D2868747470733A2F2F6A6F62732E6C657665722E636F2F616C6C696E626974732920616E64206170706C792120596F752063616E2065787065637420746F207365652061206C6F74206D6F726520646F63756D656E746174696F6E2C20464151732C207475746F7269616C732C20616E64206F6E626F617264696E67206D6174657269616C7320696E2074686520636F6D696E67207765656B7320616E64206D6F6E7468732E0A0A23232045636F73797374656D20557064617465730A0A4F757220636F6D6D756E697479206F6620676E6F6D657320636F6E74696E75657320746F20657870616E642C206D616B696E6720746F6E73206F6620616374697669747920616E642070726F6772657373206F76657220746865207061737420666577207765656B732E204C6574E28099732073656520776861742074686579E280997665206265656E20757020746F2062656C6F772E0A0A2323204F6E626C6F630A0A4F6E626C6F6320686173206265656E207375706572206163746976652074686973206D6F6E746820617474656E64696E6720616E6420636F2D686F7374696E672049524C206576656E747320616E64206E6574776F726B696E6720746F2066696E64206E657720676E6F6D65732061626F757420746F776E2E20416D6F6E67206F7468657220757064617465732C204F6E626C6F632068617320636F6D706C657465642074686520666972737420696E746567726174696F6E206F662054656E6465726D696E7432204A53207769746820746865204164656E612077616C6C657420616E642077696C6C20636F6E74696E756520746F2073776170206F7574207468656972206578697374696E67206C6962726172696573207769746820544D324A53207768657265766572206170706C696361626C6520746F20656E7375726520746861742074686579206172652061732074696768746C7920696E746567726174656420617320706F737369626C652E20546865207465616D2068617320616C736F206F70656E2D736F75726365642074686520476E6F7363616E20626C6F636B206578706C6F7265722C20736F20696620796F75E28099726520696E746572657374656420696E20636F6E747269627574696E672C20686F70206F6E206F76657220746F205B476E6F7363616E5D2868747470733A2F2F676E6F7363616E2E696F2F29206F7220746865205B476974487562207265706F5D2868747470733A2F2F6769746875622E636F6D2F6F6E626C6F632F676E6F7363616E292E0A0A23232054657269746F72690A0A416E6F74686572206F66206F757220666972737420636F686F7274732066726F6D20746865204772616E74732070726F6772616D2C2054657269746F726920636F6E74696E75657320746F20636875726E206F757420617765736F6D6520776F726B20616E6420657870616E64206974732067726F77696E67207465616D2E2054686973206D6F6E74682C2054657269746F726920686173206265656E206275737920696E746567726174696E67204164656E612077697468207468652054657269746F72692061707020616E6420776F726B696E67206F6E207468652044414F20636F6E747261637420746F206275696C6420612044414F206465706C6F79657220616E6420766172696F75732044414F207374616E646172647320616E642074656D706C6174657320666F722044414F206372656174696F6E2E2054657269746F7269E28099732074617267657420697320746F20666F637573206F6E2061206D6F6465726174696F6E2044414F20746861742063616E206265207573656420666F7220636F6E74656E74206D6F6465726174696F6E20696E20736F6369616C20666565647320616E6420626F617264732E20496E2074686520636F6D696E67207765656B732C20746865207465616D20706C616E7320746F20696E74656772617465207468652044414F20636F6E747261637420696E746F2074686520554920746F20616C6C6F772074686520636F6D6D756E69747920746F206C61756E636820612044414F20616E64206578706572696D656E74206F6E2074686520746573746E65742E2054686579206861766520616C736F206D61646520616E206566666F727420746F207265616C6C7920696E7465677261746520476E6F20757365727320627920616464696E67202E676E6F2061742074686520656E64206F66206E69636B6E616D657320666F722070656F706C6520746F207573652E20416C6C206F7572206772616E7420726563697069656E74732061726520646F63756D656E74696E67207468656972206A6F75726E65797320696E20746865206861636B65727370616365207265706F2C20636865636B206F7574205B54657269746F7269E28099735D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F6973737565732F3729206A6F75726E65792E0A0A2323205265736964656E742054696E6B657265722C205A61636B0A0A416E6F74686572206772616E742072656365697665722C205A61636B2C20686173206265656E206D616B696E67207369676E69666963616E742070726F6772657373206F6E20686973206D6963726F626C6F6767696E672070726F6A6563742E20596F752063616E20636865636B206F757420746865207370656373206F6E2047697448756220285B5052203739315D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3739312929206F722077617463682074686520696E666F726D6174697665207475746F7269616C20766964656F2C205B476F20746F20476E6F3A20486F7720746F204275696C642061204D6963726F626C6F675D2868747470733A2F2F7777772E796F75747562652E636F6D2F77617463683F763D462D5F6461647863524A4D292E20596F75E280996C6C2066696E64207468697320657370656369616C6C792075736566756C20696620796F7520686176652061206261636B67726F756E6420696E20476F20616E64206E65656420736F6D65206164646974696F6E616C20696E73696768747320746F207475726E20796F75722068616E6420746F20626C6F636B636861696E20636F64696E672E205A61636B2068617320616C736F206265656E20776F726B696E67206F6E20616E20696D706C656D656E746174696F6E206F66206120736D61727420636F6E747261637420666F72206372656174696E6720616E64207472616E7366657272696E6720746578742D6261736564204E465473207468617420636F6E666F726D20746F206861696B7520706F65747279207374616E6461726473202866696E64206F7574206D6F7265206F6E2047697448756220285B5052203836305D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F38363029292E204F74686572207468616E20746861742C205A61636B20636F6E74696E7565732068697320476E6F6C616E67206A6F75726E65792C20E2809C6C6561726E696E6720616E6420686176696E672061206C6F74206F662066756E2EE2809D0A0A23232045746853656F756C2C20425549444C20417369612C20616E642047657474696E6720746F20476E6F0A0A4A756E6520736177206D656D62657273206F66206F757220636F7265207465616D2068656164696E67206F76657220746F2053656F756C2C20536F757468204B6F7265612C20666F722061207765656B206F66206E6574776F726B696E672C2074616C6B732C20616E64206576656E74732E204F7572205650206F6620456E67696E656572696E67204D616E6672656420546F75726F6E20676176652061206B65796E6F7465206F6E207468652065766F6C7574696F6E206F6620736D61727420636F6E74726163747320616E6420616E20696E74726F64756374696F6E20746F20476E6F2E6C616E6420666F72207061727469636970616E7473206F662045746853656F756C2C20666F6C6C6F77656420627920612066617363696E6174696E67206469766520696E746F2050726F6F66206F6620436F6E747269627574696F6E20617420425549444C20417369612C20776865726520776520616C736F20686164206120626F6F74682E2049742077617320616E20686F6E6F7220746F206D65657420736F206D616E792074616C656E74656420616E64206D6F74697661746564204B6F7265616E20646576656C6F7065727320616E6420636F6E7472696275746F72732066726F6D2061726F756E642074686520676C6F62652E2053656F756C206973206120686F74626564206F662075702D616E642D636F6D696E672074616C656E7420616E64207765E280996C6C20646566696E6974656C79206265206261636B20736F6F6E2E0A0A576520616C736F2068616420746865206368616E636520746F206D6565742077697468206F7572206D6F7374206163746976652065636F73797374656D20636F6E7472696275746F7273204F6E626C6F6320616E6420636F2D686F7374656420616E206576656E7420746F6765746865722C2047657474696E6720746F20476E6F2C2061742074686520436F64652053746174657320646576656C6F7065722061636164656D7920616C6F6E672077697468206C6F6E672D74696D6520436F736D6F73206275696C646572732C20436F736D6F73746174696F6E2E20417474656E646565732068616420746865206368616E636520746F20686561722061626F757420776861742074686520636F7265207465616D206973206275696C64696E6720616E642073656520736F6D65206F662074686520677265617420776F726B206F66206F757220636F6D6D756E6974792E2041206D617373697665207468616E6B7320746F2065766572796F6E6520696E766F6C7665642C206974E280997320617765736F6D6520746F20626520425549444C696E6720746F676574686572212052656164206D6F72652061626F7574206F7572204B6F7265616E20616476656E747572657320696E2074686973205B6661622077726974652D7570206279204F6E626C6F635D2868747470733A2F2F6D656469756D2E636F6D2F6F6E626C6F632F323032332D627569646C2D617369612D72656361702D3839346336306131633066292E0A0A45746853656F756C202D205B5761746368207468652074616C6B20686572655D2868747470733A2F2F7777772E796F75747562652E636F6D2F77617463683F763D5F69537353746C6D786F55290A0A425549444C2041736961202D205B5761746368207468652074616C6B20686572655D2868747470733A2F2F7777772E796F75747562652E636F6D2F77617463683F763D76366B334E486D35766345290A0A23232045746842656C67726164650A0A436F726520636F6E7472696275746F72204D696C6F73205A69766B6F76696320726F636B65642074686520476E6F2E6C616E642070726573656E63652061742045746842656C677261646520696E205365726269612C20676976696E6720616E20696E74726F647563746F727920776F726B73686F702061626F757420476E6F2E6C616E642C2063616C6C65642027416C69636520696E20476E6F2E6C616E64272E204265696E672074686520666972737420457468657265756D20636F6E666572656E6365206F7267616E697A656420696E205365726269612C2074686572652077657265206C6F7473206F6620617474656E646565732066726F6D20616C6C206F766572207468652042616C6B616E732E205061727469636970616E7473206A6F696E656420696E2061206A6F75726E6579207468726F7567682074686520656E6368616E74696E67207265616C6D206F6620476E6F6C616E6720616E642074686520476E6F2E6C616E6420706C6174666F726D2E204D6F7374206F6620746865207061727469636970616E74732077657265206E6F74206177617265206F6620476F6C616E64206265666F7265206275742077657265206176696420476F706865727320656167657220746F206C6561726E206D6F72652061626F757420746865206170706C69636174696F6E206F662074686520476E6F206C616E677561676520696E20626C6F636B636861696E732E0A0A232320476F70686572436F6E204265726C696E0A0A54686520476E6F2E6C616E64207465616D20616C736F20686164206120626C617374206C617374206D6F6E746820617420746865204575726F7065616E2065646974696F6E206F6620476F70686572436F6E20696E204265726C696E2E20576520686164206120626F6F746820617420746865206576656E7420666F722074776F20646179732C207768657265207765206E6574776F726B65642C2074616C6B65642061626F757420616C6C207468696E677320476E6F2C206D61646520736F6D6520616D617A696E6720636F6E6E656374696F6E732C20616E64206576656E2073686172656420736F6D65206C69766520636F646521205765E280997265206C6F6F6B696E6720746F206275696C6420616E206163746976652C206F70656E2D736F7572636520476F7068657220636F6E7472696275746F722067726F757020696E20476E6F2E6C616E642C20736F20737461792074756E656420666F72206D6F7265206F6E207468617420736F6F6E2E0A0A436F6D696E67207570206C617465722074686973206D6F6E74682C20476E6F2E6C616E6420697320616E206F6666696369616C2073706F6E736F72206F662045746843432C2050617269732C204A756C792031372D32302E2053746F70206279206F757220626F6F746820746F207069636B20757020736F6D6520737761672C20736179206865792C20616E642061736B20796F7572207175657374696F6E732061626F757420476E6F2E6C616E642E20596F752063616E20616C736F20636174636820757320617420746865204E6562756C61722053756D6D697420666F722061206B65796E6F746520616E6420776F726B73686F70206279206F7572205650206F6620456E67696E656572696E672C204D616E6672656420546F75726F6E2E0A0A2A446F20796F752077616E7420746F20636F6E7472696275746520746F20476E6F2E6C616E64E2809973206D6F6E74686C7920757064617465733F20496620796F75E280997265206275696C64696E67206F6E20476E6F2E6C616E6420616E642077616E7420746F20686967686C6967687420796F757220646576656C6F706D656E742C2070726F6A6563742C206576656E742C206F7220696465612C206C6574207573206B6E6F7720616E64207765E280996C6C20696E636C75646520796F757220636F6E747269627574696F6E2E2A0A3214323032332D30372D31315431333A33373A30305A3209636872697374696E613211676E6F6C616E642C676E6F766D2C746D320AE0A3010A0A2F766D2E6D5F63616C6C12D0A3010A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374320D6D6F6E74686C792D6465762D34322E546865204D6F726520596F7520476E6F3A20476E6F2E6C616E64204D6F6E74686C792055706461746573202D2034328AA2010A0A5765E28099766520686164206D6F7265206F6E206F757220706C61746573207468616E2065766572206F76657220746865206C61737420666577207765656B732C207769746820612068756765207465616D2070726573656E636520696E20506172697320617420457468434320616E64204E6562756C61722053756D6D697420696E204A756C792C20616E206F70656E696E672074616C6B206174205374616E666F726420426C6F636B636861696E20436C756220696E2041756775737420627920476E6F2E6C616E64E280997320666F756E646572204A6165204B776F6E2C20616E6420736F6D6520617765736F6D6520636F6E747269627574696F6E732066726F6D20476E6F2E6C616E64206772616E7465657320616E642065636F73797374656D20706172746E6572732C20696E636C7564696E67207468652066697273742064656D6F73206F6620476E6F7377617020616E642054657269746F7269E280997320736F6369616C20706C6174666F726D20616E642044414F206465706C6F7965722E20576520636F6E74696E756520746F206D616B6520736F6C69642070726F6772657373206F6E20476E6F564D2C20616E20616C7465726E617469766520564D20696E20527573742C2054656E6465726D696E74322C206E61746976652062696E64696E67732C20616E64206D756368206D6F72652E20436865636B206F7574206F7572206C617465737420646576656C6F70657220757064617465732062656C6F772E0A0A2323205570677261646520537472617465677920666F722041564C204265747765656E2047697448756220616E642074657374332E676E6F2E6C616E640A0A4F6E65206F6E676F696E672064697363757373696F6E2069732061626F757420616E20696E636F6D7061746962696C6974792062756720746861742061666665637473206D616E79207468696E677320776520646F206F6E20476E6F2E6C616E642E205468652063757272656E742041564C20696D706C656D656E746174696F6E206F6E2074686520746573746E6574206973206F7574646174656420616E6420646F6573206E6F74206D61746368207468652041564C20696D706C656D656E746174696F6E20757365727320676574207768656E20746865792070756C6C20696E20746865206C6174657374206D6173746572206272616E63682E205468657265666F72652C206275696C64696E6720616E64206465706C6F79696E6720636F6E747261637473206F6E2061206C6F63616C20476E6F20636861696E20287769746820746865206C6174657374206D6173746572206368616E6765732920616E64206465706C6F79696E672074686F73652073616D6520636F6E747261637473206F6E2074686520746573746E6574206D6179206661696C2064756520746F207468697320696E636F6D7061746962696C6974792E205765206E65656420746F2066696E6420612077617920746F207365616D6C6573736C7920696E746567726174652074686573652074776F20617070726F61636865732E20496465616C6C792C207768656E20796F7520777269746520636F6465206F6E20746865206D6173746572206272616E6368206F6E204769744875622C2069742073686F756C6420776F726B206F6E2074686520746573746E65742061732077656C6C2E0A0A496E205B6973737565203937305D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F393730292C20796F752063616E2066696E642064657461696C73206F66206669766520646966666572656E742070726F706F73656420736F6C7574696F6E7320746F20696D706C656D656E74207468697320757067726164652073747261746567792C2066726F6D20726573657474696E67207468652077686F6C6520626C6F636B636861696E2028776869636820776F756C64206D65616E206C6F73696E67206F6E2D636861696E20636F6E74656E7420616E6420646562756767696E6720696E666F726D6174696F6E2920746F20696D706C656D656E74696E672061206D6967726174696F6E2066656174757265207370656369666963616C6C7920666F7220746573746E657473207468617420616C6C6F777320646576656C6F7065727320746F2072656E616D65207061636B6167657320616E6420706174636820746865697220636F6E747261637473206265666F7265207075626C697368696E67207468656D2E205468657265206172652070726F7320616E6420636F6E7320746F20656163682070726F706F73616C2C20616E6420776520636F6E74696E756520746F20776F726B20746F67657468657220746F2066696E642074686520626573742077617920666F72776172642E0A0A232320456E636F64696E67204A534F4E20616E64207468652044697363757373696F6E2041726F756E64205265666C656374696F6E0A0A536F6D6520636F6E7472696275746F7273206861766520686967686C69676874656420746865206E65656420666F72206E6174697665204A534F4E20656E636F64696E672C20616E64207765206172652064697363757373696E6720686F77206265737420746F20617070726F6163682069742E20536565205B6973737565203830385D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F3830382920666F7220667572746865722064657461696C732E204F6E65206964656120697320746F20636F70792074686520636F64652066726F6D20656E636F64696E67204A534F4E20696E20746865207374616E64617264206C69627261727920476F20616E642074616B65206974206F76657220746F20476E6F2C2062757420776520776F756C64206E65656420746F2068617665207265666C656374696F6E20746F20646F20746861742E20536F2C2074686520696D706F7274616E74207175657374696F6E206865726520697320776865746865722077652077616E7420746F2068617665207265666C656374696F6E20616E642C20696620736F2C20776861742069742073686F756C64206C6F6F6B206C696B652E20576520636F756C6420656D756C61746520476FE2809973207265666C656374696F6E207061636B616765207769746820736F6D6520616464656420656C656D656E74732C206C696B65206265696E672061626C6520746F20696E737065637420746865207265616C6D2073746174652C2062757420776520776F756C64206E65656420746F2062652065787472656D656C79206361726566756C2061626F757420686F7720776520646F20746869732E0A0A466F72206578616D706C652C2073686F756C642075736572732062652061626C6520746F20726561642070726976617465206669656C6473206F662065787465726E616C207061636B61676573207468726F756768207265666C656374696F6E206F72206576656E202A75666D742A2C206F7220636F756C64207468617420696E74726F6475636520612070726F626C656D3F20497420776F756C642062652073696D706C65722C20616E6420746865206C616E6775616765206361706162696C69747920736563757269747920776F756C64206265207469676874657220616E642065617369657220746F20756E6465727374616E64206966207765206D61646520616363657373696E672070726976617465206669656C647320696D706F737369626C652C20627574207468617420776F756C6420616C736F206D616B65206974206C696D697465642E20576520636F756C6420636F6E736964657220737570706F7274696E67207265666C656374696F6E20617320616E20696E7465726E616C2075736572207061636B61676520616E642077686974656C697374696E6720616E6420656E636F64696E67204A534F4E2E2054686973207761792C206E657720656E636F64696E67207061636B6167657320776F756C64206861766520746F2062652077686974656C697374656420626563617573652074686579E280997265207573696E6720746865207265666C656374696F6E207061636B6167652E20576520636F756C6420616C736F206D61726B207265666C656374696F6E20617320756E7361666520736F20646576656C6F70657273206B6E6F772074686579206D757374206361726566756C6C7920617564697420746865697220776F726B2E0A0A416E6F7468657220736F6C7574696F6E20697320746865207061727469616C20696D706C656D656E746174696F6E206F66207265666C656374696F6E2E20496E205B6973737565203937315D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F393731292C20476E6F2E6C616E6420636F726520656E67696E6565722050657461722064697363757373657320696E74726F7370656374696F6E2C20776869636820696E766F6C76657320696D706C656D656E74696E67207265666C656374696F6E20617320476F20686173206974206E6F772062757420656E61626C696E67206F6E6C79206F6E65206F66206974732074776F206D61696E206361706162696C69746965733A20746865206162696C69747920746F20696E73706563742074797065732C20627574206E6F7420746865206162696C69747920746F206D6F6469667920636F64652E20546865206D61696E20646966666572656E6365206265747765656E20696E74726F7370656374696F6E20616E64207265666C656374696F6E20697320746861742C2073696E636520697420697320646F6E6520617420636F6D70696C652074696D652C20697420697320636F6D706C6574656C7920747970652D736166652E20546869732064697363757373696F6E206973206F6E676F696E672E0A0A232320416C7465726E617469766520476E6F564D20496D706C656D656E746174696F6E730A0A546F2064656C6976657220746865206265737420706F737369626C65207669727475616C206D616368696E652C207765E28099726520776F726B696E67206F6E2074776F20646966666572656E7420696D706C656D656E746174696F6E73206F6620476E6F564D2E20506574617220686173207370656E7420746865206C617374207468726565207765656B7320646576656C6F70696E672061206E657720476E6F564D20696D706C656D656E746174696F6E207772697474656E20696E20527573742E2048697320776F726B206973207374696C6C207072697661746520617320746865206D616368696E65206973206E6F742079657420726561647920666F72207075626C6963207573652C206275742068652077696C6C20736F6F6E206D616B652074686520636F6465207075626C696320666F7220796F757220696E7370656374696F6E2E205275737420676976657320746865206162696C69747920746F207772697465206D6F726520706572666F726D616E7420636F646520616E642C20696E20736F6D65207363656E6172696F732C20746865205275737420476E6F564D2063616E2072756E20757020746F2032302074696D657320666173746572207468616E2074686520476E6F564D20617420726F7567686C79203837206D696C6C697365636F6E647320636F6D706172656420746F20322C303030206D696C6C697365636F6E6473206F6E2061204669626F6E616363692062656E63686D61726B2C207768696368206973206120636F6E736964657261626C6520696D70726F76656D656E7420696E2073706565642E0A0A53696E6365206F6E65206F6620476E6F2E6C616E64E280997320636F726520666561747572657320697320746861742074686520656E74697265207465636820737461636B206973207772697474656E20696E20476F2C207765E28099726520756E737572652069662065766572796F6E652077696C6C20617070726563696174652061205275737420476E6F564D206F72207768657468657220697420616C69676E732077697468206F757220766973696F6E2E20486F77657665722C206974E280997320616C7761797320676F6F6420746F2070726F7669646520616C7465726E6174697665732C20616E642C205065746172206172677565732C206173206C6F6E672061732074686520564D2063617272696573206F7574207468652073616D652066756E6374696F6E732028616E6420646F657320736F206D6F72652063686561706C79292C206D6F737420646576656C6F7065727320776F6EE2809974206D696E642077686174206C616E67756167652074686520564D206973207772697474656E20696E2E0A0A5275737420686173206120666577206F74686572206665617475726573207468617420736F6D6520646576656C6F70657273206D6179206661766F72206F76657220476F2C2073756368206173206D6F726520746F6F6C7320666F72206372656174696E67206C616E6775616765732C20616476616E636564206761726261676520636F6C6C6563746F72206C6962726172696573207468617420616C6C6F7720796F7520746F206368616E67652074686520616C676F726974686D20776974686F7574206368616E67696E67207468652072756E74696D6520286279207377617070696E67206F7574206120747269636F6C6F7220616C676F726974686D20666F7220612067656E65726174696F6E616C206F6E652C20666F72206578616D706C65292C20616E64206275696C742D696E20646174612073747275637475726573207468617420736F6C7665206D616E79206973737565732E20466F72206578616D706C652C207765206E656564656420612064657465726D696E6973746963206D6170207468617420697320666169726C7920666173742E20576974682052757374E280997320427472656520696E20746865207374616E64617264206C6962726172792C2074686973207761732073696D706C652C205065746172206F6E6C792068616420746F20696D706C656D656E7420746865206E617469766520476F206D6170207479706520776974682061204274726565206D61702066726F6D20746865207374616E64617264206C6962726172792E205468697320746F6F6B206A757374206120666577206D696E757465732E0A0A436F7265207465616D20646576204D6172632068617320616C736F207374617274656420616E20696E697469617469766520746F20696D70726F76652074686520476F20476E6F564D20736F20746861742069742069732066617374657220616E64206F6666657273206120636C65616E20616E6420757365722D667269656E646C7920696E746572666163652E2048652062656C69657665732074686520646562617465206F7665722074686520564D206973206D6F72652061626F7574207768657468657220746F2068617665206120564D20746861742069732062797465636F64652D646566696E6564206F72204153542D646566696E65642028726174686572207468616E207370656564292E204D61726320686173206265656E20636F6D706172696E67207468652066756E64616D656E74616C20646966666572656E636573206265747765656E207468652074776F20616E64206E6F7465642074686174207468652062797465636F64652076657273696F6E2069732031352074696D657320666173746572207468616E20746865204153542E2054686973206D65616E732074686174206368616E67696E6720746F205275737420776F756C64206769766520616E20696E6372656173656420706572666F726D616E6365206F6620322D332074696D65732E0A0A54686520564D206D75737420626520666173742C207365637572652C20616E6420706572666F726D616E7420696E206D616E7920776179732E20496E206569746865722076657273696F6E2C20746865204153542077696C6C2062652073746F726564206F6E2074686520626C6F636B636861696E2C2077686572656173207468652062797465636F6465206973206F6E6C7920616E20696E7465726E616C20726570726573656E746174696F6E207468617420646F65736E277420616666656374207468652075736572732E205765206D757374207374696C6C20636F6E736964657220616E7920706F74656E7469616C2061726368697465637475726520636F6E73657175656E636573206265747765656E2062797465636F646520616E6420415354206265666F7265206465636964696E67207768657468657220746F206368616E67652E204D617263E28099732057495020636F6465206973207374696C6C20696E20612070726976617465207265706F2C2062757420796F75E280996C6C2062652061626C6520746F20696E737065637420697420736F6F6E20616E64206D616B65206120636F6D70617269736F6E206F662074686520564D20696D706C656D656E746174696F6E7320696E2074686520636F6D696E67207765656B732E20546865206465636973696F6E2061626F75742074686520646972656374696F6E206F6620476E6F564D206973207374696C6C2076657279206D756368205442443B20686F77657665722C20746865205275737420476E6F564D2077696C6C206E6F74207265706C6163652074686520476F20476E6F564D206275742077696C6C20636F6D706C656D656E742069742C206576656E7475616C6C7920676976696E672076616C696461746F7273207468652063686F696365206F6620776869636820746F2072756E2E0A0A232320446566696E696E6720576F7264696E6720666F722050656F706C652F446F63756D656E746174696F6E20616E6420436F6E73697374656E63790A0A5B497373756520313032345D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F31303234292064697363757373657320746865206E65656420746F20646566696E652074686520776F7264696E6720776520757365207468726F7567686F7574206F757220646F63756D656E746174696F6E2C20666F72206578616D706C652C20686F77207765206E616D652061206D6F64756C652C207061636B6167652C207375622D6D6F64756C652C206574632E204F6E636520776520686176652074686520776F7264696E6720646566696E65642C2077652077696C6C207365742074686520476E6F564D20746F206F6E6C792061636365707420656C656D656E747320776974682074686520636F7272656374206E616D696E672E2054686520696D706F7274616E6365206F6620776F7264696E672061666665637473207468652064657369676E2063686F696365206F66207468652077686F6C652070726F6A65637420616E6420686F7720776520676F2061626F75742076657273696F6E696E6720666F7220746865206265737420706F737369626C65207573657220657870657269656E63652E0A0A466F72206578616D706C652C206973206D742F626F6172642F61646D696E2070617274206F66207468652073616D65207265616C6D206F66206D7420626F617264732C206F7220697320697420697473206F776E207265616C6D3F2043616E20776520776F726B207769746820626F746820627920616464696E67207061747465726E7320746F206861766520736F6D65207265616C6D7320726573706F6E7369626C6520666F7220686F7374696E67206461746120616E64206F746865727320726573706F6E7369626C6520666F7220686176696E67206D6F72652070726976696C6567656420616374696F6E733F20486F7720646F2077652073706C6974206120636F6D706C6578207265616C6D20696E746F207375622D6C696272617269657320616E64207375622D7265616C6D733F2057652077616E7420746F20646566696E652074686520646F63756D656E746174696F6E20616E6420746865206C6F67696320666F72207468697320616E64206861766520626567756E20746F20746F756368206F6E20746869732069737375652E2057652077696C6C2064697363757373207468697320696E206772656174657220646570746820696E20746865207570636F6D696E6720646576656C6F7065722063616C6C732E0A0A232320496D70726F76696E67207468652047524332302F466F6F323020415049730A0A5768656E20776F726B696E67206F6E2074686520737065637320666F722061204D65726B6C652061697264726F7020636F6E74726163742C20416C626572742063616D6520616761696E737420736F6D6520697373756573207769746820757365727320696E6974696174696E672061697264726F702072657761726420636C61696D732028736565205B5052203930365D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3930362920666F72206D6F72652064657461696C73292E2043757272656E746C792C207768656E20746865204D65726B6C652061697264726F7020636F6E747261637420747269657320746F2065786563757465207468652072657761726420636C61696D20666F722074686520757365722C20616E20696E7374616E6365206F662074686520475243323020636F6E7472616374206973207573656420666F72207472616E7366657272696E672E2057697468696E2074686520475243323020696D706C656D656E746174696F6E205472616E736665722829206D6574686F642C207468652063616C6C65722028746F6B656E2073656E646572292069732066657463686564207573696E6720746865207374616E64617264206C696272617279206D6574686F64207374642E507265765265616C6D28292E0A0A486F77657665722C2063616C6C696E672074686973206D6574686F6420696E20746865204D65726B6C652061697264726F7020636F6E746578742072657475726E73207468652075736572206173207468652063616C6C65722C206E6F7420746865204D65726B6C652061697264726F7020636F6E74726163742C20776869636820697320616E20756E65787065637465642066756E6374696F6E616C6974792E205765206172652064697363757373696E6720646966666572656E74207761797320746F207461636B6C65207468697320697373756520656666696369656E746C792E20486F77657665722C206561636820736F6C7574696F6E20776F756C64207265717569726520706F737369626C65206368616E67657320746F207468652047524332302041504920616E642073756273657175656E7420746F6B656E20696D706C656D656E746174696F6E732E204164646974696F6E616C6C792C2061732070617274206F66205B5052203935325D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F393532292C20776520617265206C6F6F6B696E6720696E746F20696D70726F76696E6720746865207374616E646172642047524332302041504920616E6420706F737369626C79207265736F6C76696E672074686520616D626967756974792077697468207374616E64617264206C6962726172792063616C6C732074686174206172652063617573696E6720746865206D656E74696F6E6564206973737565732E0A0A232320436C69656E74204F7074696D697A656420666F7220434C492C204E6F74204D6F62696C650A0A4F7572206E657765737420636F6E7472696275746F7220746F20476E6F2E6C616E642C2042657274792C20697320646576656C6F70696E6720746865206D6F62696C652076657273696F6E206F6620476E6F2C207768696368206D65616E732077726974696E672061206D6F62696C652061707020746F20696E746572616374206469726563746C7920776974682074686520626C6F636B636861696E2E20546865207465616D20697320666163696E6720736F6D65206973737565732061732074686579206E656564206120636C69656E74206C6962726172792077697468207574696C6974792066756E6374696F6E73206C696B65207369676E20616E642062726F6164636173742C2077686963682061726520757365642062792074686520636F6D6D616E64206C696E652E205468697320636F64652028746D322F706B672F63727970746F2F6B6579732F636C69656E7429206973206E6F7420726561647920666F722065787465726E616C207573657273207965742C20616E642074686520476E6F20636C69656E742069732064657369676E656420666F7220434C492E20486F77657665722C204265727479206E6565647320612077617920746F20696E74657261637420776974682074686520476E6F20636861696E2066726F6D207468656972206170706C69636174696F6E20616E6420746F2063616C6C20746865206C6F67696320776974686F757420616464696E67207468652066756C6C20434C492E0A0A46726F6D20746865206578697374696E6720547970655363726970742F4A61766153637269707420636C69656E74206C6962726172792028676E6F2D6A732D636C69656E7420616E6420746D322D6A732D636C69656E74292C2042657274792073686F756C642062652061626C6520746F206275696C64206F7574206120476F20636C69656E74206C696272617279206279206578636C75736976656C79207573696E67207468652052504320656E64706F696E7473206F6620746865206E6F646520697473656C6620286A757374206C696B6520676E6F2D6A7320616E6420746D322D6A7320776F726B292C20616E64206E6F7420686176696E6720746F20776F7272792061626F757420696D706F7274696E672070726976617465206C6F676963206C696B65207472616E73616374696F6E2062726F616463617374696E672E20546865207465616D2069732077726974696E6720697473206F776E206672616D65776F726B20746F2063616C6C20476F20636F646520666F7220476E6F2066726F6D204A6176612C2053776966742C20616E64205265616374204E6174697665206D6F62696C652061707073207468617420637265617465732061207472616E73616374696F6E20616E642073656E64732069742028736565205B505220313034375D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3130343729292E0A0A546865792061726520776F726B696E67206F6E20616E20415049207468617420696E7465726163747320776974682074686520626C6F636B636861696E20616E64206C657473207468656D206578706F72742074686520636F646520776974686F757420686176696E6720746F207772697465207468656972206F776E207574696C69746965732E20546865204150492077696C6C206265206D696E696D616C2C20616E6420757064617465207468652054656E6465726D696E7432206275696C6420736372697074206279206D6F76696E6720746D32747873796E632066726F6D20746D322F636D6420746F20676E6F2E6C616E642F636D642028736565206D6F72652064657461696C7320696E205B505220313038305D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F31303830292068657265292E20466F72207468652074696D65206265696E672C2042657274792077696C6C20636F70792074686520636F646520616E642075736520746865206F626A65637473206469726563746C7920756E74696C2061206D6F726520636F6E76656E69656E742041504920697320636F6D706C6574652E0A0A23232054656E6465726D696E743220446576656C6F706D656E740A0A496E205B5052203534365D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F353436292C20776520696E74726F647563652066696C652D6261736564207472616E73616374696F6E20696E646578696E672E205472616E73616374696F6E20696E6465782070617273696E672073686F756C6420626520646F6E6520617320612073657061726174652070726F636573732066726F6D20746865206D61696E206E6F64652C206D65616E696E67206F746865722073657276696365732063616E20626520696E7374616E74696174656420746F20696E646578207472616E73616374696F6E7320617320726561646572732E205468652063757272656E742070726F626C656D2069732074686174207468657265206973206E6F2077617920746F20666967757265206F757420776865746865722061207472616E73616374696F6E20686173206661696C6564206166746572206974E2809973206265656E2073656E74206F7574207769746820612062726F6164636173742073796E632C206F7220666574636820616E79206B696E64206F66207265636569707420696E666F726D6174696F6E206F72206572726F7220726561736F6E20696E207468652064656C697665726564207472616E73616374696F6E2E0A0A536F2C207765E280997665207374617274656420776F726B696E67206F6E20616E206576656E7420696E646578657220746F20696E64657820476E6F206E6F6465206576656E74732C20776869636820696E636C756465207472616E73616374696F6E732E20536F6F6E2C20646576656C6F7065727320616E642075736572732077696C6C2062652061626C6520746F2061736B20746865206576656E7420696E646578657220776861742068617070656E656420746F20746865207472616E73616374696F6E206F7220696E20776869636820737461746520696E2069747320657865637574696F6E20697427732063757272656E746C792061742C20616E6420616C736F20746F20726574726965766520696E666F726D6174696F6E206F6E206F74686572206576656E7473206C696B6520626C6F636B20636F6D6D69747320617320746865792068617070656E2E0A0A232320457874656E64696E67207468652046756E6374696F6E616C697479206F6620476F0A0A496E205B6973737565203931395D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F393139292C2050657461722070726F706F73657320657874656E64696E67207468652066756E6374696F6E616C697479206F6620476F20627920616464696E6720636F6E7374616E74206461746120737472756374757265732C206172726179732C20736C696365732C206574632E2048652062656C6965766573207468697320776F756C642062656E656669742075736572732C206173207468657920776F756C646EE2809974206E65656420746F20637265617465207370656369616C2066756E6374696F6E7320617320696E20476F20746F2073696D756C6174652074686973206265686176696F722C20616E6420697420776F756C6420616C736F2063617463682062756773207768656E207468657265206973206D75746174696F6E2E20546865726520686173206265656E20612064697363757373696F6E2C20616E64204A6165206861732073696D696C6172206964656173207769746820746865206E6F74696F6E206F6620E2809C696E766172E2809D2065787072657373696F6E732C2077686572652074686520726573756C74696E672076616C75652063616E206F6E6C7920626520726561642C206E6F74206D757461746564206F722073746F7265642E205468697320776F756C6420666978207468652062756720776865726520696620796F752070617373206120706F696E74657220287468617420726570726573656E74732070617274206F6620796F757220636F6E74726163742073746174652920746F20616E6F7468657220636F6E74726163742C20746865206F746865722070617274792063616E20E2809C737465616CE2809D2069742062792061737369676E696E6720697420746F2074686569722073746174652C20616E6420796F757220636F6E747261637420776F756C64206661696C20746F20657865637574652E0A0A4D6F7267616E2062656C696576657320746861742077652073686F756C642074616B65206120646966666572656E7420617070726F61636820617320736C696365732068617665207468652073656D616E74696320696E20476F2C2077686572652074686520756E6465726C79696E6720617272617920697320616C7761797320686561702D616C6C6F636174656420616E64206D6F6469666961626C652E20496E74726F647563696E6720636F6E7374616E7420736C6963657320776F756C642074687573206E65636573736172696C79206861766520746F20696E74726F6475636520636F6E636570747320726567617264696E6720696D2F6D75746162696C697479206F662076616C75657320776974686F757420746865206D61746368696E6720636F6E7374727563747320746861742061206C616E6775616765206C696B652052757374206861732E20546F206D616B65206120636F6D70726F6D69736520616E64206B65657020636F6D7061746962696C69747920776974682074686520476F20737065632C20776520617265206C696B656C7920746F20696D706C656D656E74207468697320696E2061207472616E7370696C65722028676E6F6666656573637269707429207468617420776F756C6420696D706C656D656E742074686973206665617475726520616E642062652061626C6520746F207472616E7370696C6520746F2076616C696420476F2E0A0A2323204772616E74656520616E642045636F73797374656D20557064617465730A0A417320796F752063616E207365652C207765E280997665206D616465206120746F6E206F6620646576656C6F706D656E742070726F6772657373206F76657220746865206C61737420666577207765656B732E205765E28099726520616C736F207374656164696C7920616464696E67206D6F726520676E6F6D657320746F206F757220636F6D6D756E697479206F66206275696C646572732C20616E642074686579E28099726520776F726B696E67206F6E2074686520636F726520696E667261737472756374757265206F6620476E6F2E6C616E642C2061732077656C6C20617320746865207065726D697373696F6E6C6573732064417070732074686520706C6174666F726D2077696C6C20686F7573652E204C6574E28099732073656520776861742074686579E280997665206265656E20757020746F2073696E636520746865206C617374207570646174652E0A0A2323204F6E626C6F630A0A4F6E626C6F6320686173206265656E20627573792C20617320616C776179732C2077697468206120736C6577206F66207570646174657320666F72207573206F76657220746865206C61737420666577207765656B732E20546865207465616D20686173206265656E20646576656C6F70696E6720476E6F737761702C2074686520666972737420476E6F2E6C616E64206175746F6D61746564206D61726B6574206D616B6572207769746820636F6E63656E747261746564206C69717569646974792C20616E64207468657920676176652075732061206C6976652064656D6F2E204F6E207468652066726F6E7420656E642C207768696368206973207374696C6C206120776F726B20696E2070726F67726573732C20796F752063616E2066696E642061206F6E652D73746F702076656E756520666F72207472616465727320746F207669657720616C6C2074686520696E666F726D6174696F6E2061626F757420746F6B656E73206F6E20676E6F2E6C616E642C20736F20796F7520646F6EE2809974206861766520746F206D6F7665206265747765656E20476E6F7377617020616E64206120746F6B656E2061676772656761746F72206C696B6520436F696E4765636B6F2E20596F752063616E20616C736F2073656520696E63656E746976697A656420706F6F6C7320736F72746564206279206C69717569646974792C20766F6C756D652C204150522C206C6971756964697479206D696E696E6720726577617264732C206574632E2C20616E6420612077616C6C6574207061676520746F20636865636B20796F75722062616C616E6365732E20596F752077696C6C20616C736F2062652061626C6520746F206465706F736974206F72207769746864726177206173736574732066726F6D2074686520496E746572636861696E207768656E2049424320697320656E61626C65642E0A0A436865636B206F75742074686520776F726B2074686579E28099766520646F6E6520736F20666172206F6E20746865204F6E626C6F63205B6861636B657273706163655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F6973737565732F3239292E20546865207465616D2068617320616C736F2072656C6561736564205B74686520646F63756D656E746174696F6E5D2868747470733A2F2F646F63732E676E6F737761702E696F2F292061626F7574207768617420796F752063616E206578706563742066726F6D20476E6F737761702C2074686520726174696F6E616C6520626568696E642074686569722064657369676E2063686F696365732C20736F6D6520696E666F726D6174696F6E2061626F757420746F6B656E6F6D6963732C20612070726576696577206F66207468652055492C20616E64206D6F72652E205468656972206D61696E20666F637573206973206F6E2064656C69766572696E67206120736D6F6F746820616E642077656C636F6D696E67207573657220657870657269656E636520616E64206162737472616374696E6720617761792074686520646966666963756C74206D656368616E69736D73206F6620636F6E63656E747261746564206C697175696469747920736F20746861742074686520696E74657266616365206973206173206D696E696D616C20616E642073696D706C6520617320706F737369626C652E0A0A546865207465616D2077696C6C20626520726561647920746F206C61756E636820476E6F7377617020617320736F6F6E20617320676E6F2E6C616E642072656163686573206D61696E6E65742E2046656174757265207570646174657320616E6420656E68616E63656D656E74732077696C6C20626520616C69676E656420776974682074686520646576656C6F706D656E74206F662074686520636F726520476E6F20537461636B2EC2A02054686520636F646520666F7220476E6F7377617020686173206E6F77206265656E205B6F70656E2D736F75726365645D2868747470733A2F2F6769746875622E636F6D2F676E6F737761702D6C616273292C20736F20796F752063616E2074616B652061206C6F6F6B2061742065766572797468696E672074686579E28099766520646F6E6520616E64206576656E206D616B652073756767657374696F6E732E20496E2074686520636F6D696E67207765656B732C204F6E626C6F632077696C6C20616C736F20776F726B206F6E206275696C64696E6720636F726520476E6F2E6C616E6420696E66726173747275637475726520746F20737570706F727420616E206561726C696572206C61756E63682E2046696E642064657461696C73206F66207468697320696E204F6E626C6F63E2809973205B6772616E74207375626D697373696F6E5D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F65636F73797374656D2D66756E642D6772616E74732F70756C6C2F34292E20416E64206265207375726520746F20636865636B206F7574204F6E626C6F63E280997320696E666F726D617469766520362D657069736F6465205B626C6F67207365726965735D2868747470733A2F2F6D656469756D2E636F6D2F40676E6F737761706C6162732F7768792D676E6F2D696E74726F647563696E672D676E6F737761702D6464366163633232653661312920746861742066656174757265732074686520686973746F7279206F6620626C6F636B636861696E20616E642065786368616E6765732C20612064656570206469766520696E746F2074686520476E6F20537461636B2C20616E6420616E20696E74726F64756374696F6E20746F20476E6F737761702C20776865726520746865792073686172652064657461696C73206F66207468656972206A6F75726E657920616E6420696E7369676874732E0A0A23232054657269746F72690A0A576520616C736F2073617720616E20617765736F6D652064656D6F2066726F6D207468652054657269746F7269207465616D2C20776869636820796F752063616E20636865636B206F7574206174206170702E74657269746F72692E636F6D2E2053696D706C7920636F6E6E65637420796F7572204164656E612077616C6C657420746F2063726561746520612075736572206E616D652C20737461727420696E746572616374696E6720776974682074686520736F6369616C20666565642C2063726561746520796F7572206F776E2044414F2C20616E6420616464206D656D626572732E20546865207465616D20697320776F726B696E67206F6E206D6F726520657874656E7369766520646F63756D656E746174696F6E20746F206578706C61696E20686F7720697420776F726B7320696E206D6F72652064657461696C2E205768696C65207374696C6C206120776F726B20696E2070726F67726573732C2054657269746F72692068617320646576656C6F706564206120636F6F6C20666C616767696E672073797374656D207468617420616C6C6F777320796F7520746F20756E666F6C6C6F7720636F6E74656E7420796F7520646F6EE2809974206C696B65206F7220666C616720636F6E74656E7420617320696E617070726F7072696174652E20496620706F7374732072656365697665206D616E7920666C6167732C2075736572732063616E20766F7465206F6E207768657468657220746F2062616E207468656D2C206372656174696E672061206865616C74687920616E6420737570706F727469766520736F6369616C20656E7669726F6E6D656E7420667265652066726F6D206465726F6761746F727920636F6E74656E74206D6F6E69746F7265642062792061206C696B652D6D696E64656420636F6D6D756E697479207468726F7567682061206D6F6465726174696F6E2044414F2E0A0A546865207465616D20636F6E74696E7565732069747320776F726B206F6E2044414F20696E746572666163657320616E6420686173206275696C7420612075736566756C20746F6F6C20666F72207370656564696E6720757020746865206465706C6F796D656E74206F66207061636B61676573206173206120776F726B61726F756E6420756E74696C207765E280997665206465636964656420686F7720746F2062657374207461636B6C65207265616C6D2076657273696F6E696E672E20546865792061726520616C736F20776F726B696E67206F6E2074686520657363726F772073797374656D2C2077686963682077696C6C2062652075736566756C20666F722074686520667265656C616E6365206D61726B6574706C6163652C20616E642070726573656E74696E672044414F207374616E646172647320646F63756D656E746174696F6E2E0A0A23232042657274790A0A576520686176652061206E657720636F6E747269627574696E67207465616D20746F20476E6F2E6C616E642066726F6D207468652042657274792070726976617465206D6573736167696E67206170702E2054686973207465616D20697320776F726B696E67206F6E2061206D6F62696C652076657273696F6E206F6620476E6F2E6C616E642C20696D706C656D656E74696E672074686520574553482070726F746F636F6C2C20776869636820697320617661696C61626C6520627920426C7565746F6F74682C206C6F63616C20574946492C206F72206F74686572206D65616E732C20616E642070726F7669646573207365637572652063656E736F72736869702D726573697374616E7420636F6D6D756E69636174696F6E206265747765656E20646576696365732E2054686520706C616E20697320746F2062652061626C6520746F2070726F7669646520616E20616C7465726E6174697665207472616E73706F727420666F7220476E6F206170706C69636174696F6E73207768656E2074686520696E7465726E6574206973206E6F7420617661696C61626C6520616E64206275696C642074686520736B656C65746F6E2F666F756E646174696F6E73207468617420656E61626C6520646576656C6F7065727320746F2063726561746520476E6F2D63656E74726963206D6F62696C652061707073206D6F726520656173696C7920696E20746865206675747572652E204265727479206272696E6773206120746F6E206F6620657870657269656E636520696E206F66662D6772696420636F6D6D756E69636174696F6E20616E642067657474696E67206170707320746F2072756E206F6E206D6F62696C6520646576696365732C20626F746820416E64726F696420616E6420694F532E0A0A546865207465616D20686173206372656174656420697473206F776E205B746573746E65745D28687474703A2F2F746573746E65742E676E6F2E62657274792E696F2F292C20776869636820796F75206172652077656C636F6D6520746F2074657374206F757420616E6420706C61792061726F756E6420776974682C20616C74686F75676820746865792077696C6C2062652072657374617274696E6720616E64207265626F6F74696E6720776974686F7574207072696F72206E6F746963652C20736F206265206177617265207468617420796F757220776F726B20636F756C642062652077697065642E20496E20746865206665772073686F7274207765656B732074686579E280997665206265656E20776F726B696E6720776974682075732C2042657274792068617320616C72656164792066696E69736865642074686569722066697273742050726F6F66206F6620436F6E636570742C20612073696D706C65206170702072756E6E696E67206F6E20694F5320616E6420416E64726F69642E205468657920636F7069656420636F64652066726F6D2074686520676E6F6B657920636F6D6D616E64206C696E652C20616E64206E6F77206974E280997320696E7374616C6C696E6720616E642072756E6E696E67206F6E206D6F62696C6520616E6420696E746572616374696E6720776974682074686520626C6F636B636861696E2E0A0A4E6F772C20426572747920697320776F726B696E67206F6E2061206E6963657220554920666F72207468652061707020616E642077696C6C2070726F706F736520612070726F6A65637420746F20637265617465206120666F726D616C206672616D65776F726B2063616C6C656420476E6F4D6F62696C652C2077686963682077696C6C20616C6C6F7720616E796F6E6520746F20637265617465207468656972206F776E2061707020616E642072756E206974206F6E206D6F62696C652E205765206C6F6F6B20666F727761726420746F20736565696E672074686569722064656D6F20736F6F6E2E0A0A232320476F6C616E6720576F726B696E672047726F75700A0A496E206F74686572206E6577732C207765277665207374617274656420612062692D7765656B6C79205B476E6F6D6520476F6C616E6720576F726B696E672047726F75705D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F6973737565732F3135292077686572652077652067657420746F67657468657220616E64206469736375737320766172696F757320746F706963732C207375636820617320746865206C616E67756167652D72656C6174656420616E64207468656F727920656C656D656E7473206F6620476F20616E6420476E6F2E20576520616C736F2061696D20746F206964656E74696679206D65616E696E6766756C20616E6420726561736F6E61626C65207761797320746F20636F6E7472696275746520746F20476F6C616E672C20476F70686572732C20616E64207468652067656E6572616C206F70656E2D736F7572636520636F6D6D756E69747920616E6420696D70726F7665206F7572207669736962696C6974792074686572652E20576520686F706520746F2061747472616374206D6F726520476F206465767320746F207468652070726F6A65637420616E642070726F76696465206120E2809C626C6F636B636861696E2D6C657373E2809D20657870657269656E636520666F72207765623220476F20646576732E0A0A5765277665206861642074776F206D656574696E677320736F206661722C20616E6420736F6D6520726563656E74206861636B6572737061636520697373756573206861766520616C726561647920656D65726765642066726F6D207468652064697363757373696F6E732E204F6E6520696E20706172746963756C61722074686174207765E280997265206163746976656C79206576616C756174696E6720697320476E6F666665652C2061207472616E7370696C657220746F6F6C20696E73706972656420627920746865206C696B6573206F66205B436F666665655363726970745D2868747470733A2F2F636F666665657363726970742E6F72672F2920666F7220476F20616E6420476E6F20696E746567726174696F6E2E20476E6F6666656520776F756C64206265206120706F77657266756C207374616E64616C6F6E6520746F6F6C20746F20656E68616E636520476F20616E6420476E6F2028626C6F636B636861696E292070726F6A656374732062792067656E65726174696E6720636F646520616E64207365616D6C6573736C7920696E746567726174696E67206E657720666561747572657320776974686F7574206D616E75616C20636F64696E672E2046696E64206F7574206D6F726520617420746865206C696E6B2061626F76652E0A0A232320457468434320616E64204E6562756C61722053756D6D69740A0A54686520476E6F2E6C616E64207465616D2077617320696E2066756C6C20666F72636520696E2050617269732061742074686520656E64206F66204A756C7920666F722045746843432C207768657265207765206D6574206D616E792070617373696F6E61746520646576656C6F7065727320616E64207370726561642074686520776F72642061626F757420476E6F2E6C616E6420616E642C207370656369666963616C6C792C20686F7720476E6F6C616E6720636F6D706172657320616E6420636F6E74726173747320746F20536F6C69646974792E20576520686164206120626F6F746820647572696E672074686520636F6E666572656E6365206D616E6E65642062792074686520476E6F2E6C616E64207465616D20636F6D706C657465207769746820617765736F6D65207377616720616E64206120636F6E74696E756F75732070726573656E746174696F6E20696E20746865206261636B67726F756E6420706C6179696E67206F6E20612066756C6C2D73637265656E2074656C65766973696F6E2E0A0A4174204E6562756C61722053756D6D69742C206F7572205650206F6620456E67696E656572696E672C204D616E6672656420546F75726F6E2C205B6761766520612074616C6B5D2868747470733A2F2F7777772E796F75747562652E636F6D2F77617463683F763D43747842616A4363545951292063616C6C656420E28098476E6F6C616E6720666F7220446576656C6F706572733A204578616D696E696E672074686520436F726520537461636B2CE280992077686572652068652062726F6B6520646F776E20746865206D616A6F7220636F6D706F6E656E7473206F6620476E6F2C2064656D6F6E7374726174656420686F7720746865207570636F6D696E6720476E6F2053444B20636F6D7061726573207769746820746865206578697374696E6720436F736D6F732053444B2C20616E64206578706C61696E65642077687920476E6F2E6C616E6420697320616E20657863656C6C656E742063686F69636520666F722061636365737369626C6520616E64207375737461696E61626C6520626C6F636B636861696E20646576656C6F706D656E742E0A0A232320426C6F636B636861696E204170706C69636174696F6E205374616E666F72642053756D6D6974202842415353290A0A4A6165206F70656E656420746865205B426C6F636B636861696E204170706C69636174696F6E205374616E666F72642053756D6D6974202842415353295D2868747470733A2F2F626173732E73697465732E7374616E666F72642E6564752F29206576656E742C20617474656E6465642062792074686F7573616E6473206F662073747564656E747320616E642066757475726520626C6F636B636861696E20646576656C6F706572732E204865206761766520616E206F76657276696577206F6620476E6F2E6C616E642C20476E6F564D2C20616E6420476E6F6C616E672C20616E64206578706C61696E6564207468652066656174757265732074686174206D616B65206F757220706C6174666F726D20706172616469676D2D7368696674696E6720616E642074696D656C6573732E20486520616C736F20646F766520696E746F2074686520636F7265206F6620776879207765E280997265206275696C64696E6720476E6F2E6C616E6420E2809320746F2070726F7669646520612063656E736F72736869702D726573697374616E7420706C6174666F726D20666F7220747275746820646973636F7665727920746861742068656C70732070656F706C6520696D70726F766520746865697220756E6465727374616E64696E67206F662074686520776F726C6420696E20616E20657261206F6620696E666F726D6174696F6E2063656E736F727368697020616E6420636F6E74726F6C2E0A0A436F6D696E67207570206C617465722074686973206D6F6E74682C20796F752063616E20636174636820757020776974682074686520476E6F2E6C616E64207465616D206174205B44617070436F6E204265726C696E5D2868747470733A2F2F7777772E64617070636F6E2E696F2F292066726F6D2053657074656D6265722031312D31332C207768657265207765E280996C6C2062652064656C69766572696E6720616E20696E666F726D6174697665206B65796E6F746520616E6420686F7374696E6720612073696465206576656E7420746F2067657420746F20676E6F20796F75206265747465722E20496620796F752066696E6420796F757273656C6620696E2042617263656C6F6E6120666F72205B576562332046616D696C795D2868747470733A2F2F7765623366632E78797A2F29206F6E2053657074656D6265722032332C20796F752063616E206A6F696E20696E206120476E6F20636F64696E6720776F726B73686F702E20596F75E280996C6C20616C736F2062652061626C6520746F206D65657420746865207465616D206174205B476F70686572436F6E2055535D2868747470733A2F2F7777772E676F70686572636F6E2E636F6D2F2920696E2053616E20446965676F2E205765E28099726520686F7374696E6720616E20616374696F6E2D7061636B656420776F726B73686F702C20E2809843686573733A2054686520476E6F6C616E67205761792CE28099206F6E20476F7068657220436F6D6D756E697479204461792C20776865726520796F752063616E206C6561726E20746F206275696C642061207765623320636865737320736572766572206F6E20476E6F2E6C616E6420616E6420636F6D7065746520666F7220636F6F6C207072697A657320696E20616E206F6E676F696E6720636865737320746F75726E616D656E74207468726F7567686F757420746865206576656E742E204D6F72652064657461696C7320636F6D696E6720736F6F6E2E2054686174E280997320616C6C20666F72206E6F7721204265207375726520746F20636865636B206261636B20616761696E207769746820757320666F7220746865206E6578742065646974696F6E206F66202A546865204D6F726520596F7520476E6F2A20746F206B656570207570207769746820616C6C206F75722070726F67726573732E0A0A2A446F20796F752077616E7420746F20636F6E7472696275746520746F20476E6F2E6C616E64E2809973206D6F6E74686C7920757064617465733F20496620796F75E280997265206275696C64696E67206F6E20476E6F2E6C616E6420616E642077616E7420746F20686967686C6967687420796F757220646576656C6F706D656E742C2070726F6A6563742C206576656E742C206F7220696465612C206C6574207573206B6E6F772C20616E64207765E280996C6C20696E636C75646520796F757220636F6E747269627574696F6E2E2A0A3214323032332D30392D30345431333A33373A30305A3209636872697374696E613211676E6F6C616E642C676E6F766D2C746D320A8C190A0A2F766D2E6D5F63616C6C12FD180A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374320A63686573732D676332333235506C617920436865737320776974682055733A2054686520476E6F6C616E672057617920617420476F70686572436F6E203230323332A8170A0A43616C6C696E6720616C6C20676E6F6D657320616E6420676F70686572732120436F6D65206A6F696E2074686520476E6F2E6C616E64207465616D20617420476F70686572436F6E20323032332C2053657074656D626572203235202D2032382C20696E2053616E20446965676F2C2055532E205765E2809972652073706F6E736F72696E6720746869732079656172E280997320616374696F6E2D7061636B6564206576656E7420746861742077696C6C2067617468657220746F67657468657220736F6D65206F662074686520776F726C64E280997320627269676874657374206D696E647320616E6420736D6172746573742070726F6772616D6D65727320756E646572206F6E6520726F6F662E20536F2064726F70206279206F757220626F6F74682C207069636B20757020736F6D6520737761672C20616E64207361792068657921205765E280996C6C206265206F6E2068616E642065766572792064617920746F206D65657420616E642067726565742C20616E7377657220616C6C20796F7572207175657374696F6E732C20616E6420646973637573732065766572797468696E6720476F2C20476E6F2C20616E64206265796F6E6421205765E280996C6C20616C736F20626520686F7374696E67206120776F726B73686F70206F6E20436F6D6D756E697479204461792C2053657074656D6265722032362C2063616C6C656420E2809843686573733A2054686520476E6F6C616E67205761792CE2809920776865726520796F752063616E206C6561726E20686F7720746F206275696C642061207765623320636865737320736572766572206F6E20476E6F2E6C616E642E0A0A232320476F70686572436F6E20323032330A0A5B476F70686572436F6E5D2868747470733A2F2F7777772E676F70686572636F6E2E636F6D2F29206973206120636F6D6D756E6974792D64726976656E20616E6E75616C206576656E742074686174207374617274656420696E203230313420616E642069732064656469636174656420746F2070726F6D6F74696E672074686520757365206F6620476F20616E642074686520656475636174696F6E206F6620476F20646576656C6F706572732E20457665727920796561722C2074686F7573616E6473206F6620676F70686572732066726F6D2061726F756E642074686520776F726C642065786368616E67652069646561732C20736861726520746865697220776F726B20616E6420657870616E642074686520476F206E6574776F726B2E2054686572652061726520666F75722064617973206F662066756E2D66696C6C656420616374697669746965732C20696E636C7564696E672068616E64732D6F6E20776F726B73686F70732C20696E666F726D6174697665206B65796E6F7465732C206E6574776F726B696E67206576656E74732C20616E64206861636B6174686F6E732C20616C6C2074616B696E6720706C61636520696E20746865206C6169646261636B205765737420436F6173742063697479206F662053616E20446965676F2E2057686572652062657474657220746F20657870616E6420796F7572206B6E6F776C6564676520616E64206D616B65206E657720667269656E6473207468616E20696E206F6E65206F6620746865205553E28099206D6F737420706F70756C61722064657374696E6174696F6E733F0A0A4173206120676F6C642073706F6E736F7220617420746869732079656172E2809973206576656E742C20476E6F2E6C616E642077696C6C2062652072756E6E696E67206120626F6F746820616E6420646F696E67206F7572206265737420746F20636F6E76657274206173206D616E7920676F706865727320617320706F737369626C6520746F20476E6F2C2073686F77696E67207468656D20686F77206561737920697420697320746F20706F7274207468656972206578697374696E6720776562322061707073206F76657220746F20476E6F2E6C616E64206F7220746F206275696C6420636F6D706C6574656C79206E6577206F6E65732066726F6D20736372617463682E0A0A23232043686573733A2054686520476E6F6C616E67205761790A0A496620796F75E280997265206C6F6F6B696E6720666F7220612068616E64732D6F6E20636F64696E6720657870657269656E636520616E6420746F20686176652061206C6974746C652066756E2077697468207573206174207468652073616D652074696D652C206A6F696E207573206F6E20436F6D6D756E6974792044617920666F7220616E20617765736F6D6520776F726B73686F702C202A2AE2809843686573733A2054686520476E6F6C616E67205761792EE280992A2A204B69636B737461727420796F757220646179206279206C6561726E696E6720746F206275696C642061207765623320636865737320736572766572206F6E20476E6F2E6C616E64207573696E6720476E6F6C616E672E2042792074686520656E64206F66207468652073657373696F6E2C20796F75E280996C6C2068617665206761746865726564206261736963206B6E6F776C65646765206F6E20646576656C6F70696E6720616E64206465706C6F79696E6720736D61727420636F6E747261637473206F6E20476E6F2E6C616E642C20616E6420636F6E6E656374696E6720736D61727420636F6E74726163747320746F2061207765622066726F6E74656E642E20596F75E280996C6C20616C736F2073656520686F77207765623320656E61626C657320796F7520746F2077726974652070657270657475616C20616E6420747275737461626C6520736F6369616C20616E642067616D696E6720706C6174666F726D7320616E6420686F7720746F206275696C64206120776562332063686573732073657276657220616E642077656273697465207769746820476E6F2E6C616E642E0A0A496620796F752077616E7420746F206A6F696E2075732C206D6565742075732061742031303A303020612E6D2E20696E20746865204772616E642042616C6C726F6F6D2031302E0A0A2323204C6574E280997320506C61790A0A41667465722074686520776F726B73686F702C207468652066756E20626567696E73207769746820616E206F6E676F696E6720636865737320746F75726E616D656E74207468726F7567686F75742074686520474332332073756D6D697420666F72206576656E74207061727469636970616E74732E20546F20626520696E20776974682061206368616E6365206F662073636F6F70696E6720757020736F6D6520736572696F75736C7920636F6F6C207072697A65732C204743323320617474656E646565732077696C6C206E65656420746F2073686F772075732074686569722062657374206D6F76657320616E6420686F77206D756368207468657920656E6761676520776974682074686520476E6F2E6C616E6420636861696E2E205468697320636F6D7065746974696F6E2069732064657369676E656420746F20707574206F757220706C6174666F726D20746F207468652074657374206F7665722074776F206D61696E2061726561733A206368657373206D6173746572792028353025206F6620706F696E74732920616E6420706C6174666F726D20656E676167656D656E742028353025206F6620706F696E7473292E20546F20626520656C696769626C6520666F72207072697A65732C207061727469636970616E7473206D7573742062652070726573656E7420617420746865206576656E742E20576520686F706520746F2073656520796F752074686572652120496620796F752063616EE2809974206A6F696E20757320696E20706572736F6E20696E2053616E20446965676F2C206265207375726520746F205B666F6C6C6F77207573206F6E20585D2868747470733A2F2F747769747465722E636F6D2F5F676E6F6C616E64292E205765E280996C6C20626520676976696E672075706461746573206F6E206F75722070726F677265737320616E642073686172696E672074686520686967686C6967687473206F6620746865206576656E742E204D617920746865206265737420676E6F6D652077696E210A3214323032332D30392D32355431333A33373A30305A3209636872697374696E61321D676E6F6C616E642C676E6F766D2C676E6F63686573732C6576656E74730AE6480A0A2F766D2E6D5F63616C6C12D7480A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F73743209676E6F6D6F62696C653233476E6F4D6F62696C652C2061204672616D65776F726B20666F72204275696C64696E6720476E6F204D6F62696C65204170707332FB460A0A2A5468697320626C6F6720706F7374206973207772697474656E20627920426572747920546563686E6F6C6F676965732C20616E204E474F2074686174206973206275696C64696E67206F70656E20616E64206672656520636F6D6D756E69636174696F6E20736F6C7574696F6E7320776974686F757420616E79206F6620746865206C696D69746174696F6E7320696D706F7365642062792063656E7472616C697A65642073797374656D732E20426572747920697320612070726F756420706172746E657220616E64206772616E746565206F6620476E6F2E6C616E642E2A0A0A546865207965617220697320323032332E2043757272656E7420476E6F20617070732072756E206F6E206465736B746F70206F72206C6170746F7020636F6D7075746572732074686174206861766520476F20696E7374616C6C65642E20546F2072756E206F6E206D6F62696C652C207468652061707020776F756C64206E65656420746F2062756E646C652074686520476F2072756E74696D652C20776869636820697320636F6D706C69636174656420666F72206D6F737420646576656C6F706572732E2041742042657274792C2077652068617665207965617273206F6620657870657269656E6365207573696E6720476F206F6E206D6F62696C6520616E64206F766572636F6D696E6720646966666963756C74696573207769746820416E64726F696420616E6420694F53206F7065726174696E672073797374656D732E205765206275696C742057657368204E6574776F726B2C206120646563656E7472616C697A656420636F6D6D756E69636174696F6E2070726F746F636F6C207468617420656E61626C65732070327020757365727320746F2072656C6961626C7920616E64207365637572656C792073656E64206D65737361676573206F766572206173796E63206E6574776F726B732C206576656E20696E20656E7669726F6E6D656E7473207769746820706F6F72206F72206E6F20636F6E6E65637469766974792E0A0A5468697320737461676520697320746875732073657420746F2074616B6520746865206C65617020616E64206D616B652069742065617369657220666F72206275696C6465727320746F20646576656C6F7020476E6F206170706C69636174696F6E7320666F72206D6F62696C6520646576696365732E0A0A23205768617420697320476E6F4D6F62696C653F0A0A53696D706C79207075742C20476E6F4D6F62696C652069732061206672616D65776F726B20666F7220646576656C6F70696E6720476E6F206D6F62696C65206170706C69636174696F6E732E205468697320697320686F7720697420776F726B733A0A0A2A5741524E494E473A204465657020746563686E6963616C2073656374696F6E732061686561642E2047726162206120636F66666565206265666F72652076656E747572696E6720666F7274682A2E0A0A466F7220636F6D6D756E69636174696F6E206265747765656E20746865206D6F62696C652061707020616E642074686520476E6F20636F64652C20476E6F4D6F62696C652075736573205B675250435D2868747470733A2F2F677270632E696F2F292C20612077656C6C2D737570706F72746564206672616D65776F726B20746861742073656E647320616E6420726563656976657320476F6F676C652050726F746F627566206D657373616765732E204576656E2074686F7567682074686520636F726520476E6F20636F6465206973207772697474656E20696E20476F2C207468652061707020636F64652063616E20757365205265616374204E61746976652C204A6176612C2053776966742C206574632E2054686520666F6C6C6F77696E672073797374656D206469616772616D2073686F777320686F77206752504320697320757365642E0A0A3C64697620616C69676E3D2263656E746572223E0A20202020215B5D2868747470733A2F2F6769746875622D70726F64756374696F6E2D757365722D61737365742D3632313064662E73332E616D617A6F6E6177732E636F6D2F3130393334373037392F3236373933343735342D65346461366665632D613538362D346562652D393763632D3362336164376637393337302E6A7067290A3C2F6469763E0A0A4D6F76696E672066726F6D2074686520626F74746F6D20746F2074686520746F702C207468697320697320686F772074686520666C6F77206C6F6F6B733A0A0A312E2041742074686520626F74746F6D2061726520476F207061636B6167657320696E2074686520676E6F20636F6465626173652E2041202A2A676E6F636C69656E742E436C69656E742A2A20737570706F72747320636F6D6D756E69636174696F6E2077697468207468652072656D6F746520476E6F2E6C616E64206E6F64652077697468206D6574686F6473206C696B652043616C6C20746F2063616C6C2061207265616C6D2066756E6374696F6E2E2054686520476E6F20636F64656261736520616C736F20686173202A2A6B6579732E4B6579626173652A2A20746F20737570706F727420612077616C6C65742073746F726564206F6E20746865206C6F63616C206465766963652077697468206D6574686F6473206C696B65204372656174654163636F756E742E0A322E205468657365206D6574686F6473206172652063616C6C6564206469726563746C792066726F6D20746865206E657874206C6576656C20757020627920746865202A2A476E6F4D6F62696C652A2A20476F20636F64652E204120476F206F626A6563742063616EE280997420626520706173736564207468726F75676820746865206752504320696E746572666163652C20736F2074686520476E6F4D6F62696C6520476F20636F6465206D61696E7461696E7320612070657273697374656E7420676E6F636C69656E742E436C69656E74206F626A6563742C20776869636820697320616363657373656420627920675250432063616C6C732E2054686520476E6F4D6F62696C65204150492066756E6374696F6E7320617265207265676973746572656420627920616E20616D696E6F207061636B6167652E676F2066696C6520616E64207468652067656E6572617465642050726F746F6275662066696C657320617265207573656420746F20636F6E666967757265207468652067525043207365727665722E0A332E2046696E616C6C792C2061742074686520746F70206F6620746865206469616772616D2C20746865202A2A6752504320636C69656E7420696E20746865206D6F62696C65206170702A2A20636F6D6D756E69636174657320776974682074686520476E6F4D6F62696C65206752504320736572766572206F7665722061206C6F63616C20636F6E6E656374696F6E207573696E672050726F746F627566206D657373616765732E204120675250432063616C6C2063616E206569746865722072657475726E20616E20696D6D65646961746520726573756C742028666F72206578616D706C652C204765744B6579436F756E7429206F7220616E206173796E6368726F6E6F757320675250432073747265616D206F626A6563742C2077686963682063616E2072657475726E2064656C6179656420726573756C74732028666F72206578616D706C652C20612043616C6C20746F20612072656D6F7465207265616C6D2066756E6374696F6E292E205468652067525043206672616D65776F726B2075736573207468652050726F746F6275662041504920746F2067656E657261746520636F6E76656E69656E74204150492066756E6374696F6E7320696E20746865206D6F62696C6520617070E2809973205B707265666572726564206C616E67756167655D2868747470733A2F2F677270632E696F2F646F63732F6C616E6775616765732920285265616374204E61746976652C204A6176612C2053776966742C206574632E292E0A0A2320486F7720476E6F4D6F62696C652062656E6566697473206275696C646572730A0A5468652066697273742076657273696F6E206F6620746865206672616D65776F726B2077696C6C20696E636C756465207468726565206D61696E2073657473206F662066656174757265733A0A0A312E202A2A426C6F636B636861696E204F7065726174696F6E732A2A3A20546865736520726566657220746F2074686520636F726520626C6F636B206F662066756E6374696F6E732074686174207468652061707073206E65656420746F20696E74657261637420776974682074686520626C6F636B636861696E2E205468696E6773206C696B652074686520676E6F636C69656E742041504920746F206566666563746976656C79206272696E67207468652062656E6566697473206F662074686520476E6F206672616D65776F726B206F6E206D6F62696C652C207468652067617320657374696D6174696F6E20696E7465726661636520616E642063616C6C696E67207265616C6D2066756E6374696F6E732C207175657279696E67206120626C6F636B636861696E206E6F64652028616E64206D6F7265292061726520696E636C7564656420686572652E0A322E202A2A57616C6C65742A2A3A20417320746865206E616D652073756767657374732C2068657265207765206861766520616C6C20746865207374616E646172642077616C6C6574206F7065726174696F6E73206C696B6520637265617465206F722064656C65746520616E206163636F756E742C2073657420746865207265636F76657279207068726173652C206163636F756E742062616C616E63652C20616E6420736F206F6E2E0A332E202A2A546F6F6C6B69742A2A3A2057652077616E7420746F206D616B65206974206173206561737920617320706F737369626C6520666F72206465767320746F207374617274206275696C64696E6720617070732077697468206F7572206672616D65776F726B2C20736F207765E280996C6C2070726F76696465207468656D207769746820696E7374616C6C20696E737472756374696F6E732C206578616D706C6520617070732C20616E64206D6F726520746563686E6963616C207374756666206C696B652067656E70726F746F206F7074696F6E7320746F20737570706F7274206752504320616E642068656C7065722066756E6374696F6E7320746F207061727365207468652072656E646572206F75747075742E0A0A54686F73652073686F756C6420626520656E6F75676820746F20616C6C6F77206275696C6465727320746F206765742073746172746564206F6E207573696E6720616E64206578706572696D656E74696E67207769746820476E6F206D6F62696C6520617070732E0A0A2D202A537570706F727420666F72207365637572652070327020636F6D6D756E69636174696F6E2C206576656E207768656E2074686520496E7465726E657420697320646F776E3F2A0A2D202A5965732C20706C65617365212A0A0A536F6D657468696E672074686174206973206E6F74206E65636573736172696C7920657373656E7469616C20666F722056312C2062757420666F7220737572652077696C6C206F70656E2074686520646F6F727320746F20736F6D6520706F77657266756C206361706162696C6974696573206C61746572206F6E20697320746F2061646420616E20696E7465726661636520616E64206120636F6E7374727563746F7220746F2061646170742074686520636F6D6D756E69636174696F6E207472616E73706F72742E20546869732077696C6C206D616B6520697420706F737369626C6520666F72206465767320746F20696E636F72706F72617465206F7468657220746F6F6C73206C696B652057657368204E6574776F726B20616E642067697665207468656972206170707320746865206162696C69747920746F207365637572656C7920616E642072656C6961626C792073656E64206D65737361676573206576656E20696E207665727920706F6F72206E6574776F726B20636F6E646974696F6E732E204275742074686174E280997320612073746F727920666F7220616E6F746865722074696D652E0A0A23205768656E2077696C6C20476E6F4D6F62696C652062652072656164793F0A0A563120697320706C616E6E656420666F722072656C6561736520696E206D69642D446563656D62657220323032332E0A0A556E74696C207468656E2C20796F752063616E20636865636B206F7574206F75722070726F6772657373205B686572655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F6973737565732F3238292E0A0A476F7420666565646261636B206F722077616E7420746F2064726F702075732061207175657374696F6E3F2041736B2061776179206F6E206F7572205B7265706F5D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F6D6F62696C652F697373756573292E0A0A23205768617420646F65732074686520667574757265206C6F6F6B206C696B65206265796F6E642056313F0A0A5765207365652061206C6F74206F6620706F74656E7469616C20646972656374696F6E7320666F7220476E6F4D6F62696C652061667465722074686520696E697469616C2072656C6561736520746861742077696C6C20696D70726F766520746865207573657220657870657269656E63652C20657874656E64206974732066756E6374696F6E616C6974792C20616E64206D616B6520476E6F4D6F62696C65206576656E206D6F7265207365637572652E205765E280997265207374696C6C2073637261746368696E6720746865207375726661636520696E207465726D73206F6620686F77206661722077652063616E2074616B652069747320646576656C6F706D656E742C20616E64207765206C6F6F6B20666F727761726420746F20776F726B696E67206F6E206675727468657220697465726174696F6E7320616E6420696D70726F76656D656E74732E20536F6D65206F66206F757220696465617320666F722074686520667574757265206265796F6E6420563120696E636C7564653A0A0A312E204D616B696E672069742065617369657220666F7220646576656C6F7065727320746F202A2A6275696C642A2A202A2A6465736B746F7020617070732A2A202A2A616E642A2A202A2A62726F7773657220657874656E73696F6E732A2A3A0A322E205468726F75676820476E6F4D6F62696C652C2077652063616E206772616475616C6C7920656E61626C6520E2809C6465736B746F70E2809D206465767320746F20757365206F7572205265616374204E6174697665206752504320696E7465726661636520746F207772697465206465736B746F70206170706C69636174696F6E73207768696C65207573696E67206578697374696E672066756E6374696F6E616C6974792066726F6D2074686520636F726520476F20636F64652E2054686973207761792C20646576656C6F706572732077696C6C206E6F74206E65636573736172696C79206861766520746F206C6561726E20476F20746F206C657665726167652069747320616476616E74616765732E0A332E2042726F7773657220657874656E73696F6E732061726520757375616C6C79207772697474656E20696E204A61766153637269707420696E207468652073616D652077617920617320696E205265616374204E61746976652E2054686973206F70656E732074686520646F6F7220746F2067657474696E67207468652062656E6566697473206F6620476F207669612074686520476E6F4D6F62696C65206672616D65776F726B2E204F74686572776973652C20796F75E2809964206861766520746F20656974686572206D616B652074686520476F20636F64652072756E20696E73696465207468652062726F7773657220657874656E73696F6E20287768696368206973206E6F74206561737929206F722075736520612072656D6F74652073657276657220287768696368206973206E6F7420707265747479292E0A342E204D616B696E6720697420706F737369626C6520746F202A2A6578656375746520736D61727420636F6E747261637473206469726563746C792066726F6D206D6F62696C652A2A2E0A0A2A576879206973207468697320696D706F7274616E743F2A0A0A496620796F752077616E7420746F206164642061206E6577206D65737361676520746F206120626C6F636B636861696E2C20796F75206E65656420746F2061637475616C6C7920696E7465726163742077697468206974202874686520626C6F636B636861696E2920616E642075706461746520697473207374617465207769746820746865206E6577206D6573736167652E20486F77657665722C20696620796F75206A7573742077616E7420746F2062726F777365207468726F75676820746865206D657373616765732C20796F752063616E2065786563757465207468652052656E6465722066756E6374696F6E206C6F63616C6C7920776974686F7574206E656564696E6720746F2075736520796F7572206E6574776F726B20616E642C206174207468652073616D652074696D652C206765742074686520726573756C7473206D756368206661737465722E2054686973206973206265636175736520746865206E6F64652072756E73206C6F63616C6C79206F6E20746865206D6F62696C652064657669636520776974686F7574206E656564696E6720746F207370656E642063727970746F20636F696E7320746F2067657420612072656D6F7465206E6F646520746F20646F20746865206F7065726174696F6E20666F7220796F752E0A0A476E6F206E6F6465732072756E206F6E20476E6F564D732028676E6F766D292C20616E6420666F7220746865206D6F6D656E742C20746865736520617265206F6E6C7920617661696C61626C65206F6E206465736B746F70732E2057652062656C6965766520697420697320706F737369626C6520746F206D616B65207468656D20617661696C61626C65206F6E206D6F62696C652061732077656C6C2C20627574207765206E65656420746F2066696E6420636C65766572207761797320746F206F766572636F6D652074686520636F6E73747261696E7473206F66206D6F62696C65206465766963657320286C696B652070757474696E6720746865206170707320696E20746865206261636B67726F756E642028694F53292C2061646472657373696E67206E6574776F726B2062616E647769647468206C696D69746174696F6E732C20616E6420736F206F6E292E0A0A312E20446576656C6F70696E672061202A2A646563656E7472616C697A65642070757368206E6F74696669636174696F6E20736572766963652A2A20666F72202A626F74682A206D6F62696C6520616E64206465736B746F7020617070732E2047657474696E67206E6F74696669636174696F6E73206973206E6F772061207374616E646172642028616E64207665727920696D706F7274616E74292066756E6374696F6E616C697479206F662063656E7472616C697A656420617070732E20546563686E6963616C6C792C20746869732068617070656E732076696120612063656E7472616C207365727665722E204E61747572616C6C792C20686176696E6720612063656E7472616C697A656420736572766572206973206E6F7420706F737369626C6520666F72206120703270206170702C2062757420746865726520617265206F74686572207761797320746F20696D706C656D656E74206E6F74696669636174696F6E732C20616E642077652061726520636F6E7369646572696E6720696E636C7564696E67207468656D20696E2074686520476E6F4D6F62696C65206672616D65776F726B2E0A322E204D616B696E6720697420706F737369626C6520666F7220646563656E7472616C697A6564206170707320746F202A2A696E74657261637420776974682074686520626C6F636B636861696E206576656E20696620746865206E6574776F726B20636F6E6E656374696F6E20697320706F6F72206F72207669727475616C6C7920756E617661696C61626C652A2A2E205468726F75676820746865205B2A2A57657368204E6574776F726B2A2A2070726F746F636F6C5D2868747470733A2F2F776573682E6E6574776F726B2F292C20776520617265206F70656E696E672075702074686520706F73736962696C697479206F66207573696E6720616C7465726E6174697665207472616E73706F7274206D656469756D7320746F2065786368616E6765206D65737361676573206265747765656E20706565727320696E20616E206173796E6368726F6E6F7573206275742072656C6961626C65206D616E6E657220696E206F66662D6772696420656E7669726F6E6D656E74732E20456E61626C696E672072656C6961626C652C207365637572652C20616E642063656E736F72736869702D726573697374616E7420636F6D6D756E69636174696F6E206973206F7572206D61696E20636175736520617420426572747920546563686E6F6C6F676965732E2057652077616E7420746F206F70656E2074686520646F6F7220666F722070327020757365727320746F2073656E64206D6573736167657320616E6420696E746572616374206576656E20696E2065787472656D6520736974756174696F6E73206F722061647665727365207363656E6172696F732C20616E642057657368204E6574776F726B206973206275696C74207370656369666963616C6C7920666F72207468697320707572706F73652E204974206973206F6E6C79206E61747572616C20746F206D616B652069742065617369657220666F7220646576656C6F7065727320746F20757365206974207468726F7567682074686520476E6F4D6F62696C65206672616D65776F726B2E0A332E20416476616E63696E67202A2A65646765206E6574776F726B696E6720666F7220656E68616E63656420626C6F636B636861696E20726573696C69656E63652A2A2E2045646765206E6574776F726B696E672072656665727320746F206272696E67696E672066756E6374696F6E616C697479206C696B6520636F6D707574696E6720706F776572206F722073746F7261676520636C6F73657220746F20746865207573657220736F2074686174207468657920646F6E2774206E65656420746F2074726176656C207468726F756768207468652077686F6C6520496E7465726E657420746F20696E74657261637420776974682061207365727665722E205468652073616D65206564676520636F6E636570742063616E206265206170706C69656420746F206272696E6720746865206E656365737361727920736572766963657320746F20696E74657261637420776974682074686520626C6F636B636861696E20636C6F73657220746F20656163682070327020757365722E20466F72206578616D706C652C20686F7374696E67206120636F7079206F662074686520626C6F636B636861696E20736F206120757365722063616E2073796E63206974206F72206576656E206578656375746520736D61727420636F6E7472616374732E20486176696E672074686573652066756E64616D656E74616C20736572766963657320636C6F73657220746F207468652070327020757365727320697320657370656369616C6C7920696D706F7274616E7420696E207468652063617365206F66206D6F62696C6520617070732E2057652077616E7420746F206F6666657220646576656C6F706572732074686520706F73736962696C697479206F662074616B696E6720616476616E74616765206F66207468652065646765206E6574776F726B696E672062656E656669747320627920616C6C6F77696E67207468656D20746F207573652C20666F7220696E7374616E63652C206E6574776F726B2061646472657373207265646972656374696F6E73206F72207370656369616C2048545450206865616465727320696E2074686520636F6E66696775726174696F6E206F66207468656972206170706C69636174696F6E732E0A0A496E20616C6C20686F6E657374792C206974E28099732068617264206E6F7420746F2067657420657863697465642061626F757420616C6C2074686520646966666572656E7420706F73736962696C69746965732074686174206C696520616865616420666F7220476E6F4D6F62696C652C20627574207765E280997265206B656570696E67206F757220666F637573206F6E207368697070696E6720563120666F72206E6F7720616E6420636F6C6C656374696E6720666565646261636B2066726F6D2074686520636F6D6D756E6974792E20416674657220746861742C2077656C6C2C20776520686F706520796F75E280996C6C20737469636B2061726F756E6420746F2073656520776861742068617070656E73206E657874210A3214323032332D30392D32395431333A33373A30305A32156A6566662C636F7374696E2C72656D692C69757269321B676E6F6D6F62696C652C62657274792C776573686E6574776F726B0AE88F010A0A2F766D2E6D5F63616C6C12D88F010A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374320D6D6F6E74686C792D6465762D35322E546865204D6F726520596F7520476E6F3A20476E6F2E6C616E64204D6F6E74686C792055706461746573202D203532928E010A0A49742773206265656E20616E6F746865722070726F64756374697665206D6F6E74682C207061636B6564207769746820646576656C6F7065722063616C6C732C206C697665206576656E74732C206E657720636F6E7472696275746F72732C2061206C61726765207465616D2070726573656E63652061742074686520476F20636F6D6D756E69747927732062696767657374206576656E74206F662074686520796561722C20476F70686572436F6E20323032332C20616E6420746865206C61756E6368206F66206120506F432067616D696E672064417070206F6E20476E6F2E6C616E642C20476E6F43686573732E20576520756E636F766572656420612062756E6368206F66206275677320696E2074686520636F646520616E6420736F6D652069737375657320776974682074686520476E6F564D2C20616E64206D61646520667572746865722070726F6772657373206F6E2074686520476F20616E64205275737420564D732C207468652062616E6B6572206D6F64756C65206275672C20476E6F6665652C20616E64206D756368206D6F72652E20436865636B206F75742074686520757064617465732062656C6F772E0A0A2323204275696C64696E672061205765623320436865737320536572766572206F6E20476E6F2E6C616E64202D20476E6F43686573730A0A4D6F7374206F66206F757220776F726B206F76657220746865206C61737420666577207765656B7320686173206265656E2064656469636174656420746F205B476E6F43686573735D2868747470733A2F2F676E6F63686573732E636F6D2F292C2061205B506F432067616D696E6720644170705D2868747470733A2F2F74657374332E676E6F2E6C616E642F722F676E6F6C616E642F626C6F673A702F63686573732D676332332920756E7665696C656420617420476F70686572436F6E20323032332E20417320676F6C64206576656E742073706F6E736F72732C2077652077616E74656420746F2070726F7669646520676F7068657220617474656E6465657320776974682061206D656D6F7261626C6520657870657269656E636520E2809320616E642061206C6974746C6520667269656E646C7920636F6D7065746974696F6E20E28093207768696C6520626174746C652D74657374696E672074686520476E6F2E6C616E6420706C6174666F726D2E204173206F75722066697273742067616D696E6720644170702C20646576656C6F70696E6720476E6F4368657373207761732065787472656D656C792075736566756C20666F72206F7572207465616D20696E206D616E7920776179732E205765206D616E6167656420746F206174747261637420363120706C617965727320746F207468652067616D6520647572696E6720746865206576656E742C20696E636C7564696E6720736F6D65206469652D68617264207765623220676F70686572732077686F2077616E74656420746F2073686F77206F6666207468656972206D6F76657320616E6420646973636F766572206D6F72652061626F757420476E6F2E0A0A5365766572616C205052732077657265206F70656E6564206173206120726573756C74206F66206F757220656E646561766F72732C20616E642C206265796F6E642074686520636F6E666572656E63652C20476E6F4368657373207461756768742075732061206C6F742061626F7574207768657265207765277265206174207769746820476E6F2C20686F7720746F207375636365737366756C6C79206275696C6420636F6D706C6578206441707073206F6E20746F70206F662074686520706C6174666F726D2C20616E6420686F772077656C6C20776520776F726B2061732061207465616D2E20576520756E636F766572656420736F6D65206B65792069737375657320616E6420627265616B696E67206265686176696F7220696E2074686520476E6F564D2C206D616465206F7572204A61766153637269707420636C69656E7473206D756368206D6F72652072656C6961626C6520696E20746865697220636F6D6D756E69636174696F6E7320776974682074686520476E6F2E6C616E64206E6F64652C20616E6420756E656172746865642066757274686572206973737565732074686174206C65616420746F20636F6D706C6578206572726F727320616E6420706F74656E7469616C20736563757269747920666C6177732074686174206D75737420626520616464726573736564206265666F7265206D61696E6E65742E0A0A466F72206578616D706C652C20617070656E64696E67206E696C20746F206120736C696365206F66206572726F727320726573756C74656420696E20612070616E69632C206F7220636F6E646974696F6E616C2073746174656D656E7473206C696B65206966206E6F7420737570706F7274696E6720637573746F6D20626F6F6C65616E2074797065732E2054686520476E6F564D20646F65736E27742063757272656E746C7920706572666F726D207465726D696E6174696E672073746174656D656E7420616E616C797369732C20776869636820726573756C747320696E206120637279707469632070616E6963206D65737361676520285B697373756520313038365D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F3130383629292C20616E64206D6978696E6720756E747970656420286E656761746976652920666C6F61747320616E6420696E74656765727320696E2061726974686D6574696320736F6D6574696D65732064726F707320746865207369676E20285B697373756520313135325D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F3131353229292E205468652069737375657320756E636F7665726564207768696C6520646576656C6F70696E6720476E6F436865737320776572652064697363757373656420657874656E736976656C7920696E20746865207075626C696320646576656C6F7065722063616C6C73206F66205B5365707420365D2868747470733A2F2F7777772E796F75747562652E636F6D2F77617463683F763D424242716779634D6A71552920616E64205B536570742032305D2868747470733A2F2F7777772E796F75747562652E636F6D2F77617463683F763D5772784656505235354730292C20616E64207265666572656E63656420696E20746865205B476974487562206D656574696E67206167656E64615D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6D656574696E67732F6973737565732F3331292E204D6F7374206F6620746865206973737565732061726520636F6D6D6F6E20696E20736F66747761726520646576656C6F706D656E7420616E6420666169726C792073696D706C6520746F20666978206279206D616B696E6720736F6D6520696D706C656D656E746174696F6E206368616E676573206F722061646A7573746D656E747320746F2064657369676E2063686F696365732E0A0A5768696C6520646576656C6F70696E6720476E6F43686573732C206F757220656E67696E6565727320746F6F6B206F6E2074686520726F6C65206F662065787065727420706C6174666F726D20757365727320726174686572207468616E20636F7265207465616D206D656D626572732E205468697320617070726F6163682077617320766572792075736566756C206173206974207075736865642074686520706C6174666F726D20746F206E6577206C696D6974732C20616E6420616C6C6F77656420757320746F2064697665206465657020696E746F206D616E792061737065637473206F66207468652070726F6A6563742C206372656174696E6720612063756C74757265206F662073686172696E67206279206F70656E696E672075702069737375657320666F7220656163682062756720616E642061736B696E6720666F7220666565646261636B20616E6420737570706F72742E205765276C6C20646566696E6974656C792074616B6520612073696D696C617220617070726F61636820666F72206675747572652061707020646576656C6F706D656E7420616E64206F6E626F617264696E67206E6577206465767320746F20476E6F2E205765276C6C2062652072656C656173696E67206120726574726F7370656374697665206F66206F757220657870657269656E63657320696E2074686520636F6D696E67207765656B732E20496E20746865206D65616E74696D652C20696620796F752077616E7420746F206275696C6420612064417070206F6E20476E6F2E6C616E642C20636865636B206F75742074686520476E6F4368657373207265706F2C20776865726520796F752063616E2066696E6420612075736566756C205B7475746F7269616C5D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F63686573732F626C6F622F6D61696E2F7475746F7269616C2F30315F67657474696E675F737461727465642F524541444D452E6D6429206F7220776174636820746865207265636F7264696E67206F662074686520476F70686572436F6E20776F726B73686F702C20275B43686573733A2054686520476E6F6C616E67205761795D2868747470733A2F2F7777772E796F75747562652E636F6D2F77617463683F763D4A5168374C687157376E73292E270A0A23232054686520426174746C65206F6620746865205669727475616C204D616368696E65730A0A436F726520656E67696E65657273204D61726320616E6420506574617220636F6E74696E756520746865697220657863656C6C656E7420776F726B20646576656C6F70696E672074776F20646966666572656E7420564D7320666F7220476E6F2C206F6E6520696E20476F20616E64206F6E6520696E20527573742E20496E2074686520636F6D696E67207765656B732C207765276C6C2068617665206120666163652D6F66662C20636F6D706172696E6720616E6420636F6E7472617374696E672074686569722066656174757265732C20656666696369656E63792C2073706565642C20616E6420706572666F726D616E63652C20736F20776174636820746869732073706163652120466F72206E6F772C2074686520646566696E6974696F6E206F6620746865207669727475616C206D616368696E6520697320737461626C6520666F7220626F74682C20616E64207468657920617265206E6F206C6F6E67657220776F726B696E67206F6E20746865207669727475616C206D616368696E6520646566696E6974696F6E2E205468657920617265206D61696E6C7920666F637573696E67206F6E20636F64652067656E65726174696F6E3B2065766572797468696E672066726F6D2070617273696E6720746F207363616E6E696E6720746F2070617273696E6720616E6420636F6D70696C696E672E204C657427732073656520686F772074686579206172652073686170696E672075702E0A0A232323205275737420564D0A0A50657461722068617320646576656C6F7065642061205275737420696D706C656D656E746174696F6E206E6F74206F6E6C79206F6620746865207669727475616C206D616368696E6520627574206F66207468652077686F6C6520636861696E2C20696E636C7564696E672074686520636F6D70696C65722E20486520686173207772697474656E206120476F20636F6D70696C657220656E746972656C7920696E205275737420616E6420686173206576656E2073746172746564206578706572696D656E74696E672077697468206368616E67696E672074686520636F6D70696C657220746F20696D706C656D656E742074686520496E7661722070726F706F73616C2066726F6D204A61652E20467572746865722070726F677265737320696E636C7564657320706F7274696E6720612070617274206F66207468652070617273657220616E64207363616E6E65722066726F6D2074686520476F20636F6D70696C657220746F20527573742028616C6D6F7374206120646972656374207472616E736C6174696F6E2066726F6D20476F20746F20527573742920616E64206D616B696E6720697420737461626C652E200A0A496E206164646974696F6E2C2050657461722068617320636F6D706C6574656420776F726B206F6E207479706564206E696C2076616C75657320616E6420696D70726F76696E67207468652072656375727369766520636C6F7375726573206F6620476F2C2077686963682077657265206E6F7420776F726B696E67207769746820476E6F20636F646520616E64206E6565646564206164646974696F6E616C20706F696E746572732E2048652068617320616C736F20696D706C656D656E74656420496F746120616E6420686F6F6B656420757020746865206761726261676520636F6C6C6563746F722E20496E2074686520636F6D696E67207765656B732C2050657461722077696C6C20626520776F726B696E6720746F20736D6F6F7468206F7574206275677320616E6420696D706C656D656E74207479706520616C69617365732C2061732077656C6C20617320696D706C656D656E74696E672066756E6374696F6E20616E616C7973697320666F722074686520646570656E64656E63792067726170682E2054686520646570656E64656E6379206772617068206973206E656365737361727920666F7220636F6D70696C696E6720676C6F62616C20747970657320696E2074686520636F7272656374206F726465722C20736F2C20666F72206578616D706C652C207768656E207479706520412072656665727320746F207479706520422C20796F75206E65656420746F20636F6D70696C652074797065204220666972737420736F2074686174207768656E207479706520412072656665727320746F2069742C20747970652042206578697374732E0A0A23232320476F20564D0A0A4D6172632069732063757272656E746C7920726577726974696E6720612070617273657220616E642061207363616E6E65722066726F6D20736372617463682E2048697320776F726B206973206E6F742061732066617220616C6F6E6720617320506574617227732C2062757420686527732067657474696E6720636C6F7365722C20616E642074686520636F64652067656E65726174696F6E20776F726B732077656C6C2E2048652069732063757272656E746C79207265666163746F72696E6720616E64206275696C64696E6720612073696E676C652D7061737320636F6D70696C657220746861742063616E20706572666F726D2061202A2A73796E7461782D6469726563746564207472616E736C6174696F6E2A2A2C207768696368206D65616E7320746865726520617265206E6F20696E7465726D65646961746520646174612073747275637475726573206265747765656E2074686520736F7572636520636F646520616E6420746865206279746520636F64652E20546869732069732061206D7563682073696D706C65722064657369676E20746861742073686F756C6420636F6D70696C652066617374657220616E642062652065617369657220746F206D61696E7461696E2C20627574206974207265717569726573206120636F6D706C65746520726564657369676E2E200A0A4D6172632062656C69657665732068697320476F207061727365722077696C6C2062652065617369657220746F206D61696E7461696E20616E6420756E6465727374616E64207468616E20746865206F6E6520696E205275737420616E642062656E656669742074686520757365722073696E63652074686520656E7469726520737461636B206973207772697474656E20696E20476F2E20486F77657665722C20746F2061737365737320746865206265737420696D706C656D656E746174696F6E206F662074686520564D732C204D617263206861732073746172746564206120476F202A2A746573742073686F6F742070726F6A6563742C2077686963682069732061207363726970742A2A20746861742077696C6C2072756E206D616E792073616D706C657320746F2076657269667920746861742074686520636F6D70696C65722028696E20476F2C20527573742C206F7220616E79206F7468657220696D706C656D656E746174696F6E2920636F6E666F726D7320746F20476F27732073706563696669636174696F6E732E204D61726320616E642050657461722077696C6C206F70656E207468656972207265706F7320736F6F6E2C20616E6420746865206E6578742065646974696F6E206F6620546865204D6F726520596F7520476E6F2077696C6C20686967686C6967687420686F772074686520476E6F564D20776F726B732E200A0A232320476E6F666665653A20436F6666656573637269707420666F7220476F20616E6420476E6F0A0A476E6F6666656520286861636B65727370616365205B69737375652032325D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F6973737565732F323229292077696C6C206265206120706F77657266756C207374616E64616C6F6E6520746F6F6C20746F20656C65766174652074686520646576656C6F706D656E742070726F63657373206F6620476F20616E6420476E6F2062792067656E65726174696E6720636F646520616E6420696E746567726174696E67206E65772066656174757265732C20656C696D696E6174696E67206D616E75616C20636F64696E672E2057652061696D20746F20637265617465206120637573746F6D20766172696174696F6E206F6620476F6C616E672074686174207072657365727665732073696D696C617220726561646162696C6974792C206D61696E7461696E7320636F6D7061746962696C6974792C20616E6420656E61626C6573206265696E672061626C6520746F20636F646520696E20476E6F207665727920717569636B6C79207768656E20796F75206B6E6F7720686F7720746F20636F646520696E20476F2E20486F7720646F20776520676F2061626F757420746869733F200A0A526567617264696E6720636F6D7061746962696C6974792C206F6E6520706F73736962696C69747920697320746F2070726F706F736520616C6C206F7572206368616E67657320746F20476F6C616E6720616E64207761697420666F7220617070726F76616C206265666F726520776520737461727420646576656C6F70696E672E20486F77657665722C2074686973206973206C696B656C7920746F2074616B6520736F6D652074696D652E20416E6F7468657220617070726F61636820697320746F2075736520612077617920746F207472616E7370696C65205479706553637269707420666F72204A617661536372697074206F7220436F6666656573637269707420666F72204A6176615363726970742C20736F206974277320616E6F74686572206C616E67756167652070617373696E67207468726F75676820612070726F6772616D20746861742063726561746573207374616E646172642076616C696420476F6C616E6720616E642077696C6C2067656E65726174652076616C696420476E6F6C616E672E205769746820746869732073696D706C65206D6574686F642C2077652063616E206578706572696D656E742077697468206D697373696E67206665617475726573206C696B65206E6577206E61746976652074797065732C20616E64206E6577206B6579776F7264732C20616E64207768656E2077652068617665206E657720666561747572657320696E206D696E642C2077652063616E20646576656C6F702077686174207765206C61636B2E200A0A466F7220696E7374616E63652C20697420646F6573206E6F74206D616B652073656E736520746F206861766520657874726120736563757269747920666F7220796F7572206578706F72746564207661726961626C6573207768656E20796F752077726974652061206C69627261727920696E20476F2E20486F77657665722C20696E20476E6F2C206974206973207665727920696D706F7274616E7420746F20656E7375726520746861742065766572797468696E6720796F75206578706F73652063616E6E6F74206265206D6F646966696564206279206F7468657220636F6E7472616374732E2054686973206D65616E732066696E64696E6720612077617920746F206578706F736520636F6E7374616E747320616E64206F74686572207265616461626C6520656C656D656E747320776974686F7574207269736B696E672074686569722076616C756573206265696E67206F7665727772697474656E2E0A0A4265736964657320616C6C6F77696E6720757320746F206361727279206F757420616C6C207479706573206F66206578706572696D656E746174696F6E206D6F726520656173696C792C20476E6F66656520636F756C64206576656E7475616C6C7920626520612077617920666F722074686520476F207465616D20746F206D6561737572652074686520706F74656E7469616C2061646F7074696F6E206F6620476E6F2E20476E6F666565206973206E6F742061207072696F7269747920666F7220746865206D61696E6E65742C20627574207765277265206578636974656420746F20776F726B206F6E207468697320696D706F7274616E7420696E69746961746976652E0A0A2323204D455441204D756C74696E6F646520546573746E65740A0A5468652064697363757373696F6E732061626F75742073696E676C6520616E64206D756C74696E6F646520746573746E6574732068617665206265656E206F6E676F696E672C20736F207765206F70656E656420616E20697373756520746F2065737461626C6973682061206D756C74696E6F646520746573746E657420666F6375736564206F6E206D756C74692D76616C696461746F72206578706572696D656E746174696F6E2C20696E636C7564696E672073746162696C6974792C2062656E63686D61726B696E672C20616E64206C6966656379636C65206D616E6167656D656E742E2054686973206D756C74696E6F646520746573746E65742061696D7320746F2070726F76696465206120706C6174666F726D20666F7220696E2D6465707468206578706C6F726174696F6E7320616E64206576616C756174696F6E73206F66206D756C74692D76616C696461746F72207365747570732C207768696C65207765206D61696E7461696E207468652073696E676C652D6E6F64652074657374332B2E676E6F2E6C616E64207365742075702C207072696D6172696C792064656469636174656420746F2073686F77636173696E672074686520564D20616E642070726F766964696E67206578616D706C65732E205669736974206861636B65727370616365205B697373756520395D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F6973737565732F392920696620796F752077616E7420746F20706172746963697061746520696E207468697320696E6974696174697665206F7220736861726520796F757220696E7369676874732E0A0A23232042616E6B6572204D6F64756C65204275670A0A5468652062616E6B6572206D6F64756C65206275672069732061206B6E6F776E2069737375652074686174206E6565647320746F206265206669786564206265666F726520746865206D61696E6E657420626563617573652C2063757272656E746C792C2069742773207374696C6C20706F737369626C6520746F206D696E74206E657720474E4F5420746F6B656E732066726F6D20616E7920636F6E74726163742E205365766572616C2066697865732068617665206265656E207375676765737465642C20616E64206F757220676F616C20697320746F206D65726765205B5052203837355D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F383735292070757420666F7277617264206279204F6E626C6F6320746F206368616E6765207468652064656E6F6D696E6174696F6E206F662074686520636F696E73206D696E746564206279207468652062616E6B65722E204D657267696E6720746869732050522069732063757272656E746C7920626C6F636B6564206279203220736D616C6C206661696C696E6720636865636B732C206275742077652061726520636C6F736520746F207265736F6C76696E6720746869732069737375652E0A0A23232050726573657276696E6720476F20436F6D6D656E747320696E2050726F746F6275660A0A496E205B697373756520313135375D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F31313537292C204A6566662066726F6D2042657274792072616973657320746865207175657374696F6E2061626F75742070726573657276696E6720476F20636F6D6D656E747320696E20746865205265636569766572206669656C642E2043757272656E746C792C20416D696E6F20636F6E76657274732074686520636F64652C20627574207468652070726F746F206D657373616765205265636569766572206669656C6420646F65736E277420686176652074686520636F6D6D656E742E204D616E6672656420616772656573207468617420696E666F726D617469766520636F6D6D656E7473206172652068656C7066756C2E20486F77657665722C20686520646F65736E27742077616E7420746F20637265617465206120636F6D706C65782050726F746F62756620636F6E66696775726174696F6E2E2057652077696C6C20636F6E74696E756520746F2064697363757373207468697320697373756520746F206C6F6F6B20666F7220736F6C7574696F6E732C2062757420666F72206E6F772C2042657274792077696C6C20706172736520746865206F726967696E616C20476F20736F7572636520636F646520616E64206765742074686520636F6D6D656E74732074686973207761792E0A0A2323204D756C74692D53696720616E642053656375726974792046656174757265730A0A5365766572616C20636F6E7472696275746F72732C20696E636C7564696E672054657269746F72692C2061726520776F726B696E67206F6E206275696C742D696E206D756C74692D73696720737570706F727420696E20476E6F2E6C616E642C20776865726520476E6F6B657920737570706F7274732061206D756C74692D7369672073657475702E20576520616C736F2077616E7420746F20696E74726F64756365206164646974696F6E616C207761797320746F20696D70726F76652074686520555820616E64207365637572697479206F6620476E6F2E6C616E642028616E64207765623320696E2067656E6572616C292E20416E20696465612077652063757272656E746C79206861766520697320746F206164642061206E6577206C6179657220696E2061757468656E7469636174696F6E2C206372656174696E6720736F6D657468696E672073696D696C617220746F2062726F7773657220636F6F6B69657320746861742077652063616E206E616D652073657373696F6E732E2054686520636861696E2077696C6C20686176652074776F207461626C65732C206F6E65207769746820746865207075626C6963206B657920666F7220616E206163636F756E7420616E64206F6E6520776974682061207075626C6963206B657920666F722073657373696F6E73206C696E6B656420746F20616E206163636F756E742E2046726F6D20796F7572206D61696E206163636F756E742C20796F752063616E2063726561746520612073657373696F6E20776974682073656C662D6465737472756374696E672066656174757265732C2073756368206173206465737472756374696E67206166746572206F6E6520686F757220776974686F7574207573616765206F7220616674657220323420686F7572732E2054686520676F616C20776F756C6420626520746F20616C6C6F77206D6F726520636F6D706C657820616E642073656375726520666C6F7773207768656E207374617274696E6720796F7572206F7065726174696F6E732E205765206D6179206E6F742077616E74207468697320666F72206D756C74692D7369672C2062757420697420636F6D657320756E646572207468652073616D652066616D696C79206F6620736563757269747920616E6420707269766163792066656174757265732E0A0A466F72206578616D706C652C20696D6167696E6520612077616C6C6574206C696B65204164656E61207573657320796F7572206B65792C206120706173737068726173652C206F722061206C65646765722E2049742077696C6C207369676E2061206E6577207075626C6963206B6579207468617420796F75206A757374206372656174656420696E206D656D6F72792E20456163682074696D6520796F7520636C6F736520796F75722062726F777365722C20746865206D656D6F727920697320636C65617265642E20596F752063616E20616C736F20686176652061206C6F676F757420627574746F6E20746F2063616C6C206F6E2074686520626C6F636B636861696E20746F2064656C65746520616C6C20796F75722073657373696F6E73206F722073696D706C79207761697420666F72207468652073657373696F6E20746F2062652073656C662D646573747275637465642C20657370656369616C6C79206966207468652073657373696F6E20776173206A75737420696E206D656D6F7279206F6E20796F757220736964652E2057652077696C6C20636F6E74696E756520746F20646576656C6F70207468697320696465612E0A0A2323204E6577205465616D204D656D6265720A0A5765277265206578636974656420746F2077656C636F6D652061206E65772044657652656C207465616D206D656D62657220746F20476E6F2E6C616E642C204C656F6E2C2077686F2773206265656E20696E20626C6F636B636861696E20646576656C6F706D656E7420666F722074776F20796561727320616E642069732070617373696F6E6174652061626F757420656E67696E656572696E6720616E64207465616368696E672E204C656F6E2068617320746175676874206C616E6775616765732C20646576656C6F706D656E742C206D6174682C20616E64206D7573696320707269766174656C792C2061732077656C6C20617320616E204F532066756E64616D656E74616C7320636C617373206174206869732070726576696F757320666163756C74792E2057656C636F6D65206F6E20626F617264210A0A2323204772616E74656520616E642045636F73797374656D20557064617465730A0A417320476E6F2E6C616E6420636F726520636F6E74696E75657320746F20616476616E63652C20736F20646F6573206F757220626C6F73736F6D696E672065636F73797374656D2C2077697468206E657720636F6E7472696275746F727320616E6420636F6D6D756E697479206D656D62657273207475726E696E67207468656972206579657320746F20476E6F2E20546865206F766572726964696E67207468656D65206F662074686973206C617374206D6F6E746820686173206265656E20636F6C6C61626F726174696F6E2C20616E6420776527726520706C656173656420746F2073656520676E6F6D657320776F726B696E6720746F67657468657220746F206F766572636F6D65207468656972206F62737461636C657320616E6420707573682074686569722070726F6A6563747320666F72776172642E204C65742773207365652077686174207468657927766520776F726B6564206F6E206F76657220746865206C61737420666577207765656B732E0A0A232323204F6E626C6F630A0A4F6E626C6F6320697320706F776572696E672061686561642C20636F6E747269627574696E6720746F20476E6F2E6C616E6420636F72652C206D616B696E6720757067726164657320616E6420696D70726F76656D656E747320746F204164656E6120616E6420476E6F7363616E2C20616E6420646576656C6F70696E672074686520476E6F73776170204445582E204C617374206D6F6E74682C204F6E626C6F632072656C65617365642074686520706174636865642076657273696F6E20312E382E30206F66204164656E612C20776869636820696E636C7564657320736F6D6520554920616E6420555820656E68616E63656D656E74732C2073756368206173206D6F726520696E74756974697665206163636F756E74206D616E6167656D656E742073657474696E67732C206120636F70792069636F6E206E65787420746F20746865206E616D6573206F6620746865206163636F756E74732C20616E6420736F6D65206275672066697865732E20546869732072656C6561736520616C736F20636F6D65732077697468206E657720696E6A656374696F6E206D6574686F647320746F20656E61626C6520644170707320746F207265717565737420757365727320746F20616464206120637573746F6D20676E6F2E6C616E64206E6574776F726B206F722073776974636820746F20616E206578697374696E67206F6E652E20436865636B206F757420746865205B72656C65617365206E6F74655D2868747470733A2F2F6769746875622E636F6D2F6F6E626C6F632F6164656E612D77616C6C65742F72656C65617365732F7461672F76312E382E302920666F72206D6F72652064657461696C732E0A0A4F6E626C6F6320686173206F70656E2D736F75726365642074686520636F646520666F7220476E6F73776170206F6E207468697320476974487562205B7265706F20686572655D2868747470733A2F2F6769746875622E636F6D2F676E6F737761702D6C6162732F676E6F73776170292E20596F752063616E20616C736F2066696E64206120677569646520746F2072756E6E696E6720756E69742074657374732E20546865207465616D20636F6E74696E75657320746F20696D70726F76652074686520476E6F7377617020696E746572666163652C20666F637573696E67206F6E20746865206561726E20616E64207374616B696E672070616765732C207468652067726170687320666F7220706F736974696F6E732C20616E6420736F6D6520636F6D706F6E656E747320666F7220616464696E6720616E642072656D6F76696E67206C697175696469747920616E642070726F766964696E6720706F6F6C20696E63656E74697665732E205468657927726520776F726B696E67206F6E20746865206E65787420697465726174696F6E206F662074686520696E746572666163652C20776974682074686520676F7665726E616E636520616E642061697264726F702070616765732C20616E6420646576656C6F70696E67207468652066726F6E742D656E64206C6F67696320746F20696E74656772617465207769746820476E6F73776170207265616C6D7320616E6420415049732E204F6E626C6F6320616C736F20636F6E747269627574656420746F20476E6F20636F72652C20616464696E672050527320666F7220666978657320746F2074657374696E6720616E64207468652062616E6B6572206D6F64756C652E204B6565702075702077697468204F6E626C6F63207468726F756768207468656972205B6861636B65727370616365206A6F75726E65795D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F6973737565732F32392920616E6420636865636B206F7574207468656972206C617465737420696E6974696174697665205B476E6F6465736B5D2868747470733A2F2F6D656469756D2E636F6D2F6F6E626C6F632F676E6F6465736B2D7765656B2D322D6F662D736570742D323032332D356564626334353162626137292C2077686963682064656C6976657273207765656B6C7920686967686C696768747320616E6420757064617465732066726F6D20476E6F2E6C616E642E0A0A2323232054657269746F72690A0A54657269746F726920686173206265656E20776F726B696E67206F6E20696D70726F76656D656E74732073696E636520746865206C6173742075706461746520616E64206F70656E2D736F757263696E6720616C6C20746865697220776F726B2C20696E636C7564696E67207468652044414F206465706C6F79657220616E6420746865204D6F6465726174696F6E206D6F64756C652E20596F752063616E207669736974207468652054657269746F72692044414F20746F6F6C696E67207265706F20746F2066696E642074686520636F6D706C65746520646F63756D656E746174696F6E20616E64206E6577207265616C6D7320746F20656173696C79206465706C6F7920796F75722044414F2E20546865726520697320616C736F2061207475746F7269616C206F6E206372656174696E6720796F7572206F776E2044414F207573696E6720746865206672616D65776F726B2E200A0A546865207465616D20686173206D61646520657874656E736976652070726F6772657373206F6E20746865204A7573746963652044414F206465706C6F7965722C2061206D6F64756C6520746861742063616E206265207573656420666F722074686972642D7061727479206172626974726174696F6E207768656E20746865726520697320612070726F626C656D20776974682074686520657363726F772073797374656D20696E206120646563656E7472616C697A656420667265656C616E6365206D61726B6574706C6163652E20546865204A7573746963652044414F2063616E207265736F6C766520706F74656E7469616C20636F6E666C69637473206265747765656E207468652073656C6C657220616E642074686520627579657220616E6420696D706C656D656E74732072616E646F6D6E65737320746F2063686F6F736520746865206A756467657320746F20736F6C76652070726F626C656D7320776974686F757420636F6E666C69637473206F6620696E7465726573742E2054686520636F6E74656E7420666C616767696E672073797374656D2C20776869636820686967686C69676874732074686520636F6E74656E742074686174207573657273206465656D20746F20626520696E617070726F7072696174652C20686173206265656E20747765616B656420616E6420696D70726F7665642E204B65657020757020776974682054657269746F72692773205B6861636B65727370616365206A6F75726E657920686572655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F6973737565732F37292E0A0A2323232042657274790A0A42657274792068617320616C726561647920636F6D706C6574656420746865206669727374207068617365206F66207468652070726F6A65637420616E64207075626C697368656420746865205B746563686E6963616C2070726F706F73616C5D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F6D6F62696C652F6973737565732F31352920746F20646576656C6F702074686520476E6F206D6F62696C65206672616D65776F726B2E20546865207465616D206973206E6F772062757379207769746820746865207365636F6E64207068617365206F6620696D706C656D656E74696E67207468652070726F706F73616C20616E6420746865206752504320696E746572666163652C20776869636820697320776F726B696E67207769746820746865206C6F63616C20736F636B6574206F6E20416E64726F696420616E6420694F532E204A65666620686173206265656E20747279696E6720746F2075736520416D696E6F2C20616E642C206E6F7720746861742049757269206973206261636B2066726F6D207661636174696F6E2C20746865207465616D2077696C6C20776F726B206F6E20696D70726F76696E67206F74686572207061727473206F662074686520696E746572666163652E20436865636B206F7574207468656972206C6174657374205B64656D6F5D2868747470733A2F2F7777772E6C6F6F6D2E636F6D2F73686172652F6330663638663730376433653437303839633266646264323639386663393266292C2077686963682073686F777320616E206578616D706C65207573657220696E7465726661636520776974682077616C6C65742066756E6374696F6E7320616E6420626C6F636B636861696E20636F6D6D756E69636174696F6E2E200A0A4F6E626C6F6320686173206C6169642074686520666F756E646174696F6E7320666F7220476E6F206D6F62696C652061707073207769746820746865204164656E61206D6F62696C652077616C6C65742C20736F2042657274792077696C6C2075736520736F6D65206F66207468697320636F646520696E20746865206D6F62696C65206672616D65776F726B20616E6420776F726B2077697468204F6E626C6F6320746F20656E7375726520612073696D696C6172207573657220657870657269656E6365206163726F737320616C6C20476E6F20617070732E0A0A23232320466C697070616E646F0A0A447261676F732C2074686520646576656C6F70657220626568696E64206E6577206772616E74656520466C697070616E646F2C20697320616E20657870657269656E636564206D6F62696C652061707020646576656C6F7065722E20466C697070616E646F20697320612073696D706C65206F6E2D636861696E206D656D6F72792067616D652C2077686963682069732063757272656E746C79207772697474656E20696E20536F6C696469747920616E64206465706C6F796564206F6E207365766572616C20746573746E6574732C20696E636C7564696E6720476F65726C692C20506F6C79676F6E2C204E6561722C204175726F72612C2045766D6F732C20616E642061205361676120636861696E6C65742E2046697070616E646F207374617274656420617320612070726F6A65637420666F7220447261676F7320746F206C6561726E20536F6C6964697479206275742068617320616C7265616479206265656E207468652077696E6E6572206F662074776F206861636B6174686F6E7320696E204B6F7265612E2049742063616E206265206465706C6F7965642072656C61746976656C7920656173696C79206F6E20616E79206D616368696E6520616E642069732063757272656E746C79206265696E6720706F7274656420746F20476E6F2E6C616E642E20447261676F73206973206578706C6F72696E67207768696368207573657220696E74657273656374696F6E2063616E206265206D6F72652062656E6566696369616C20666F72207468697320616E642077696C6C2073686F7720757320612064656D6F20696E2074686520636F6D696E67207765656B732E20536F6F6E2C207765276C6C20686176652074776F2067616D696E67206441707073206F6E20476E6F2E6C616E6420E2809320466C697070616E646F20616E6420476E6F43686573732120526561642061626F757420466C697070616E646F20696E20746865205B6861636B65727370616365206A6F75726E65795D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F6973737565732F3333292E0A0A232323204E657720436F6E7472696275746F72204A6F73657068204B61746F200A0A576520686176652061206E657720636F6E7472696275746F7220746F20476E6F2E6C616E642077686F2073686F77656420612064656D6F206C617374206D6F6E7468206F6620776861742068652773206265656E20776F726B696E67206F6E2C2061206C616E67756167652073657276657220746F2072756E20746573747320616E6420736372697074732E204A6F736570682069732061206D616A6F7220476F2066616E206C6F6F6B696E6720746F2067657420696E746F207765623320616E6420776173207375706572206578636974656420746F20636F6D65206163726F737320476E6F2E205768696C6520696E746572616374696E67207769746820476E6F2E6C616E642C20686520666F756E64206D616E79204944452D6C696B652066656174757265732074686174206865206D6973736564207768656E20776F726B696E67206F6E2066696C65732C20736F206865206465636964656420746F20776F726B207769746820616E204C535020696D706C656D656E746174696F6EE28094676E6F6C73E28094776974682074686520676F616C206F66206D616B696E6720746865736520666561747572657320617661696C61626C6520746F20616C6C20636F6E7472696275746F7273207265676172646C657373206F6620656469746F7220707265666572656E63652C207374617274696E672077697468205375626C696D65205465787420616E64204E656F76696D20616E64206D6F76696E67206F6E20746F20496E74656C6C694A2C20476F6C616E672C20616E6420456D6163732E205468697320697320612077656C636F6D65206164646974696F6E20666F7220616E796F6E652077686F20686173206576657220646576656C6F7065642061207265616C6D20696E20476E6F2E20436865636B206F757420686973205B6861636B657273706163655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F6973737565732F333429207061676520666F72206D6F72652064657461696C732E200A0A23232044617070436F6E2C204265726C696E0A0A4D616E6672656420776173206261636B20696E204265726C696E20696E2053657074656D626572206174207468652052616469616C2053797374656D2070726573656E74696E672027476E6F2E6C616E643A20546865204B657920546F2050657270657475616C205472616E73706172656E63792C272077686572652068652064697363757373656420686F7720476E6F2E6C616E64206F666665727320612066616D696C6961722C207365616D6C65737320657870657269656E636520666F7220636F64652073686172696E6720616E642061207375737461696E61626C6520616E64207472616E73706172656E74207061746820666F7220626C6F636B636861696E20646576656C6F706D656E742E200A0A232320576562332046616D696C790A0A436F726520646576204D696C6FC5A120C5BD69766B6F7669C487206761766520612074616C6B20617420576562332046616D696C7920696E2042617263656C6F6E61206C617374206D6F6E74682C2027476E6F2E6C616E6420616E6420476E6F6C616E673A205468652044796E616D69632044756F206F6620426C6F636B636861696E20446576656C6F706D656E742E272048652070726573656E746564206120627269656620686973746F7279206F6620736D61727420636F6E747261637420646576656C6F706D656E7420616E642074686520697373756573206173736F6369617465642077697468206578697374696E6720706C6174666F726D732C2073756368206173206C696D69746174696F6E7320696E2064657369676E20616E642073656375726974792E20486520696E74726F647563656420476E6F20616E642073686F77656420686F77207765206D616B6520776562332061636365737369626C6520616E6420626C6F636B636861696E20646576656C6F706D656E74206D6F726520696E7475697469766520616E64207365637572652E20436174636820746865205B74616C6B20686572655D2868747470733A2F2F7777772E796F75747562652E636F6D2F77617463683F763D304B2D6A725F4164336249292E0A0A232320476F70686572436F6E20323032330A0A476E6F2E6C616E6420776173206F757420696E20666F72636520617420476F70686572436F6E2032303233207769746820612077656C6C2D73746F636B656420626F6F74682061742074686520636F6E666572656E636520616E6420616E20617765736F6D6520776F726B73686F70206275696C64696E672061207765623320636865737320736572766572206F6E20476E6F2E6C616E642E20426F7468204D616E6672656420616E64204A616520776572652061742074686520626F6F7468206368616D70696F6E696E6720476E6F6C616E6720746F20476F70686572732C20616E642077652072656365697665642061206C6F74206F6620706F73697469766520666565646261636B2C20736F6D65206E657720636F6E747269627574696F6E732C206672657368205052732C20616E64206578706F7375726520666F7220476E6F2E6C616E6420696E207765623220636972636C65732E2049742077617320616C736F206120666162756C6F7573206368616E636520666F7220746865207465616D20746F206D65657420666F722076616C7561626C6520666163652D746F2D666163652074696D652E0A0A54686174277320616C6C20666F72206E6F7721204265207375726520746F20636865636B206261636B20616761696E207769746820757320666F7220746865206E6578742065646974696F6E206F6620546865204D6F726520596F7520476E6F20746F206B656570207570207769746820616C6C206F75722070726F67726573732E0A446F20796F752077616E7420746F20636F6E7472696275746520746F20476E6F2E6C616E642773206D6F6E74686C7920757064617465733F20496620796F75277265206275696C64696E67206F6E20476E6F2E6C616E6420616E642077616E7420746F20686967686C6967687420796F757220646576656C6F706D656E742C2070726F6A6563742C206576656E742C206F7220696465612C206C6574207573206B6E6F772C20616E64207765276C6C20696E636C75646520796F757220636F6E747269627574696F6E2E0A3214323032332D31302D31305431333A33373A30305A3209636872697374696E613211676E6F6C616E642C676E6F766D2C746D320A81390A0A2F766D2E6D5F63616C6C12F2380A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374321466756E64696E672D70726F6772616D2D323371333235476E6F2E6C616E642046756E64696E6720616E64204772616E74732050726F6772616D202D2050726F677265737320536F204661723291370A0A2320517561727465726C79205265706F72743A20513320323032330A0A5765206C61756E6368656420746865205B476E6F2E6C616E642046756E64696E6720616E64204772616E74735D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F65636F73797374656D2D66756E642D6772616E7473292070726F6772616D20696E204A756C79203230323320746F20656E636F75726167652074616C656E74656420616E642070617373696F6E61746520646576656C6F7065727320746F20696E746572616374207769746820476E6F2E6C616E642C2068656C70206275696C6420636F726520696E66726173747275637475726520616E6420746F6F6C696E672C20616E6420656E68616E6365207468652075736162696C697479206F662074686520706C6174666F726D2E2041667465722065737461626C697368696E672061207265766965772070726F6365737320746F2073747265616D6C696E65207468652070726F6772616D20616E64206964656E7469667920636F72652061726561732074686174206E65656420746865206D6F737420776F726B2C2077652072616E2077697468206F757220666972737420636F686F7274206F66206772616E7465657320696E2051332C206177617264696E6720666F7572206772616E74732066726F6D206120746F74616C206F6620736576656E207375626D697373696F6E732028746F2074776F207465616D7320616E642074776F20696E646976696475616C73292E2046756C6C2064657461696C73206F66206772616E74207375626D697373696F6E732C2073636F70652C20616E642066756E64696E672063616E20626520666F756E64206F6E204769744875622C206275742068657265E280997320612073756D6D617279206F66207468652070726F6772616DE28099732070726F677265737320736F2066617220616E642077686174E280997320636F6D696E6720757020696E2051342E0A0A23232051332046756E64696E6720427265616B646F776E0A0A54686520746F74616C206772616E747320646973747269627574696F6E20666F7220513320776173202A2A243536332C3539352A2A206F7665722074686520666F7572206772616E74733A2054657269746F72692C2042657274792C205A61636B205363686F6C6C2C20616E6420466C697070616E646F2E205468697320776F726B20686173206265656E2073706C6974206F7665722074776F206D61696E206C617267652D7363616C6520696E6672617374727563747572652070726F6475637473202874686520476E6F204D6F6465726174696F6E2044414F2C20616E6420476E6F4D6F62696C65292C20612067616D696E67206170706C69636174696F6E2C20616E64206F7572206669727374207265736964656E742074696E6B6572657220285A61636B292C2077686F206973206578706572696D656E74696E67207769746820476E6F20616E6420646576656C6F70696E672050726F6F66206F6620436F6E6365707473207573696E672069742E2045616368206772616E7420726563697069656E74207761732070726F76696465642077697468206D696C6573746F6E657320666F722064656C6976657261626C657320616E6420686173206B65707420747261636B206F662074686569722070726F6772657373207468726F75676820726567756C61722073796E63732C206861636B65727370616365206A6F75726E6579732C20626C6F6720706F7374732C20616E6420646576656C6F7065722063616C6C732E200A0A2323232054657269746F7269202864656C6976657265642053657074656D6265722032303233290A0A54657269746F726920626C6F636B636861696E20616E64206D756C74692D636861696E2068756220616C6C6F77732049424320616E64206E6F6E2D49424320636F6D6D756E697469657320746F20636F6E6E6563742C206372656174652067726F7570732C2065786368616E676520746F6B656E7320616E64204E4654732C20616E64206C61756E6368206E65772070726F6A656374732E205468652054657269746F7269207465616D2068617320736F6C696420657870657269656E6365206275696C64696E6720736F6369616C2064417070732C206D61726B6574706C616365732C204E4654732C20636F6C6C65637469626C65732C20616E6420696E746572666163657320746F20656E636F757261676520636F6D6D756E69747920696E746572616374696F6E2E20466F722074686520476E6F2E6C616E64204772616E747320616E642046756E64696E672070726F6772616D2C2054657269746F726920776173207461736B65642077697468206275696C64696E672061204D6F6465726174696F6E2044414F20746F20656E61626C652065666665637469766520616E64206661697220636F6E74656E74206D6F6465726174696F6E20696E206120646563656E7472616C697A656420616E64207065726D697373696F6E6C65737320656E7669726F6E6D656E742E200A0A546865204D6F6465726174696F6E204D6F64756C65206973206120736D61727420636F6E747261637420E280987265616C6DE28099207468617420656E61626C657320612044414F20746F206D616E61676520746865206461696C79206D6F6465726174696F6E206F6620666F72756D73206F7220736F6369616C2074687265616473207468726F75676820626C6F636B636861696E206465636973696F6E2D6D616B696E672C20737570706F7274696E672074686520766973696F6E206F6620612063656E736F72736869702D726573697374616E7420706C6174666F726D207468617420666F73746572732061207361666520737061636520666F72206F70656E2064656261746520616E642064697363757373696F6E2E2046696E642064657461696C65642075706461746573206F6E2054657269746F7269E2809973205B6861636B6572737061636520697373756520375D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F6973737565732F37292C20616E64207761746368206F757420666F72207570636F6D696E6720626C6F6773206F6E20476E6F2E6C616E642E0A0A23232320426572747920546563686E6F6C6F67696573202864656C6976657279204465632032303233290A0A42657274792070726976617465206D6573736167696E67206170702077617320616C6C6F63617465642061206772616E7420746F206275696C642061206D6F62696C652076657273696F6E206F6620476E6F2E6C616E642C20696D706C656D656E74696E672074686520574553482070726F746F636F6C2028617661696C61626C6520627920426C7565746F6F74682C206C6F63616C20574946492C206F72206F74686572206D65616E73292C20616E642070726F766964696E67207365637572652063656E736F72736869702D726573697374616E7420636F6D6D756E69636174696F6E206265747765656E20646576696365732E204265727479E280997320657870657269656E636520696E206F66662D6772696420636F6D6D756E69636174696F6E20697320696E76616C7561626C6520746F20476E6F2E6C616E642C20616E6420746865207465616D20697320616E206578706572742061742072756E6E696E6720476F206F6E206D6F62696C6520416E64726F696420616E6420694F53206F7065726174696E672073797374656D732E20466F722074686973206772616E742C20746F20626520636F6D706C6574656420696E2051342C2042657274792077696C6C2064656C697665722061206D696E696D616C20506F43206F6620746865206578697374696E672061707073206F6620476E6F2E6C616E642072756E6E696E67206F6E206D6F62696C652C20616E642064656C6976657220616E206F70656E2D736F75726365206D6F62696C652061707020776974682062617369632043492F43442C20696E746572616374696E6720776974682074686520476E6F2E6C616E6420746573746E65742E2046696E642064657461696C6564207265706F72747320616E642075706461746573206F6E204265727479E2809973205B6861636B657273706163652069737375652032385D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F6973737565732F323829206F722077697468696E207468656972205B476E6F6D6F62696C6520626C6F6720706F73745D2868747470733A2F2F74657374332E676E6F2E6C616E642F722F676E6F6C616E642F626C6F673A702F676E6F6D6F62696C65292E0A0A23232320466C697070616E646F202864656C6976657279204E6F762032303233290A0A466C697070616E646F2069732061206D756C74692D6C6576656C206F6E2D636861696E206D656D6F72792067616D652063757272656E746C79207772697474656E20696E20536F6C696469747920616E64206465706C6F796564206F6E207365766572616C20746573746E6574732C20696E636C7564696E6720476F65726C692C20506F6C79676F6E2C204E6561722C204175726F72612C2045766D6F732C20616E642061205361676120636861696E6C65742E204C696B652074686520636C617373696320636172642D6261736564204D656D6F72792067616D652C20466C697070616E646F20706C6179657273206D757374206D61746368206361726420706169727320286469676974616C2074696C6573292E205768656E206120706C617965722073656C6563747320612074696C652C207468652067616D652073656E64732061207265717565737420746F2074686520636861696E2C2077686963682073656E6473206261636B2074686520756E636F76657265642074696C652E2049662074776F2074696C6573206D617463682C20746865792072656D61696E20756E636F76657265642E204966207468657920646F6EE2809974206D617463682C20746865792061726520666C6970706564206261636B20756E74696C207468652067616D6520697320776F6E2C20616E6420616E204E46542069732067656E65726174656420666F72207468652077696E6E696E6720706C6179657220746F2070726F7665207468652077696E2E205468726F7567682074686520646576656C6F706D656E74206F6620612073696D706C652067616D696E6720617070206F6E20476E6F2E6C616E642C2077652077616E7420746F2073686F7720686F77206561737920697420697320666F722067616D696E6720616E64206D657461766572736520636F6E636570747320746F206265206275696C742E205468726F7567682074686973206772616E742C20466C697070616E646F2077696C6C20706F727420697473206D656D6F72792067616D6520746F20476E6F2E2046696E642064657461696C65642075706461746573206F6E20466C697070616E646FE280997320205B6861636B657273706163652069737375652033335D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F6973737565732F3333292E0A0A232323205265736964656E742054696E6B65726572732050726F6772616D3A205A61636B205363686F6C6C202836206D6F6E746873290A0A5A61636B205363686F6C6C20697320476E6F2E6C616E64E2809973206669727374207265736964656E742074696E6B65726572207769746820746F6E73206F6620657870657269656E636520696E207765623220646576656C6F706D656E7420616E6420612070617373696F6E20666F722074686520476F206C616E67756167652E205468726F75676820746865206772616E74732070726F6772616D2C205A61636B2061696D7320746F207472616E736C6174652068697320657874656E73697665206B6E6F776C6564676520746F20476E6F20616E64207765623320627920646576656C6F70696E6720506F4373207573696E6720476E6F2E20536F206661722C205A61636B2068617320776F726B6564206F6E2061206D6963726F626C6F6767696E672061707020666F7220476E6F2E6C616E6420616E6420612070726F746F7479706520666F72207573696E672067656E6572617469766520617564696F207769746820736D61727420636F6E7472616374732E204865E280997320616C736F206372656174696E6720646F63756D656E746174696F6E20616E64207475746F7269616C7320746F2068656C70206F7468657220646576656C6F7065727320666F6C6C6F7720686973206C6561642E20596F75E280996C6C2062652068656172696E67206D6F72652066726F6D205A61636B206F7665722074686520636F6D696E67207765656B732E20466F6C6C6F7720686973205B6861636B6572737061636520697373756520325D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F6973737565732F3229206A6F75726E657920666F72206D6F72652064657461696C732E0A0A4166746572206120677265617420737461727420746F207468652046756E64696E6720616E64204772616E74732050726F6772616D20696E2051332C2062656C6F77206973206120627265616B646F776E206F66207468652070657263656E74616765206F662066756E64696E6720616C6C6F636174656420746F20656163682061726561206F6620646576656C6F706D656E7420736F206661723A0A2020202020202020202020200A5B215B46756E64696E675D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032332D31302D31375F66756E64696E672D70726F6772616D2D71332F7372632F7468756D62732F66756E64696E672E706E67295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032332D31302D31375F66756E64696E672D70726F6772616D2D71332F7372632F66756E64696E672E706E67290A0A23232020436F6D696E6720557020696E20513420616E6420513120323032340A0A5765E280997265206C6F6F6B696E6720666F727761726420746F206D6F7265206578636974696E6720646576656C6F706D656E747320696E2074686520636F6D696E6720717561727465727320617320776520666F637573206F6E2074686520726F616420746F206D61696E6E65742E204F6E626C6F632C206F6E65206F6620476E6F2E6C616E64E2809973206D6F73742061637469766520636F6E7472696275746F72732C2069732063757272656E746C79206265696E6720636F6E6669726D65642061732061205B5134206772616E7465655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F65636F73797374656D2D66756E642D6772616E74732F70756C6C2F342F66696C657323646966662D366462643265333035383937393130653539303732663965666138633533376438366638616132383165623337343265306331353030343861316466393565622920746F20776F726B206F6E20636F726520696E667261737472756374757265206E656365737361727920666F72206D61696E6E65742C20696E636C7564696E6720746D322D6A7320616E6420676E6F2D6A7320737570706F72742C20476E6F564D20646562756767696E672C20636F6E747261637420696E746572616374696F6E732C20616E64206C656164696E6720746865206D756C74692D6E6F646520746573746E657420696E69746961746976652E204F6E626C6F632068617320616C726561647920646576656C6F70656420657373656E7469616C207075626C696320696E66726173747275637475726520746F6F6C7320666F7220476E6F2E6C616E642C20696E636C7564696E6720746865206E6F6E2D637573746F6469616C204164656E612077616C6C65742C2074686520476E6F7363616E20626C6F636B636861696E206578706C6F7265722C20616E6420476E6F7377617020646563656E7472616C697A65642065786368616E67652E20546865207465616D206861732064656D6F6E7374726174656420696D6D656E73652070617373696F6E20616E642064656469636174696F6E20696E20617474656E64696E67207075626C696320646576656C6F7065722063616C6C7320616E6420696E2D706572736F6E206576656E74732C20616E642072656C656173696E6720657874656E7369766520646F63756D656E746174696F6E2C20626C6F67207365726965732C20616E64205B6861636B657273706163652069737375652032395D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F6973737565732F3239292061626F7574207468656972206A6F75726E65792E200A0A4F76657220746865206E6578742074776F2071756172746572732C20746865204772616E74732070726F6772616D2077696C6C20666F637573206F6E206275696C64696E67206F75722074696E6B6572657220616E642073747564656E7420636F686F7274732C20616E64207075626C697368696E67206D6F726520636F6E74656E742C2073756368206173206170706C69636174696F6E206C69627261726965732C20646F63756D656E746174696F6E2C20616E6420476E6F207061636B616765732E2054686520676F616C2069732074776F666F6C643A20746F20737570706F7274206D6F726520757365727320616E6420656E73757265206120646976657273696669656420736574206F66207573657273206F6E2074686520476E6F2E6C616E6420706C6174666F726D2074657374696E672C20646562756767696E672C2074726F75626C6573686F6F74696E672C20616E642072756E6E696E67207573657220666565646261636B206C6F6F70732E2057652063757272656E746C7920686176652074776F206170707320746F207265666572656E6365206F6E20686F7720746F20676574207374617274656420E2809320476E6F43686573732C206275696C742062792074686520476E6F20636F7265207465616D2C20616E6420466C697070616E646F2C2061206772616E7420726563697069656E7420E28093207765E280997265206C6F6F6B696E6720666F722061206C6F74206D6F726520746F20636F6D652E200A0A5765E280997265207374656164696C79206275696C64696E67206F75742074686520476E6F2E6C616E6420706C6174666F726D2C20616E64206F75722065636F73797374656D206F66206772616E7465657320616E6420636F6E7472696275746F72732E204C6574207573206B6E6F7720696620796F752077616E7420746F206A6F696E207573206279207375626D697474696E6720616E206170706C69636174696F6E20616E792074696D65206F6E207468652046756E64696E6720616E64204772616E7473205B7265706F7369746F72795D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F65636F73797374656D2D66756E642D6772616E7473292E205765E280997265206F70656E696E67207570206F7572207365636F6E64206772616E742062617463682074686973206D6F6E74682C20616E64206C6F6F6B20666F727761726420746F20726576696577696E6720796F7572207375626D697373696F6E732E200A3214323032332D31302D31375431333A33373A30305A3212636872697374696E612C6D696368656C6C653216676E6F6C616E642C66756E64696E672C6772616E74730A905F0A0A2F766D2E6D5F63616C6C12815F0A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374321D676E6F6C616E642D6D6F6465726174696F6E2D64616F2D6D6F64756C65321E476E6F2E6C616E64204D6F6465726174696F6E2044414F204D6F64756C6532985D0D0A2320476E6F2E6C616E64204D6F6465726174696F6E2044414F204D6F64756C650D0A2A5468697320626C6F6720706F7374206973207772697474656E206279207468652054657269746F7269207465616D2C2077686F736520666F63757320697320746F20616C6C6F77206F7267616E697A6174696F6E7320746F20636F6D6D756E696361746520616E6420696E74657261637420696E206120726573696C69656E7420616E64207472616E73706172656E74207761792E2054657269746F7269206973206120706172746E657220616E64206772616E746565206F6620476E6F2E6C616E642E2A0D0A0D0A5768656E20697420636F6D657320746F2074686520636F6D706C6578207375626A656374206F662064697363757373696F6E20666F72756D7320616E6420646563656E7472616C697A656420736F6369616C206E6574776F726B732C206E756D65726F757320746563686E6963616C20616E64207068696C6F736F70686963616C207175657374696F6E732061726973652E0D0A496D6167696E696E6720612032342F37206F6E6C696E6520636F6D6D756E69636174696F6E2073797374656D2077686F73652061646D696E697374726174696F6E2063616E6E6F7420626520636F6D70726F6D69736564206F722063656E736F72656420627920616E7920656E74697479206F7220696E646976696475616C206973206F6E65206F6620746865206D6F737420696E7472696775696E67206368616C6C656E676573206F6620746865206465636164652E0D0A417070726F78696D6174656C79203130206D6F6E7468732061676F2C207468652054657269746F726920636F7265207465616D206465636964656420746F206578706C6F726520746865206E657720706F73736962696C6974696573206F66666572656420627920476E6F2E6C616E64206F6E20746865207468656D65206F6620646563656E7472616C697A6564206D6F6465726174696F6E20616E6420746F206275696C642074686520666F756E646174696F6E20666F72206675747572652067656E65726174696F6E73206F6620646576656C6F7065727320746F2063726561746520726573696C69656E742C20726F627573742C20616E64206175746F6E6F6D6F7573206170706C69636174696F6E732E0D0A0D0A23232054686520766973696F6E0D0A0D0A2323232041626F75742054657269746F72690D0A0D0A54657269746F7269206973206120646563656E7472616C697A6564204F7065726174696E672053797374656D20666F7220696E646976696475616C73202620636F6D6D756E6974696573207468617420616C6C6F7773206F7267616E697A6174696F6E7320746F20636F6D6D756E696361746520616E6420696E74657261637420696E206120726573696C69656E7420616E64207472616E73706172656E74207761792E2049747320636F726520636F6D706F6E656E747320696E636C75646520746865206372656174696F6E206F66206120646563656E7472616C697A656420557365722050726F66696C6520666F7220696E646976696475616C732026206F7267616E697A6174696F6E732061732077656C6C206173206120644170702053746F726520616C6C6F77696E6720757365727320746F207069636B207468656972206661766F7269746520736572766963657320666F72206461696C7920757361676520616E6420646576656C6F7065727320746F206C6973742074686569722070726F6475637420696E206F7264657220746F2067726F77207468656972207573657220626173652E2046696E616C6C792C2054657269746F7269206261636B626F6E652C2069747320503250206D657373656E676572206170706C69636174696F6E20746861742077696C6C20656E61626C6520757365727320746F2063726561746520726573696C69656E7420746F6B656E2D67617465642067726F75707320696E206120636C69636B2077696C6C206576656E20616C6C6F77206E6F6E2D63727970746F2D6E617469766520757365727320746F20676574206F6E626F6172642061732074686973206665617475726520646F65736E2774206576656E207265717569726520612077616C6C657420636F6E6E656374696F6E20746F2067657420737461727465642E0D0A0D0A2323232054657269746F7269203C3E20476E6F2E6C616E640D0A0D0A436F6E76696E636564206F66207468652062656E6566697473206F66206F66666572696E67206120636F6E747269627574696F6E2D626173656420636F6E73656E737573206D6F64656C20616E642074616B696E6720616476616E74616765206F6620616E20696E7465727072657465642076657273696F6E206F6620476F6C616E672C207468652054657269746F726920636F7265207465616D2061696D7320746F206265636F6D65206F6E65206F6620746865206D6F73742070726F6C6966696320636F6E7472696275746F727320746F20476E6F2E6C616E642E204F757220706C616E20697320746F20666F637573206F6E206665617475726573207468617420656E61626C652074686520636F6F7264696E6174696F6E206F66206F7267616E697A6174696F6E7320616E6420696E646976696475616C732076696120676F7665726E616E63652C20636F6D6D756E69636174696F6E732C20616E6420636F6C6C61626F726174696F6E2E204576656E7475616C6C792C20616C6C20746865206665617475726573206C6973746564206F6E2054657269746F72692077696C6C2062652061636365737369626C6520696E2074686520476E6F2E6C616E64206E6574776F726B2C20636F6E747269627574696E6720746F207468652067726F777468206F66207468652065636F73797374656D2E0D0A0D0A23232320506F4320616E6420697465726174696F6E730D0A0D0A416E6F7468657220696D706F7274616E7420706F696E7420746F20656D70686173697A652069732074686174207468652054657269746F726920636F7265207465616D20696E74656E647320746F20696D70726F766520746865206665617475726573206974206465706C6F7973206F6E20476E6F2E6C616E642062792074616B696E6720616476616E74616765206F6620746865207573657220746573742070686173657320746F20636F6C6C65637420666565646261636B20746861742077696C6C20656E61626C6520697465726174696F6E20616E6420696D70726F76656D656E74206F662074686520736572766963652E204173206120726573756C742C2074686520E2809C50726F6F662D6F662D436F6E63657074E2809D2028E2809C506F43E2809D292070726573656E74656420696E20746869732061727469636C652077696C6C206265207375626A65637420746F207570646174657320616E642065766F6C7574696F6E732C2077686963682077696C6C20626520636F6D6D756E69636174656420696E2064756520636F757273652C2061732077696C6C20746865206173736F6369617465642074657374207068617365732E0D0A0D0A232320576861742069732074686520476E6F204D6F6465726174696F6E204D6F64756C653F0D0A0D0A54686520476E6F204D6F6465726174696F6E204D6F64756C65206973206120736D61727420636F6E74726163742028E2809C7265616C6DE2809D29207468617420656E61626C6573206120646563656E7472616C697A65642C206175746F6E6F6D6F7573206F7267616E697A6174696F6E202844414F2920746F206D616E61676520746865206D6F6465726174696F6E206F66206120666F72756D206F7220736F6369616C20746872656164207468726F7567682061207472616E73706172656E74206F6E2D636861696E20766F74652E0D0A0D0A232323204C6574E28099732074616B6520616E206578616D706C653A0D0A0D0A496D6167696E6520612073696D706C6520736F6369616C206E6574776F726B2073696D696C617220746F20496E7374616772616D2C20696E20776869636820616C6C20636F6E74656E7420697320646563656E7472616C697A656420287573696E67204950465320666F7220696D616765732C20766964656F732C206D75736963206574632E292E20466F72206561636820706F73742C207573657273207369676E20696E207669612074686569722077616C6C657420746F20706F737420636F6E74656E742C20616E64206E6F2063656E7472616C697A65642061646D696E6973747261746F722063616E2064656C657465207468697320636F6E74656E742E205468652066726565646F6D206F66666572656420627920746869732074797065206F6620646563656E7472616C697A6564206170706C69636174696F6E20697320696D6D656E73652073696E6365206576656E20617320646576656C6F70657273206F6620746865206170706C69636174696F6E2C20697420697320696D706F737369626C6520746F2064656C6574652074686520636F6E74656E742E205468657265666F72652C2077652063616E20636F6E7369646572207468697320E2809C7370616365206F662066726565646F6DE2809D206173206120E2809C636F6D6D6F6E207370616365E2809D20756E6C696B6520616E79206170706C69636174696F6E206F776E65642062792061207072697661746520636F6D70616E7920616E6420686F73746564206F6E2063656E7472616C697A656420696E6672617374727563747572652E0D0A576974682074686973207261646963616C2066726565646F6D20666F7220746865207573657220636F6D6573206120677265617420726573706F6E736962696C697479E2809420746F20636F6C6C6563746976656C7920656E7375726520746865207365637572697479206F66207468697320737061636520726174686572207468616E2064656C65676174696E672074686520726573706F6E736962696C69747920746F206D6F64657261746F727320656D706C6F796564206279206120636F6D6D65726369616C20656E74657270726973652E205468697320697320776879207765E28099766520637265617465642074686520E2809C476E6F204D6F6465726174696F6E204D6F64756C652EE2809D0D0A0D0A23232320486F7720646F657320697420776F726B3F0D0A0D0A5B215B6D6F6465726174696F6E5F666C6F772076302E315D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032332D31302D31395F64616F2D6D6F6465726174696F6E2D6D6F64756C652F7372632F7468756D62732F6D6F6465726174696F6E5F666C6F775F76302E312E706E67295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032332D31302D31395F64616F2D6D6F6465726174696F6E2D6D6F64756C652F7372632F6D6F6465726174696F6E5F666C6F775F76302E312E706E67290D0A0D0A54686520476E6F204D6F6465726174696F6E204D6F64756C6520616C6C6F777320757365727320746F206E6F7469667920746865206D6F6465726174696F6E2044414F20636F6D6D756E69747920746861742074686579207769736820746F207265706F727420636F6E74656E742E205468726F756768207468697320616374696F6E20287065726D69747465642062792074686520736D61727420636F6E7472616374292C207468657920696E666F726D207468652044414F20636F6D6D756E69747920746861742074686520636F6E74656E7420697320696E617070726F7072696174652E0D0A0D0A5B215B636F6E74656E7420666C61675D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032332D31302D31395F64616F2D6D6F6465726174696F6E2D6D6F64756C652F7372632F7468756D62732F636F6E74656E745F666C61672E706E67295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032332D31302D31395F64616F2D6D6F6465726174696F6E2D6D6F64756C652F7372632F636F6E74656E745F666C61672E706E67290D0A0D0A4F6E63652074686520636F6E74656E7420686173206265656E207265706F727465642061206365727461696E206E756D626572206F662074696D6573202831302074696D657320696E207468697320506F4329206279207573657273202877686F206D6179206F72206D6179206E6F74206265206D656D62657273206F6620746865204D6F6465726174696F6E2044414F292C20616E206F6E2D636861696E2070726F706F73616C206973206175746F6D61746963616C6C7920637265617465642E0D0A0D0A5B215B6D6F6465726174696F6E2064616F20666565645D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032332D31302D31395F64616F2D6D6F6465726174696F6E2D6D6F64756C652F7372632F7468756D62732F6D6F6465726174696F6E5F64616F5F666565642E706E67295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032332D31302D31395F64616F2D6D6F6465726174696F6E2D6D6F64756C652F7372632F6D6F6465726174696F6E5F64616F5F666565642E706E67290D0A0D0A54686973206F6E2D636861696E2070726F706F73616C206973207468656E206C697374656420696E20746865204D6F6465726174696F6E2044414F20746162206F6E2074686520536F6369616C20466565642061732077656C6C206173206F6E20746865204D6F6465726174696F6E2044414F2070726F66696C652070726F706F73616C73206665656420736F20616C6C204D6F6465726174696F6E2044414F206D656D626572732063616E20766F7465206F6E2069742E2041206465626174652063616E2074616B6520706C61636520746F20646973637573732074686520626573742063686F69636520666F722074686520636F6E74656E742E0D0A0D0A5B215B6D6F6465726174696F6E2064616F20766F74655D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032332D31302D31395F64616F2D6D6F6465726174696F6E2D6D6F64756C652F7372632F7468756D62732F6D6F6465726174696F6E5F64616F5F766F74652E706E67295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032332D31302D31395F64616F2D6D6F6465726174696F6E2D6D6F64756C652F7372632F6D6F6465726174696F6E5F64616F5F766F74652E706E67290D0A0D0A4D6F6465726174696F6E2044414F206D656D62657273206861766520746872656520766F74696E67206F7074696F6E733A0D0A2D2042616E2074686520636F6E74656E7420696E207175657374696F6E0D0A2D204162737461696E0D0A2D20446F206E6F742062616E2074686520636F6E74656E7420696E207175657374696F6E0D0A0D0A4F6E63652074686520726571756972656420766F74652071756F746120686173206265656E20726561636865642C2074686520636F6E7472616374206175746F6D61746963616C6C792065786563757465732074686520766F746564206465636973696F6E2E0D0A0D0A2323205468652043757272656E74205374617475733A0D0A0D0A5468652054657269746F726920636F7265207465616D2072656365697665642061206772616E742066726F6D2074686520476E6F2E6C616E6420636F7265207465616D20746F206275696C6420746865206E656365737361727920746F6F6C7320666F7220646563656E7472616C697A6564206D6F6465726174696F6E2E0D0A0D0A546F206163636F6D706C6973682074686973207461736B2C2077652064697669646564206F757220776F726B20696E746F2066697665206D61696E207374616765733A0D0A312E204275696C6420E2809C44414FE2809D207374616E646172647320746F2065737461626C697368207468652066756E64616D656E74616C206275696C64696E6720626C6F636B7320616E6420656E737572652061206D6F64756C617220617070726F61636820696E20746865206C6F6E67207465726D20666F7220766172696F757320746F6F6C732E0D0A322E204275696C64206120E2809C44414FE2809D206465706C6F796572207468617420616C6C6F7773206E6F6E2D7465636820757365727320746F20656173696C79207574696C697A652074686520646966666572656E74207374616E64617264732E0D0A332E204275696C64206120637573746F6D697A61626C65204D6F6465726174696F6E204D6F64756C6520746861742063616E20636174657220746F206120776964652072616E6765206F66207573652063617365732E20466F72206578616D706C652C206966207765207265706C6163652074686520736F6369616C2066656564207769746820612073657276696365206D61726B6574706C6163652C20746865204D6F6465726174696F6E204D6F64756C652063616E207472616E73666F726D20696E746F206120E2809C4A757374696365204D6F64756C65E2809D2074686174207265736F6C76657320636F6E666C69637473206265747765656E2073656C6C65727320616E6420627579657273206F6E206120646563656E7472616C697A656420706C6174666F726D20616E642073657276657320617320616E20657363726F772073797374656D2E0D0A342E20446576656C6F7020746865207573657220657870657269656E6365207468617420616C6C6F777320666F72206C617267652D7363616C65206578706572696D656E746174696F6E207769746820746865204D6F6465726174696F6E204D6F64756C652077697468696E20612064656469636174656420636F6E74657874206F6620616E2061637469766520736F6369616C20666565642E20486572652C2077652063726561746564206120736F6369616C2066656564207265616C6D20616E6420656E61626C6564206E6F6E2D646576656C6F70657220476E6F2E6C616E6420757365727320746F20706172746963697061746520696E207468652066756C6C2D7363616C6520657870657269656E63652E0D0A352E2045737461626C69736820696E746572616374696F6E73206265747765656E20736D61727420636F6E7472616374732028722F626F617264732C20722F736F6369616C666565642C202F722F7573657273292C20636F6E64756374206578706572696D656E747320746F20656E68616E63652074686569722073656375726974792C20616E64206964656E7469667920656D657267696E67206E6565647320666F7220746865736520696E6E6F766174697665207573652063617365732E0D0A0D0A232323205768617420646F657320612044414F207265616C6D206C6F6F6B206C696B653F0D0A0D0A2D205765206465636964656420746F206275696C642074776F20646966666572656E742044414F207374616E64617264732C207573696E672074776F20646966666572656E7420617070726F6163686573206F66206D6F64756C61726974793A0D0A2D20417261676F6E2044414F205374616E646172642C206261736564206F6E2074686520616D617A696E6720776F726B206F66205B74686520417261676F6E207465616D5D2868747470733A2F2F617261676F6E2E6F72672F2920287573696E6720536F6C6964697479290D0A2D205B44414F44414F5D2868747470733A2F2F6769746875622E636F6D2F4441302D4441302920736D61727420636F6E74726163742C207573696E6720436F736D5761736D2C207468617420616C6C6F7773206D6F7265206D6F64756C61726974792E0D0A0D0A0D0A4865726520697320616E206578616D706C652C2077697468207468652044414F44414F20636F6E747261637420706F7274656420696E746F20476E6F6C616E673A0D0A5B536F757263655D2868747470733A2F2F746573746E65742E676E6F2E74657269746F72692E636F6D2F722F64656D6F2F64616F5F7265616C6D5F76362F64616F5F7265616C6D2E676E6F290D0A0D0A606060676F0D0A7061636B6167652064616F5F7265616C6D0D0A0D0A696D706F727420280D0A0922656E636F64696E672F626173653634220D0A0922737464220D0A0922737472696E6773220D0A092274696D65220D0A0D0A0964616F5F636F72652022676E6F2E6C616E642F702F64656D6F2F64616F64616F2F636F72655F763136220D0A0964616F5F696E74657266616365732022676E6F2E6C616E642F702F64656D6F2F64616F64616F2F696E74657266616365735F763136220D0A0970726F706F73616C5F73696E676C652022676E6F2E6C616E642F702F64656D6F2F64616F64616F2F70726F706F73616C5F73696E676C655F763136220D0A09766F74696E675F67726F75702022676E6F2E6C616E642F702F64656D6F2F64616F64616F2F766F74696E675F67726F75705F763137220D0A0922676E6F2E6C616E642F702F64656D6F2F756A736F6E5F7635220D0A0922676E6F2E6C616E642F722F64656D6F2F67726F7570735F763232220D0A096D6F64626F617264732022676E6F2E6C616E642F722F64656D6F2F6D6F64626F617264735F7639220D0A290D0A0D0A76617220280D0A0964616F436F72652020202020202064616F5F696E74657266616365732E4944414F436F72650D0A096D61696E426F6172644E616D65203D202264616F5F7265616C6D220D0A0967726F75704E616D6520202020203D206D61696E426F6172644E616D65202B20225F766F74696E675F67726F7570220D0A0967726F757049442020202020202067726F7570732E47726F757049440D0A290D0A0D0A66756E6320696E69742829207B0D0A096D6F64626F617264732E437265617465426F617264286D61696E426F6172644E616D65290D0A0D0A09766F74696E674D6F64756C65466163746F7279203A3D2066756E6328636F72652064616F5F696E74657266616365732E4944414F436F7265292064616F5F696E74657266616365732E49566F74696E674D6F64756C65207B0D0A090967726F75704944203D2067726F7570732E43726561746547726F75702867726F75704E616D65290D0A090967726F7570732E4164644D656D6265722867726F757049442C2022673137343774356D32663038706C716A6C726A6B327130716C643734363568787A38676B78353963222C20312C202222290D0A090967726F7570732E4164644D656D6265722867726F757049442C20226731303863737A6D6376733472336B36376B3768357A75686D34656C3371686C72787A6873687476222C20312C202222290D0A090967726F7570732E4164644D656D6265722867726F757049442C202267313475356561686561767930757834646D70796B67326776787076717665786D39637967353861222C20312C202222290D0A090967726F7570732E4164644D656D6265722867726F757049442C20226731636B6E3339356D707474703076757067747261747975666461616B6768386A676B6D7233796D222C20312C202222290D0A090967726F7570732E4164644D656D6265722867726F757049442C207374642E4765744F72696743616C6C657228292E537472696E6728292C20312C202222290D0A090972657475726E20766F74696E675F67726F75702E4E6577566F74696E6747726F75702867726F75704944290D0A097D0D0A0D0A0970726F706F73616C4D6F64756C6573466163746F72696573203A3D205B5D64616F5F696E74657266616365732E50726F706F73616C4D6F64756C65466163746F72797B0D0A090966756E6328636F72652064616F5F696E74657266616365732E4944414F436F7265292064616F5F696E74657266616365732E4950726F706F73616C4D6F64756C65207B0D0A0909097474203A3D2070726F706F73616C5F73696E676C652E50657263656E742831303029202F2F2031250D0A0909097471203A3D2070726F706F73616C5F73696E676C652E50657263656E742831303029202F2F2031250D0A09090972657475726E2070726F706F73616C5F73696E676C652E4E657744414F50726F706F73616C53696E676C6528636F72652C202670726F706F73616C5F73696E676C652E44414F50726F706F73616C53696E676C654F7074737B0D0A090909094D6178566F74696E67506572696F643A2074696D652E486F7572202A203234202A2034322C0D0A090909095468726573686F6C643A2070726F706F73616C5F73696E676C652E5468726573686F6C647B5468726573686F6C6451756F72756D3A202670726F706F73616C5F73696E676C652E5468726573686F6C6451756F72756D7B0D0A09090909095468726573686F6C643A2070726F706F73616C5F73696E676C652E50657263656E746167655468726573686F6C647B50657263656E743A202674747D2C0D0A090909090951756F72756D3A2020202070726F706F73616C5F73696E676C652E50657263656E746167655468726573686F6C647B50657263656E743A202674717D2C0D0A090909097D7D2C0D0A0909097D290D0A09097D2C0D0A097D0D0A0D0A096D65737361676548616E646C657273466163746F72696573203A3D205B5D64616F5F696E74657266616365732E4D65737361676548616E646C6572466163746F72797B0D0A090966756E6328636F72652064616F5F696E74657266616365732E4944414F436F7265292064616F5F696E74657266616365732E4D65737361676548616E646C6572207B0D0A09090972657475726E2067726F7570732E4E65774164644D656D62657248616E646C657228290D0A09097D2C0D0A090966756E6328636F72652064616F5F696E74657266616365732E4944414F436F7265292064616F5F696E74657266616365732E4D65737361676548616E646C6572207B0D0A09090972657475726E2067726F7570732E4E657744656C6574654D656D62657248616E646C657228290D0A09097D2C0D0A090966756E6328636F72652064616F5F696E74657266616365732E4944414F436F7265292064616F5F696E74657266616365732E4D65737361676548616E646C6572207B0D0A0909092F2F20544F444F3A20616464206120726F7574657220746F20737570706F7274206D756C7469706C652070726F706F73616C206D6F64756C65730D0A09090970726F704D6F64203A3D20636F72652E50726F706F73616C4D6F64756C657328295B305D0D0A09090972657475726E2070726F706F73616C5F73696E676C652E4E657755706461746553657474696E677348616E646C65722870726F704D6F642E4D6F64756C652E282A70726F706F73616C5F73696E676C652E44414F50726F706F73616C53696E676C6529290D0A09097D2C0D0A090966756E6328636F72652064616F5F696E74657266616365732E4944414F436F7265292064616F5F696E74657266616365732E4D65737361676548616E646C6572207B0D0A09090972657475726E206D6F64626F617264732E4E6577437265617465426F61726448616E646C657228290D0A09097D2C0D0A090966756E6328636F72652064616F5F696E74657266616365732E4944414F436F7265292064616F5F696E74657266616365732E4D65737361676548616E646C6572207B0D0A09090972657475726E206D6F64626F617264732E4E657744656C657465506F737448616E646C657228290D0A09097D2C0D0A097D0D0A0D0A0964616F436F7265203D2064616F5F636F72652E4E657744414F436F726528766F74696E674D6F64756C65466163746F72792C2070726F706F73616C4D6F64756C6573466163746F726965732C206D65737361676548616E646C657273466163746F72696573290D0A7D0D0A0D0A66756E632052656E646572287061746820737472696E672920737472696E67207B0D0A0972657475726E20225B5B626F6172645D282F722F64656D6F2F6D6F64626F617264733A22202B206D61696E426F6172644E616D65202B2022295D5C6E5C6E22202B2064616F436F72652E52656E6465722870617468290D0A7D0D0A0D0A66756E6320566F74654A534F4E286D6F64756C65496E64657820696E742C2070726F706F73616C494420696E742C20766F74654A534F4E20737472696E6729207B0D0A096D6F64756C65203A3D2064616F5F636F72652E47657450726F706F73616C4D6F64756C652864616F436F72652C206D6F64756C65496E646578290D0A09696620216D6F64756C652E456E61626C6564207B0D0A090970616E6963282270726F706F73616C206D6F64756C65206973206E6F7420656E61626C656422290D0A097D0D0A096D6F64756C652E4D6F64756C652E566F74654A534F4E2870726F706F73616C49442C20766F74654A534F4E290D0A7D0D0A0D0A66756E632045786563757465286D6F64756C65496E64657820696E742C2070726F706F73616C494420696E7429207B0D0A096D6F64756C65203A3D2064616F5F636F72652E47657450726F706F73616C4D6F64756C652864616F436F72652C206D6F64756C65496E646578290D0A09696620216D6F64756C652E456E61626C6564207B0D0A090970616E6963282270726F706F73616C206D6F64756C65206973206E6F7420656E61626C656422290D0A097D0D0A096D6F64756C652E4D6F64756C652E457865637574652870726F706F73616C4944290D0A7D0D0A0D0A66756E632050726F706F73654A534F4E286D6F64756C65496E64657820696E742C2070726F706F73616C4A534F4E20737472696E6729207B0D0A096D6F64756C65203A3D2064616F5F636F72652E47657450726F706F73616C4D6F64756C652864616F436F72652C206D6F64756C65496E646578290D0A09696620216D6F64756C652E456E61626C6564207B0D0A090970616E6963282270726F706F73616C206D6F64756C65206973206E6F7420656E61626C656422290D0A097D0D0A096D6F64756C652E4D6F64756C652E50726F706F73654A534F4E2870726F706F73616C4A534F4E290D0A7D0D0A0D0A66756E632067657450726F706F73616C734A534F4E286D6F64756C65496E64657820696E742C206C696D697420696E742C207374617274416674657220737472696E672C207265766572736520626F6F6C2920737472696E67207B0D0A096D6F64756C65203A3D2064616F5F636F72652E47657450726F706F73616C4D6F64756C652864616F436F72652C206D6F64756C65496E646578290D0A0972657475726E206D6F64756C652E4D6F64756C652E50726F706F73616C734A534F4E286C696D69742C20737461727441667465722C2072657665727365290D0A7D0D0A6060600D0A0D0A232323205075626C6963204772616E74205265706F72743A0D0A0D0A596F752063616E2066696E64207468652066756C6C207265706F7274206F66205B54657269746F726920436F7265E2809973206A6F75726E657920686572655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F6973737565732F37292E200D0A0D0A232323205265736F75726365733A0D0A0D0A446F63756D656E746174696F6E3A0D0A2D205B476E6F204D6F6465726174696F6E2044414F5D2868747470733A2F2F6769746875622E636F6D2F54455249544F52492F676E6F2F626C6F622F74657269746F72692D756E69666965642F6578616D706C65732F676E6F2E6C616E642F722F64656D6F2F74657269746F72692F4D4F4445524154494F4E5F44414F2E6D64290D0A0D0A5061636B616765733A0D0A2D205B68747470733A2F2F746573746E65742E676E6F2E74657269746F72692E636F6D2F722F64656D6F2F67726F7570735F7632325D2868747470733A2F2F746573746E65742E676E6F2E74657269746F72692E636F6D2F722F64656D6F2F67726F7570735F763232290D0A2D205B68747470733A2F2F746573746E65742E676E6F2E74657269746F72692E636F6D2F702F64656D6F2F64616F64616F2F696E74657266616365735F7631365D2868747470733A2F2F746573746E65742E676E6F2E74657269746F72692E636F6D2F702F64656D6F2F64616F64616F2F696E74657266616365735F763136290D0A0D0A5475746F7269616C3A0D0A2D205B476E6F2E6C616E6420536F6369616C2046656564204D6F6465726174696F6E206F6E2054657269746F72695D2868747470733A2F2F74657269746F72692E676974626F6F6B2E696F2F74657269746F72692D776869746570617065722F676E6F2E6C616E642F696E74726F647563696E672D676E6F2E6C616E642D736F6369616C2D666565642D76302E3123736F6369616C2D666565642D6D6F6465726174696F6E290D0A3214323032332D31302D31395430313A35303A30305A321F66657272796D616E676D692C7A78786D612C6D696368656C6C65656C6C656E321F676E6F6C616E642C64616F2C6D6F6465726174696F6E2C74657269746F72690AD3420A0A2F766D2E6D5F63616C6C12C4420A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F737432107779672D646F6E67776F6E2D7368696E322F57686F20596F7520476E6F20E28093204F6E20746865205265636F7264207769746820446F6E67776F6E205368696E32E8400A2A57686F20596F7520476E6F20697320696E74656E64656420746F207368696E652061206C69676874206F6E20746865206275696C646572732C20636F6E7472696275746F72732C20616E642067656E6572616C6C79206272696C6C69616E742068756D616E7320626568696E642074686520746563682E205765E280997265206578636974656420746F206B69636B206F6666207468697320736572696573207769746820446F6E67776F6E205368696E2C2074686520636F2D666F756E64657220616E642043454F206F66206F6E65206F6620476E6F2E6C616E64E2809973206C6F6E676573742D636F6E747269627574696E67207465616D732C204F6E626C6F632C206120536F757468204B6F7265616E2D626173656420626C6F636B636861696E20736F66747761726520636F6D70616E792074686174206275696C6473206B657920696E66726173747275637475726520616E6420746F6F6C696E6720666F7220476E6F2E6C616E642A0A0A53696E636520656D6261726B696E67206F6E20746865697220476E6F206A6F75726E657920696E206C61746520323032312C20446F6E67776F6E20616E6420686973207465616D2068617665206265656E20616D6F6E6720746865206D6F73742061637469766520676E6F6D657320656D626F6479696E67207468652076616C756573206F662074686520476E6F2070726F6A6563743A2068617264776F726B696E672C2070617373696F6E6174652C20686F6E6573742C20616E642068756D626C652C20746F206E616D652061206665772E20596F75206D617920616C72656164792062652066616D696C6961722077697468204F6E626C6F63E28099732070726F6A65637473205B4164656E615D2868747470733A2F2F6164656E612E6170702F292C205B476E6F7363616E5D2868747470733A2F2F676E6F7363616E2E696F2F292C20616E64205B476E6F737761705D2868747470733A2F2F6769746875622E636F6D2F676E6F737761702D6C61627329206D6F72652061626F757420746869732063616E20626520666F756E6420696E205B4F6E626C6F632773204861636B65727370616365206A6F75726E65795D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F6973737565732F3239292E20496E207468697320696E746572766965772C207765E280996C6C2067657420746865206C61746573742075706461746573206F6E2074686573652070726F6A656374732C20686561722061626F757420446F6E67776F6E2074686520706572736F6E2C20616E64206C6561726E206D6F72652061626F75742077686174206D6F746976617465732068696D20746F206265206120676E6F6D652E20436865636B206974206F75742E0A0A232320446F6E67776F6EE2809973206C696665206265666F726520636F64696E670A4974E2809973206120636F6C64204E6F76656D626572206D6F726E696E6720696E2053656F756C2C20616E6420446F6E67776F6E20697320696E20746865206F6666696365206561726C7920616674657220736C656570696E67206A75737420612066657720686F7572732E20537065616B696E6720746F2068696D2066726F6D2044756261692C20776865726520E2809C636F6F6CE2809D20697320333020E284832C206974E2809973202D3120E2848320696E204B6F7265612E20E2809C4920686F706520796F75E280997265206B656570696E67207761726D2CE2809D204920736D696C652C20E2809C596561682C22206865206C61756768732C20E2809C6974E2809973206E6F7420746F6F206261642EE2809D20446F6E67776F6EE2809973206265656E20696E2074686520696E6475737472792073696E63652032303135207768656E207765623320776173207374696C6C2063616C6C656420E2809C63727970746F2CE2809D2049434F7320776572652073656C6C696E6720736E616B65206F696C2C20616E642068697320636F6D70617472696F74732077657265206275737920706179696E672061626F766520746865206D61726B657420707269636520666F7220626974636F696E20696E2061207068656E6F6D656E6F6E2063616C6C65642074686520E2809C4B696D636869207072656D69756D2EE2809D0A0A4174207468652074696D652C206865207761732074726176656C696E672074686520776F726C6420617320612070726F66657373696F6E616C20652D73706F7274732067616D6572207768696368207361772068696D206C656176696E67204B6F72656120616E64206C6976696E6720696E2053616E204672616E636973636F20616E64204C2E412E20666F72207365766572616C2079656172732E20E2809C4920686164206C6F7473206F6620746F75726E616D656E747320746F20636F6D7065746520696E2C20736F20492068616420746F2074726176656C20746F206D616E79206F7468657220636F756E74726965732CE2809D20686520736179732C20E2809C7768696C652074726176656C696E672C2049206C6561726E65642061626F7574206F746865722063756C747572657320616E642070656F706C652C20616E64206E657720657870657269656E6365732E20497420776173207265616C6C79206579652D6F70656E696E672C20796F75206B6E6F772C206974207265616C6C792068656C706564206D616B65206D652077686F204920616D20746F6461792EE2809D0A0A416E642077686F20697320446F6E67776F6E20746F6461793F200A0A416D626974696F75732C2064726976656E2C20616E64206F6E65206F6620746865206B696E646573742C206D6F73742067656E75696E652070656F706C6520796F7520636F756C642065766572206D6565742E20E2809C49206C696B65206368616C6C656E6765732C20616E642049E280996D207665727920636F6D70657469746976652CE2809D20686520736179732E20E2809C492063616E2774206A75737420646F20726567756C6172206A6F62732E20492067657420626F72656420717569636B6C792C20736F2049206E65656420746F2066696E6420736F6D657468696E67207665727920636F6D706574697469766520616E6420686172642074686174206D616B6573206D652073747265737365642EE2809D204920706F696E74206F75742074686174206865E280997320696E2074686520726967687420706C6163652C20616E64206865206C61756768732E204865206578706C61696E732074686174206865207573656420746F207370656E6420616E20656E74697265207765656B2C20736F6D6574696D65732074776F2C206C6561726E696E6720612067616D65206265666F7265206120746F75726E616D656E742C20616C6D6F73742061726F756E642074686520636C6F636B2E20E2809C492068616420746F207075742065766572797468696E672049206861766520696E746F2077696E6E696E6720746861742067616D652C2072696768743FE2809D20486520766965777320776F726B696E6720696E2077656233207468652073616D65207761792E0A0A23232054686520696E74657273656374696F6E206265747765656E20652D67616D696E6720616E6420626C6F636B636861696E0A446F6E67776F6E6720697320636C6561726C7920636F6D666F727461626C65206F6E207468652063757474696E67206564676520696E20656D657267696E6720696E6475737472696573207468617420E2809C617265206F6674656E206C6F6F6B656420646F776E206F6E2CE2809D206C696B6520652D67616D696E6720616E642063727970746F2E2048652074616B657320677265617420736174697366616374696F6E20696E20686F772074686579E28099766520626F74682067726F776E2E20E2809C4D7920706172656E7473207765726520736179696E672C20274A75737420676F2073747564792C27207768696C6520492077617320706C6179696E672067616D65732C2062757420652D73706F727473206861732067726F776E2061206C6F742E205269676874206E6F772C2074686520696E647573747279206973207265616C6C79206269672C20616E642069742773206B696E64206F66207468652073616D6520776974682063727970746F2EE2809D20486520616464732C20E2809C49206C696B652067657474696E6720696E206561726C79207768656E206F746865722070656F706C6520617265206E6F7420696E746572657374656420616E642066696E64696E6720616E206F70706F7274756E6974792074686572652EE2809D0A0A5768656E206C6F6F6B696E6720746F2072657469726520617320612070726F66657373696F6E616C2067616D65722C20686520666F756E642068697320686F6D65207269676874206177617920696E20776562332C20776F726B696E672077697468206120626C6F636B636861696E20636F6E73756C74616E7420616E64207468652073706F72747320616E6420656E7465727461696E6D656E742D666F6375736564205B4368696C697A2070726F6A6563745D2868747470733A2F2F7777772E6368696C697A2E636F6D2F292C206265666F7265206C61756E6368696E6720686973206F776E20626C6F636B636861696E20636F6E73756C74696E6720616E6420646576656C6F706D656E74206669726D2E20E2809C49206469646E2774207468696E6B20492077617320676F696E6720746F206265206A757374206120726567756C617220656D706C6F79656520666F7220612062696720636F6D70616E792E20536F20492077616E74656420746F207374617274206D79206F776E20627573696E6573732CE2809D20686520736179732E0A0A23232047657474696E6720746F20476E6FE280A620476E6F2E6C616E640A486F772064696420446F6E67776F6E20686561722061626F757420476E6F2E6C616E643F200A0AE2809C4D7920636F2D666F756E6465722C2050657465722C20616E6420492077657265206C6F6E672D74696D6520666F6C6C6F77657273206F662074686520436F736D6F732065636F73797374656D2C20616E6420776520666F756E64206F75742074686174204A61652077617320776F726B696E67206F6E2061206E65772070726F6A6563742063616C6C656420476E6F2E6C616E6420696E206C61746520323032312E205765207265616C6C79206C696B65642074686520766973696F6E20626568696E6420476E6F2E6C616E642C2077687920686520737461727465642C20616E6420776861742068652077616E747320746F20616368696576652E2057652076616C7565207472616E73706172656E63792C20666169726E6573732C20616E642063656E736F727368697020726573697374616E63652C20736F207765207265616420616C6C2074686520646F63756D656E746174696F6E20616E642068697320696E697469616C20636F64656261736520616E6420646563696465642077652073686F756C642062652070617274206F6620686973206E657720696E69746961746976652E2057652073746172746564204F6E626C6F6320696E206561726C7920323032322EE2809D0A0A446F6E67776F6E206469646EE2809974206B6E6F77204A616520706572736F6E616C6C792C206275742068652066656C74207374726F6E676C7920616C69676E656420776974682068697320766973696F6E20616E64207768617420476E6F2E6C616E642061696D7320746F20616368696576652E20416C736F2C206869732072657075746174696F6E2061732074686520666F756E646572206F662054656E6465726D696E7420616E6420436F736D6F732070726563656465642068696D2E20446F6E67776F6EE280997320636F2D666F756E6465722C2050657465722C2077617320616C736F20776F726B696E67206F6E20612070726F6A6563742063616C6C6564204C756E616772616D2C206120436F736D6F732077616C6C657420696E746567726174656420776974682054656C656772616D2E2050657465722068616420666F6E64206D656D6F72696573206F66204A61652C206265696E67207665727920737570706F7274697665206F66206578706572696D656E74616C2070726F6A656374732C20696E636C7564696E6720686973206F776E2C20696E20746865206561726C792064617973206F6620436F736D6F732E0A0A2323204275696C64696E6720746F6F6C73E280A6204164656E612C20476E6F7363616E2C20476E6F737761700A4F6E626C6F63206861732073696E6365206265636F6D6520476E6F2E6C616E64E2809973206D6F73742070726F6C6966696320636F6E7472696275746F722C206C61756E6368696E6720746865205B476E6F7363616E5D2868747470733A2F2F676E6F7363616E2E696F2F2920626C6F636B206578706C6F72657220616E6420746865205B4164656E615D2868747470733A2F2F6164656E612E6170702F292077616C6C65742C2061732077656C6C206173206372656174696E67207475746F7269616C7320616E6420626C6F677320746F2068656C70206F6E626F61726420646576656C6F7065727320746F20476E6F2C20616E64206372656174696E6720476E6F2E6C616E64E280997320666972737420414D4D2044455820476E6F737761702C2074686520626574612076657273696F6E206F6620776869636820697320657374696D6174656420666F7220446563656D626572207468697320796561722E20E2809C43757272656E746C792C20746865207465616D20697320666F6375736564206F6E20646576656C6F70696E6720476E6F737761702C20696E746567726174696E67205B746865207265616C6D7320616E6420415049735D2868747470733A2F2F6769746875622E636F6D2F676E6F737761702D6C6162732F676E6F73776170292077697468205B74686520696E746572666163655D2868747470733A2F2F6769746875622E636F6D2F676E6F737761702D6C6162732F676E6F737761702D696E74657266616365292C20656E68616E63696E672074686520737761702066756E6374696F6E20616E64206C697175696469747920706F6F6C732C20616E6420736F6D65206164646974696F6E616C2066656174757265732E2057652065787065637420746F206C61756E636820746865206265746120696E2061626F75742061206D6F6E74682C20736F207765E280997265207175697465206578636974656421E2809D0A0A417320666F72204164656E612C20746865206465666163746F20476E6F2E6C616E642077616C6C65742C20E2809C4974277320616C72656164792070726F64756374696F6E2D72656164792C206275742077652077616E7420746F20696D70726F7665206F75722055582C20616E6420554920746F2070726F76696465206D6F7265207365637572652077617973206F66207573696E67206120776562332077616C6C65742EE2809D20546F206163686965766520746869732C204F6E626C6F6320697320616464696E67206120666561747572652063616C6C6564205B4169722D4761705D2868747470733A2F2F656E2E77696B6970656469612E6F72672F77696B692F4169725F6761705F286E6574776F726B696E67292920776869636820616C6C6F7773207468652077616C6C657420746F206265207573656420696E20616E206F66666C696E6520656E7669726F6E6D656E742C20776974686F7574207468652075736572206E656564696E6720746F20696D706F7274207468656972206B65797320746F204164656E612E20E2809C546865792063616E206A75737420757365204164656E6120617320612062726F61646361737465722CE2809D20446F6E67776F6E206578706C61696E732E20E2809C49207468696E6B2074686973206B696E64206F662066656174757265206973206E656564656420666F7220656E68616E63696E6720736563757269747920616E6420656475636174696E672070656F706C6520746F20757365206E6F6E637573746F6469616C2070726F647563747320696E206120736563757265207761792EE2809D0A0A4F6E626C6F6320697320616C736F2061205B51342032303233206772616E7465655D2868747470733A2F2F74657374332E676E6F2E6C616E642F722F676E6F6C616E642F626C6F673A702F66756E64696E672D70726F6772616D2D323371332920616E642077696C6C20646576656C6F7020636F726520476E6F2E6C616E6420696E66726173747275637475726520696E207072657061726174696F6E20666F72206D61696E6E65742E20E2809C57652061726520776F726B696E67206F6E207468726565206B65792066656174757265732CE2809D20446F6E67776F6E206578706C61696E732E20E2809C54686520666972737420697320636F6E747261637420696E746572616374696F6E2E20536F206974277320612077617920666F722061207265616C6D20746F20696E7465726163742077697468206F74686572207265616C6D732E20546865207365636F6E6420697320706F7274696E6720657373656E7469616C20476F207061636B6167657320746F20476E6F2C20616E64207468652074686972642069732061206D756C74692D6E6F646520746573746E65742EE2809D20416C6C20696E206164646974696F6E20746F204F6E626C6F63E280997320636F6E74696E756564206566666F727473206F6E20476E6F737761702C20476E6F7363616E2C20616E64204164656E612E20E2809C596F75E280997265206B656570696E6720627573792C207468656E3FE2809D20492061736B2E20E2809C416C6C206F75722068616E6473206172652066756C6C206E6F772CE2809D206865206C61756768732E0A492061736B207768617420686520646F657320696E2068697320667265652074696D6520616E6420E2809320696E206661637420E2809320776865746865722068652068617320616E792E20E2809C4E6F74206D7563682CE2809D206865206A6F6B65732C20E2809C6275742049206C696B65207370656E64696E672074696D652077697468206D7920736F6E20616E6420706C6179696E6720626F6172642067616D657320746F6765746865722E204865E280997320736576656E207965617273206F6C642C20616E6420776520617265206C696B6520667269656E64732EE2809D20446F6E67776F6E20616C736F206C696B657320746F20756E77696E642062792072656164696E6720626F6F6B73207768656E2068697320736F6E2069732061736C6565702E204F6E65206F6620686973206661766F7269746573206973205B2A546865205365637265742A5D2868747470733A2F2F656E2E77696B6970656469612E6F72672F77696B692F5468655F5365637265745F284279726E655F626F6F6B29293B2068652077617320E2809C7265616C6C7920696E7370697265642062792074686520636F6E63657074E2809D207768656E2068652077617320796F756E6765722E20492061736B206966206865207365657320697420776F726B696E6720696E20686973206461696C79206C69666520616E6420776865746865722068652062656C6965766573206865206D616E69666573747320776861742068652077616E747320696E746F206578697374656E63652C20E2809C446566696E6974656C792CE2809D206865207265706C69657320776974686F75742068657369746174696F6E2E0A0A232320446F6E67776F6EE280997320636F6E76696374696F6E20696E20476E6F2E6C616E640A4E6F74206F6E6C7920697320446F6E67776F6E20776F726B696E67206E6967687420616E64206461792C206275742068652068617320626F6F74737472617070656420686973207465616D2066726F6D20686973206F776E20706F636B657420746F20676F20616C6C20696E206F6E20476E6F2E6C616E642E2057686174206D616B65732068697320636F6E76696374696F6E20736F207374726F6E673F20E2809C49207472756C792062656C6965766520746861742074686520476E6F2E6C616E6420626C6F636B636861696E20697320746865206E6578742067656E65726174696F6E206F662074686520626C6F636B636861696E20696E6475737472792E20476E6F2E6C616E6420697320747279696E6720746F20696E76697465207765623220646576656C6F7065727320696E746F207765623320616E642070726F766964696E6720616C6C20746865736520646576656C6F7065722D667269656E646C7920746F6F6C7320736F207468657920646F6E2774206E65656420746F206C6561726E2061206E6577206C616E677561676520746F2067657420696E746F207468652065636F73797374656D2E20476E6F564D2C2054656E6465726D696E74322C2065766572797468696E6720697320736F207472616E73706172656E7420616E642073696D706C652EE2809D0A48652062656C696576657320476E6F2E6C616E642077696C6C20626520E2809C6F6E65206F6620746865206772656174657374206578706572696D656E747320696E207468652063727970746F20696E647573747279E2809D207468616E6B7320746F206974732066616972207265776172647320616E6420636F6E747269627574696F6E2D626173656420676F7665726E616E63652E20E2809C49276D207265616C6C7920657863697465642061626F7574207468697320696E69746961746976652C20616E6420616C6C206F7572207465616D206D656D62657273206172652077656C6C2D616C69676E656420746F20737570706F7274207468697320766973696F6E2E2057652077616E7420746F20646F206F7572207061727420746F2061636869657665207468652073756363657373206F6620476E6F2E6C616E642EE2809D0A0A49207468616E6B2068696D20666F72206869732074696D6520616E642061736B206966207468657265E280997320616E797468696E6720686520776F756C64206C696B6520746F206164642E2048652070617573657320666F722061206D6F6D656E7420616E64207468656E20736179732C20E2809C496620796F75277265206275696C64696E6720612064417070206F72206C6F6F6B696E6720666F722061206E6577206F70706F7274756E69747920696E2061206E65772065636F73797374656D2C2049207468696E6B207468697320697320796F7572206368616E63652E204920686F706520746F2073656520677265617420646576656C6F7065727320616E64207465616D732067657474696E6720696E746F20476E6F2E6C616E642E204C6574E2809973206D616B6520746869732065636F73797374656D20677265617420746F6765746865722EE2809D0A3214323032332D31312D32345430303A30303A30305A3209636872697374696E61322477686F796F75676E6F2C6F6E626C6F632C636F6D6D756E6974792C696E746572766965770A8AB7010A0A2F766D2E6D5F63616C6C12FAB6010A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374320D6D6F6E74686C792D6465762D36322E546865204D6F726520596F7520476E6F3A20476E6F2E6C616E64204D6F6E74686C792055706461746573202D203632A2B5010A0A57656C636F6D6520746F20746865206C61746573742065646974696F6E206F6620546865204D6F726520596F7520476E6F2C20796F757220726567756C617220736F75726365206F6620757064617465732066726F6D2074686520476E6F2E6C616E6420636F7265207465616D20616E6420636F6E7472696275746F722065636F73797374656D2E205468657265E28099732061206C6F7420746F20636F7665722074686973206D6F6E74682C2066726F6D206120636F6D70616E7920656E67696E656572696E67207265747265617420746F206E657720636F7265206D656D6265727320616E6420636F6E7472696275746F72732E205765E280997665206D6164652070726F6772657373206163726F73732074686520626F61726420746F2066697820696D706F7274616E74206275677320616E642069737375657320616E642070726F76696465206164646974696F6E616C2066656174757265732E205468657265E28099732061206E65772077617920746F2064796E616D6963616C6C792063616C6C207265616C6D732C20476E6F2E6C616E64E280997320746F6B656E6F6D69637320616E6420676F7665726E616E63652061726520616476616E63696E672C206F7572207374616E64617264206C696272617279206C69737420697320657870616E64696E672C20616E64206F7572206772616E7465657320617265206B696C6C696E6720697420776974682074686569722064656C6976657261626C65732E20576974686F757420667572746865722061646F2C206C6574E2809973206469766520696E2E0A0A232320476E6F20436F7265205465616D2055706461746573202D20544C3B44520A0A4F6E6C7920676F742074696D6520746F20736B696D2074686520757064617465733F20596F75E280996C6C2066696E642074686520686967686C696768747320696E20746865206C6973742062656C6F772E20496620796F752077616E7420746F20646976652064656570657220696E746F2074686520746F706963732C20747261636B206F75722070726F67726573732C20756E6465727374616E642074686520726174696F6E616C6520626568696E64206F7572206465636973696F6E732C206F72206578706C6F726520746865206973737565732077652063616D65206163726F73732C2067726162206120636F666665652C206B69636B206261636B2C20616E64207361766F72207468652066756C6C2064657461696C732E0A0A2A202A2A54686520506F7274616C204C6F6F702A2A20E28093204D756368206F66206F757220666F637573206F76657220746865207061737420666577206D6F6E74687320686173206265656E206F6E2074686520506F7274616C204C6F6F70205B2869737375652031313038295D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F31313038292C2077686963682077696C6C206D616B6520646576656C6F70696E67206F6E20476E6F20736D6F6F746865722C206661737465722C20616E64206D6F726520696E747569746976652E2054686520506F7274616C204C6F6F702077696C6C207370656564207570206465706C6F79696E6720644170707320616E6420696D70726F76652074686520555820666F7220476E6F2E6C616E6420646576732E0A0A2A202A2A44796E616D6963205265616C6D2043616C6C65722A2A20E28093205765E2809976652061646465642061206E65772077617920746F2063616C6C207265616C6D732064796E616D6963616C6C7920736F2074686174206441707073206E6F206C6F6E676572206861766520746F206D616E75616C6C7920696D706F72742047524332302F37323120746F6B656E73205B2850522031323632295D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F31323632292E0A0A2A202A2A44414F20537472756374757265202620546F6B656E6F6D6963732A2A20E28093205765E28099726520636C6F736520746F2066696E616C697A696E67207468652044414F20737472756374757265206F6620476E6F2E6C616E6420616E642069747320746F6B656E6F6D6963732E2054686572652077696C6C206265207468726565206D61696E2044414F732C20476F7644414F2C204576616C756174696F6E44414F2C20616E6420537570706F727444414F2E205765E280997265206578706C6F72696E67207374616B696E67206F7074696F6E7320666F7220474E4F5420686F6C6465727320616E6420776F726B696E67206F6E207472616E73616374696F6E206665657320616E64206761732E0A0A2A202A2A476E6F20506C617967726F756E642A2A20E2809320476E6F20506C617967726F756E6420697320616E20617765736F6D652077617920666F7220646576656C6F7065727320746F20636F6C6C61626F726174652C2073686172652C20616E64207465737420746865697220636F64652E205468652066756C6C2076657273696F6E2069736EE2809974207265616479207965742C20627574207765E2809972652073686172696E67207468652062657461207769746820616E796F6E652077686F2077616E747320746F2068656C70207573206974657261746520616E6420696D70726F76652074686973207765656B2E0A0A2A202A2A476E6F205374616E64617264204C69627261726965732A2A20E2809320496E205B697373756520313236375D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F31323637292C20796F752063616E2066696E64206F75722063757272656E7420776973686C69737420666F7220476E6F207374616E64617264206C69627261726965732E20496620796F752077616E7420746F207365652077686174207765206861766520616E642077686174E2809973206C61636B696E672C206F7220796F752077616E7420746F20636F6E747269627574652C206F70656E20616E206973737565206F7220612050522E0A0A2A202A2A476E6F204C616E6775616765205365727665722028476E6F6C73292A2A20E2809320416E20696D706C656D656E746174696F6E206F6620746865205B4C616E6775616765205365727665722050726F746F636F6C20284C5350295D2868747470733A2F2F6D6963726F736F66742E6769746875622E696F2F6C616E67756167652D7365727665722D70726F746F636F6C2F2920666F7220476E6F2C20476E6F6C73206D616B65732077726974696E6720636F64652073696D706C657220616E6420776F726B732077697468207365766572616C20656469746F72732E20566973697420746865205B434F4E545249425554494E472E6D642066696C655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F626C6F622F6D61737465722F434F4E545249425554494E472E6D642376696D2D737570706F72742D776974682D6C73702920746F20747279206974206F75742E0A0A2A202A2A52757374564D20496D706C656D656E746174696F6E2A2A20E28093205468652052757374564D20696D706C656D656E746174696F6E20697320616C6D6F737420726561647920616E6420697320696E2074686520646562756767696E67207374616765732E205765E28099726520616C736F206C6F6F6B696E6720617420616464696E672061204A697420636F6D70696C657220616E64207265736561726368696E672074686520746F70696373206F662064657465726D696E69736D20616E6420636F6E63757272656E63792E0A0A2A202A2A42797465636F646520476F20564D20496D706C656D656E746174696F6E2A2A20E2809320546865205061727363616E2070726F6A6563742069732070726F6772657373696E672077656C6C20746F7761726420636F6D706C6574696F6E206F662074686520737065632E205765206C6F6F6B20746F2070726F7669646520737570706F727420666F7220696E746572666163657320696E2074686520696E74657270726574657220627920657874656E64696E6720746865207374616E64617264207265666C656374207061636B6167652C20616C736F20746F207468652062656E65666974206F662074686520656E7469726520476F20636F6D6D756E6974792E0A0A23232320456E67696E656572696E6720526574726561740A476E6F20636F726520656E67696E656572696E67207465616D20676F7420746F676574686572206C617374206D6F6E746820696E206F757220666972737420636F6D70616E792D7769646520726574726561742E2049742077617320616E20696E76616C7561626C65206F70706F7274756E69747920746F20776F726B20666163652D746F2D666163652C20627261696E73746F726D2069646561732C20636F646520746F6765746865722C20616E6420666978207365766572616C20686967682D6C6576656C20636F6E6365726E732E205765206D616465206D616E7920696D70726F76656D656E747320746F2074686520746563686E6963616C2061737065637473206F66207468652070726F6A6563742C20696E636C7564696E67206D616A6F7220616476616E636573206F6E2074686520506F7274616C204C6F6F702C20616E6420737472656E677468656E6564206F757220616C69676E6D656E74207468726F756768207465616D20626F6E64696E6720616374697669746965732C20736F6369616C697A696E672C20616E6420686176696E672066756E2E20200A0A5765206D616465206D756C7469706C652062756720666978657320616E64207265736F6C766564206D616E79206F66207468652069737375657320746861742061726F7365206F7574206F66205B476E6F43686573735D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F63686573732920646576656C6F706D656E742C20616E64204D616E6672656420616E6420746865204F6E626C6F63207465616D202877686F206A6F696E6564207573206F6E207468652072657472656174292064656D6F6E737472617465642061206E65772077617920746F2064796E616D6963616C6C792063616C6C20636F6E747261637473207573696E6720646570656E64656E637920696E6A656374696F6E207769746820612072656769737472792E20546869732C20636F6D62696E6564207769746820476F6C616E67277320696E74657266616365206361706162696C69746965732C2063616E2061636869657665206120676F6F642062616C616E6365206265747765656E2064796E616D69736D2C206578706C696369746E6573732C20616E642073656375726974792028696E636C7564696E67207479706520736166657479292E2054686973207061747465726E20636F756C6420656E61626C65206D6173736976652044654669206170706C69636174696F6E73207768656E207573656420776974682047524320696E74657266616365732E20497420636F756C6420616C736F20737570706F727420636F6E74726163742D62617365642044414F732077686572652066656174757265732063616E206265206164646564206C617465722C206F70656E696E672074686520646F6F7220746F206E65772064657369676E207061747465726E732061726F756E6420636F6E74726163742075706772616465732E20436865636B206F7574205B505220313236325D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F313236322920666F72206D6F72652064657461696C732E20200A0A49742077617320696E76616C7561626C6520666F722065766572796F6E6520746F2067657420706C656E7479206F6620313A312074696D652077697468204A61652E204D6F7267616E207761732061626C6520746F206272696E6720746865204E61746976652042696E64696E677320746F70696320285B5052203835395D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3835392929206D75636820636C6F73657220746F20636F6D706C6574696F6E2E205468697320686173206265656E206120726563757272696E67207468656D6520696E206F757220646576656C6F7065722063616C6C7320666F7220746865206C61737420666577206D6F6E746873206173206974E2809973206120636F6D706C657820746F70696320746861742061696D7320746F206368616E676520686F7720476E6F2063616E2075736520476F20636F6465207768696C65207374696C6C206265696E6720756E64657273746F6F642062792073746174696320616E616C7973697320746F6F6C73206C696B6520676E6F20646F632E204D69636861656C20676F74206772656174657220636C6172697479206F766572207468652044414F2073747275637475726520616E6420474E4F5420746F6B656E6F6D6963732C204D696C6F73207761732061626C6520746F206D65726765205B5052203534365D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F353436292C206166746572206D616E79206D6F6E746873206F66206566666F72742C20776869636820616464732066696C652D6261736564207472616E73616374696F6E20696E646578696E672C20616E642054686F6D6173206372656174656420696E737472756374696F6E7320666F722067657474696E67207374617274656420776974682074686520476E6F204C616E6775616765205365727665722028676E6F6C73292C20746F2067697665206A75737420736F6D65206578616D706C65732E204974207761732070726F6475637469766520616E6420656E6A6F7961626C6520616E6420756E626C6F636B6564206D616E79206973737565732E200A0A41694220656E67696E65657273207765726520616C736F2061742074686520726574726561742C205A6F6F6D612066726F6D2054657269746F72692C20616E6420446F6E67776F6E2C204279656F6E674A756E2C20616E64205261792066726F6D204F6E626C6F632C206372656174696E6720706C656E7479206F66206F70706F7274756E697469657320666F7220696E746572657374696E672064697363757373696F6E7320616E642073686F77636173696E67206F757220776F726B2E20576520616C736F2077656C636F6D6564206E657720636F7265206D656D626572732044796C616E20616E642044616E6E7920746F20746865207465616D2E2044796C616E20697320612073656E696F7220736F66747761726520656E67696E6565722C20616E642044616E6E7920697320737570706F7274696E672044657645782E20576520656E6A6F796564206D656574696E6720616E64206861636B696E6720746F6765746865722077697468206C696B652D6D696E6465642070656F706C6520616E6420776F756C64206C696B6520746F20646F206974206D6F7265206F6674656E207769746820612062726F616465722061756469656E63652E20486F772061626F7574206120476E6F6D6520636F6E7472696275746F7220666573746976616C206E65787420796561723F20537461792074756E65642E0A0A23232320476E6F2E6C616E642044414F7320616E6420546F6B656E6F6D6963730A5468726F7567686F757420746865207265747265617420616E64206F6E676F696E672C207765E280997665206D616465206D616A6F7220616476616E63657320746F207468652044414F2073747275637475726520666F7220476E6F2E6C616E6420616E642074686520746F6B656E6F6D696373206F662074686520636861696E2E205765E280997265207374696C6C2068616D6D6572696E67206F7574207468652066696E616C2064657461696C732C20627574207765E2809976652064656369646564206F6E207468726565206D61696E2044414F7320E2809320476F7644414F2C204576616C756174696F6E44414F2C20616E6420537570706F727444414F20E2809320746861742077696C6C20776F726B20746F67657468657220616C6F6E6773696465206F7468657220646F6D61696E2D73706563696669632044414F732C207375636820617320456E67696E656572696E6744414F206F722050726F6A6563747344414F2C206D616B696E6720476E6F2E6C616E64206D6F726520646563656E7472616C697A6564206F7665722074696D652E20200A0A546865206D756C74692D74696572656420476F7644414F2077696C6C20626520726573706F6E7369626C6520666F7220766F74696E67206F6E20616C6C206465636973696F6E732074686174206166666563742074686520636861696E2C207375636820617320706172616D65746572206368616E676573206F722076616C696461746F7220616363657074616E63652F64656E69616C2E20476F7644414F206D656D626572732077696C6C20617373657373206E657720636F6E7472696275746F727320746F2074686520636861696E20616E6420616C6C6F63617465207468656D20612073636F726520616E6420636F72726573706F6E64696E67206D656D6265727368697020746965722E204576616C756174696F6E44414F2077696C6C20617373697374207769746820737065636966696320636F6E747269627574696F6E732C206C656E64696E67206974732065787065727469736520616E64206372697469632072657669657773206173206E65656465642E20537570706F727444414F2077696C6C2070726F76696465206B6E6F776C656467652D737065636966696320736572766963657320737563682061732048522C206D61726B6574696E672C20616E642066696E616E63652E0A0A526567617264696E67207472616E73616374696F6E20666565732C207765277265206578706C6F72696E6720736F6D657468696E672073696D696C617220746F20686F7720457468657265756D206465616C7320776974682067617320696E20697473204549502031353539207570646174652E20457373656E7469616C6C792C206120636F6D62696E6174696F6E206F6620636F6D706172696E672061206E657720626C6F636BE28099732073697A65207769746820746865206C61737420626C6F636B20746F2067617567652064656D616E6420616E6420736F6D6520736D616C6C20706172616D6574657273207765E280997265206C6F6F6B696E672061742E205765E28099726520616C736F206578706572696D656E74696E672077697468207374616B696E6720616C7465726E61746976657320776865726520636F6E7472696275746F72732063616E207374616B6520746865697220746F6B656E7320746F20737570706F7274206365727461696E2070726F6A6563747320696E2072657475726E20666F72207374616B696E6720726577617264732E204974E2809973207374696C6C206561726C7920646179732C20736F20776174636820746869732073706163652E205765E280996C6C2062652072656C656173696E67206D6F72652064657461696C7320736F6F6E2E20200A0A23232320476E6F20506C617967726F756E640A476E6F20506C617967726F756E6420697320612073696D706C652077656220696E746572666163652074686174206C65747320796F7520736861726520796F757220636F64652C2072756E20756E69742074657374732C206465706C6F7920796F7572207265616C6D20616E64207061636B6167652C20616E6420657865637574652066756E6374696F6E7320696E20796F757220636F6465207573696E6720746865207265706F20666F72206120736D6F6F7468657220616E64206D6F726520636F6C6C61626F72617469766520646576656C6F70657220657870657269656E63652E205765E280997265206578636974656420746F2072656C6561736520476E6F20506C617967726F756E64206F757420696E207468652077696C64206C617465722074686973206D6F6E746820696E206120736F6674206C61756E63682073657420666F72204E6F76656D6265722032382E20496620796F75E28099726520696E746572657374656420696E2074657374696E67206974206F75742C2068656164206F76657220746F206F757220446973636F7264206368616E6E656C2E205765E280997265206C6F6F6B696E6720666F7220666565646261636B20616E642068656C7020746F206964656E74696679206275677320616E6420696D70726F766520746865205558206265666F7265206974732066756C6C206C61756E636820696E20746865206E657720796561722E2049742077696C6C20626520696E746572657374696E6720746F2073656520686F772070656F706C6520696E74657261637420776974682074686520506C617967726F756E6420616E6420686F7720746865792075736520697420736F2077652063616E206974657261746520616E642061747472616374206D6F726520676E6F6D657320746F206F75722067726F77696E6720636F6D6D756E6974792E0A0A2323232054686520506F7274616C204C6F6F700A54686520506F7274616C204C6F6F7020697320616E206566666F727420746F20637265617465206120636F6E74696E756F75736C792D6465706C6F7965642073746167696E6720746573746E657420746F20626520686F73746564206F6E20746865206F6666696369616C205B676E6F2E6C616E6420776562736974655D2868747470733A2F2F676E6F2E6C616E64292E2054686520746573746E65742077696C6C206265207265736574206174206561636820636F6D6D6974206F6E206F7572207265706F7369746F72792C206275742069742077696C6C2072652D706C617920616C6C20746865207472616E73616374696F6E732066726F6D206974732070726576696F75732076657273696F6E2C2064726F7070696E6720616E792074686174206D69676874206661696C20666F6C6C6F77696E6720627265616B696E67206368616E67657320696E2074686520636F64652E2054686520506F7274616C204C6F6F702077696C6C2070726F7669646520612063656E7472616C20706C61636520776865726520796F752063616E206578706572696D656E74207769746820746865206C617465737420476E6F2E6C616E6420757064617465732C207265736F6C76696E67207468652070726F626C656D206F7572206578697374696E6720746573746E657473206861766520666163656420286265636F6D696E67207374616C65206F6E6C79206120666577206D6F6E746873206166746572207468656972206C61756E636829207768696C6520616C736F20706176696E67207468652077617920666F72206275696C64696E672044414F7320616E64206F6E2D636861696E2047616D65206F66205265616C6D7320616E642050726F6F662D6F662D436F6E747269627574696F6E2073797374656D732E20200A0A57697468696E2074686520506F7274616C204C6F6F70206566666F7274732C207765E28099726520616C736F206275696C64696E672073797374656D7320746F206D6F726520656666696369656E746C792069746572617465206C6F63616C6C79206F6E20796F757220476E6F207265616C6D732C2073696D696C617220746F207468652070726576696F75736C792064657363726962656420746573746E65742E2054686520506F7274616C204C6F6F702077696C6C2068656C7020746F2063726561746520616E20697465726174697665206379636C6520666F6375736564206F6E20646576656C6F706D656E742C2074657374696E672C20616E6420666565646261636B2C20656E68616E63696E67206C6F63616C20646576656C6F706D656E7420616E642074686520476E6F2E6C616E6420776562736974652E20417320646576656C6F706572732061726520646973636F766572696E672C207768656E206275696C64696E67206441707073206C696B6520476E6F43686573732C20476E6F4D6F62696C652C206F7220466C697070616E646F2C20746865792072756E20696E746F20697373756573207769746820746865207265706F2C20476E6F564D2C20616E6420636C69656E74206C6962726172696573207768656E20646576656C6F70696E67206C6F63616C6C792E0A0A54686520506F7274616C204C6F6F702077696C6C20656E61626C65206D75636820717569636B657220666565646261636B20736F2077652063616E20697465726174652C20756E636F7665722C20616E64206669782070726F626C656D73206661737465722E20446576732077696C6C2067657420612067726561746C7920696D70726F7665642055492C207769746820555820636F6E747269627574696F6E7320616E6420697373756573206D7563682065617369657220746F207265736F6C76652C20616E64207468652073616D652043492F434420657870657269656E63652061732077656232206170706C69636174696F6E732C20776865726520656163682074696D6520736F6D657468696E67206973207075626C6973686564206F6E204769742C20746865792067657420696E7374616E7420666565646261636B206F6E20686F7720697420776F726B7320696E2073746167696E672C206E6F74206F6E6C7920696E207465726D73206F6620636F64652062757420616C736F20696E207465726D73206F6620646174612E20537461792074756E65642C2074686520506F7274616C204C6F6F7020697320636F6D696E6720736F6F6E210A0A232323205374616E64617264204C6962726172792057697368204C6973740A546865207374616E64617264206C6962726172792077697368206C69737420696E205B697373756520313236375D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F313236372920697320696E74656E64656420746F2062652061207374617274696E6720706C61636520666F7220616E796F6E652077686F2077616E747320746F20616464206E6577207374616E64617264206C696272617269657320746F20476E6F2E204974277320616E206F70696E696F6E6174656420636F6C6C656374696F6E206F66206C6962726172696573207468617420776520776F756C64206C696B6520746F207365652061646465642E20536F2C20696620796F752073656520736F6D657468696E67206D697373696E67207468617420796F75E2809964206C696B6520616464656420746F206F7572207374616E64617264206C69627261726965732C206C65617665206120636F6D6D656E74206578706C61696E696E6720796F757220726561736F6E696E672E20496620796F752077616E7420746F20706F7274206F7665722061207374616E64617264206C6962726172792066726F6D20746865206C6973742C206D616B6520616E20697373756520666F7220697420616E642061737369676E20796F757273656C662C206F7220696620796F752063616E20646F20697420717569636B6C792C206D616B652061205052207265666572656E63696E67207468652069737375652E20596F752063616E207365652074686520676C6F62616C20737461747573206F66206F7572207374616E64617264206C69627261726965732028617320636F6D706172656420746F20476F29206F6E206F7572205B476F3C3E476E6F20636F6D7061746962696C69747920646F63756D656E745D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F626C6F622F643432316239363361656437663763336261333731386564666336666264373837666138663064642F646F63732F7265666572656E63652F676F2D676E6F2D636F6D7061746962696C6974792E6D64292E0A0A23232320447265616D696E67207769746820534F474E4F0A54686520536F676E6F2070726F6A6563742069732061205B647265616D5D2868747470733A2F2F7777772E776F72647265666572656E63652E636F6D2F6974656E2F536F676E6F29204D6F7267616E206861732061626F757420696D70726F76656D656E747320686520706C616E7320746F206D616B65206F6E20476E6F564D2E2046726F6D2068697320657870657269656E636520776F726B696E67206F6E20476E6F43686573732C20686520666F756E642074686174206D616E792066656174757265732077657265206C61636B696E67207468617420776F756C64206861766520696D70726F7665642074686520776F726B666C6F772C20666F72206578616D706C652C20616E20696D70726F76656420646562756767696E672073797374656D2C20656E68616E63656420726570726573656E746174696F6E206F66207468652076616C7565732077697468696E2074686520564D2C20686176696E67206D61707320617320736F727461626C65206461746120737472756374757265732C20616E6420616464696E67207265666C656374696F6E2E204D6F7267616E20706C616E7320746F20776F726B206F6E20746869732070726F6A656374206F6E207468652073696465206173206120666F726B207768656E206865206861732074696D652C20736F20536F676E6F20776F6EE2809974206265206D657267656420696E746F20746865206D6173746572206272616E636820666F72206E6F772E20496620796F752077616E7420746F20636865636B206974206F757420616E642073656520696620796F752063616E20636F6E747269627574652C20766973697420746865205B6861636B657273706163652050522034345D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F70756C6C2F3434292E0A0A2323232054686520467574757265206F662074686520476E6F204C616E6775616765205365727665722028476E6F6C73290A546865205B476E6F204C616E6775616765205365727665722028676E6F6C73295D2868747470733A2F2F6769746875622E636F6D2F676E6F2D706C617967726F756E642F676E6F6C732920697320616E20696D706C656D656E746174696F6E206F6620746865205B4C616E6775616765205365727665722050726F746F636F6C20284C5350295D2868747470733A2F2F6D6963726F736F66742E6769746875622E696F2F6C616E67756167652D7365727665722D70726F746F636F6C2F2920666F722074686520476E6F2070726F6772616D6D696E67206C616E67756167652E2049742069732073696D696C617220746F20746865206571756976616C656E7420E2809C676F706C73E2809D2070726F6A65637420666F7220476F2C20617320746865792063616E20626520706C756767656420696E746F20796F757220636F646520656469746F72207468726F75676820657874656E73696F6E7320616E6420616C6C6F7720796F7520746F206163636573732068616E64792066656174757265732C2073756368206173206175746F636F6D706C6574696F6E2C20666F726D617474696E672C20616E6420636F6D70696C652D74696D65207761726E696E67732F6572726F72732E20476E6F6C73206D616B65732077726974696E6720636F64652073696D706C65722C20776F726B696E672077697468207365766572616C20656469746F727320746F207375697420796F757220707265666572656E6365732E20546F20747279206974206F75742C20766973697420746865205B434F4E545249425554494E472E6D642066696C655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F626C6F622F6D61737465722F434F4E545249425554494E472E6D642376696D2D737570706F72742D776974682D6C7370292C20776869636820636F6E7461696E7320696E737472756374696F6E7320746F2067657420796F7520737461727465642E204F75722063757272656E7420646F63756D656E746174696F6E20746172676574732056696D2C204E656F76696D2C20616E64205375626C696D65546578742C206275742063616E206C696B656C792062652075736564207769746820616E7920656469746F72207468617420737570706F727473204C53502E204665656C206672656520746F20636F6E7472696275746520746F20696D70726F76696E6720476E6F6C7320616E6420616464696E67206D6F72652066656174757265732E204974E28099732077656C6C2D7772697474656E2C20616E642073696D706C6520746F206469766520696E746F2074686520636F646520616E6420616464206D6F7265206361706162696C69746965732E0A0A2323232052757374564D20496D706C656D656E746174696F6E0A506574617220636F6E74696E7565732070726F6772657373696E67206F6E207468652052757374564D20696D706C656D656E746174696F6E20616E642068617320616C6D6F73742066696E69736865642C2061706172742066726F6D206120666577206275672066697865732E204173207468652064657369676E206973206E6F7720636F6D706C6574652C2068652077696C6C20656E746572207468652074657374696E67207374616765732E20486520697320616C736F206C6F6F6B696E6720617420686F7720746F206164642061204A697420636F6D70696C657220746F207468652063757272656E742064657369676E2E2050657461722077617320696E697469616C6C7920636F6E6365726E6564207468617420746865206761726261676520636F6C6C6563746F72206D6967687420686176652070726573656E74656420736572696F7573206973737565732C20627574207468697320686173207475726E6564206F7574206E6F7420746F2070726573656E7420612070726F626C656D2E20416464696E672061204A697420636F6D70696C65722077696C6C20726571756972652061206C6F74206F6620776F726B20286174206C6561737420736978206D6F6E7468732920746F20737570706F72742065766572797468696E6720696E20746865206C616E67756167652C206275742069742073686F756C6420626520706F737369626C652E0A0A506574617220697320616C736F206C6F6F6B696E6720617420696D706C656D656E74696E6720636F6E63757272656E6379207468652077617920697420697320696E20476F20746F206861766520612066756C6C792066756E6374696F6E616C207669727475616C206D616368696E6520617320697420697320696E2074686520737065632E205468697320776F756C64206C696B656C792061747472616374206D6F72652065787465726E616C20636F6E7472696275746F727320746F20646576656C6F70696E672074686520564D2E204F6E6520616476616E74616765206F66205275737420697320746861742C20776974682074686520636F6E63757272656E6379206D6F64656C2C20746865726520697320616C726561647920616E20657874656E73697665206C6962726172792063616C6C6564205B546F6B696F5D2868747470733A2F2F746F6B696F2E72732F292077686963682068652063616E207573652E205065746172207374726573736573207468617420746869732069736EE280997420656173792C206275742068652062656C6965766573206974E28099732061636869657661626C652C206174206C65617374206173206120726573656172636820746F7069632061726F756E642064657465726D696E69736D20616E6420636F6E63757272656E63792E0A0A23232320476F2042797465636F646520564D20496D706C656D656E746174696F6E0A4D61726320636F6E74696E75657320746F20646576656C6F70205061727363616E2C20616E6F746865722062797465636F646520564D2C2062757420656E746972656C79206261736564206F6E2074686520476F2072756E74696D652C20776974682074686520616476616E74616765206F662072657573696E672074686520747970652D636865636B696E672073797374656D2C20636F6E63757272656E6379206D6F64656C2C20616E64206D656D6F7279206D616E6167656D656E7420616C72656164792070617274206F6620746865206578697374696E6720476F2072756E74696D652E20496E20746865206C617374206D6F6E74682C2074686520737570706F727420666F7220616C6C206D697373696E67206465636C61726174696F6E2073746174656D656E74732028636F6E7374616E74732C207661726961626C65732C20616E64207479706573292077617320616464656420696E2074686520636F64652067656E657261746F722E0A0A2323204772616E74656520616E642045636F73797374656D20557064617465730A4F75722065636F73797374656D20706172746E65727320616E64206772616E746565732061726520776F726B696E6720666C6174206F7574206F6E20746865697220636F6E747269627574696F6E732E205765E28099726520636C6F736520746F20736565696E6720746865206F6E2D636861696E206D656D6F72792067616D6520466C697070616E646F206C61756E63682C204164656E6120616E6420476E6F737761702061726520696E636F72706F726174696E6720736F6D65206D616A6F72206E65772066656174757265732C205A61636BE28099732072656C656173656420616E6F7468657220696E666F726D6174697665207475746F7269616C2061732070617274206F662074686520476F20746F20476E6F207365726965732C20616E64207765E280997665207265636569766564207365766572616C206E6577206772616E742070726F706F73616C732061732077656C6C2E205765E280997665206576656E2077656C636F6D65642061206E657720636F6E747269627574696E67207465616D2C205661726D6574612C20746F2074686520666F6C642E205363726F6C6C207468726F756768207468652064657461696C732062656C6F772E0A544C3B44523F0A2A204F6E2D636861696E206D656D6F72792067616D6520466C697070616E646F20697320636F6D696E6720736F6F6E0A2A20476E6F6D6F62696C6520697320616C6D6F737420636F6D706C65746520616E642077696C6C20626520726563656976696E6720612072656272616E6420736F6F6E0A2A20476E6F736F6369616C2077696C6C20616C6C6F77206465767320746F206578706572696D656E74207769746820736F6369616C206D656469612064417070730A2A204578706572696D656E74207769746820636F6E74656E74206D6F6465726174696F6E207573696E6720746865204D6F6465726174696F6E44414F206F722063726561746520796F7572206F776E2044414F0A2A20476E6F7377617020414D4D2044455820626574612077696C6C206C61756E636820696E20446563656D6265720A2A204164656E6120746F20696D706C656D656E74206E657720E280984169722D476170E2809920666561747572650A2A205661726D65746120697320776F726B696E67206F6E20476E6F2E6C616E6420556E6974792053444B20746F206D616B6520476E6F206D6F72652061636365737369626C6520746F2067616D6520646576656C6F706572730A0A23232320447261676F730A447261676F7320686173206265656E20776F726B696E67206F6E20706F7274696E6720686973206F6E2D636861696E206D656D6F72792067616D6520466C697070616E646F2066726F6D20536F6C696469747920746F20476E6F2C20616E64207765E280997265206C6F6F6B696E6720666F727761726420746F20706C6179696E6720697420736F6F6E20616674657220736565696E6720616E20617765736F6D652064656D6F206561726C6965722074686973206D6F6E74682E205768656E20796F7520706C617920466C697070616E646F2C20796F7520756E636F7665722061206D6174726978206F66206D61746368696E672076697375616C2073796D626F6C732E205468657265206172652032206C6576656C73206F6620646966666963756C747920286D6174726978206D616465206F662031362074696C6573206F722036342074696C6573292E20466F7220746865206C61756E63682C20447261676F732061696D7320746F20686176652076697375616C2073796D626F6C7320636F6E7461696E696E6720626173696320636F6C6F72732C20646963652C20686578616772616D732C206F7220766172696F7573206772616469656E74732E204F6E636520796F75E280997665206D61746368656420616C6C2074686520706169727320616E6420636F6D706C657465642061206D61747269782C20796F75206D696E7420616E204E465420746861742063616E20626520617373656D626C656420617320617274776F726B206F6E2D636861696E20616E642074726164656420696E2061206D61726B6574706C6163652E20447261676F732069732063757272656E746C79206C6F6F6B696E672061742074686520696E697469616C20746F6B656E6F6D69637320666F7220466C697070616E646F2C2077697468206120666978656420737570706C79206F6620312062696C6C696F6E20616E64206E6F2061697264726F7020646973747269627574696F6E20286D6F72652064657461696C7320736F6F6E292E20200A0A447261676F7320686173206265656E2061206D6F62696C652061707020646576656C6F70657220666F72206F7665722031302079656172732C207769746820616E20696E74657265737420696E20626C6F636B636861696E20666F722061726F756E6420736576656E2079656172732E20486520656E6A6F797320776F726B696E67207769746820476E6F2C20616C74686F75676820686176696E6720746F2072657365742074686520636861696E20616E642072656465706C6F792070726F6772616D7320656163682074696D65206865206D616B65732061206368616E6765207761732061206368616C6C656E67652E2054686520506F7274616C204C6F6F7020736F6C7665732074686573652069737375657320696E206C6F63616C20646576656C6F706D656E7420616E642077696C6C20616C6C6F772068696D20746F206465706C6F7920466C697070616E646F20736F6F6E65722E2041732070617274206F662074686520776F726B20666F7220466C697070616E646F2C20447261676F7320616C736F206164646564205B505220313330395D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F313330392920746F20696D70726F7665206F75722047524337323120696D706C656D656E746174696F6E5D2E20486520697320616C736F206170706C79696E6720666F722061206772616E7420746F20706F7274206869732070726F6A656374206D616E6167656D656E742073797374656D206F6E2D636861696E20666F7220476E6F2C20616E6420686520676176652075732061205B64656D6F5D2868747470733A2F2F64726976652E676F6F676C652E636F6D2F66696C652F642F31654A477941544868457A6C65745777513458745F394F4E374C32333159766F772F76696577292E20416E206F6E2D636861696E2070726F6A656374206D616E6167656D656E7420746F6F6C2077696C6C20626520657373656E7469616C20666F72206F7267616E697A696E67207468652044414F2073797374656D2C20666F637573696E67206F6E206F7572207465616DE2809973206E656564732C206F7267616E697A696E67207461736B732C2073657474696E6720676F616C732C20616E64206D6F72652E204B656570207570207769746820447261676F73E280992070726F6772657373206279207669736974696E6720686973205B6861636B657273706163655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F6973737565732F3333292E0A0A2323232042657274790A426572747920686173206265656E20706F776572696E67206168656164207769746820476E6F6D6F62696C65202877686963682077696C6C20736F6F6E20726563656976652061206E6577206E616D6520746F20626574746572207265666C656374206974732066756E6374696F6E616C697479292C20476E6F736F6369616C2C20616E6420476E6F20636F72652E20536F6D6520686967686C696768747320696E636C756465207369676E69666963616E742070726F6772657373206F6E20746865204752504320696E746572666163652028736565205B64656D6F20766964656F5D68747470733A2F2F7777772E6C6F6F6D2E636F6D2F73686172652F6431636566363031393963303438376538366465616232613965363164363163292E2041732074686520696E7465726661636520746F2050726F746F62756620686173206D616E79206D6F7265206461746120747970657320617661696C61626C65207468616E2074686520696E7465726661636520746F20746865206C616E6775616765206272696467652C20475250432067726561746C792073696D706C6966696573207468652061707020616E6420696D70726F766573207468652055582E205468652041504920697320616C6D6F737420636F6D706C65746520616E64206E6F7720696E636C756465732077616C6C65742066756E6374696F6E732C2073756368206173206372656174696E6720616E206163636F756E7420616E6420726573746F72696E6720616E206163636F756E742066726F6D20746865207265636F766572792070686173652C20616E6420616E206576656E742073747265616D207768656E2063616C6C696E672061207265616C6D2066756E6374696F6E205B2864656D6F20766964656F20617661696C61626C652068657265295D2868747470733A2F2F7777772E6C6F6F6D2E636F6D2F73686172652F3432663264636230623461333466373761393561306638303132653462353262292E546F2068656C7020646576656C6F706572732C20476E6F6D6F62696C6520616C736F20696E636C75646573206578616D706C6520617070732E20486572652069732061205B64656D6F20766964656F5D2868747470733A2F2F7777772E6C6F6F6D2E636F6D2F73686172652F343161323061373634663066346361663931663036386236326531663136633429206F6620746865206C6174657374206D696E696D616C2068656C6C6F206170702E0A0A42657274792063726561746564205B505220313233355D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F31323335292072656C6174696E6720746F20416D696E6F2E20546865792073746172742077697468206120476F2073747275637420616E642061646420636F6D6D656E7473206578706C61696E696E6720616C6C20746865206669656C64732E2050726576696F75736C792C207768656E20746865792072616E20416D696E6F20616E642067656E65726174656420612050726F746F627566207374727563747572652C20616C6C20746865697220636F6D6D656E74732064697361707065617265642E205468697320505220616C6C6F7773207468656D20746F2070726573657276652074686520636F6D6D656E74732E205468657920616C736F2063726561746564205B505220313231335D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F31323133292073696E636520416D696E6F2073686F756C642063726561746520612050726F746F6275662073747275637475726520776865726520746865206669656C647320666F6C6C6F77206F6666696369616C206E616D696E6720636F6E76656E74696F6E732E205468616E6B7320746F2068656C702066726F6D2074686520476E6F20646576732C2074686573652050527320617265206D65726765642E0A426572747920697320616C736F20666F6375736564206F6E206275696C64696E67206120646563656E7472616C697A656420736F6369616C206D65646961206170706C69636174696F6E207573696E672074686520476E6F6D6F62696C65206672616D65776F726B2C20776869636820697320616C6D6F737420636F6D706C6574652E205468652061696D20697320746F20637265617465206120746573746265642077686572652064417070206275696C646572732063616E2073656520686F7720746865697220696D706C656D656E746174696F6E7320696E7465677261746520616E642066756E6374696F6E207769746820776562322D6C696B6520736F6369616C206D656469612066656174757265732C206F70656E696E672074686520646F6F7220746F20696E746572657374696E67206578706572696D656E747320737563682061732044414F20636F6C6C61626F726174696F6E20616E6420636F6E74656E74206D6F64696669636174696F6E2E204265727479206973206275696C64696E67206120646563656E7472616C697A656420547769747465722D6C696B65206170706C69636174696F6E20616E6420706C616E7320746F2066696E69736820697420696E20736978206D6F6E7468732E20436865636B2074686569722070726F6772657373206F6E207468656972205B6861636B6572737061636520686572655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F6973737565732F32382920616E64206C6F6F6B20666F72206D6F7265207570636F6D696E672064656D6F732E0A0A2323232054657269746F72690A54657269746F726920686173206265656E20666F637573696E67206F6E20457363726F777320696E20746865207061737420636F75706C65206F66206D6F6E7468732C2061696D696E6720746F206D616B6520696D70726F76656D656E7473207468617420666163696C6974617465206F6E2D636861696E2070726F6A656374206D616E6167656D656E742E20546865207465616D20697320616C736F20697465726174696E6720746865204D6F6465726174696F6E2044414F20616E6420686173206964656E7469666965642061206E65656420666F72206120636F6E666C69637420736F6C766572206D6F64756C6520746F2063616C6C20616E2065787465726E616C20617574686F7269747920746F20736F6C7665206120636F6E666C696374206265747765656E2074776F20706172746965732028666F72206578616D706C652C2074686520627579657220616E64207468652073656C6C6572292E205468657920686176652063616C6C65642074686973206D6F64756C652074686520436F6E666C69637420536F6C766572204D6F64756C6520616E6420696E7465677261746564207365766572616C206F7074696F6E73206C696B65204A7573746963652044414F2028636F6D706F736564206F662068756D616E7329206F7220616E79207265616C6D732028652E672E20476E6F43686573732920746F20736F6C76652074686520636F6E666C6963742E205468657920617265207265736561726368696E6720776F726B206F6E2056524620746F20696D706C656D656E742072616E646F6D6E65737320736F207468617420746865206D6F64756C652073656C65637473206120706572736F6E20286F722067726F7570206F662070656F706C65292077697468206E6F20636F6E666C69637473206F6620696E74657265737420696E207468652069737375652E205B50522031315D2868747470733A2F2F6769746875622E636F6D2F54455249544F52492F676E6F2F70756C6C2F31312F66696C6573292070726F7669646573206D6F72652064657461696C732E204120747275652072616E646F6D6E6573732066756E6374696F6E2077696C6C20616C736F2062652068616E647920666F722074686520466C697070616E646F2067616D65207468617420646F65736EE28099742063757272656E746C792072656C79206F6E20747275652072616E646F6D6E6573732E20200A0A496E206F74686572206E6577732066726F6D2054657269746F72692C20746865206D6F6465726174696F6E2044414F206973206C6976652120596F752063616E206865616420746F20746865205B54657269746F726920736974655D2868747470733A2F2F6170702E74657269746F72692E636F6D2F666565643F6E6574776F726B3D676E6F2D74657269746F72692920746F20706C61792061726F756E64207769746820697420616E64206576656E20747279206465706C6F79696E6720796F7572206F776E2044414F2C206372656174696E67206120757365722070726F66696C652C20616E6420616464696E67206120736F6369616C20666565642E20546865207465616D20686173206465706C6F796564205631206F66206120E2809C536F756E64636C6F75642D6C696B65E2809D20617070206F6E20746865205B476E6F736F6369616C20666565645D2868747470733A2F2F6170702E74657269746F72692E636F6D2F666565643F6E6574776F726B3D676E6F2D74657269746F72692920696E20776869636820796F752063616E206C697374656E20746F206D75736963207768696C652062726F7773696E672066656174757265732C207075626C69736820796F7572206F776E206D7573696320617320616E2061727469737420746861742061707065617273206F6E20796F75722070726F66696C652C20636F6D6D656E74206F6E20747261636B732C2074697020617274697374732C20616E64206D6F72652E204B656570207570646174656420776974682054657269746F7269206F6E207468656972205B6861636B6572737061636520686572655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F6973737565732F37292E0A0A232323205A61636B205363686F6C6C0A4F7572207265736964656E742074696E6B65726572205A61636B2067617665206120776F726B73686F70206C617374206D6F6E74682061732070617274206F662068697320E2809C476F20746F20476E6FE2809D207365726965732063616C6C6564205B476F20746F20476E6F3A204279746542656174202D2047656E65726174696E6720417564696F207769746820536D61727420436F6E7472616374735D2868747470733A2F2F7777772E796F75747562652E636F6D2F77617463683F763D6C6D6D5549454868647141292E20546869732069732061207265616C6C7920696E746572657374696E67207475746F7269616C206F6E20686F7720746F206275696C64204279746562656174202861206D696E696D616C2070726F6772616D6D696E67206C616E677561676520666F722073796E74686573697A6564206D7573696329207769746820736D61727420636F6E74726163747320616E6420666F6C6C6F7773206F6E2066726F6D20686973206D6963726F626C6F6767696E6720776F726B73686F702E204265207375726520746F20636865636B206974206F75742E20496620796F752077616E7420746F2068656172206D6F72652061626F7574205A61636B2C20796F752063616E20616C736F207761746368205B47657474696E6720746F20476E6F2077697468205A61636B205363686F6C6C5D2868747470733A2F2F7777772E796F75747562652E636F6D2F77617463683F763D4C6758613751436478644126743D3132353873292C206120466972657369646520436861742073657269657320746861742074616C6B732061626F757420636F6E7472696275746F7273E2809920776F726B2C206C697665732C20616E64206D6F7469766174696F6E7320746F206265206F6E2074686520476E6F2E6C616E64206A6F75726E657920776974682075732E0A0A232323204F6E626C6F630A417320616C776179732C20746865204F6E626C6F63207465616D20686173206265656E206275737921204F76657220746865207061737420666577207765656B732C20746865792068617665206265656E20776F726B696E67206F6E20657874656E64696E67207468652066756E6374696F6E616C697479206F6620476E6F737761702C20696E746567726174696E67204150497320616E64207265616C6D7320776974682074686520696E746572666163652C20696D70726F76696E672074686520676F7665726E616E636520706167652055492C20616E6420696E746567726174696E6720746865204164656E612077616C6C65742E204F6E626C6F63206578706563747320746F206C61756E6368207468652062657461206F6620476E6F73776170206E657874206D6F6E74682C20616E64207765E280997265207375706572206578636974656420746F2073656520697420696E20616374696F6E2E20546F20696D70726F76652074686520555820616E64205549206F66204164656E6120616E64206D616B65207468652077616C6C6574206576656E206D6F7265207365637572652C20746865207465616D20697320696D706C656D656E74696E67206120666561747572652063616C6C6564204169722D47617020776869636820616C6C6F7773207468652077616C6C657420746F2062726F616463617374207472616E73616374696F6E73207369676E65642066726F6D20616E206F66666C696E6520656E7669726F6E6D656E7420776974686F7574207468652075736572206E656564696E6720746F20696D706F7274207468656972206B65797320746F204164656E612E204F6E626C6F632068617320616C736F207374617274656420612064697363757373696F6E2061726F756E6420696465617320746F20696D70726F7665207468652075736162696C697479206F6620515220436F64657320666F72207365637572652064617461207472616E736D697373696F6E73206265747765656E206F66666C696E65207369676E65727320616E642077617463682D6F6E6C792077616C6C65747320696E205B497373756520313337355D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F31333735292E205765E280996C6C206B65657020796F752075706461746564206F6E2074686520776F726B20686572652E20596F752063616E20616C736F2066696E64206D6F726520696E666F726D6174696F6E206F6E204F6E626C6F63E2809973205B696E666F726D617469766520626C6F675D2868747470733A2F2F6D656469756D2E636F6D2F6F6E626C6F63292E20200A0A41732077656C6C20617320646576656C6F70696E6720636F726520746F6F6C696E6720666F7220476E6F2C204F6E626C6F6320697320776F726B696E67206F6E20476E6F20636F726520746F2068656C70207573206275696C6420696D706F7274616E742066756E6374696F6E616C6974792E20546865207465616D2077656C636F6D65642061206E657720686972652C204C6565204279656F6E674A756E206173206120636F726520656E67696E65657220616E6420746F2068656C70207769746820776F726B206F6E20746872656520636F72652061726561733A20636F6E747261637420696E746572616374696F6E2028656E61626C696E67207265616C6D7320746F20696E7465726163742077697468206F74686572207265616C6D73292C20746865206D756C74696E6F646520746573746E65742C20616E6420706F7274696E6720657373656E7469616C20476F207061636B6167657320746F20476E6F2E20596F752063616E2066696E64206D6F72652064657461696C7320616E64206B65657020747261636B206F662065766572797468696E67204F6E626C6F6320697320776F726B696E67206F6E20696E207468656972205B6861636B6572737061636520697373756520686572655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F6973737565732F3239292E0A0A232323205661726D6574610A5765E280997265206578636974656420746F2077656C636F6D652061206E657720636F6E7472696275746F72205661726D65746120746F20476E6F2E6C616E642E205661726D6574612077617320666F756E64656420696E203230323020746F20666F637573206F6E20626C6F636B636861696E20616E64207669727475616C207265616C6974792F6175676D656E746564207265616C69747920746563686E6F6C6F6769657320616E64206861732067726F776E2066726F6D2061207465616D206F6620746872656520746F206F76657220343020656E67696E656572732E205661726D65746120697320657863697465642062792074686520766973696F6E20626568696E6420476E6F2E6C616E6420616E6420697473207068696C6F736F70687920666F7220726577617264696E6720646576656C6F706572732E20546865207465616D20697320636F6D6D697474656420746F20737570706F7274696E6720476E6FE280997320737563636573732062792070726F766964696E6720766172696F7573206170706C69636174696F6E7320666F72207468652065636F73797374656D2C207374617274696E6720776974682074686520476E6F2E6C616E6420556E6974792053444B20746F206D616B6520626C6F636B636861696E206D6F72652061636365737369626C6520746F2067616D6520646576656C6F706572732E20547261636B205661726D657461E28099732070726F6772657373206F6E207468656972205B6861636B6572737061636520686572655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F6973737565732F3433292E0A0A23232320476E6F204020446576636F6E6E65637420497374616E62756C20323032330A476E6F2E6C616E6420636F7265207465616D206D656D62657273206F7267616E697A6564206120736D616C6C2C20756E6F6666696369616C206D656574757020696E20497374616E62756C20647572696E6720446576636F6E6E656374207765656B2066726F6D204E6F76656D6265722031332D31372E2054686520656E67696E656572696E672D666F6375736564206D656574757020776173206163636F6D70616E696564206279206120486170707920486F757220616E6420736E61636B732C20776865726520617474656E6465657320676F7420746865206368616E636520746F206C6561726E2061626F757420476E6F2E6C616E6420696E20616E20696E666F726D616C2077617920616E6420686F7720746865792063616E20656173696C7920646576656C6F7020644170707320696E20476E6F2C2061732077656C6C20617320636F6E7472696275746520746F207468652070726F6A6563742E0A0A54686174277320616C6C20666F72206E6F7721204265207375726520746F20636865636B206261636B20616761696E207769746820757320666F7220746865206E6578742065646974696F6E206F6620546865204D6F726520596F7520476E6F20746F206B656570207570207769746820616C6C206F75722070726F67726573732E20446F20796F752077616E7420746F20636F6E7472696275746520746F20476E6F2E6C616E642773206D6F6E74686C7920757064617465733F20496620796F75277265206275696C64696E67206F6E20476E6F2E6C616E6420616E642077616E7420746F20686967686C6967687420796F757220646576656C6F706D656E742C2070726F6A6563742C206576656E742C206F7220696465612C206C6574207573206B6E6F772C20616E64207765276C6C20696E636C75646520796F757220636F6E747269627574696F6E2E3214323032332D31312D32395430303A30303A30305A3209636872697374696E613223676E6F6C616E642C65636F73797374656D2C757064617465732C676E6F766D2C746D320ABF520A0A2F766D2E6D5F63616C6C12B0520A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374320862676C2D706F6331323B4275696C64696E6720476E6F2E6C616E6420E28093204E6578742047656E65726174696F6E20536D61727420436F6E74726163742053797374656D32CF500A0A2A446973636C61696D65723A20546865204275696C64696E6720476E6F2E6C616E64207365726965732061696D7320746F2073686172652074686520636F726520636F6E6365707473206F66206F757220706C6174666F726D2C206D697373696F6E2C20616E64207465636820737461636B2C2070726F766964696E67206120736E617073686F74206F6620612063757272656E74207374617465206F6E206F7572206275696C646572E2809973206A6F75726E65792E204E657720657069736F646573206D6179206465707265636174652070726576696F7573206F6E65732C20627574206E6F2065646974696F6E732077696C6C206265206D6F64696669656420617420616E792074696D652E20576520656E636F757261676520796F7520746F20666F6C6C6F7720616C6F6E672061732077652063726561746520746865207261696C7320666F722061206D6F7265207472616E73706172656E7420616E64206163636F756E7461626C6520736F63696574792C20616E642077652077656C636F6D6520666565646261636B20616E6420636F6E747269627574696F6E7320746F20746865207265706F2E2A0A0A232320492E20576861742049732050726F6F66206F6620436F6E747269627574696F6E2028506F43293F0A0A476E6F2E6C616E6420697320736563757265642062792061206E6F76656C20636F6E73656E737573206D656368616E69736D2074686174206D616B6573206F757220706C6174666F726D20756E69717565E2809450726F6F66206F6620436F6E747269627574696F6E2028506F43292E20506F43207072696F726974697A657320666169726E65737320616E64206D657269742C20726577617264696E67207468652070656F706C65206D6F737420616374697665206F6E2074686520706C6174666F726D20616E64207265766F6C7574696F6E697A696E672074686520636F6E63657074206F66206F70656E2D736F7572636520726577617264732E2042792072656D6F76696E672074686520766F74696E6720706F776572206173736F6369617465642077697468206265696E67207765616C7468792028686F6C64696E6720746F6B656E7320696E2050726F6F662D6F662D5374616B652028506F5329206E6574776F726B73206F7220616D617373696E67206D696E696E6720686172647761726520696E2050726F6F662D6F662D576F726B2028506F5729206E6574776F726B73292C20506F4320726573747275637475726573207468652066696E616E6369616C20696E63656E746976657320746861742074656E6420746F20636F727275707420626C6F636B636861696E2070726F6A6563747320696E20746865206C6F6E672072756E20616E64207265776172647320636F6E7472696275746F727320666169726C7920666F7220746865697220776F726B206261736564206F6E207468656972206578706572746973652C20636F6D6D69746D656E742C20616E642076616C7565732E200A0A476E6F2E6C616E6420636F6E7472696275746F72732072656365697665207265776172647320616E6420766F74696E6720706F776572206163636F7264696E6720746F20746865697220636F6E747269627574696F6E206C6576656C2E205468657365207265776172647320696E6372656173652061732074686579206D616B65206164646974696F6E616C20636F6E747269627574696F6E732C206761696E206578706572746973652C20616E64206172652070726F6D6F7465642075702074686520476E6F2E6C616E6420676F7665726E696E672044414FE28099732028476F7644414F292074696572206C6576656C73206279206869676865722D6C6576656C20636F6E7472696275746F72732E20536F20686F7720646F657320506F4320776F726B2C2077686174206172652069747320636F72652066656174757265732C20616E6420686F7720646F6573206974206C656E6420736563757269747920616E6420646563656E7472616C697A6174696F6E20746F2074686520706C6174666F726D3F200A0A232323205072696F726974697A696E6720466169726E65737320616E6420416C69676E6D656E74200A0A50726F6F66206F66205374616B652028506F5329207761732061206D6F6E756D656E74616C206C65617020666F727761726420666F722074686520626C6F636B636861696E20696E6475737472792C20736F6C76696E672074686520656E657267792D696E74656E7369766520726571756972656D656E7473206F662050726F6F66206F6620576F726B2028506F572920616E6420656E61626C696E6720626C6F636B636861696E7320746F207363616C6520666F722062726F616465722061646F7074696F6E20287468616E6B7320746F20697473206D696E696D616C20636172626F6E20666F6F747072696E7420616E6420666173746572207468726F756768707574292E20486F77657665722C206C696B6520506F572C20506F532068617320736F6D6520646973616476616E74616765732E20466F72206578616D706C652C20696E20506F53206E6574776F726B732C207061727469636970616E747320726563656976652072657761726473206261736564206F6E20686F77206D616E7920746F6B656E732074686579207374616B652C207768696368206D65616E7320746865697220696E63656E746976657320666F7220776F726B696E67206F6E2074686520636861696E20617265206F6674656E20707572656C792066696E616E6369616C2E2056616C696461746F727320616363756D756C6174652076617374206E657420776F7274687320616E6420646F6EE280997420616C7761797320686F6C642076616C756573207468617420616C69676E20776974682074686520636F726520646576656C6F706D656E74206F662074686520636861696E2E200A0A53696E63652076616C696461746F727320617265206372756369616C20696E207365637572696E6720506F53206E6574776F726B732C20746865792073686F756C64206265207061696420666169726C7920666F7220746865697220776F726B20616E6420656E636F75726167656420746F20636F6E74726962757465206D6F72652E20486F77657665722C2076616C696461746F72732073686F756C64206E6F7420626520707572656C792066696E616E6369616C6C792028616E64206365727461696E6C79206E6F7420706F6C69746963616C6C7929206D6F746976617465642C2074616B696E6720757020636F6D706574696E6720706F736974696F6E7320616E64206C61756E6368696E6720706F6C69746963616C2063616D706169676E7320746F20636F6E76696E636520746F6B656E20686F6C6465727320746F207374616B652077697468207468656D2E20546869732074797065206F66206C6F626279696E67206166666563747320616C6C2061737065637473206F662074686520636861696EE280997320646576656C6F706D656E74E2809466726F6D20676F7665726E616E636520746F20746563686E6963616C207570677261646573E28094616E642063616E206C65616420746F2066616374696F6E616C69736D20616E64206D6973616C69676E6D656E742E200A0A506F43206D616B6573207468652073797374656D2066616972657220616E64206D6F7265207375737461696E61626C652C20656E737572696E67207061727469636970616E74732061726520616C69676E656420616E642074616B6520616374696F6E7320746861742062656E656669742074686520476E6F2E6C616E6420636F6D6D756E69747920616E64207468652062726F616465722065636F73797374656D2E2054686174E2809973207768792028756E6C696B6520506F532920636F6E7472696275746F727320726563656976652072657761726473206261736564206F6E20746865697220636F6E747269627574696F6E206566666F7274202874696572206C6576656C2920726174686572207468616E20686F77206D616E7920746F6B656E732074686579207374616B652E205468657920617265207468757320696E63656E746976697A656420616E64207265636F676E697A656420666F7220746865207175616C697479206F6620746865697220776F726B2C2069646561732C20616E6420616C69676E6D656E742C2064726976696E672070617274696369706174696F6E20616E642061637469766520656E676167656D656E742E20476F7665726E616E636520697320616C6C6F636174656420746F207468652070656F706C65206D6F7374206C696B656C7920746F206361726520666F72207468652065636F73797374656DE2809973206C6F6E672D7465726D2073756363657373E2809474686520636F6E7472696275746F72732077686F2068617665207370656E7420746865206D6F73742074696D6520776F726B696E6720746F77617264206974E2809466726F6D206F70656E2D736F7572636520646576656C6F7065727320746F20766964656F2063726561746F727320616E642065766572796F6E6520696E206265747765656E2E0A0A2323232052657468696E6B696E672046696E616E6369616C20496E63656E7469766573200A0A466F72206C6F6E672D7465726D20736563757269747920616E64207375737461696E6162696C6974792C20506F4320656D70686173697A65732070726F6A656374207072696E6369706C657320616E642076616C756573206F766572206D6F6E6574617279206761696E732C207265706C6163696E67207374616E6461726420746F6B656E20696E63656E7469766573207769746820612073797374656D20746861742073657061726174657320766F74696E6720706F7765722066726F6D20746F6B656E206F776E6572736869702E2054776F207265776172642073797374656D73206172652063757272656E746C79206265696E6720636F6E736964657265642028696E206164646974696F6E20746F2061206879627269642073797374656D292E20466F72207468652066697273742C20636F6E7472696275746F7273207265636569766520574F525820756E69747320746861742077656967682074686520616D6F756E74206F6620474E4F5420746F6B656E732028746865206E617469766520476E6F2E6C616E642067617320746F6B656E29206561726E65642065616368206D6F6E74682E2045616368206D656D626572206F66207468652073616D652074696572207265636569766573207468652073616D6520616D6F756E74206F6620574F52582E2041742074686520656E64206F6620746865206D6F6E74682C2074686520746F74616C2065616368206D656D626572206561726E656420697320646976696465642062792074686520746F74616C20616D6F756E74206F6620574F52582064697374726962757465642074686174206D6F6E746820746F2063616C63756C61746520612070657263656E746167652E20546869732070657263656E7461676520726570726573656E7473207468652070657263656E74616765206F6620476E6F2E6C616E642066656573206561726D61726B656420666F7220636F6E7472696275746F727320746861742065616368206D656D6265722077696C6C206561726E20696E20474E4F542E20574F52582077696C6C206C696B656C7920626520636C65617265642065616368206D6F6E746820746F2070726576656E742063756D756C61746976652C206578706F6E656E7469616C20726577617264206578706C6F697473206F766572206C6F6E6720706572696F6473206F662074696D652E200A0A466F7220746865207365636F6E642C20656163682074696572206C6576656C2073696D706C7920726563656976657320616E20616D6F756E74206F6620474E4F542065616368206D6F6E746820666978656420746F2061205553442076616C75652C2073696D696C617220746F20612073616C6172792E205468697320776F756C6420626520636F6D62696E65642077697468207269736B206D616E6167656D656E7420616E642063617073207065722074696572206C6576656C20696E206F7264657220746F2070726F6D6F7465206C6F6E672D7465726D207375737461696E6162696C697479206261736564206F6E20476E6F2E6C616E64206665652067656E65726174696F6E2E204120687962726964206F6620746869732073797374656D20697320616C736F20706F737369626C652C2065697468657220726577617264696E6720636F6E7472696275746F7273206F66206C6F776572207469657273206F6E652077617920616E642068696768657220746965727320746865206F74686572206F72207573696E6720626F74682073797374656D7320696E2074616E64656D206261736564206F6E20707265646566696E656420636F6E646974696F6E732E20546869732077696C6C206265206578706C6F726564206675727468657220696E2066757475726520746F6B656E6F6D6963732061727469636C65732C206D6F64656C732C20616E6420646F63756D656E746174696F6E2E0A0A5265676172646C6573732C20574F525820756E69747320617265206E6F74207472616E7366657261626C652C2077696C6C206E6F74206265206C6973746564206F6E2065786368616E6765732C20616E6420686F6C64206E6F206D6F6E65746172792076616C75652E20574F525820756E69747320617265206D6F7265206C696B6520736861726573207468617420726570726573656E742076616C75652070726F766964656420627920636F6E7472696275746F727320616E6420616C6C6F7720746865697220776F726B20746F206265207175616E74696669656420636F6D706172656420746F206F7468657220636F6E7472696275746F72732F74696572206C6576656C732E204974E280997320696D706F7274616E7420746F20737472657373207468617420474E4F5420746F6B656E7320646F206E6F7420696E666C75656E636520676F7665726E616E6365206F6E2074686520706C6174666F726D20696E20616E79207761792E20566F74696E6720706F776572206973206561726E6564207468726F75676820636F6E747269627574696F6E7320616E64206469737472696275746564206163636F7264696E6720746F20636F6E747269627574696F6E206566666F72742C20776974682065616368206D656D626572206F66207468652073616D65207469657220726570726573656E74696E6720657175616C20766F74696E6720706F776572207468617420696E6372656173657320776974682074686569722074696572206C6576656C2E205468697320637265617465732061206E6574776F726B206F6620686967686C7920616C69676E656420636F6E7472696275746F72732077686F206361726520646565706C792061626F75742074686520706C6174666F726D207468657920617265206275696C64696E6720616E642073747269766520746F20696D70726F76652069742E0A0A474E4F542C20746865206E617469766520476E6F2E6C616E642067617320746F6B656E20616E64207468652067617320746F6B656E206F662074686520476E6F2E6C616E642065636F73797374656D2C2077696C6C206265206469737472696275746564207669612061697264726F7020746F207175616C696679696E672041544F4D207374616B6572732E2049742077696C6C20616C736F20626520617661696C61626C6520666F72207075726368617365206166746572207468617420706F696E7420282A6D6F7265206F6E20476E6F2E6C616E64E28099732061697264726F7020616E6420746F6B656E6F6D69637320636F6D696E6720736F6F6E2A292E20474E4F54206973207573656420746F2070617920616C6C2066656573206173736F636961746564207769746820746865206E6574776F726B20616E64206265796F6E642C20696E636C7564696E67207472616E73666572732C204942432C204943532C20616E6420636F6E747261637420696E746572616374696F6E732C20676976696E6720686F6C6465727320746865206368616E636520746F206561726E20726577617264732066726F6D207468652065636F6E6F6D69632061637469766974696573206F6620476E6F2E6C616E642E0A0A2323232057686174204D616B6573206120476F6F6420436F6E747269627574696F6E3F0A0A574F525820616E642F6F7220474E4F542063616E206265206561726E6564207468726F75676820646966666572656E74207479706573206F6620636F6E747269627574696F6E73E280946E6F74206F6E6C7920636F64696E6720616E6420646576656C6F706D656E7420657870657274697365E2809462757420616C736F207468726F756768206E6F6E2D746563686E6963616C20636F6E747269627574696F6E732C207375636820617320636F6D6D756E697479206275696C64696E672C20676F7665726E616E636520696E766F6C76656D656E742C20636F6E737469747574696F6E616C2070726F706F73616C732C207465616D776F726B2C206D65646961206372656174696F6E2C206574632E2054686520636F726520666F637573206973206F6E20616C69676E6D656E742C206E6F74206E65636573736172696C79207370656369666963207461736B732E20466F72206578616D706C652C20616E2061636365707465642070726F706F73616C206F72206D657267656420636F64652077696C6C207261697365206F72206174206C65617374206D61696E7461696E2074686520636F6E7472696275746F72E28099732074696572206C6576656C2C20616C6C6F77696E67207468656D20746F2072656365697665207265776172647320647572696E672074686569722074696D6520776F726B696E67206265747765656E207375626D697373696F6E732E20486F77657665722C20612070726F706F73616C206F7220636F646520746861742068617320646973706C61796564206120766572792068696768206C6576656C206F66206566666F72742C2064657461696C2C20616E6420616C69676E65642076616C7565732028627574206973206E6F74206D6572676564292077696C6C20616C736F20626520636F6E7369646572656420696E20616E792070726F706F73616C7320726567617264696E6720636F6E7472696275746F722070726F6D6F74696F6E2E0A0A546869732073797374656D20616C6C6F7773207468652065636F73797374656D20746F2073686F7720617070726563696174696F6E20666F72206469766572736520666F726D73206F6620636F6E747269627574696F6E7320616E6420E2809875736566756C206661696C75726573E280992074686174206272696E6720757320636C6F73657220746F2074686520736F6C7574696F6E732077652061646F70742E2049742069732064657369676E656420746F20666F7374657220656E676167656D656E742C20637265617469766974792C20616E6420636F6C6C61626F726174696F6E207768696C6520656E636F75726167696E6720616E796F6E6520616C69676E656420746F20636F6E7472696275746520746F2067726F77696E672074686520476E6F2E6C616E6420636861696E20616E6420636F6D6D756E6974792E20200A0A23232320486F772041726520436F6E747269627574696F6E732041737365737365643F0A0A54686572652069732061207374726F6E672068756D616E20656C656D656E7420746F206465636964696E672077686174206D616B6573206120676F6F6420636F6E747269627574696F6E2C20726571756972696E67206B6E6F776C6564676561626C652068756D616E206A756467657320746F2065786572636973652064697363726574696F6E2E20417320737563682C20636F6E747269627574696F6E7320776F6EE28099742062652074656D706C617465642062792064656661756C74206F72207265776172646564206175746F6D61746963616C6C7920627574206173736573736564207468726F75676820476E6F2E6C616E64E280997320676F7665726E696E672044414F2C20476F7644414F2E20476F7644414F20697320726573706F6E7369626C6520666F7220646576656C6F706D656E7420616E6420676F7665726E616E636520616E64206973206F7267616E697A656420696E746F2074696572732C206173206469736375737365642061626F76652E0A0A476F7644414F206D656D62657273207265766965772C206D6561737572652C20616E642063757261746520636F6E747269627574696F6E732C20616E642074686520746F6B656E6F6D696373206F6620476F7644414F20696E63656E746976697A6573206D656D6265727320746F2062652065666665637469766520616E6420756E626961736564206576616C7561746F72732E205468657920656E6761676520696E2064697363757373696F6E7320616E642061737365737320636F6E747269627574696F6E73206261736564206F6E206566666F72742C2074696D652C20616E64206F746865722072656C6576616E7420666163746F72732F6D657472696373207468617420636F6E7472696275746F72732077696C6C20686176652073746F72656420696E2074686569722070726F66696C65732E20546865206465636973696F6E2D6D616B696E6720726174696F6E616C65206973207472616E73706172656E7420616E642076697369626C65207468726F756768206F6E2D636861696E20666F72756D732E20416761696E2C20636F6E7472696275746F7273206172652061737369676E656420612074696572206C6576656C20616E642072656365697665206120636F72726573706F6E64696E67207265776172642065616368206D6F6E7468206163636F7264696E6720746F20746865697220746965722E20417320636F6E7472696275746F7273206A6F696E20476F7644414F2C207468652044414F2067726F77732C20676976696E6720476E6F2E6C616E6420646563656E7472616C697A6174696F6E20656666696369656E637920616E6420612068696768205361746F7368692073636F72652E200A0A476F7644414F2069732061737369737465642062792061206E6574776F726B206F66206B6E6F776C656467652D73706563696669632044414F732C207375636820617320616E20456E67696E656572696E672044414F2C206120537570706F72742044414F2C20616E204F7065726174696F6E732044414F2C20616E6420746865204576616C756174696F6E44414F2C20776869636820636F6D707269736573206120747275737465642067726F7570206F6620686967682D72657075746174696F6E20636F6E7472696275746F727320746861742068656C702061737365737320737065636966696320636F6E747269627574696F6E732E205468697320656E61626C65732073656375726520636F6C6C61626F726174696F6E20616E64207365616D6C65737320696E746567726174696F6E20282A6D6F7265206F6E20476E6F2E6C616E64E2809973206E6574776F726B206F6620696E746572636F6E6E65637465642044414F7320636F6D696E6720736F6F6E2A2E29200A0A23232320537962696C2D526573697374616E7420616E64205365637572650A0A496E206164646974696F6E20746F206265696E67206661697265722C206D6F726520616C69676E65642C20616E64207375737461696E61626C652C20506F4320697320537962696C2D726573697374616E742062792064657369676E2E20496E20626C6F636B636861696E732C206120537962696C2061747461636B206973207768657265206F6E65206F72206D756C7469706C652061747461636B657273206D756C7469706C792074686569722070726573656E636520616E6420696E666C75656E6365206279206372656174696E672066616B65206964656E74697469657320746F2073776179206D616A6F72206E6574776F726B206465636973696F6E732028666F72206578616D706C652C20696E636C7564696E67206D616C6963696F757320626C6F636B73292E20496E207465726D73206F6620506F532C2074686520537962696C20726573697374616E636520697320707572656C79206D6F6E6574617279202870656F706C65206E65656420746F207374616B65207265616C206D6F6E657920746F2067657420706F776572292C20736F20616E2061747461636B657220746861742077616E747320746F206361727279206F7574206120537962696C2061747461636B206F6E206120506F53206E6574776F726B206E6565647320746F206C6F636B206174206C65617374206173206D756368207374616B652061732074686174206C6F636B656420627920686F6E6573742076616C696461746F72732E0A0A506F43206D696E696D697A6573207269736B73206F6620537962696C2061747461636B732C2074616B656F766572732C20616E6420616C6C69616E6365732061732074686520636F6D6D756E697479207665747320657665727920706572736F6E2077686F20697320676976656E20616E7920706F776572206F72207377617920696E20746865206E6574776F726B2028696E636C7564696E672076616C696461746F7220706F77657229207468726F756768207468652044414F2C20736F206174206E6F20706F696E742063616E20616E796F6E65202273706F6F6622206964656E74697469657320616E642072656761696E206D616A6F7220737761792E204D6F72656F7665722C20476E6F2E6C616E64206973206275696C7420616E64207365637572656420627920746865206D6572697420616E64206566666F72742070757420696E746F207468652070726F6A6563742C206173206F70706F73656420746F20686F77206D616E7920746F6B656E7320736F6D656F6E652063616E206275792C2072657468696E6B696E672066696E616E6369616C20696E63656E746976657320616E64206D616B696E672074686520706C6174666F726D20537962696C2D726573697374616E7420616E64207365637572652E0A0A5468726F7567682066616972657220726577617264732C2072657374727563747572656420696E63656E74697665732C20726573697374616E636520746F20636F7272757074696F6E20616E6420537962696C2061747461636B732C20616E642061207374726F6E6720617070726563696174696F6E20666F7220616C6C20636F6E747269627574696F6E732C20476E6F2E6C616E642069732064657369676E656420746F206265207375737461696E61626C6520616E6420666169722E20412063656E736F72736869702D726573697374616E7420706C6174666F726D206275696C742C206F776E65642C20616E64207365637572656420627920612067726F77696E672C20616C69676E656420636F6D6D756E69747920666F72206D616E792067656E65726174696F6E7320746F20636F6D652E0A0A2A492E20576861742049732050726F6F66206F6620436F6E747269627574696F6E3F2069732074686520666972737420696E206120736572696573206F662061727469636C657320746F206469766520646565706C7920696E746F20746865207068696C6F736F7068792C20766973696F6E2C206D656368616E6963732C20616E6420776F726B20696E766F6C76656420696E20646576656C6F70696E672061206E657720636F6E73656E737573206D656368616E69736D20666F7220746865206E6578742067656E65726174696F6E206F6620736D61727420636F6E74726163742073797374656D732E204C6F6F6B206F757420666F722073756273657175656E742065646974696F6E7320616E64206164646974696F6E616C204275696C64696E6720476E6F2E6C616E64207365726965732C20616E64206C6574207573206B6E6F77207768617420796F75207468696E6B2120476F74207175657374696F6E733F204A6F696E2074686520476E6F2E6C616E64205B446973636F72645D2868747470733A2F2F646973636F72642E636F6D2F696E766974652F53386E4B5571776B506E29206F7220666F6C6C6F77207573206F6E205B547769747465722F585D2868747470733A2F2F782E636F6D2F5F676E6F6C616E64292A2E0A3214323032342D30312D31305431303A35313A30305A3200322E6275696C64696E672D676E6F6C616E642C676E6F6C616E642C70726F6F662D6F662D636F6E747269627574696F6E0A9E7A0A0A2F766D2E6D5F63616C6C128F7A0A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374320D6D6F6E74686C792D6465762D37322E546865204D6F726520596F7520476E6F3A20476E6F2E6C616E64204D6F6E74686C792055706461746573202D203732B8780A0A57656C636F6D6520746F20746865206C61746573742065646974696F6E206F66202A546865204D6F726520596F7520476E6F2A2C20796F757220726567756C617220736F75726365206F6620757064617465732066726F6D2074686520476E6F2E6C616E6420636F7265207465616D20616E6420636F6E7472696275746F722065636F73797374656D2E20416674657220612077656C6C2D6465736572766564207265737420647572696E672074686520686F6C6964617920627265616B2C207765E280997265206B69636B696E67206F6666203230323420776974682072656E6577656420656E6572677920616E6420706C656E7479206F66206578636974696E6720696E6974696174697665732C20696E636C7564696E672061206E65772073746167696E6720746573746E6574202874686520506F7274616C204C6F6F70292C20746865206F6666696369616C20476E6F2E6C616E6420646F63756D656E746174696F6E20706167652C207365766572616C206D6572676564205052732028696E636C7564696E67206E61746976652062696E64696E677321292C20616E64206D616E792075706461746573206163726F73732074686520626F6172642E204469766520696E20746F2066696E64206F75742077686174207765E28099726520776F726B696E67206F6E20616E642077686174206F75722065636F73797374656D20706172746E65727320616E64206772616E746565732068617665206265656E20757020746F2E0A0A232320476E6F20436F7265205465616D205570646174657320544C3B44520A0A53686F7274206F6E2074696D653F20536B696D2074686520686967686C69676874732066726F6D2074686520636F7265207465616D20696E20746865206C6973742062656C6F772E20596F75E280996C6C2066696E64206164646974696F6E616C2064657461696C7320696E20746865206E6578742073656374696F6E20696620796F752077616E7420746F206578706C6F726520616E7920746F70696320696E20677265617465722064657461696C2E0A2D202A2A4E61746976652042696E64696E67732A2A202D20496620796F75E280997665206265656E20666F6C6C6F77696E67206F7572206A6F75726E6579206F72206578706572696D656E74696E6720776974682074686520706C6174666F726D2C20796F75E280996C6C2068656172207669727475616C206368616D7061676E6520706F7073206173204D6F7267616EE2809973206F6E676F696E6720776F726B2077697468206E61746976652062696E64696E67732069732066696E616C6C79206D6572676564205B5052203835395D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F383539292E0A2D202A2A476E6F6465762A2A202D205468616E6B7320746F204775696C68656DE28099732060676E6F6465766020696E6974696174697665205B505220313338365D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F31333836292C20796F752063616E206E6F772063726561746520616E6420646576656C6F7020636F6E747261637473207769746820612073696E676C6520636F6D6D616E642E0A2D202A2A476E6F2E6C616E64204F66666963616C20446F63732A2A202D20436865636B206F7574205B646F63732E676E6F2E6C616E645D2868747470733A2F2F646F63732E676E6F2E6C616E642920666F7220686F772D746F206775696465732C2067657474696E6720737461727465642C20616E6420616E206F76657276696577206F66206B657920636F6E6365707473206F662074686520706C6174666F726D2E0A2D202A2A45666665637469766520476E6F2A2A202D2054616B696E6720696E737069726174696F6E2066726F6D202A45666665637469766520476F2A2C204D616E66726564E280997320626567756E206C697374696E6720636F6D6D6F6E207061747465726E7320616E64206578616D706C6573206F662074686520646966666572656E636573206265747765656E20476E6F20616E6420476F2E0A2D202A2A41737369676E6D656E7420696E20476E6F564D2A2A202D204A616520697320776F726B696E67206F6E20617070726F616368657320746F20666978696E672061737369676E6D656E7420696E2074686520476E6F564D20616E64206973737565732074686174206465616C20776974682070657273697374656E6365205B2869737375652031333236295D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F31333236292E200A2D202A2A506F7274616C204C6F6F702A2A202D20546865205B506F7274616C204C6F6F705D2868747470733A2F2F706F7274616C2E676E6F7465616D2E636F6D2920686173206265656E2072656C6561736564206F6E20612073746167696E6720646F6D61696E20616E64206973206265696E67207465737465642E0A2D202A2A526F61646D61702A2A202D205765E28099726520776F726B696E67206F6E20612066756C6C792D666C656467656420476E6F2E6C616E6420726F61646D617020616E642077696C6C20736861726520612064657461696C65642044414720616E6420696D706F7274616E7420676F616C7320616E64206D696C6573746F6E6573207769746820796F7520736F6F6E2E0A2D202A2A54656E6465726D696E7432205570646174652A2A202D20546865726520617265207365766572616C205052732061696D65642061742072656D6F76696E672074686520646570656E64656E63696573206265747765656E2054656E6465726D696E743220616E6420476E6F564D2E0A2D202A2A476E6F2E6C616E6420546F6B656E6F6D6963732A2A202D20576520636F6E74696E756520746F206D616B652070726F677265737320696E20646566696E696E672074686520737472756374757265206F6620476E6F2E6C616E64E28099732044414F7320616E64207468652064657369676E206F662072657761726420736368656D657320666F7220636F6E7472696275746F72732E0A232323204E61746976652042696E64696E6773202850523835392920486173204265656E204D65726765640A5B5052203835395D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3835392920286E61746976652062696E64696E67732920776173207375626D6974746564206279204D6F7267616E20696E204D6179203230323320746F20696D70726F76652063616C6C696E6720476F20636F64652066726F6D20476E6F207374616E64617264206C69627261726965732C20616C6C207768696C6520696D70726F76696E672060676E6F20646F636020646F63756D656E746174696F6E20666F72207374616E64617264206C6962726172792066756E6374696F6E732E204E61746976652066756E6374696F6E7320617265205F6465636C617265645F20696E20476E6F20636F64652C2062757420746865697220646566696E6974696F6E202874686520756E6465726C79696E6720636F646529206F6E6C792065786973747320696E20476F3A20746869732069732073696D696C617220746F20686F7720476F20616E64206D616E79206F746865722073797374656D73206C616E67756167657320696D706C656D656E7420617373656D626C792066756E6374696F6E732E204F766572616C6C2C20746865206164646974696F6E2077696C6C206E6F7720616C6C6F7720757320746F2062657474657220737570706F727420707265636F6D70696C6174696F6E20287472616E7370696C696E6720476E6F20636F646520746F20476F2920666F7220616C6C20476E6F2D7370656369666963207374616E64617264206C69627261726965732C206C696B65205B60737464605D2868747470733A2F2F646F63732E676E6F2E6C616E642F7265666572656E63652F7374616E646172642D6C6962726172792F7374642F616464726573732F292C20616E64206861766520612073797374656D20666F7220646566696E696E6720737563682066756E6374696F6E732074686174206973207472616E73706172656E7420746F20636F646520616E616C7973697320746F6F6C73206C696B652060676E6F20646F636020616E642060676E6F6C73602E0A23232320476E6F64657620486173204265656E204D65726765640A5B505220313338365D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3133383629202860676E6F646576602920686173206265656E206D65726765642E20476E6F646576206973206120746F6F6C20746F206C6F63616C6C7920646576656C6F7020476E6F207265616C6D73207768696368206175746F6D61746963616C6C792072652D6465706C6F797320796F757220636F6E747261637473207768656E20796F75206368616E6765207468652066696C65732C2073696D696C617220746F204A617661536372697074206672616D65776F726B7320606E706D2072756E20646576602E2054686572652061726520736F6D65206164646974696F6E616C206665617475726573206265696E6720776F726B6564206F6E20746F20696D70726F76652074686520657870657269656E63652C20696E636C7564696E672062726F7773657220686F742D72656C6F61642028666F72207468652066756C6C2066726F6E742D656E64204A61766153637269707420657870657269656E63652129E28094616E6420476E6F20636F726520646576656C6F706572732077686F206861766520776F726B6564206F6E207265616C6D7320616C6C2061677265652074686174207468616E6B7320746F2060676E6F646576602C20746865792063616E2066696E616C6C792073746F70207669736974696E6720746865697220746865726170697374206576657279207765656B2E20506C61792061726F756E6420776974682069742C20616E64206C6574207573206B6E6F7720686F7720796F7520676574206F6E2E205468657265206D61792062652061206665772062756773207374696C6C20616E64204775696C68656D2069732068617070696C7920616363657074696E6720666565646261636B2E0A232323202054686520476E6F2E6C616E64204F6666696369616C20446F63756D656E746174696F6E2050616765204973204C6976650A5765E280997265206578636974656420746F20686176652074686520476E6F2E6C616E64204F6666696369616C20446F63756D656E746174696F6E2070616765206C697665206F6E20746865205B68747470733A2F2F646F63732E676E6F2E6C616E645D2868747470733A2F2F646F63732E676E6F2E6C616E642920646F6D61696E2E20546869732077696C6C20616C77617973206265206120776F726B20696E2070726F677265737320617320776520657870616E642074686520646F63732C206D616B6520697465726174696F6E7320746F206578697374696E67206973737565732C20616E6420726566696E6520736F6D65206F662074686520636F726520636F6E63657074732C20627574206974E280997320616E20657863656C6C656E74207265736F7572636520666F7220616E796F6E652077616E74696E6720746F2066696E64206F7574206D6F72652061626F757420476E6F20616E6420666F72206F6E626F617264696E67206E657720646576656C6F7065727320746F2074686520706C6174666F726D2E204120626967207468616E6B7320746F20746865204F6E626C6F63207465616D2C2077686F736520646576656C6F70657220706F7274616C207761732061206875676520696E737069726174696F6E20666F7220746869732E205765E280997265206C6F6F6B696E6720666F7220666565646261636B2C20736F206C6561766520796F7572207265766965777320616E64206C6574207573206B6E6F772077686572652074686520646F63732063616E20626520696D70726F76656420616E64207768617420656C736520796F7520776F756C64206C696B6520746F207365652E0A2323232045666665637469766520476E6F0A4D616E6672656420686173206265656E20776F726B696E67206F6E206120646F63756D656E742063616C6C6564205B45666665637469766520476E6F202850522031303030295D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F31303030292C2077686963682074616B657320696E737069726174696F6E2066726F6D202A5B45666665637469766520476F5D2868747470733A2F2F676F2E6465762F646F632F6566666563746976655F676F292A20616E642077696C6C206265636F6D6520616E20696D706F7274616E74207265666572656E636520646F63756D656E7420666F7220476E6F206465767320746F206578706C6F726520636F6D6D6F6E207061747465726E7320616E64206372756369616C20646966666572656E63657320696E20686F772077652070726F6772616D20636F6D706172656420746F20476F2E205765E280996C6C20626520697465726174696E67206F6E20746869732061732077652070726F67726573732C2062757420796F752063616E20616C72656164792066696E6420706C656E7479206F66206578616D706C65732E20496620796F75E280997265206A7573742067657474696E6720696E746F20476E6F20616E6420636F6D696E672066726F6D206120476F206261636B67726F756E642C20746869732069732061206772656174207265736F757263652E2052656164207468697320646F63756D656E7420616E642070726F7669646520736F6D6520636F6D6D656E747320696620796F75206861766520616E792E200A2323232054686520506F7274616C204C6F6F702042657461204973204C6976650A54686520506F7274616C204C6F6F70204265746120686173206265656E2072656C6561736564206F6E20612073746167696E6720646F6D61696E2C20616E6420796F752063616E20636865636B206974206F7574206E6F77206174205B68747470733A2F2F706F7274616C2E676E6F7465616D2E636F6D5D2868747470733A2F2F706F7274616C2E676E6F7465616D2E636F6D292E2054686520506F7274616C204C6F6F702077696C6C207265706C6163652074686520476E6F2E6C616E642077656273697465206F6E6365207765E2809976652066696E697368656420737175617368696E67206275677320616E6420616464696E672066656174757265732E205765E280997265207374696C6C2074657374696E6720697420616E642068617665206964656E746966696564207365766572616C206973737565732E20466F72206578616D706C652C2066726F6D20746865206C617374207468726565206D6572676564205052732C206F6E6C79206F6E652074726967676572656420612072656465706C6F79207768656E2077652065787065637465642074776F206F72207468726565206465706C6F79732E2057652077696C6C20616C736F206164642061206661756365742E0A0A417320776520636F6E74696E756520746F2065766F6C76652074686520506F7274616C204C6F6F70206F7574206F6620697473206561726C7920646576656C6F706D656E74207374616765732C207472616E73616374696F6E20766F6C756D6520616E642067656E6572616C2061637469766974792077696C6C20696E6372656173652E20486F77657665722C2063757272656E746C792C2074686572652061726520696E73756666696369656E74207472616E7369742074657374696E67207472616E73616374696F6E732E204F6E65206F6620746865207461736B732077652077616E7420746F20646F20746F2070726F766520746861742074686520506F7274616C204C6F6F7020697320776F726B696E672077656C6C20656E6F75676820697320746F2077726974652061206B696E64206F66206D6F6E69746F72696E672D6F7269656E746564206F7261636C6520746861742077696C6C2074727920746F206D616B65207472616E73616374696F6E732C207065726861707320696E6372656D656E74696E67206120636F756E746572206576657279206D696E7574652E205765E280997265206C6F6F6B696E6720666F722068656C702077726974696E67206120736372697074206F722061206461656D6F6E20666F722074686973206F7261636C652C20736F206C6574207573206B6E6F7720696620796F752077616E7420746F20636F6E7472696275746520746F205B697373756520313434335D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F31343433292E204F6E63652074686520506F7274616C204C6F6F702069732066696E69736865642C2077652077696C6C20666F637573206F6E20746573746E657420342E0A232323202041737369676E6D656E742049737375657320696E2074686520476E6F564D0A4D6F7267616E2063616D65206163726F7373206120627567205B697373756520313332365D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F31333236292C2077686963682072657475726E656420616E206572726F722061626F757420616E205BE2809C756E657870656374656420756E7265616C206F626A656374E2809D5D2868747470733A2F2F74656E6F722E636F6D2F65732F766965772F6372616E697A6F782D6769662D3835373636323232313133333030373839383629207768656E2061737369676E696E672061206C6F63616C207661726961626C6520746F20612064657265666572656E63656420676C6F62616C207661726961626C6520696E2074686520476E6F564D2E204A616520686173206265656E207370656E64696E6720736F6D652074696D6520776F726B696E67206F6E20617070726F616368657320746F20736F6C76696E67207468697320616E6420666978696E672061737369676E6D656E7420746861742077696C6C20616C736F20776F726B20666F7220736176696E672065736361706564206F626A65637473207468617420646F6E27742068617665206120706172656E7420286C696B65207661726961626C65732077686F736520706F696E7465727320617265207265666572656E636564206F6E206120706572736973746564206F626A656374292E2054686973206973206120746F756768206F6E6520746F20666967757265206F75742C20736F2069662074686572652061726520616E79206F7468657220564D206973737565732074686174206465616C20776974682070657273697374656E636520616E6420646574616368656420706172656E746C657373206F626A656374732C206E6F77206973207468652074696D6520746F20616464207468656D20746F204A6165E280997320706C6174652E20200A23232320416E20557064617465206F6E2054656E6465726D696E74320A5B505220313438335D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F313438332920686173207468652073616D6520676F616C206173205B505220313433385D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F31343338293A20746F206D616B652054656E6465726D696E743220636F6D706C6574656C7920696E646570656E64656E74206F6620476E6F564D20616E6420476E6F2E6C616E642E205468697320636F6E74696E75657320612070726F6A6563742073746172746564206D616E79206D6F6E7468732061676F20746F20736570617261746520476E6F20696E746F20746872656520736570617261746520636F6D706F6E656E74733A207468652054656E6465726D696E743220636F6E73656E73757320656E67696E652C2074686520476E6F2070726F6772616D6D696E67206C616E677561676520616E6420564D2C20616E6420476E6F2E6C616E642C2074686520626C6F636B636861696E20636F6D62696E696E6720626F746820746F6765746865722E2054686973207761792C207765E28099726520776F726B696E6720746F7761726473206D616B696E6720697420706F737369626C6520746F206275696C64206F7468657220626C6F636B636861696E732074686174207573652054656E6465726D696E743220286C696B652041746F6D4F6E6521292C2074686520476E6F564D2C206F7220626F7468210A23232320476E6F2E6C616E6420456E67696E656572696E6720526574726561740A496E20746865206C617374202A546865204D6F726520596F7520476E6F2A2C20776520636F76657265642074686520476E6F2E6C616E6420616E642041494220636F6D70616E792D7769646520726574726561742C20616E20696E76616C7561626C65206F70706F7274756E69747920746F20776F726B20746F6765746865722C20636F646520746F6765746865722C20616E642067657420746F206B6E6F77206F7572207065657273206F757473696465206F6620776F726B2E2049742077617320737563682061207375636365737320746861742074686520476E6F20636F726520646576207465616D2068656C6420616E6F74686572207265747265617420696E20446563656D62657220696E20526F75656E2C204672616E63652C207768657265206D616E79206F66207468652061626F76652069737375657320616E64205052732077657265207461636B6C656420616E64206D65726765642E205765206C6F6F6B20666F727761726420746F206D6F72652070726F6475637469766520616E64206672657175656E7420666163652D746F2D66616365206D656574696E677320696E2074686520796561722061686561642E0A23232320476E6F2E6C616E642044414F7320616E6420546F6B656E6F6D6963730A576974682074686520696E707574206F66204D616E667265642C204A61652C20616E64207468652072657374206F6620746865207465616D2C204D69636861656C20636F6E74696E75657320746F206D616B6520616476616E63656D656E7473206F6E20476E6F2E6C616E64E28099732073797374656D206F662044414F7320616E6420746F6B656E6F6D6963732E204F6E65206B6579206368616E67652073696E636520746865206C6173742065646974696F6E20697320746861742074686520576F727844414F2028726573706F6E7369626C6520666F7220676F7665726E616E636520616E6420616C6C206973737565732072656C6174656420746F20646576656C6F706D656E7420696E20476E6F2E6C616E64292077696C6C206E6F77206265206B6E6F776E2061732074686520476F7644414F2E205468652044414F2077696C6C206C696B656C79206861766520736576656E2074696572732062757420696E697469616C6C79206C61756E63682077697468207468726565206F7220666F75722E20546865206D61696E2062656E6566697473206F66206D6F76696E672075702074696572732061726520696E6372656173656420766F74696E6720706F7765722C20696E63726561736564206D6F6E74686C7920726577617264732C20616E642074686520617574686F7269747920746F2070726F6D6F7465206D656D626572732066726F6D206C6F7765722074696572732E20476F7644414F2077696C6C20626520617373697374656420627920576F727844414F2C2077686963682077696C6C20656E636F6D70617373207365766572616C20646966666572656E74207375622D44414F732C207375636820617320656E67696E656572696E672C2066756E64696E672C20616E642070726F6A656374732E200A0A5765E2809972652063757272656E746C79206578706C6F72696E6720646966666572656E74207265776172642073797374656D7320666F7220636F6E7472696275746F72732C20776865726562792065616368206D656D626572206F66207468652073616D652074696572206C6576656C2077696C6C2072656365697665207468652073616D6520616D6F756E74206F6620726577617264732C20656974686572206469726563746C79206F7220696E6469726563746C792C20696E2074686520474E4F54206E61746976652067617320746F6B656E206F72205553442C20696E20612074797065206F662073616C6172792D626173656420736368656D652E205765206D617920616C736F20656C65637420746F20646973747269627574652072657761726473206261736564206F6E206120636F6E747269627574696F6E2F776F726B20E2809C6861736820646966666963756C7479E2809D2028746F74616C206E756D62657220616E6420746965722073706C6974206F662061637469766520636F6E7472696275746F72732074686174206D6F6E7468292E205765206D617920616C736F2061646F7074206120687962726964206F662074686573652074776F206D6F64656C732E200A0A4D69636861656C20697320616C736F20776F726B696E67206F6E206120626F756E74792073797374656D20746F206D616B652047616D65206F66205265616C6D732028476F5229206D6F72652061636365737369626C6520616E64206576616C756174696E6720636F6E747269627574696F6E732065617369657220666F72206A75646765732E20486967682072616E6B696E6720476F5220636F6D70657469746F72732077696C6C206C696B656C79207265636569766520476E6F2E6C616E642074696572206C6576656C73206261736564206F6E207468656972206C6561646572626F61726420706C6163696E6720696E206164646974696F6E20746F2041544F4D20726577617264732E204974E280997320696D706F7274616E7420746F206E6F746520746861742074686573652064697363757373696F6E7320617265206F6E676F696E672C20616E642074686520696E666F726D6174696F6E2068657265206D617920626520646570726563617465642E200A232323204D616B696E672054657374696E67204661737465720A0A5468616E6B7320746F2050657461722C205B505220313431375D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F31343137292C207765206861766520696D70726F7665642074686520656E7469726520564D2074657374696E672073756974652072756E74696D652062792061726F756E6420666F7572206D696E757465732C20776869636820697320616E20696E6372656469626C6520616368696576656D656E742E205765206A757374206E65656420746F207265666163746F7220736F6D652074657374207363656E6172696F73207468617420617265206E6F74207665727920636F6E63757272656E742D667269656E646C792C206275742074686973205052206D616B657320696E746572616374696E6720776974682074686520706C6174666F726D20736F206D756368206561736965722E0A0A2323232042756720466978657320616E64204D697363656C6C616E656F7573204974656D730A0A5468616E6B7320746F204A6F6F6E2066726F6D204F6E626C6F632C20776520776572652061626C6520746F2061646420737570706F727420666F72206F6374616C7320776974686F757420276F272028636865636B206F7574205B505220313333315D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F313333312920666F72206D6F72652064657461696C73292C20616E64207468616E6B7320746F20447261676F73205B505220313330395D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F31333039292C20776520657874656E646564207468652047524337323120696E7465726661636520736F2074686174206974206E6F7720737570706F7274732073657474696E67206120746F6B656E205552492E2054686573652061726520626F74682065787472656D656C792077656C636F6D656420636F6E747269627574696F6E732C20616E642077652061707072656369617465206F75722065636F73797374656D20706172746E6572732E0A0A46726F6D2074686520636F7265207465616D2C2061207370656369616C2073686F7574206F757420746F2044796C616E20666F72206B696C6C696E6720697420666978696E6720627567732C20616E642067657474696E67206D616E792050527320285B505220313435315D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F31343531292C205B505220313331355D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F31333135292C20616E64205B505220313330355D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F31333035292C20746F206E616D6520612066657729206D6572676564206F76657220746865206C61737420666577207765656B732E2050726F707320616C736F20676F20746F204D61726320666F72205B505220313137375D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F31313737292C20776869636820686173206A757374206265656E206D65726765642C20776869636820666978657320617070656E6420696E206365727461696E206B657920736974756174696F6E732E205765E28099766520616C736F2077656C636F6D65642061206E657720736563757269747920656E67696E6565722C204B726973746F762C20746F20746865207465616D2E0A0A2323204772616E74656520616E642045636F73797374656D20557064617465730A0A232323204F6E626C6F630A0A4F6E626C6F6320686173206265656E206F6E206120726F6C6C2C20676976696E6720757320616E20696E7465726E616C2064656D6F206F6620476E6F737761702062657461206A757374206265666F726520746865204368726973746D617320627265616B20616E642061207075626C69632064656D6F206F662069747320617765736F6D6520506F6F6C20496E63656E746976697A6174696F6E206665617475726520647572696E6720746865206C61737420636F6E7472696275746F722073796E632063616C6C2E205769746820506F6F6C20496E63656E746976697A6174696F6E2C20616E796F6E652063616E206164642065787472612072657761726473206F6E20746F70206F662073776170206665657320666F72204C50207374616B6572732E20546869732077696C6C2068656C7020626F6F74737472617020696E697469616C206C697175696469747920666F72206E65772D636F6D696E672070726F6A656374732062792061747472616374696E67206C69717569646974792070726F76696465727320756E74696C2073756666696369656E74206F7267616E69632074726164696E6720766F6C756D6520697320736563757265642E204F6E626C6F6320697320616C736F206163746976656C7920646576656C6F70696E67204164656E61E280997320416972676170206665617475726520616E642068617320696D70726F76656420746865207369676E2D696E20666C6F7720666F7220736563757269747920656E68616E63656D656E7420616C6F6E67207769746820736F6D65207265666163746F72696E672E2054686572652077696C6C20626520612064656D6F20636F6D696E6720757020696E20746865206E65787420666577207765656B732E204F6E626C6F632077696C6C20616C736F206265207265736561726368696E672061697264726F70207472656E647320616E642061696D696E6720746F206964656E7469667920736F6D65206F6620746865206D6F737420636F7665746564204445582066656174757265732075736572732077616E7420746F2073656520666F7220476E6F7377617020746F2073747265616D6C696E6520746865206F6E626F617264696E672070726F636573732E0A0A526567617264696E6720476E6F20636F72652C204F6E626C6F6320636F726520646576204279656F6E676A6F6F6E204C65652068617320646576656C6F7065642061204A534F4E2070617273657220666F7220476E6F2C20676976696E672075732061206C6976652064656D6F20647572696E6720746865206C61737420636F6E7472696275746F722073796E632E205468697320616C6C6F77732074686520636F6E76657273696F6E206F7220616363657373696E67206F6620646174612066726F6D20636F6E74726163747320696E20746865204A534F4E20666F726D61742C2077686963682077696C6C20696D70726F76652074686520476E6F20646576656C6F70657220657870657269656E63652E2048697320636F64652069732063757272656E746C7920756E646572207265766965772062792074686520636F7265207465616D20696E205B505220313431355D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F31343135292E20446976652064656570657220696E746F204F6E626C6F63E2809973204275696C646572204A6F75726E657920696E20746865205B6861636B657273706163652069737375652032395D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F6973737565732F3239292E0A0A2323232054657269746F72690A0A54657269746F726920636F6E74696E75657320746865206368616C6C656E67696E6720776F726B206F6620646576656C6F70696E6720476E6F2050726F6A656374204D616E616765722C20612077656220617070207468617420616C6C6F777320616E796F6E6520746F206372656174652C2066756E642C207265766965772C206F72206D616E6167652070726F6A656374732066756C6C79206F6E2D636861696E2E20447572696E6720746865206C61737420636F6E7472696275746F7273272063616C6C2C20746865207465616D206761766520612064656D6F206F662074686520776F726B20616368696576656420736F206661722C20696E20706172746963756C617220726567617264696E672074686520657363726F772073797374656D20616E6420636F6D706C6574696E672070726F6A656374206D696C6573746F6E657320736F20636F6E7472696275746F72732063616E2062652070616964206F6E63652065616368206F6E6520697320636F6D706C6574656420726174686572207468616E20686176696E6720746F207761697420756E74696C207468652070726F6A6563742066696E616C697A6174696F6E2E200A0A476E6F2050726F6A656374204D616E61676572206973206120636F6D706C657820676F616C2C20616E6420746865207465616D206861732072756E20696E746F20736F6D6520697373756573207769746820656467652063617365732074686579206861646EE2809974206261726761696E656420666F7220696E207468652072656C6174696F6E7368697073206265747765656E206772616E7465657320616E642066756E646572732E20546865207465616D206973206C6F6F6B696E6720666F7220666565646261636B20616E642068656C70206964656E74696679696E6720656467652063617365732C20736F20696620796F75206861766520616E7920696E206D696E642C206C6574207468656D206B6E6F772E2054657269746F726920697320616C736F20776F726B696E67206F6E2074686520636F6E666C69637420736F6C766572206D6F64756C6520616E6420696D70726F76696E672074686520736F6369616C2066656564206F6E205B68747470733A2F2F6170702E74657269746F72692E636F6D2F666565643F6E6574776F726B3D676E6F2D74657269746F72695D2868747470733A2F2F6170702E74657269746F72692E636F6D2F666565643F6E6574776F726B3D676E6F2D74657269746F7269292C2061732077656C6C2061732070726F766964696E67206D6F72652064657461696C656420646F63756D656E746174696F6E206F6E20746865697220776F726B2C2077686963682074686579E280996C6C2062652072656C656173696E6720696E2074686520636F6D696E67207765656B732E0A0A2323232042657274790A0A546865204265727479207465616D20686173206265656E206275737920776F726B696E67206F6E20476E6F536F6369616C206261636B656E6420696D706C656D656E746174696F6E2E2054686520696E697469616C20666561747572652073657420686173206265656E20696D706C656D656E746564205B686572655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F736F6369616C2F626C6F622F6D61696E2F7265616C6D2F7075626C69632E676E6F292C20696E636C7564696E6720706F7374696E6720616E64207265706C79696E6720746F206D6573736167657320616E64207265706F7374696E6720746872656164732E20596F752063616E206B6565702075702077697468204265727479E2809973206A6F75726E6579206F6E20476E6F536F6369616C20696E205B6861636B657273706163652069737375652035315D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F6973737565732F3531292C20776869636820636F6E7461696E73206D616E792069737375657320616E64205052732C207375636820617320696D706C656D656E74696E672063616C6C732C2072756E6E696E672074657374732C20616E6420666978696E6720627567732E205765E28099726520737570657220657863697465642061626F75742070757368696E6720746865206C696D697473206F66207363616C6162696C6974792077697468204265727479E280997320646563656E7472616C697A656420736F6369616C20706C6174666F726D2C20616E64207765E280996C6C206265206C6F6F6B696E6720666F727761726420746F206D6F72652064656D6F7320696E2074686520636F6D696E67207765656B732E0A23232320447261676F730A447261676F7320686173207375636365737366756C6C79206C61756E636865642074686520466C697070616E646F2067616D652C20616E6420796F752063616E20747279206974206F7574206F6E20746865205B746573746E657420686572655D2868747470733A2F2F676E6F2E666C697070616E646F2E78797A2F666C6970292E20496620796F7520686176656EE2809974206265656E20666F6C6C6F77696E67207468652070726F67726573732C20466C697070616E646F20697320616E206F6E2D636861696E206D656D6F72792067616D65207468617420796F752063616E20706C6179207769746820796F75722063686F696365206F66207374796C65732C207375636820617320646963652C20636F6C6F72732C20616E6420686578616772616D732E204F6E636520796F75207375636365737366756C6C7920636F6D706C6574652061206D61747269782C20796F752063616E206D696E742074686520656E6420726573756C7420617320616E204E46542C2077686963682063616E206C6174657220626520617373656D626C656420696E746F206C61726765722C206D6F726520636F6D706C6578204E46547320746F20637265617465206469676974616C20617274776F726B2E20596F752063616E2066696E64206F7574206D6F72652061626F7574207468652067616D652C206974732063726561746F722C20616E6420746865206F6666696369616C20726F61646D6170206F6E2074686520736974652E205765E280996C6C20616C736F2072656C65617365206120626C6F6720706F737420736F6F6E2066726F6D20447261676F732073686172696E672068697320657870657269656E636520706F7274696E6720466C697070616E646F2066726F6D20536F6C696469747920746F20476E6F2C20736F20737461792074756E6564210A232323205661726D65746120200A5661726D657461E280997320757064617465207761732062726965662074686973207765656B2073696E63652074686520636F6E7472696275746F722073796E632063616C6C2072616E206F7665722E205765206C6F6F6B20666F727761726420746F2068656172696E67206D6F72652061626F757420746865207465616DE28099732070726F677265737320696E20646576656C6F70696E672074686520556E6974792053444B20666F7220476E6F206E6578742074696D652E20596F752063616E2072656164206D6F72652061626F7574206974206F6E205661726D657461E2809973205B6861636B657273706163652069737375652034335D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F6973737565732F3433292E0A0A2A446F20796F752077616E7420746F20636F6E7472696275746520746F20476E6F2E6C616E642773206D6F6E74686C7920757064617465733F20496620796F75277265206275696C64696E67206F6E20476E6F2E6C616E6420616E642077616E7420746F20686967686C6967687420796F757220646576656C6F706D656E742C2070726F6A6563742C206576656E742C206F7220696465612C206C6574207573206B6E6F772C20616E64207765276C6C20696E636C75646520796F757220636F6E747269627574696F6E2E2054686174277320616C6C20666F72206E6F7721204B65657020747261636B206F66206F75722070726F677265737320627920666F6C6C6F77696E67206F757220736F6369616C73205B547769747465722F585D2868747470733A2F2F747769747465722E636F6D2F5F676E6F6C616E642920616E64205B446973636F72645D2868747470733A2F2F646973636F72642E636F6D2F696E766974652F74463258384D3663566A2920616E64207761746368206F757420666F7220746865206E6578742065646974696F6E206F6620546865204D6F726520596F7520476E6F20696E206120666577207765656B732E2A200A3214323032342D30312D32325430303A30303A30305A3209636872697374696E613223676E6F6C616E642C65636F73797374656D2C757064617465732C676E6F766D2C746D320AFF440A0A2F766D2E6D5F63616C6C12F0440A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F73743215706F7274696E672D666C697070616E646F2D676E6F324035205468696E67732049204C6561726E6564205768696C6520506F7274696E6720466C697070616E646F2046726F6D20536F6C696469747920746F20476E6F203282430A0A4C61737420796561722C207768696C65207669736974696E672053656F756C2C20536F757468204B6F7265612C204920646563696465642C206F6E2061207768696D2C20746F207369676E20757020666F722061206861636B6174686F6E2063616C6C656420476C697463682E205468652070726F6A65637420492077617320676F696E6720746F2070726573656E742077617320612074696E79206C6974746C652067616D652C207772697474656E20696E20536F6C69646974792C2063616C6C656420466C697070616E646F2E20497420737461727465642061732061207765656B656E642070726F6A65637420746F2068656C70206D65206C6561726E20536F6C696469747920284920686164206E6F207072696F7220657870657269656E636520776974682074686973206C616E6775616765292E20546F206D792073757270726973652C206D792074696E79206C6974746C652067616D6520776F6E20746865206669727374207072697A65206F6E2074686520506F6C79676F6E20747261636B206F662074686520476C69746368206861636B6174686F6E2E0A0A456E636F75726167656420616E64206576656E206D6F726520637572696F7573206E6F772C2049207374617274656420617474656E64696E672073696465206576656E747320647572696E6720427569646C2E417369612E204F6E65207761732061626F757420476E6F2C206120736D61727420636F6E747261637420706C6174666F726D207772697474656E20696E20476F2E204166746572207468652070726573656E746174696F6E2C20776869636820776173207265616C6C792067726561742C204920737461727465642061206C6967687420636F6E766572736174696F6E207769746820746865207465616D2E204F6E65207468696E67206C656420746F20616E6F746865722C20616E64204920656E6465642075702073686F77696E67207468656D20466C697070616E646F2E200A0A4A75737420666F7220636F6E746578742C20466C697070616E646F2069732061206E6F6E2D646567656E2C206465636570746976656C792073696D706C65206D656D6F72792067616D652E20596F75207374617274207769746820616E20656D707479206D617472697820616E6420666C69702074696C657320746F207365652077686174E280997320E2809C756E6465726E656174682EE2809D204966207468652074696C6573206D617463682C20746865792072656D61696E20756E636F76657265643B206966206E6F742C2074686579206172652062726965666C792073686F776E2C20616E6420796F75206861766520746F206D656D6F72697A6520746865697220636F6C6F7220756E74696C2074686520656E74697265206D617472697820697320756E636F76657265642E2054686520656E6420726573756C742063616E206265206D696E74656420617320616E204E46542C20616E6420796F752063616E206C6174657220617373656D626C6520616C6C2074686520626F6172647320696E746F206269676765722C206D6F726520636F6D706C6578204E4654732C206261736963616C6C7920E2809C7061696E74696E67E2809D20776974682074686520756E636F76657265642074696C65732E0A0A54686520476E6F207465616D207365656D656420746F206C696B652069742C20616E6420746865792073756767657374656420492073686F756C64206170706C7920666F722061206772616E7420746F20706F727420697420746F20476F2F476E6F2E204920686164206E6F207072696F7220657870657269656E636520696E20476F206569746865722C20736F20492074686F75676874207468697320776F756C64206265206120676F6F64206F70706F7274756E69747920746F206C6561726E206D6F72652E20546F206D792073757270726973652C20616761696E2C206D79206772616E74207375626D697373696F6E207761732061636365707465642E0A0A4661737420666F7277617264206120666577206D6F6E74687320756E74696C206E6F773A2074686520476E6F2076657273696F6E206F6620466C697070616E646F206973206C6976652028696E20746573746E6574206265746129206174205B68747470733A2F2F676E6F2E666C697070616E646F2E78797A5D2868747470733A2F2F676E6F2E666C697070616E646F2E78797A292E205768617420666F6C6C6F77732073756D73207570206D7920657870657269656E636520706F7274696E67207468652067616D652066726F6D20536F6C696469747920746F20476E6F2E205468697320626C6F6720706F73742069732061206D6978206F6620746563686E6963616C20616E64206E6F742D736F2D746563686E6963616C2074616B6561776179732E0A0A232320312E204265696E67204561726C792050617973204F66660A0A536F6C696469747920686173206265656E2061726F756E6420666F7220736F6D652074696D65206E6F772C20616E6420746865726520697320616C7265616479206120736F6C696420746F6F6C696E672065636F73797374656D20666F722069742E20492075736564204861726468617420666F72206D7920646576656C6F706D656E742C20616E64204920676F74207265616C6C7920636F6D666F727461626C6520776974682069742E205768656E2049207374617274656420746F20706F727420466C697070616E646F2C2074686F7567682C2049207761732071756974652073757270726973656420746F207365652074686572652077617320616C6D6F7374206E6F20746F6F6C696E6720696E20476E6F2E20446576656C6F70696E6720776173206D6F73746C79205444442028746573742D64726976656E20646576656C6F706D656E742920616761696E73742061206C6F63616C20564D2C20616E64206465706C6F79696E67207265616C6D73206F6E207468652061637475616C20636861696E20776173206D6F726520636F6D706C696361746564207468616E20492065787065637465642E200A0A4D7920666972737420666565646261636B20726F756E647320746F20746865207465616D207265766F6C76656420616C6D6F7374206578636C75736976656C792061726F756E64207468697320746F7069632E205665727920736F6F6E2C2049207374617274656420746F2072656365697665207369676E616C732074686174206D7920666565646261636B20776173206E6F74206F6E6C79206865617264206275742074616B656E20696E746F206163636F756E7420616E642070726F6365737365642C20616E6420746865726520776572652061637475616C2070726F6A65637473206275696C742061696D696E6720746F20696D70726F76652074686520646576656C6F70657220657870657269656E63652E20496E206A7573742074776F206F72207468726565206D6F6E7468732C2074776F2066756C6C2070726F6A6563747320776572652066696E69736865643A20676E6F6465762C20616E6420476E6F20506C617967726F756E642E200A0A476E6F646576206D616B657320646576656C6F706D656E7420766572792073696D696C617220746F204D6574726F20696E205265616374204E61746976653A2074686572652069732061207761746368646F67206F6E207468652066696C652073797374656D2C20616E6420796F7572206368616E67657320746F20746865207265616C6D20636F6465206172652072656C6F616465642065766572792074696D6520796F7520736176652E204974E280997320616C6D6F7374206C696B65206465706C6F79696E6720696E207265616C2074696D653B206E6F206E65656420746F2073746F702074686520636861696E2C2077697065207468652073746174652C20726573746172742074686520636861696E2C20616E642072656465706C6F7920796F7572206D6F64696669636174696F6E732E20476E6F20506C617967726F756E6420697320612073616E64626F782D6C696B6520656E7669726F6E6D656E742C2077686963682068656C7073207472656D656E646F75736C79207769746820717569636B2074657374696E6720616E64206576656E206465706C6F79696E67207061636B61676573206F6E2D636861696E2E20426F74682070726F6A6563747320776572652066696E69736865642C206173204920736169642C20696E206A7573742074776F20746F207468726565206D6F6E7468732E0A0A4265696E67206561726C792070617973206F6666206265636175736520796F752067657420746F20736861706520796F757220646576656C6F706D656E7420656E7669726F6E6D656E74206D75636820666173746572207468616E20696E206120736F6C69646966696564202870756E20696E74656E646564212920656E7669726F6E6D656E742E20596F75206D6179206861766520746F206465616C20776974682061206C6974746C65206368616F7320696E2074686520626567696E6E696E672C20627574207468652062656E6566697473206172652077656C6C20776F7274682069742E0A0A232320322E2054444420416C6C20446179204C6F6E670A0A4173204920736169642061626F76652C20646576656C6F70696E67207265616C6D7320696E20476E6F20636F6E7369737473206D61696E6C79206F662077726974696E6720616E642074657374696E6720796F757220636F6465207769746820616E6F7468657220636F64652E204974E28099732063616C6C65642054444420616E64206974E2809973206120766572792075736566756C20646576656C6F70696E672073747261746567792C20696E2067656E6572616C2E204920757365642069742C206174206D7920646179206A6F622C20696E20616C6C206D792070726F6A6563747320636F6E73697374656E746C792C20627574206F6E6C7920696E2074686520696E697469616C207374616765732E204F6E63652074686520636F64656261736520776173206D6F726520737461626C652C2049207761732072656C79696E67206D6F7265206F6E2072656772657373696F6E2074657374732066726F6D2074686520512641207465616D2E0A0A4D696E6420796F752C20746865726520776173206E6F20512641207465616D20746869732074696D653B204920776173206A75737420636F64696E6720616C6F6E652C20616E6420492077617320666F7263656420746F20636F6D706C79206D6F726520616E64206D6F7265207769746820746869732054444420617070726F6163682E20496E2074686520656E642C2049206861766520746F2061646D697420746861742C207768696C6520736C6F77657220616E6420612062697420626F72696E672C207468697320617070726F616368206973206D6F7265206566666563746976652C20657370656369616C6C7920696E206120766F6C6174696C6520656E7669726F6E6D656E742C207768657265207061746368657320617265206164646564206C69746572616C6C79206576657279206461792C20616E642074686520656E7669726F6E6D656E74206368616E67657320636F6E74696E756F75736C792E0A0A232320332E204D61727368616C20616E6420556E6D61727368616C0A0A5468652063757272656E7420476E6F564D20646F65736EE280997420796574206861766520616E20415049207374616E6461726420666F7220666F726D617474696E672E20596F752063616EE28099742070757420612073657474696E6720736F6D65776865726520746861742077696C6C206D616B652074686520726573706F6E7365206265206175746F6D61746963616C6C79207472616E736C6174656420696E746F204A534F4E2E20596F75206861766520746F207772697465207468657365204A534F4E206F626A6563747320796F757273656C6620666F72206576657279207061796C6F616420796F752072657475726E2066726F6D20796F7572207265616C6D2E200A0A496E20536F6C69646974792C20616C6C20746869732069732068696464656E20756E64657220746865206576656E74206D656368616E69736D20616E642068616E646C6564206279206578697374696E67206C69627261726965732C206C696B652065746865722E6A732C2077686963682074616B652063617265206F6620616C6C2074686973206E69747069636B696E672E20497420736F6F6E20626563616D65206F6276696F7573207468617420646576656C6F706D656E742074696D6520776F756C64206265207369676E69666963616E746C79206C6F6E67657220696E20476E6F20626563617573652C206F6E20746F70206F6620746865206C6F6769632C204920616C736F2068616420746F2077726974652074686520666F726D617474656420726573706F6E736520E2809C62792068616E642EE2809D0A0A4275742061732077697468206576657279206F74686572207468696E672074686174207365656D656420776569726420696E2074686520626567696E6E696E672C206576656E7475616C6C792C20492063616D6520746F20617070726563696174652069742E20497420666F72636564206D6520746F2070726F746F74797065206D6F7265206361726566756C6C79206E6F74206F6E6C79207468652061637475616C20726573706F6E73652062757420616C6C20746865206F626A65637473206E656564656420696E206D792067616D652E204576656E7475616C6C792C20697420726573756C74656420696E2073696D706C657220616E64206D6F726520666C657869626C6520636F64652E0A0A232320342E20456174696E6720596F7572204F776E20446F6720466F6F640A0A5768656E20646576656C6F70696E6720696E20536F6C69646974792C206D6F7374206F66207468652074696D652C20796F75206A75737420696D706F7274204F70656E5A657070656C696E20636F6E74726163747320666F7220455243323020616E642045524337323120746F6B656E73202877686963682061726520626174746C652D7465737465642C206275672D667265652C20616E642072656C61746976656C79206561737920746F20756E6465727374616E642920616E6420666F637573206F6E20796F7572206F776E20636F6E7472616374206C6F6769632E204E6F206D696E676C696E672077697468206C6F772D6C6576656C20746F6B656E20696D706C656D656E746174696F6E2064657461696C733B2074686573652061726520616C7265616479207061636B6167656420616E6420726561647920746F207573652E0A0A5768696C6520706F7274696E6720466C697070616E646F20746F20476E6F2C2049207265616C697A656420492068616420746F206465616C2077697468207468657365206C6F772D6C6576656C2064657461696C7320757066726F6E742073696D706C79206265636175736520746865726520776173206E6F206571756976616C656E74206F6620746865204F70656E5A657070656C696E6720636F6E7472616374732E204D6F72656F7665722C20736F6D652063757272656E742047524373202874686520476E6F206571756976616C656E74206F662045524329207765726520696E636F6D706C6574652E200A0A536F2C20492068616420746F206D616B65206120505220666F7220612047524337323120696D706C656D656E746174696F6E207468617420776173206D697373696E672074686520536574546F6B656E5552492066756E6374696F6E616C6974792C20616E64207468697320505220656E646564207570206265696E67206D657267656420696E746F20746865206D61696E20476E6F20636F6465626173652028746861742066656C74207265616C6C7920676F6F642C20746F20626520686F6E657374292E200A0A232320352E204265696E67204561726C792050617973204F66662E20446964204920536179205468617420416C72656164793F0A0A5965732C2062757420746869732074696D65206974E28099732061626F757420736F6D657468696E6720656C73652E204974E2809973206E6F742061626F75742074686520736174697366616374696F6E206F662073686170696E672074686520646576656C6F706D656E7420656E7669726F6E6D656E7420696E20746865206561726C7920646179732E204974E28099732061626F7574207468652070726976696C656765206F66207769746E657373696E6720736F6D657468696E6720636F6D696E6720746F206C6966652066726F6D206C69746572616C6C79206E6F7468696E672E20476E6F20686173206265656E20696E20646576656C6F706D656E7420666F7220616C6D6F73742074776F207965617273206E6F772C20616E64206974206973207365766572616C206D6F6E746873206265666F726520697473206D61696E6E65742E204974E2809973206C69746572616C6C79206F6E20746865207665726765206F6620636F6D696E6720E2809C616C6976652EE2809D0A0A457665727920646179206E657720636F6D6D697473206172652061646465642C20616E64206E6577206465636973696F6E7320617265206D6164652E20546865726520617265206E657720636F6E7472696275746F727320636F6E7374616E746C79206A6F696E696E672C20616E64206E65772070726F6A656374732070726F746F747970656420616E64206C61756E636865642066617374657220616E64206661737465722E20457665727920646179207468652065636F73797374656D20697320636F6167756C6174696E6720697473656C6620696E746F20736F6D657468696E67206D6F726520616E64206D6F72652076697369626C652C206D6F726520616E64206D6F726520616C6976652E0A0A4265696E672061626C6520746F207769746E65737320746869732066726F6D2074686520696E73696465206973206120726172652070726976696C65676520616E6420736F6D657468696E672049E280996D207665727920677261746566756C20666F722E0A0A23232046696E616C2054686F7567687473200A0A536F2C207468657365206172652C20696E2061206E75747368656C6C2C206D79206669766520746F702074616B6561776179732066726F6D20706F7274696E6720466C697070616E646F2066726F6D20536F6C696469747920746F20476E6F2E20546865726520617265206D616E79206F74686572732C206F6620636F757273652C20616E6420476E6F2069732028646964204920616C72656164792073617920746869733F29207374696C6C2076657279206561726C792E20496620796F75E28099726520696E746572657374656420696E206C6561726E696E67206D6F72652C20706C6561736520766973697420746865206F6666696369616C207265706F2C206C6F6F6B2061742074686520646F63732C20616E642074727920696E746572616374696E6720776974682074686520646576732E20596F75E280996C6C206E6576657220676E6F20776861742063616E2067726F77206F7574206F662069742120416E64206265207375726520746F20706C6179205B466C697070616E646F5D2868747470733A2F2F676E6F2E666C697070616E646F2E78797A2920746F646179206C69766520696E20746573746E6574206265746120616E6420736861726520796F757220666C6970732E0A0A23232048657265E280997320486F7720746F20506C617920466C697070616E646F0A0A5468652067616D652070726573656E747320612031362074696C6573202834783429206F722036342074696C6573202838783829206D61747269782E2054686573652074696C65732061726520E2809C636F766572696E67E2809D206120626F617264206F6620766172696F757320636F6C6F727320616E64206772616469656E7473206F72207368617065732C206C696B652064696365206F7220686578616772616D732E20436C69636B696E672074776F2074696C657320636F6E73656375746976656C7920E2809C666C697073E2809D207468656D2C2073686F77696E672077686174E280997320756E6465726E656174682E2049662074686579206D617463682C20746865792072656D61696E20756E636F76657265643B206966206E6F742C2074686579206172652062726965666C792073686F776E2C20616E642074686520706C61796572206E6565647320746F2072656D656D62657220746865697220706F736974696F6E2E204F6E636520616E20656E7469726520626F61726420697320666C69707065642C2072657665616C696E67206974732072616E646F6D20636F6D62696E6174696F6E206F6620636F6C6F72732C2074686520706C617965722063616E2063686F6F736520746F206D696E7420697420617320616E204E46542E0A0A5768656E206D696E74696E67206120736F6C76656420626F61726420617320616E204E46542C207468652067616D6520616C736F206D696E747320612066756E6769626C6520746F6B656E2C20464C49502C20776869636820697320E2809C6C6F636B6564E2809D20696E7369646520746865204E46542E20546869732069732074686520706C61796572277320E2809C7265776172642EE2809D204275742074686520746F6B656E2063616E206F6E6C7920626520756E6C6F636B656420696620736F6D656F6E6520656C736520757365732074686174204E465420696E2061206C61726765722070726F6A6563742E0A0A5468657365206C61726765722070726F6A656374732C206F7220E2809C617274776F726B732CE2809D2063616E20626520617373656D626C656420696E2074686520466C697070616E646F20506C617967726F756E642E20416C6C206D696E746564206261736963204E4654732061726520646973706C61796564206865726520696E20616E20617265612066726F6D2077686572652074686520706C617965722063616E206472616720616E642064726F70207468656D206F6E746F20612063616E7661732C206372656174696E672061206D7563682062696767657220616E64206D6F726520636F6D706C6578204E46542E204F6E6365207468652063616E7661732069732066756C6C792066696C6C656420616E642074686520706C617965722069732073617469736669656420776974682077686174E280997320696E2074686572652C207468657365206E657720E2809C617274776F726BE2809D204E4654732063616E20616C736F206265206D696E7465642E205468697320756E6C6F636B7320616C6C2074686520464C495020746F6B656E7320666F7220746865204E465473207573656420696E736964652074686520617274776F726B20616E642073656E6473207468656D20746F20746865697220696E697469616C20706C61796572732E20467572746865726D6F72652C20746865736520636F6D706C657820617274776F726B732063616E206265206C697374656420616E642074726164656420696E2061206D61726B6574706C6163652C20636C6F73696E672074686520636972636C65206F662061207669727475616C2065636F6E6F6D79206F6620676F6F64732E0A0A537461727420706C6179696E6720466C697070616E646F20616E6420736861726520796F757220466C697073207769746820476E6F2E6C616E64206F6E205B547769747465722F585D2868747470733A2F2F782E636F6D2F5F676E6F6C616E643F6C616E673D656E292062792074616767696E672023676E6F666C69702E200A0A0A3214323032342D30312D32345430303A30303A30305A3206647261676F733223676E6F6C616E642C65636F73797374656D2C757064617465732C666C697070616E646F0AA84A0A0A2F766D2E6D5F63616C6C12994A0A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F737432097779672D7A6F6F6D61323157686F20596F7520476E6F20E28093204F6E20746865205265636F7264207769746820416E746F696E652042726575696C32C0480A0A416E746F696E652042726575696C2C20E280987AC3B4C3966D612CE280992069732074686520636F2D666F756E646572206F66205B54657269746F72695D2868747470733A2F2F6170702E74657269746F72692E636F6D2F292C20616E2061637469766520476E6F2E6C616E6420636F6E7472696275746F7220616E64206772616E7465652074686174E2809973206275696C64696E67206B6579206D6F64756C657320616E6420746F6F6C696E6720666F7220476E6F2E2041206669726D2062656C696576657220696E20657175616C206F70706F7274756E69746965732C206672656520616E6420646563656E7472616C697A65642061636365737320746F20696E666F726D6174696F6E2C20616E642068656C70696E672066656C6C6F772068756D616E732C207AC3B4C3966D612069732066617363696E617465642062792068756D616E206265686176696F7220616E6420686F77207765206F7267616E697A65206F757273656C7665732C20686F6C64696E6720616E206176616E742D676172646520736F6369616C206578706572696D656E7420666976652079656172732061676F20776974682054657269746F726920636F2D666F756E64657220E28098506F702EE2809920224C61205375697465206475204D6F6E64652220647265772070656F706C65206163726F7373204672616E636520746F206120736D616C6C2076696C6C61676520696E2074686520636F756E7472797369646520746F2063726561746520612073686172656420636F6D6D756E69747920616E6420736F6369657479E2809477697468206661726D6C616E642C206163636F6D6D6F646174696F6E2C20616E6420746F6F6C7320666F7220636F6D6D6F6E207573652E0A0A54686520676F616C2077617320746F20666F726D20616E20696E2D7265616C2D6C6966652044414F2077686F7365206D656D626572732073686172656420636F6D6D6F6E20676F616C7320616E6420696E74657265737473207573696E6720626C6F636B636861696E20746563686E6F6C6F67792077697468206120746F6B656E20746F2070617920666F7220676F6F647320616E6420736572766963657320616E6420766F7465206F6E20676F7665726E616E6365206D6174746572732E205768696C65206D616E792070656F706C652070617274696369706174656420616E64207765726520656E746875736961737469632061626F7574206372656174696E6720612073686172656420736F63696574792C207AC3B4C3966D612061646D69747320746865206578706572696D656E7420776173206561726C792D206E6F206F6E652077617320696E746572657374656420696E20696E746572616374696E6720776974682074686520746563682E20E2809C393025206F662070656F706C652C20727572616C206F72206E6F742C20666F756E6420697420746F6F20636F6D706C6963617465642CE2809D2068652061646D6974732E20E2809C57652077657265206120626974206E616976652C20627574206974207761732066617363696E6174696E67206E6F6E657468656C6573732EE2809D0A0A232320412046617363696E6174696F6E20666F722048756D616E204265686176696F720A0A7AC3B4C3966D6120686173206265656E20616E20617264656E742073747564656E74206F662068756D616E206265686176696F722073696E6365206368696C64686F6F642E2048697320706172656E7473207461756768742068696D206561726C79206F6E207468652076616C7565206F66207068696C616E7468726F707920616E6420776F726B696E6720776974682070656F706C6520696E206E6565642E204865E280997320736574207570207365766572616C206A6F696E74206C696162696C69747920636F6D70616E6965732C206E6F6E2D70726F666974732C20616E64204E474F7320746F206578706572696D656E7420776974682066696E64696E67206E657720616E6420626574746572207761797320746F206F7267616E697A6520736F63696574792C20616E64206F6E65206F6620746865207468696E6773206865206C6F766573206D6F73742061626F757420776562332069732069747320E2809C6578706572696D656E74616CE2809D206E61747572652E204865E280997320656E636F75726167656420627920686F77206661722074686520696E6475737472792068617320636F6D652073696E63652068652072656365697665642068697320666972737420626974636F696E7320696E207061727469616C207061796D656E7420666F722061207765627369746520696E20323031342E20E2809C54686174207475726E6564206F757420746F2062652061207265616C6C7920657870656E73697665207765627369746520666F72206D7920637573746F6D65722CE2809D206865206C61756768732E204865206E6576657220657870656374656420737563682062726F61642061646F7074696F6E206F6620426974636F696E20616E64206120746563686E6F6C6F6779207468617420E2809C696E73706972656420612077686F6C652067656E65726174696F6E206F6620656E67696E6565727320746F206578706572696D656E742077697468206E6577207468696E67732EE2809D0A0A4C696B65206D6F73742063726561746976652074797065732C207AC3B4C3966D61206973207573656420746F207370696E6E696E67206D616E7920706C6174657320696E20746865206169722C206F766572736565696E67204C61205375697465206475204D6F6E6465207768696C6520776F726B696E67206173206120667265656C616E63652064657369676E65722C2066726F6E742D656E64206465762C20616E64204172746973746963204469726563746F7220666F7220616E20696E646570656E64656E74204672656E6368207265636F7264206C6162656C2E20E2809C4265666F726520656E746572696E672074686520776F726C64206F6620656E67696E656572732C204920666F756E64656420616E64206D616E61676564206120636F6C6C65637469766520666F722031322079656172732C2077686963682062726F7567687420746F67657468657220617274697374732066726F6D20616C6C206469736369706C696E65732C206861636B6572732C2064657369676E6572732C2074696E6B65726572732C20746F206275696C6420736F6D6520696E746572657374696E672070726F6A656374732EE2809D204C61205375697465206465204D6F6E646520616C6C6F7765642068696D20746F206578706C6F7265206869732070617373696F6E20666F722066696E64696E67206E657720617070726F616368657320746F20736F6369616C20636F6F7264696E6174696F6E2066697273742D68616E642E20E2809C49206578706C6F7265642076657279207261646963616C207468696E67732CE2809D20686520736179732C20E2809C6C696B6520746865206E6F74696F6E206F6620E2809C61636365707465642062792064656661756C74E2809D20776865726520616E796F6E6520636F756C64207573652074686520636F6C6C656374697665206275646765742062792065787072657373696E672074686569722064657369726520746F20646F20736F2074687265652074696D65732E204920776F756C646EE2809974207265636F6D6D656E6420746869732CE2809D206865206C61756768732C20E2809C62757420746865206578706572696D656E747320776572652066617363696E6174696E6720616E64207374696C6C207365727665206D6520746F64617920696E206D7920776F726B2EE2809D0A0A4F6E65207265616C6C7920696E746572657374696E672074726169742061626F7574207AC3B4C3966D6120697320686F77206865206861726E65737365732074686520637265617469766520616E6420616E616C79746963616C207369646573206F662068696D73656C66207769746820657175616C206170706C69636174696F6E2E204D6F73742070656F706C652061726520707265646F6D696E616E746C792072696768742D627261696E6564206F72206C6566742D627261696E65642C207965742C207AC3B4C3966D6120697320E28098616D626964657874726F7573E2809920696E2074686973207265676172642E204865E280997320612064657369676E65722077686FE28099732063726561746564206C617267652D7363616C65206172746973746963206576656E74732C2063756C747572616C20746F757273206F662050617269732C20616E6420616E2061776172642D77696E6E696E6720696E646570656E64656E74206D6F76696520646F63756D656E74696E67204672656E63682061727469737420616E6420426974636F696E206164766F636174652050617363616C20426F796172742C205B54686520556E64657267726F756E642053697374696E652043686170656C5D28687474703A2F2F7777772E7468652D63686170656C2E617274292C2028776869636820796F752073686F756C6420646566696E6974656C7920636865636B206F757421292E20596574206865E280997320616C736F2070617373696F6E6174652061626F757420656E67696E656572696E6720616E642074686520667574757265206F6620636F6F7065726174697665732E204865E28099732064657461696C2D64726976656E20616E6420616D626974696F75732C2074616B696E6720686973207465616D2061742054657269746F72692066726F6D2074776F20746F203138202831342066756C6C2D74696D65207465616D6D6174657320616E6420666F757220706172742D74696D65292E0A0A496E2068697320667265652074696D652C207AC3B4C3966D612C20E2809C6C696B6520616C6C204672656E63682070656F706C652CE2809D20656E6A6F79732066696E652077696E6520616E6420676F6F6420636F6E766572736174696F6E2E204F6E65206F6620746865207468696E6773206865206C6F766573206D6F73742061626F757420506172697320697320686F77206561737920697420697320746F2066696E64206C696B652D6D696E6465642070656F706C6520746F20627261696E73746F726D2077697468206F72206465636F6D70726573732061667465722061206C6F6E6720646179206F6620776F726B2E20E2809C5765206861766520612076657279206163746976652065636F73797374656D206F6620656E67696E656572732C2063727970746F67726170686572732C206574632E2CE2809D20686520736179732E20506172697320697320616C736F20612062656175746966756C206369747920746861742063617074757265732068697320696D6167696E6174696F6E2077697468206974732064617A7A6C696E672061726368697465637475726520616E6420696D7072657373697665206172742E204576656E20736F2C207AC3B4C3966D61206368616E6E656C732068697320637265617469766520656E65726779206D6F7265206566666563746976656C79207768656E20776F726B696E672066726F6D206120736D616C6C204D6F726F6363616E2066697368696E672076696C6C61676520666F72207468726565206D6F6E746873206120796561722E204865207265636F6E6E656374732077697468206E617475726520616E642068756D616E6974792C20696D6D657273696E672068696D73656C6620696E206120646966666572656E742063756C7475726520616E642073757266696E6720696E207468652041746C616E746963206265666F72652068652073746172747320686973206461792E200A0A2323204E657720546F6F6C7320666F7220536F6369616C20436F6F7264696E6174696F6E200A0A57687920646F6573207AC3B4C3966D612062656C6965766520736F6369616C20636F6F7264696E6174696F6E20697320736F20696D706F7274616E742C20616E642077687920646F207765206E656564206E657720746F6F6C7320666F722069743F20E2809C5765E28099766520616C77617973206861642074656E64656E6369657320746F206F7267616E697A65206F757273656C76657320616E6420746F6F6C7320646566696E696E672072756C657320666F72206C6976696E6720746F6765746865722C206469706C6F6D617469632070726F746F636F6C7320666F722064697363757373696E67206265747765656E20736F6369616C2067726F7570732C206F722074726164696E6720676F6F647320616E642073657276696365732E2042757420616C6D6F737420616C6C2074686520746F6F6C7320746861742070726576696F75732067656E65726174696F6E732070757420696E20706C61636520617265206F757464617465642E204F757220656E746972652067656E65726174696F6E20686173206C6F737420636F6E666964656E636520696E20696E737469747574696F6E7320746F20616C6C6F772067726F757073206F662068756D616E7320746F206F7267616E697A652C20636F6F7264696E6174652C20616E64206D656574207468656972206E656564732E204F757220646570656E64656E6365206F6E20746869726420706172746965732077686F20646F206E6F742068617665207468652073616D6520696E7465726573747320617320636974697A656E7320697320696D6D656E73652EE2809D0A0A7AC3B4C3966D612062656C69657665732074686174207765623320686F6C647320746865206B657920746F20756E6C6F636B696E672074686520656D657267656E6365206F66206E657720736F63696574696573207468726F7567682070726F647563747320746861742061726520E2809C756E73746F707061626C652C20726573696C69656E742C20616E64206D6565742061207265616C206E6565642CE2809D207768657468657220666F7220736D616C6C2076696C6C6167657320696E2074686520736F757468206F66204672616E63652C204166726963612C206F722041736961206F72206E65696768626F72686F6F647320696E204272617A696C206F72204B6F7265612E20E2809C5765206D75737420686176652061636365737320746F20746865207261646963616C207472616E73706172656E6379206F6620696E737469747574696F6E732C207468652070726976616379206F6620696E646976696475616C732C2063656E736F72736869702D726573697374616E7420746F6F6C732C20616E64206175746F6E6F6D6F757320636F6D6D756E69636174696F6E2066726F6D20616C6C20636F6D6D65726369616C20656E7465727072697365732E204974206973206F6E207468697320736F6C696420666F756E646174696F6E207468617420636976696C697A6174696F6E73207468617420617265206D6F7265206A75737420616E6420657175697461626C652063616E206265206275696C742EE2809D0A0A2323204D616B696E672057656233204D6F72652041636365737369626C65200A0A4F6620636F757273652C206173207AC3B4C3966D6120666F756E64206F75742C206275696C64696E67206E657720746F6F6C73206973206561736965722073616964207468616E20646F6E652E204F757220696E64757374727920666163657320616E20757068696C6C20636C696D62207768656E20697420636F6D657320746F2062616C616E63696E67207468652070726F6D697365206F6620746865207465636820776974682061207573657220657870657269656E6365207468617420646F65736EE28099742063617573652074616368796361726469612E2048652073617973207468617420756E6465727374616E64696E672074686174206D6F73742070656F706C6520E2809C646F6EE28099742068617665207468652074696D65206F7220696E636C696E6174696F6E20746F20696E636F72706F7261746520646966666963756C7420746563686E6963616C20636F6E636570747320696E207468656972206C69766573E2809D2068617320676976656E2068696D20E2809C6372617A7920656E6572677920746F20666F637573206F6E20766572792073696D706C6520746563686E6F6C6F676965732EE2809D20496E20666163742C2074686520E280986661696C757265E28099206F66204C61205375697465206475204D6F6E64652069732077686174206761766520626972746820746F2054657269746F72692C20E2809C776869636820746F6461792070726F766964657320616C6C207468652066756E6374696F6E616C69746965732070656F706C652061736B656420757320666F72206174207468652074696D653B206120736F6369616C206E6574776F726B2C20636F6D6D756E69636174696F6E2073797374656D732C20766F74696E672C2063726F77642D66756E64696E672C206574632E2057652068617665206D6164652067726561742070726F67726573732C20616E64206974E280997320696D706F7274616E7420746F20666F637573206F6E2070726F6475637473207468617420617265207261646963616C6C792073696D706C6520666F72207468652067656E6572616C207075626C69632EE2809D0A0A4163636F7264696E6720746F207AC3B4C3966D612C2074686973206D65616E73206162737472616374696E6720617761792074686520636F6E636570747320746861742065766572796461792070656F706C6520646F6EE2809974206E65656420746F206265206177617265206F662C2073756368206173206E6574776F726B732C2064417070732C20616E64206576656E20626C6F636B636861696E2C20E2809C616E6420616C7761797320737769746368696E672066726F6D206F6E6520646563656E7472616C697A6564206170706C69636174696F6E20746F20616E6F746865722EE2809D20556E696679696E6720286E6F742063656E7472616C697A696E672920736570617261746520746F6F6C732C206E6574776F726B732C20616E6420746563686E6F6C6F676965732077697468696E20612073696E676C652C2073696D706C6520696E746572666163652C2068652062656C69657665732C20697320746865206B657920746F2062726F616465722061646F7074696F6E2E20E2809C497427732061207665727920636F6D706C6578206368616C6C656E67652C20696E207465726D73206F662073656375726974792C2064657369676E2C206574632E2C20627574206974277320776861742049276D2070617373696F6E6174652061626F757420746F6461792EE2809D200A0A5768656E20697420636F6D657320746F20476E6F2E6C616E642C2054657269746F72692068617320616C72656164792064656C69766572656420657373656E7469616C2044414F20746F6F6C696E6720616E64207374616E64617264732C2061204D6F6465726174696F6E2044414F206D6F64756C6520746F20666163696C697461746520736F6369616C20636F6D6D756E69636174696F6E20616E642061204A7573746963652044414F206D6F64756C6520666F7220636F6E666C696374207265736F6C7574696F6E2E20546865207465616D206973206E6F7720666F637573696E67206F6E20616E206F6E2D636861696E2070726F6A656374206D616E6167656D656E7420746F6F6C20746F20616C6C6F77206F7267616E697A6174696F6E7320616E6420696E646976696475616C7320746F206D616E6167652070726F6A6563747320616E6420747261636B207461736B7320736D6F6F74686C7920616E64207472616E73706172656E746C79206F6E2D636861696E2E0A0A23232041204661697265722C204D6F7265205472616E73706172656E7420576F726C640A0A496E20323032342C2054657269746F726920656E746572732061206E65772070686173652063616C6C65642022436861707465722049492C2220776869636820696E766F6C76657320756E696679696E6720616C6C2069747320776F726B20696E746F2061206D6F62696C6520616E64206465736B746F70206170706C69636174696F6E207468617420636F756C6420E2809C74726967676572207375706572622064656D6F6E7374726174696F6E73206F662074686520706F74656E7469616C206F662044414F732EE2809D20486520656E7468757365732C20E2809C4920647265616D20746861742077652077696C6C207365652074686520656D657267656E6365206F6620612076696C6C616765207468617420757365732054657269746F7269206173206120746F6F6C20666F7220696E7465726E616C2064697363757373696F6E20616E6420636F2D66696E616E63696E672E2057696C6C2074686973206265207265616C20696E20323032343F2057686F206B6E6F77733F204275742074686174E2809973207768657265204920666F63757320616C6C206D7920656E6572677921E2809D0A0A48652062656C69657665732074686520696E7465726E657420686173206265656E2061206772656174206C6576656C65722C20656E61626C696E6720616E796F6E652077697468206120636F6E6E656374696F6E20746F2065647563617465207468656D73656C766573206F6E20616E79207375626A6563743B207965742C20746865206F70706F7274756E6974792069736EE2809974206F70656E20746F20616C6C2C20616E64206672656520616E64206F70656E2061636365737320697320636F6E7374616E746C792064696D696E697368696E672E20E2809C4920616D2061206368696C64206F662074686520696E7465726E65742E20492067726577207570207769746820776172657A2C207032702C20616E6420616E20696E7465726E65742077686963682070726F7669646564206D652077697468206461696C79207265736F757263657320746F206C6561726E20667265656C792C2065766572797468696E67207468617420696E7465726573746564206D652E20496E20736F6D6520636F756E74726965732C20697420697320696D706F737369626C6520746F2062656E656669742066726F6D2074686973206F70706F7274756E6974792C20616E642077697468207468652063656E7472616C697A6174696F6E206F662074686520696E7465726E6574206F6E20646966666572656E74206B657920706C61796572732C206D617373207375727665696C6C616E63652C20616E64207468652063656E736F7273686970206F66206365727461696E206469637461746F72732C2074686520696E7465726E6574206973206C6F73696E6720697473207665727920657373656E63652C207768696368206D616B6573206974206D616769632E2044697374726962757465642070726F746F636F6C732063616E20726573687566666C652074686520636172647320616E64206F6666657220746F6F6C7320666F7220746865207075626C696320676F6F642EE2809D200A0A7AC3B4C3966D61207361797320746861742068756D616E6974792069732061742061207475726E696E6720706F696E742C20616E64207765206D757374206275696C6420746865206E656365737361727920746F6F6C73206E6F7720746F2061766F69642066696E64696E67206F757273656C76657320696E2061207265616C2D6C6966652076657273696F6E206F662047656F726765204F7277656C6CE280997320313938342E20E2809C492061737069726520746F207061727469636970617465206D6F646573746C7920696E206120776F726C642074686174206973206661697265722C206D6F7265207472616E73706172656E742C20616E6420776865726520736F636965747920646F65736EE2809974206E65656420612070757070657420696E2061207375697420746F20696D70726F766520697473206C6976696E6720636F6E646974696F6E73206F7220726573706F6E6420746F206C6F63616C206E656564732E2057656233206973206A757374206120746F6F6C2C20616E6420696620697420646F65736E2774206D6565742074686973207265616C206E6565642C207468656E20666F72206D652C2069742077696C6C2062652061206661696C7572652EE2809D0A0A2A4578706572696D656E7420776974682054657269746F726920746F64617920616E6420746573742069747320536F6369616C20466565642C207768696368206E6F7720696E636C7564657320547769747465722D6C696B652066756E6374696F6E616C69747920666F7220706F7374732C204D656469756D2D7374796C652061727469636C65732C20536F756E64636C6F75642D696E737069726564206D757369632C20616E6420766964656F73E28094616C6C206261736564206F6E20476E6F20616E64204950465320616E6420746F74616C6C7920646563656E7472616C697A65642E20596F752063616E20616C736F20636865636B206F75742054657269746F7269E280997320476E6F4D6F6465726174696F6E4D6F64756C652C20776869636820616C6C6F777320796F7520746F206D6F646572617465206120736F6369616C206E6574776F726B20696E206120646563656E7472616C697A6564207761792E20412066617563657420697320617661696C61626C65206F6E2074686520686F6D652070616765206174205B6170702E74657269746F72692E636F6D5D2868747470733A2F2F6170702E74657269746F72692E636F6D2F666565643F6E6574776F726B3D676E6F2D74657269746F7269292E2A0A3214323032342D30312D31315430303A30303A30305A3209636872697374696E61322677686F796F75676E6F2C74657269746F72692C636F6D6D756E6974792C696E746572766965770AD5460A0A2F766D2E6D5F63616C6C12C6460A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374320862676C2D706F6332322C4275696C64696E6720476E6F2E6C616E64202D2050726F6F66206F6620436F6E747269627574696F6E2049493284450A0A2A446973636C61696D65723A20546865204275696C64696E6720476E6F2E6C616E64207365726965732061696D7320746F2073686172652074686520636F726520636F6E6365707473206F66206F757220706C6174666F726D2C206D697373696F6E2C20616E64207465636820737461636B2C2070726F766964696E67206120736E617073686F74206F6620612063757272656E74207374617465206F6E206F7572206275696C646572E2809973206A6F75726E65792E204E657720657069736F646573206D6179206465707265636174652070726576696F7573206F6E65732C20627574206E6F2065646974696F6E732077696C6C206265206D6F64696669656420617420616E792074696D652E20576520656E636F757261676520796F7520746F20666F6C6C6F7720616C6F6E672061732077652063726561746520746865207261696C7320666F722061206D6F7265207472616E73706172656E7420616E64206163636F756E7461626C6520736F63696574792C20616E642077652077656C636F6D6520666565646261636B20616E6420636F6E747269627574696F6E7320746F20746865207265706F2E2A0A0A23232049492E2050726F6F66206F6620436F6E747269627574696F6E2076732050726F6F66206F66205374616B650A0A50726F6F66206F66205374616B652028506F5329206973206120726F6275737420636F6E73656E737573206D656368616E69736D20746861742070726F76696465732061206D6F726520656E7669726F6E6D656E74616C6C7920667269656E646C7920616E64207363616C61626C6520616C7465726E617469766520746F2050726F6F66206F6620576F726B2028506F572920616E6420706F77657273206D6F7374206F6620746865207765623320696E64757374727920746F6461792E20417320506F532070696F6E656572732C20436F736D6F7320746563686E6F6C6F677920736563757265732068756E6472656473206F6620626C6F636B636861696E2070726F6A6563747320616E642062696C6C696F6E73206F6620646F6C6C617273206F66206469676974616C206173736574732C20616E6420457468657265756D20286C61756E63686564206173206120506F5720636861696E20696E203230313529206D6164652074686520686973746F7269632073776974636820746F20506F5320696E20323032322E204163636F7264696E6720746F205B657468657265756D2E6F72675D2868747470733A2F2F657468657265756D2E6F72672F656E2F646576656C6F706572732F646F63732F636F6E73656E7375732D6D656368616E69736D732F706F73292C20506F5320697320E2809C6D6F7265207365637572652C206C65737320656E657267792D696E74656E736976652C20616E642062657474657220666F7220696D706C656D656E74696E67206E6577207363616C696E6720736F6C7574696F6E7320636F6D706172656420746F207468652070726576696F75732070726F6F662D6F662D776F726B206172636869746563747572652EE2809D20486F77657665722C2061732077652062726965666C792064697363757373656420696E205B2A576861742049732050726F6F66206F6620436F6E747269627574696F6E3F2A5D2868747470733A2F2F74657374332E676E6F2E6C616E642F722F676E6F6C616E642F626C6F673A702F62676C2D706F632D31292C20506F53206861732076756C6E65726162696C697469657320746861742063616E20636F727275707420746865206E6574776F726B206F7665722074696D652E0A0A23232320546865204C696D69746174696F6E73206F662050726F6F66206F66205374616B652028506F53290A0A4265796F6E64207365637572696E6720746865206E6574776F726B2C20746865206D61696E20676F616C206F6620616E7920636F6E73656E737573206D656368616E69736D2028506F572C20506F532C2044506F532C20506F432C206574632E2920697320746F20626520617320646563656E7472616C697A656420617320706F737369626C6520616E64206E6F742072656C69616E74206F6E20616E792063656E7472616C206163746F72732E20546869732063616E206265206D6561737572656420627920746865205361746F7368692053636F726520286F7220746865204E616B616D6F746F20636F656666696369656E74292C2061207175616E7469746174697665206D6561737572652074686174206173736573736573206120626C6F636B636861696EE2809973206C6576656C206F6620646563656E7472616C697A6174696F6E2062792063616C63756C6174696E6720746865206D696E696D756D206E756D626572206F66206E6F646573206E656564656420746F20636F6D70726F6D6973652061206E6574776F726B206F72206361727279206F75742061203531252061747461636B2E20506F532073797374656D732063616E20626520626F6F7473747261707065642077697468696E206461797320286F72206576656E20686F757273292C207374617274696E67206F666620646563656E7472616C697A656420616E6420616368696576696E6720612068696768205361746F7368692053636F72652E0A0A54686520506F5320636861696E2047656E6573697320616C6C6F636174657320612064656661756C7420766F74696E6720706F77657220746F207E32302D3530206E6F6465732C20696E2067656E6572616C20657175616C6C7920286F72206174206C65617374206D616B696E6720737572652074686174206E6F2073696E676C65206E6F646520686173206D6F7265207468616E203525206F662074686520766F74696E6720706F776572292E2054686973206D616B657320506F5320636861696E7320646563656E7472616C697A656420656E6F7567682028696E207468656F7279292066726F6D20626C6F636B203020776974682061206E6561722D70657266656374205361746F7368692073636F72652E20486F77657665722C20696E2070726163746963652C20506F53206861732074776F206D61696E206973737565732E2042656361757365207468652073797374656D206973206469637461746564206279206D6F6E65792C20506F5320636861696E73206265636F6D6520696D70657266656374206F7665722074696D652E20416E796F6E65207765616C74687920656E6F7567682063616E207374616B6520746865697220746F6B656E732070726F67726573736976656C7920616E642075736520746865697220616363756D756C6174656420706F77657220746F2073776179206465636973696F6E2D6D616B696E67206F6E2074686520636861696EE280946F722074616B6520746865206E6574776F726B206F76657220636F6D706C6574656C792E0A0A54686520636861696E2063616E206C696D697420746865206D6178696D756D20766F74696E6720706F776572207065722076616C696461746F72206E6F64652C20627574207468697320697320616C6D6F737420696E6566666563746976652C2061732061206D616C6963696F7573206163746F722063616E206361727279206F7574206120537962696C2061747461636B206F6E20746865206E6574776F726B20616E6420637265617465206D756C7469706C652076616C696461746F727320746F206279706173732074686520766F74696E67206361702E205375636820616E2061747461636B2072656E6465727320746865206D617820766F74696E6720706F77657220706572206E6F6465207573656C65737320616E64206C65617665732074686520636861696E20646566656E73656C65737320616761696E737420612073696E676C65206F7267616E697A6174696F6E206F722063617274656C206761696E696E6720746865206D616A6F72697479206F662074686520766F74696E6720706F7765722E20506F532073797374656D73206C6561766520636861696E73206C696B6520436F736D6F732048756220616E6420457468657265756D206174207269736B2066726F6D207375636820626164206163746F72732C2063617274656C732C20616E6420706F77657266756C2070726F746F636F6C73202873756368206173204C69646F20616E6420526F636B657420506F6F6C292E0A0A5768696C652050726F6F66206F6620436F6E747269627574696F6E2028506F43292063616EE28099742070726576656E7420537962696C2061747461636B73206F6E207374616E646172642075736572206163636F756E747320287768656E206D616C6963696F7573206163746F727320637265617465206D756C7469706C65206163636F756E7473207769746820612073696E676C6520636F6D707574657220616E64207472616E7366657220746F6B656E732077697468696E20612066657720686F757273292C20697420646F6573206D616B6520697420616C6D6F737420696D706F737369626C6520666F722076616C696461746F72206E6F64657320746F2073756666657220537962696C2061747461636B732E2053696E63652074686520636F6D6D756E697479207665747320657665727920706572736F6E2077686F20697320676976656E20766F74696E6720706F776572206F72207377617920696E20746865206E6574776F726B2028696E636C7564696E672076616C696461746F7220706F77657229207468726F756768207468652044414F2C206174206E6F20706F696E742063616E20616E796F6E65202273706F6F6622206964656E74697469657320616E64206761696E206D616A6F7220737761792E200A0A2323232057686572652050726F6F66206F6620436F6E747269627574696F6E2028506F432920457863656C730A0A506F432069732061637475616C6C792050726F6F66206F6620417574686F726974792028506F41292077686963682C20696E7374656164206F66206F66666572696E672075702061207265736F75726365206C696B6520636F6D707574696E6720706F776572206F7220612066696E616E6369616C207374616B652C2072656C696573206F6E2076616C696461746F7273207374616B696E672074686569722072657075746174696F6E2E20416E796F6E652063616E206A6F696E206D6F7374207075626C696320506F5720616E6420506F53206E6574776F726B7320776974686F75742072657665616C696E67207468656972206964656E746974792E20486F77657665722C20627920646566696E6974696F6E2C20506F412076616C696461746F7273206E65656420746F206D616B65207468656D73656C766573206B6E6F776E20616E64206172652073656C6563746564206261736564206F6E207468656972207472757374776F727468696E6573732E2054686973206D65616E7320506F412074656E647320746F20776F726B20626574746572207768656E206465706C6F79656420696E2070726976617465206F72207065726D697373696F6E656420626C6F636B636861696E73207468616E20696E207075626C696320706C6174666F726D73202862656361757365206F6620746869732074656E64656E637920746F776172642063656E7472616C697A6174696F6E292E200A0A506F4320736F6C76657320746869732070726F626C656D2C20656E737572696E6720746865206E6574776F726B206265636F6D657320696E6372656173696E676C7920646563656E7472616C697A6564206F7665722074696D65206279206265696E6720676F7665726E6564206279206120646563656E7472616C697A656420656E746974792C20476F7644414F2E204C696B65207374616E6461726420506F4120636861696E732C20506F4320636861696E73206C61756E6368207769746820612068616E6466756C206F662076616C696461746F72732074686174206D757374206265206964656E74696669656420616E64207472757374656420627920746865206E6574776F726B2C206D65616E696E6720676F7665726E616E63652069732063656E7472616C697A6564206174207468652073746172742C20616E642074686520636861696E2061636869657665732061206C6F77205361746F7368692053636F72652E205468652073797374656D2069732061626F757420636F6E747269627574696E6720616E64206561726E696E6720636F6E747269627574696F6E20756E6974732C2077686963682061726520736C6F7720746F206761696E20616E6420726571756972652068756D616E20696E746572616374696F6E2E2049742074616B6573206D6F6E74687320286F7220796561727329206265666F72652074686572652061726520656E6F756768206163746F727320696E207468652044414F20616E642073756666696369656E7420766F74696E6720706F77657220666F722074686520636861696E20746F20626520636F6E7369646572656420646563656E7472616C697A656420656E6F7567682C206163636F7264696E6720746F20746865204E616B616D6F746F20636F656666696369656E742E200A0A506F43206973207468757320736C6F77657220746F20626F6F747374726170207468616E20506F5320616E642068617264657220746F20616368696576652E20596F752063616E207468696E6B206F6620506F432076657273757320506F532061732061206D61726174686F6E20766572737573206120737072696E742C207768657265627920506F432073746172747320736C6F776C7920627574207468656E206761696E73206D6F6D656E74756D206F7665722074696D652C20616E6420506F532073746172747320717569636B6C7920627574206C6F736573206D6F6D656E74756D206F7665722074696D6520287468652067726170682062656C6F772070726F766964657320612076697375616C20726570726573656E746174696F6E206F6620506F432076657273757320506F53292E200A0A5B215B47726170685D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30312D32365F62676C2D706F63322F7372632F7468756D62732F67726170682D636F6E7461696E65722E706E67295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30312D32365F62676C2D706F63322F7372632F67726170682D636F6E7461696E65722E706E67290A0A54686520476F7644414F2074686174206F776E732074686520636861696E206861732061206D616E6461746520746F207363616C652028746F2067726F7720616E6420646563656E7472616C697A652920636F6E74696E756F75736C792061732069742061646473206D6F726520636F6E7472696275746F72732E2054686973206D65616E73206974206265636F6D65732070726F67726573736976656C79206C6172676572206F7665722074696D652C20616368696576696E67206869676820646563656E7472616C697A6174696F6E20656666696369656E637920776179206265796F6E642074686520696E697469616C206661737420737072696E74206F6620506F5320636861696E732E204F6E63652065737461626C697368656420617320612070726F76656E20636F6E73656E737573206D656368616E69736D20616E6420616C7465726E617469766520746F20506F532C20476F7644414F2063616E2062656E656669742066726F6D20627920616E7920626C6F636B636861696E2070726F6A65637420287468726F75676820616E2065766F6C7574696F6E206F6620494353292077616E74696E6720746F206163686965766520646563656E7472616C697A6174696F6E20616E64207375737461696E6162696C697479E28094506F432063616E2073656375726520476E6F2E6C616E6420616E6420746865207765623320696E647573747279206174206C617267652E0A0A2323232053656375726974792D436F6E7363696F75732062792044657369676E0A0A416E6F7468657220616476616E74616765206F6620506F4320697320746861742062656361757365206974E28099732072656C69616E74206F6E2068756D616E20696E746572616374696F6E732C206974206973206D6F726520537962696C2D726573697374616E742062792064657369676E2E204173206469736375737365642C206974E280997320616C6D6F737420696D706F737369626C6520746F2073706C697420612076616C696461746F72206E6F646520696E746F2074776F20286F72206D6F726529206E6F6465732C206D616B696E6720636F6E64756374696E67206120537962696C2061747461636B20696E66696E6974656C7920646966666963756C742E2053696E636520636F6E747269627574696F6E20756E69747320617265206E6F74207472616E736665727261626C65206F722065786368616E676561626C652C20506F432063616E6E6F74207375666665722066726F6D207768616C657320617474656D7074696E6720746F20707572636861736520766F74696E6720706F77657220717569636B6C792E20496620736F6D656F6E652077616E74656420746F2074616B65206F76657220746865206E6574776F726B2C207468657920776F756C64206E65656420746F20696E76657374207965617273206F662074686569722074696D65206D616B696E67206D65616E696E6766756C20636F6E747269627574696F6E732E2054686569722061747461636B20776F756C6420626520736F20736C6F77207468617420697420776F756C6420656173696C792062652070726576656E7465642062792068756D616E73206D6F6E69746F72696E672074686520646563656E7472616C697A6174696F6E20616E642061646A757374696E672074686520706172616D65746572732E200A0A4D6F72656F7665722C20476F7644414F2077696C6C20616374697661746520616E642064656163746976617465206E65772076616C696461746F7273206F6E20726571756573742C2065737461626C6973682061204B59432073797374656D20666F722076616C696461746F72732C20616E64206D616E6167652070726F6D6F74696F6E73206F6620636F6E7472696275746F7273207769746820766F7465732E20546869732072656D6F7665732074686520706F73736962696C697479206F6620612074616B656F7665722068617070656E696E67206F7665726E696768742073696E636520746865206F6E6C792077617920746F206761696E2076616C696461746F72206F7220766F74696E6720706F77657220697320627920766F74696E67206F6E20676F7665726E616E63652072657175657374732C20776869636820697320736C6F7720616E64206D616E616765642062792068756D616E732E205468697320697320696E20636F6E747261737420746F20506F532073797374656D732077686963682061726520706F77657266756C20616E642066756C6C79206175746F6D617465642079657420646566656E73656C65737320616761696E7374207375636820636F6F7264696E617465642061747461636B732E0A0A476E6F2E6C616E64206973206275696C74206F6E207468652076657279207072656D6973652074686174207375636820616E2061747461636B206F6E206120506F43206E6574776F726B20776F756C64206E657665722068617070656E20617320697420776F756C6420626520656E746972656C7920636F756E7465722D696E747569746976652E2053696E636520636F6E747269627574696F6E7320617265206E6F74206F6E6C792061626F7574206578706572746973652062757420616C736F20616C69676E6D656E742C206974206973206F7572206879706F7468657369732074686174206C6F6E677374616E64696E6720636F6E7472696275746F72732077686F206861766520696E766573746564207965617273206F662074696D6520616E6420627261696E706F77657220696E20646576656C6F70696E672074686520636861696E2077696C6C20646F207468656972206265737420746F2070726F7465637420697420726174686572207468616E2064657374726F792069742E205468652044414F2073797374656D2077696C6C20656E64757265207468616E6B7320746F20746865206D6978206F662065787065727469736520616E6420616C69676E6D656E7420616E642074686520616D6F756E7420616E64206672657175656E6379206F6620636F6E747269627574696F6E732E200A0A23232320436F6E636C7564696E672054686F75676874730A0A4265796F6E642073657061726174696E6720766F74696E6720706F7765722066726F6D206E6574207765616C74682C206120636F726520636F6D706F6E656E74206F662050726F6F66206F6620436F6E747269627574696F6E2028506F43292069732069747320666F637573206F6E206C6F6E672D7465726D207375737461696E6162696C6974792E20506F43206D616B6573207468652073797374656D2066616972657220616E64206D6F7265207375737461696E61626C652C20656E737572696E67207061727469636970616E74732061726520616C69676E656420616E642074616B6520616374696F6E7320746861742062656E656669742074686520636F6D6D756E69747920616E64207468652062726F616465722065636F73797374656D2E20506F4320697320736C6F77657220746F20626F6F74737472617020616E642068617264657220746F2061636869657665207468616E20506F532062757420666F6375736573206F6E206C6F6E672D7465726D20616C69676E6D656E7420616E642073656375726974792E200A0A556E6C696B6520506F532C20636F6E7472696275746F727320726563656976652072657761726473206261736564206F6E20746865697220636F6E747269627574696F6E206566666F727420726174686572207468616E20686F77206D616E7920746F6B656E732074686579207374616B652E205468657920617265207468757320696E63656E746976697A656420616E64207265636F676E697A656420666F7220746865207175616C697479206F6620746865697220776F726B2C2069646561732C20616E6420616C69676E6D656E742C2064726976696E672070617274696369706174696F6E20616E642061637469766520656E676167656D656E742E20476F7665726E616E636520697320616C6C6F636174656420746F207468652070656F706C65206D6F7374206C696B656C7920746F206361726520666F72207468652065636F73797374656DE2809973206C6F6E672D7465726D2073756363657373E2809474686520636F6E7472696275746F72732077686F2068617665207370656E7420746865206D6F73742074696D6520776F726B696E6720746F776172642069742E0A0A2A49492E2050726F6F66206F6620436F6E747269627574696F6E2076732050726F6F66206F66205374616B6520697320746865207365636F6E6420696E2061205B736572696573206F662061727469636C65735D282F722F676E6F6C616E642F626C6F673A702F62676C2D706F63312920746F206469766520646565706C7920696E746F20746865207068696C6F736F7068792C20766973696F6E2C206D656368616E6963732C20616E6420776F726B20696E766F6C76656420696E20646576656C6F70696E672061206E657720636F6E73656E737573206D656368616E69736D20666F7220746865206E6578742067656E65726174696F6E206F6620736D61727420636F6E74726163742073797374656D732E204C6F6F6B206F757420666F722073756273657175656E742065646974696F6E7320616E64206164646974696F6E616C204275696C64696E6720476E6F2E6C616E64207365726965732C20616E64206C6574207573206B6E6F77207768617420796F75207468696E6B2120476F74207175657374696F6E733F204A6F696E2074686520476E6F2E6C616E64205B446973636F72645D2868747470733A2F2F646973636F72642E636F6D2F696E766974652F53386E4B5571776B506E29206F7220666F6C6C6F77207573206F6E205B547769747465722F585D2868747470733A2F2F782E636F6D2F5F676E6F6C616E64292A0A0A0A3214323032342D30312D32365431333A33373A30305A3209636872697374696E613215676E6F6C616E642C676E6F766D2C746D322C506F430ADA2C0A0A2F766D2E6D5F63616C6C12CB2C0A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374321466756E64696E672D70726F6772616D2D32337134323F476E6F2E6C616E642046756E64696E6720616E64204772616E74732050726F6772616D202D20517561727465726C79205265706F72743A205134203230323332E02A0A0A54686520476E6F2E6C616E642046756E64696E6720616E64204772616E74732070726F6772616D206964656E7469666965732074616C656E74656420616E642070617373696F6E61746520646576656C6F706572732C2072657365617263686572732C20616E642074696E6B657265727320746F20696E746572616374207769746820476E6F2E6C616E642C20656E68616E63652074686520706C6174666F726D27732075736162696C6974792C20616E642068656C70206275696C642074686520636F726520696E66726173747275637475726520616E6420746F6F6C696E67206E656564656420666F72206D61696E6E65742E2041667465722061207374726F6E6720737461727420696E20513320323032332066726F6D206F7572206772616E746565732C207765206177617264656420666F7572206164646974696F6E616C206772616E747320696E2051342E204C6574E28099732074616B652061206C6F6F6B2061742074686569722070726F677265737320616E642077686174E280997320636F6D696E6720757020696E20513120323032342E0A0A23232051342046756E64696E6720427265616B646F776E0A0A54686520746F74616C20616D6F756E742070616964206F757420696E20513420666F72206772616E747320776173206A75737420756E64657220243331372C3030302C20737072656164206F7574206F7665722074686520666F7572206772616E74733A2054657269746F72692C2042657274792C204F6E626C6F632C20616E6420447261676F732028466C697070616E646F292E205468697320776F726B207761732073706C6974206F76657220657373656E7469616C207374726573732D74657374696E672C20646562756767696E672C20616E6420646576656C6F706D656E74206F6E20476E6F20636F72652C20616E64206275696C64696E6720736F6369616C2C2067616D696E672C20616E642070726F6A656374206D616E6167656D656E7420644170707320746F20657874656E642074686520706C6174666F726DE28099732066756E6374696F6E616C6974792E2045616368206772616E7420726563697069656E74207265636569766564206D696C6573746F6E657320666F722064656C6976657261626C657320616E6420747261636B65642074686569722070726F6772657373207468726F75676820726567756C6172207075626C696320616E6420696E7465726E616C2073796E63732C206861636B65727370616365206A6F75726E657920757064617465732C20626C6F6720706F7374732C20646F63756D656E746174696F6E2C20616E6420646576656C6F7065722063616C6C732E0A0A5B215B51342043686172745D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30322D30375F66756E64696E672D70726F6772616D2D323371342F7372632F7468756D62732F63686172742E706E67295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30322D30375F66756E64696E672D70726F6772616D2D323371342F7372632F63686172742E706E67290A0A232320426572747920546563686E6F6C6F67696573202864656C6976657279204D61792032303234290A0A4166746572207375636365737366756C6C79206D656574696E672074686569722064656C6976657261626C657320696E20513320616E64206372656174696E6720476E6F204E6174697665204B69742028666F726D65726C79205B476E6F4D6F62696C655D2868747470733A2F2F74657374332E676E6F2E6C616E642F722F676E6F6C616E642F626C6F673A702F676E6F6D6F62696C6529292C2042657274792077617320617761726465642061207365636F6E64206772616E7420696E20513420746F206578706572696D656E74207769746820736D61727420636F6E747261637420696E746567726174696F6E732061726F756E6420736F6369616C206D656469612E205468726F7567682074686520646576656C6F706D656E74206F6620476E6F536F6369616C2C20746865207465616D206861732063726561746564206120746573742062656420666F72206275696C64696E6720646563656E7472616C697A656420736F6369616C206D656469612D7374796C65206170707320616E642068656C70656420746F20737472657373207465737420746563686E6963616C2069737375657320696E20476E6F2E6C616E642E200A0A496E2051342C2042657274792064656C697665726564205631206F6620476E6F536F6369616C2C20776869636820696E636C7564657320626173696320547769747465722D6C696B652066756E6374696F6E616C6974792E20476E6F536F6369616C2077696C6C20626520696D706C656D656E746564206F6E206D6F62696C65207573696E672074686520476E6F204E6174697665204B6974206672616D65776F726B2C20776974682061206D696E696D616C206465736B746F702061707020616E64206120726561642D6F6E6C79207765622076657273696F6E20616C736F20696E207468652073636F70652E2041736964652066726F6D207468697320776F726B2C20426572747920636F6E747269627574657320746F20476E6F20636F726520646576656C6F706D656E742C2068656C70696E672072616973652069737375657320616E64206D65726765205052732E20596F752063616E20666F6C6C6F772074686569722070726F677265737320696E206861636B65727370616365205B69737375652035315D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F6973737565732F3531292E0A0A23232054657269746F7269202864656C69766572792046656272756172792032303234290A0A41667465722064656C69766572696E6720746865205B6D6F6465726174696F6E206D6F64756C655D2868747470733A2F2F74657374332E676E6F2E6C616E642F722F676E6F6C616E642F626C6F673A702F676E6F6C616E642D6D6F6465726174696F6E2D64616F2D6D6F64756C652920696E2051332C2054657269746F72692072656365697665642061207365636F6E64206772616E7420746F206361727279206F757420726573656172636820616E6420696D706C656D656E74206120636F6E666C696374207265736F6C7574696F6E206D6F64756C6520616E6420616E206F6E2D636861696E2070726F6A656374206D616E6167656D656E7420746F6F6C2E20546865697220776F726B20616C736F20636F6E74696E756573206F6E2074686520657363726F77206D6F64756C65206275696C642E20417320616E2061637469766520636F6E7472696275746F722C207468652054657269746F7269207465616D2068656C707320696D70726F766520476E6F20636F72652061732077656C6C2C2067657474696E67206D6F726520505273206D65726765642C2070617274696369706174696E6720696E20726567756C6172206D656574696E67732C20616E642077726974696E6720646F63756D656E746174696F6E2E2052656164206D6F72652061626F75742054657269746F726920696E207468656972206861636B65727370616365205B697373756520375D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F6973737565732F37292E0A0A232320447261676F732028466C697070616E646F2C2064656C697665726564204A616E756172792032303234290A0A546F206578706572696D656E7420776974682067616D696E6720696E20476E6F2E6C616E642C20447261676F732072656365697665642061206772616E7420746F20706F727420686973206F6E2D636861696E206D656D6F72792067616D6520466C697070616E646F2066726F6D20536F6C69646974792E20466C697070616E646F20697320612073696D706C65206D656D6F72792067616D65E280947769746820612074776973742E20506C617965727320756E636F7665722074696C657320616E64206D7573742066696E64207468656972206D61746368657320746F2077696E207468652067616D652E2054686520726573756C742063616E206265206D696E74656420617320616E204E465420616E6420617373656D626C656420746F20637265617465206C61726765722C206D6F726520636F6D706C6578204E46547320616E64206469676974616C20E2809C7061696E74696E67732EE2809D2054686520626574612076657273696F6E206F66205B466C697070616E646F5D2868747470733A2F2F676E6F2E666C697070616E646F2E78797A2F666C697029206973206E6F77206C697665206F6E2074686520746573746E65742C20616E6420796F752063616E20726561642061626F75742068697320657870657269656E63657320696E20646576656C6F70696E67207468652067616D65206F6E20746865205B476E6F2E6C616E6420626C6F6720686572655D2868747470733A2F2F74657374332E676E6F2E6C616E642F722F676E6F6C616E642F626C6F673A702F706F7274696E672D666C697070616E646F2D676E6F29206F72207669736974205B6861636B657273706163652069737375652033335D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F6973737565732F3333292E0A0A2323204F6E626C6F6320286F6E676F696E67290A0A41667465722070726F647563696E6720636F6E73697374656E746C7920617765736F6D6520776F726B20616E64206265696E67206F7572206C6F6E676573742D7374616E64696E6720636F6E7472696275746F722C204F6E626C6F632072656365697665642061206772616E7420696E205134203230323420746F20636F6E74696E756520697465726174696E67206F6E20476E6F2E6C616E6420746F6F6C696E672C204164656E612C20616E6420746F2068656C70206275696C6420476E6F2E6C616E6420636F726520696E207072657061726174696F6E20666F72206D61696E6E65742072656C656173652E2050617274206F66207468652073636F70652077617320746F20737570706F727420636F6E74726163742D746F2D636F6E747261637420696E746572616374696F6E205B6973737565203735375D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F373537292C206C6561642061205B6D756C74692D6E6F646520746573746E657420696E69746961746976655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F747265652F6D61696E2F6D756C74696E6F64652D746573746E6574292C207772697465207075726520476E6F207061636B616765732C20616E642068656C7020646562756767696E672074686520476E6F564D2C20616D6F6E67206D616E79206F7468657220696E6974696174697665732E204F6E626C6F6320697320616C736F20616464696E67206164646974696F6E616C20736563757269747920746F20746865204164656E612077616C6C657420616E6420616E20E2809C416972676170E2809D20666561747572652C20776869636820796F752063616E2072656164206D6F72652061626F757420696E205B6861636B657273706163652069737375652032395D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F6973737565732F3239292E205765E280996C6C20616C736F2072656C6561736520612064657461696C656420626C6F6720706F737420736F6F6E2C20736F20737461792074756E65642E0A0A232320436F6D696E6720557020696E20513120323032340A0A5765E280997265206C6F6F6B696E6720666F727761726420746F206D6F7265206578636974696E6720646576656C6F706D656E747320696E2074686520636F6D696E67207965617220617320776520666F637573206F6E2074686520726F616420746F206D61696E6E65742E20496E2051312C206772616E746565732077696C6C206D61696E6C7920666F637573206F6E20646562756767696E6720476E6F20636F72652C20646576656C6F70696E6720736D61727420636F6E74726163747320616E64206C69627261726965732C206275696C64696E6720616E6420706F7274696E6720644170707320746F20476E6F2E6C616E642C20616E64206372656174696E6720656475636174696F6E616C206D6174657269616C7320746F2068656C702067726F772074686520636F6D6D756E6974792E0A0A426C6F636B636861696E20736F66747761726520616E64207669727475616C207265616C69747920746563686E6F6C6F67696573206669726D205661726D6574612061726520756E646572206576616C756174696F6E20666F722061206772616E7420746F20737570706F7274206163636F756E742073657373696F6E7320616E64206275696C642074686520476E6F2E6C616E6420556E6974792053444B20746F206D616B6520626C6F636B636861696E206D6F72652061636365737369626C6520746F2067616D6520646576656C6F706572732028796F752063616E20747261636B2074686569722070726F677265737320696E205B6861636B657273706163652069737375652034335D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F6973737565732F343329292E205765E28099726520616C736F2066696E616C697A696E672061206772616E7420666F7220612044414F2074696E6B6572657220616E642061207265736561726368207265706F72742C2061732077656C6C206173206576616C756174696E672074686520657874656E73696F6E206F662061207365636F6E64206772616E7420746F20447261676F7320746F20706F72742068697320706F70756C61722070726F6A656374206D616E6167656D656E742061707020746F20476E6F2E6C616E642E200A0A0A2A5765E280997265207374656164696C79206275696C64696E67206F75742074686520476E6F2E6C616E6420706C6174666F726D20616E64206F75722065636F73797374656D206F66206772616E7465657320616E6420636F6E7472696275746F72732E204C6574207573206B6E6F7720696620796F752077616E7420746F206A6F696E207573206279207375626D697474696E6720616E206170706C69636174696F6E20617420616E792074696D65206F6E20746865205B46756E64696E6720616E64204772616E7473207265706F7369746F72795D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F65636F73797374656D2D66756E642D6772616E7473292E205765E28099726520616C77617973206F6E20746865206C6F6F6B6F757420666F7220696465617320746F20616476616E63652074686520706C6174666F726D2E2A0A0A0A3214323032342D30322D30375431333A33373A30305A3212636872697374696E612C6D696368656C6C653216676E6F6C616E642C66756E64696E672C6772616E74730AA04B0A0A2F766D2E6D5F63616C6C12914B0A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374320A7779672D647261676F73322E57686F20596F7520476E6F20E28093204F6E20746865205265636F7264207769746820447261676F7320526F756132B9490A0A447261676F7320526F756120697320612068756D626C65206D616E2E20496620796F752068616420746865206368616E636520746F2072656164206869732061727469636C652C205B2A35205468696E67732049204C6561726E6564205768696C6520506F7274696E6720466C697070616E646F2046726F6D20536F6C696469747920746F20476E6F2A5D2868747470733A2F2F74657374332E676E6F2E6C616E642F722F676E6F6C616E642F626C6F673A702F706F7274696E672D666C697070616E646F2D676E6F292C20796F75E28099642068617665207365656E2068696D20726566657220746F20466C697070616E646F2061732068697320E2809C74696E79206C6974746C652067616D65E2809D20616E642064657363726962652068697320E2809C73757270726973652CE2809D206F7665722069742077696E6E696E672074686520506F6C79676F6E20747261636B206F662074686520476C69746368206861636B6174686F6E2C2074776F2073756273657175656E74206861636B6174686F6E7320696E20536F757468204B6F7265612C20616E642070697175696E672074686520696E746572657374206F662074686520476E6F2E6C616E64207465616D20746F206F666665722068696D2061206772616E742E2049662065766572207468657265207765726520616E20696E7665727365206F6620E2809C74686520656D7074792076657373656C206D616B657320746865206C6F756465737420736F756E642CE2809D20447261676F7320776F756C642062652069742E0A0A4174203534207965617273206F6C642C206865E2809973206C6976656420616E2065787472616F7264696E617279206C6966652E2047726F77696E6720757020696E20636F6D6D756E69737420526F6D616E69612C2077686572652073636172636974792077617320696E206162756E64616E63652C20616E6420E2809C65766572797468696E672077617320696E2073686F727420737570706C792CE2809D20447261676F7320616E6420686973207065657273207765726520E2809C6F6E6C7920616C6C6F77656420746F206C6561726E206F6E6520636F64696E67206C616E67756167652CE2809D20616E642069742068617070656E656420746F2062652063616C6C656420E2809C57686174657665722EE2809D20536F2C207768656E20616E796F6E652061736B7320696E2077686174206C616E677561676573206865206B6E6F777320686F7720746F20636F64652C20686520616C77617973206A6F6B6573207468617420526F6D616E69616E732063616E20636F646520696E20E2809C77686174657665722EE2809D204A6F6B696E672061706172742C20686973206C616E677561676520736B696C6C732061726520696D70726573736976652C20746F2073617920746865206C656173742E0A0A232320447261676F73204B6E6F77732061204C6F74206F6620436F64650A0AE2809C4D792066697273742070726F64756374696F6E2D6C6576656C20636F646520776173207772697474656E20696E20436F626F6C206F6E2070756E63682063617264732CE2809D2068652073617973207768656E20686520776173206A7573742031362E2048652077656E74206F6E20746F206C6561726E20536D616C6C74616C6B2C204C75612C20616E6420E2809C6A75737420666F722066756E2CE2809D206576656E20612070726F6772616D6D696E67206C616E67756167652063616C6C656420E2809C427261696E6675636B2EE2809D204865207370656E74206D616E792079656172732070726F6772616D6D696E6720696E20776562322C20694F532C20616E6420416E6472696F642C20627574206F76657220746865206C61737420736576656E207965617273202873696E636520656E746572696E67207468652077656233207370616365292C20686173206265656E20636F6E73697374656E746C7920776F726B696E6720696E204A6176615363726970742C2053776966742C20536F6C696469747920287768696368206865206C6561726E6564206279206372656174696E6720466C697070616E646F292C20507974686F6E2C20616E6420476F2E204465737069746520746869732C20447261676F7320636F6E666573736573206865207374696C6C206665656C73206D6F726520617420686F6D652077697468696E20746865204170706C652065636F73797374656D2E20E2809C49277665206265656E206275696C64696E672061206C6F742074686572652CE2809D20686520736179732E0A0A232320486520537065616B73204D616E79204C616E6775616765730A492061736B206966206C6561726E696E672070726F6772616D6D696E67206C616E6775616765732069732073696D696C617220746F2073706F6B656E206C616E6775616765732E20E2809C45766572792070726F6772616D6D696E67206C616E67756167652068617320766F636162756C61727920616E64206772616D6D61722C207768696368206973206120737065636966696320736574206F662072756C6573206F766572207468617420766F636162756C6172792C20736F206974E28099732073696D696C617220696E20746861742073656E73652CE2809D20686520736179732E20416E6420686F77206D616E792073706F6B656E206C616E67756167657320646F6573206865206B6E6F773F20E2809C492063616E20737065616B206669766520496E646F2D4575726F7065616E206C616E677561676573E2809D2028526F6D616E69616E2C20456E676C6973682C204672656E63682C205370616E6973682C20616E6420506F7274756775657365292E20E2809C466976653FE2809D20492067756C702C20776964652D657965642C2073756464656E6C79206665656C696E6720696E616465717561746520666F72206F6E6C7920737065616B696E672074687265652E20E2809C57656C6C2C207468657920616C6C2073686172652061626F757420373025206F662074686520766F636162756C6172792C20616E6420746865206772616D6D61722068617320616C6D6F7374207468652073616D652072756C65207365742CE2809D206865207368727567732C206D696E696D697A696E6720686973206163636F6D706C6973686D656E742E0A0A4865E280997320616C736F206C6561726E696E672074776F20417369616E206C616E67756167657320776974682076617279696E672064656772656573206F6620737563636573732E204B6F7265616E2C2061206C616E677561676520686520756E6465727374616E647320E2809C736F6D6520343025E2809D206F662C20447261676F732061646D6974732C206973206120646966666572656E742062616C6C67616D652E20E2809C49277665206265656E206672757374726174656420666F72206E696E65206D6F6E7468732C2065766572792064617920747279696E6720746F20706C7567206177617920626563617573652074686572652773206C69746572616C6C79206E6F2073696D696C617269747920696E20766F636162756C617279206265747765656E20616E7920496E646F2D4575726F7065616E206C616E677561676520616E64204B6F7265616E2E204C69746572616C6C79206E6F20776F7264206973207468652073616D652C20616E6420746865206772616D6D617220697320616C736F20766572792C207665727920646966666572656E742EE2809D204865206578706C61696E732074686174206C6561726E696E672061206C616E6775616765206C696B65204B6F7265616E206D65616E73207374617274696E672066726F6D207A65726F20616E642077616974696E6720666F722074686520627261696E20746F20666F72676520746865206E657572616C2070617468732E20E2809C4974277320717569746520646966666963756C7420746F20646F2CE2809D20686520636F6E63656465732E0A0A2323204120E280984C6F636174696F6E2D496E646570656E64656E74E28099204C6966657374796C650A4920636865636B206F757420746865206261636B64726F7020626568696E642068696D2E204865E28099732074616B696E672074686520696E746572766965772066726F6D20616E20656C6567616E74206361666520696E20646F776E746F776E20536169676F6E207769746820696D7072657373697665206461726B20776F6F64656E2077616C6C732C206C61726765206365696C696E672066616E7320636972636C696E672061626F76652C20616E642061207269636820636F6C6F6E69616C2061746D6F7370686572652E20E2809C4974E28099732073756368206120706F736820706C6163652CE2809D20686520736D696C65732C20E2809C6576657279206461792C207468657265206172652067726F757073206F662070656F706C652074616B696E672070696374757265732E2049742068617320616E20496E646F6368696E6120766962652EE2809D20492063616EE28099742068656C70206275742077697368204920636F756C642074656C65706F7274206F76657220616E6420736861726520612062656572207769746820447261676F732061732077652064697363757373206869732072656D61726B61626C65206C6966652E20E2809C486F77206C6F6E67206861766520796F75206C697665642074686572653FE2809D20492061736B2C20E2809C4920646F6EE2809974206C69766520696E20536169676F6E2CE2809D206865207265706C6965732C20E2809C49E280996D206C6F636174696F6E2D696E646570656E64656E742EE2809D0A0A4173204920776F6E6465722069662074686174E28099732061206D6F726520656C6567616E74207465726D20666F7220E2809C6469676974616C206E6F6D61642CE2809D20447261676F7320717569636B6C79206578706C61696E732074686520646966666572656E63652E204469676974616C206E6F6D616473207479706963616C6C792068617665206E6F2066697865642061626F64652C20686520736179732C20616E642074656E6420746F207365742075702061206261736520666F7220612073686F727420706572696F64206F662074696D65206265666F7265206D6F76696E67206F6E20746F20746865206E65787420706C6163652E204C6F636174696F6E2D696E646570656E64656E7420697320736F6D656F6E652077686F20686173206120626173652062757420697320696E646570656E64656E74206F6620697420616E642063686F6F73657320746F207370656E64206C6F6E67657220706572696F6473206F662074696D6520696E20766172696F757320706C616365732E20E2809C536F204920626563616D652061206C6F6E65722CE2809D20686520736179732C20E2809C616E642049E280997665206265656E206C6F636174696F6E2D696E646570656E64656E7420666F72207369782079656172732E2049207370656E74206D792066697273742074776F20616E6420612068616C6620796561727320696E20537061696E2C207468656E2066726F6D20537061696E2C2049206D6F76656420746F20506F72747567616C2C207768696368206973206D792062617365207269676874206E6F772C20616E642049207374617274656420746F206578706C6F72652041736961206C61737420796561722EE2809D0A0A23232041204C6F7665206F6620746865204F70656E20526F61640A4920706F696E74206F757420686F7720616D617A696E6720686973206C6966657374796C6520736F756E6473E28094616E6420616C736F20686F77206368616C6C656E67696E67206974206D7573742062652061742074696D65732E20447261676F73206C6F766573207468652066726565646F6D207468617420636F6D65732077697468206265696E6720616C6F6E6520696E206120666F726569676E206C616E6420616E6420746865206D6173746572206F66206869732064657374696E792E20486520616C736F2074687269766573206F6E206C6561726E696E672066726F6D20646966666572656E742070656F706C6520616E642063756C747572657320616E6420646973636F766572696E67206D6F72652061626F75742068696D73656C662E20E2809C546865206D6F726520796F752074726176656C2C20746865206D6F726520796F75206C6561726E2E2057686572652063616E20796F7520737461793F2057686572652063616EE280997420796F7520737461793F2057686174206973206E65656465643F20596F75206C6561726E20746865206C6F676973746963732C20616E6420796F75206265636F6D652061206D756368206265747465722061646D696E6973747261746F7220616E64206D616E61676572206F6620796F7572206C6966652EE2809D0A0A48652061646D69747320746F206665656C696E67206C6F6E656C792061742074696D65732E204265696E67206C6F636174696F6E2D696E646570656E64656E742069736EE280997420666F722065766572796F6E652C20616E64206365727461696E6C79206E6F7420696620796F7520646F6EE2809974206C696B65206265696E6720616C6F6E652E20E2809C49742773207665727920646966666963756C7420746F206265206F6E2074686520726F6164206265636175736520796F7520646F6E27742068617665206D616E7920667269656E64732E20596F7520646F6E27742068617665206120666978656420736F6369616C20636972636C652E2049276D20696E206120706C616365207269676874206E6F772077686572652049276D20717569746520636F6D666F727461626C652077697468206D7973656C662E20492063616E207370656E64206C6F6E6720706572696F6473206F662074696D65206F6E206D79206F776E20776974686F7574206E656564696E6720636C6F736520656E636F756E746572732E2049206861766520612076657279206C696D6974656420636972636C65206F6620667269656E64732C2077686963682049206B65657020696E20746F7563682077697468206576657279206D6F6E7468206F7220736F2EE2809D0A0A5468652063756C747572616C20646966666572656E636573206265747765656E204575726F706520616E6420417369612061726520736F6D657468696E67206F66206120646F75626C652D65646765642073776F72642061732077656C6C2E20447261676F73206C696B657320566965746E616D2C207768657265207468652070656F706C652061726520667269656E646C7920616E642077656C636F6D696E6720616E642074616C6B20746F2068696D206F6E2074686520737472656574206F7574206F6620637572696F73697479206F7220746F20707261637469636520746865697220456E676C6973682E20427574206865E28099732066656C74206C696B6520717569746520616E206F7574736964657220696E20536F757468204B6F7265612C207768657265207468652063756C74757265206F6620706F6C6974656E65737320616E6420726573747261696E74206D616B65732069742068617264657220746F2065737461626C697368206D65616E696E6766756C20667269656E6473686970732E0A0A232320417374726F6C6F67792C2041492C20616E64204F74686572204D696E642D426C6F77696E672053747566660A54616C6B696E672061626F75742068756D616E20636F6E6E656374696F6E7320696E6576697461626C79206C6561647320746F2074686520696E6372656173696E67206C61636B206F66207468656DE28094616E642074686520746F706963206F662041492E20492061736B20686F77206865206665656C732061626F7574207468652070726F7370656374206F662041474920616E64206120706F74656E7469616C207265706C6163656D656E7420737065636965732E2048652073687275677320616E6420706F696E7473206F75742074686174206D6F7374206F66207768617420776520686561722061626F7574204149206973206D61726B6574696E672E204865207468696E6B732074686174204C4C4D7320284C61726765204C616E6775616765204D6F64656C73292077696C6C2068697420612077616C6C207768656E20746865792072756E206F7574206F6620676F6F64206461746120746F20626520747261696E6564206F6E2E2048652069732061206C6974746C6520636F6E6365726E65642061626F7574207468652070726F7370656374206F6620656C656374696F6E2072696767696E6720616E6420414749206265696E67206861726E657373656420696E2074686520706F6C69746963616C20737068657265206279206E6174696F6E2D73746174657320617474656D7074696E6720746F206F75746D616E65757665722065616368206F746865722062792070726564696374696E6720746865206E65787420706C61757369626C65206D6F76652E20E2809C427574207468697320697320612063616E206F6620776F726D732CE2809D20686520736179732E0A0AE2809C41637475616C6C792C20617420746865206D6F73742066756E64616D656E74616C206C6576656C2C207468657265206973206E6F20646966666572656E6365206265747765656E20414920616E64207468652070726F636573732062792077686963682077652067656E65726174652043686174475054206F7220616E79206F74686572206C616E6775616765206D6F64656C2C20616E64E280A620686F6C6420796F7572206272656174682CE2809D206865207061757365732C20E2809C617374726F6C6F67792E205468657920626F74682074616B65206120736574206F662061726269747261727920666561747572657320616E64206120736574206F662064657369726564206F7574636F6D65732E20416674657220746861742C2074686579206A75737420646F2061206C6F74206F6620636F6D7075746174696F6E2C20627920747279696E6720746F206D696E696D697A65206120636F73742066756E6374696F6E206265747765656E207468652070726564696374656420616E64206578706563746564206F7574636F6D652E2054686174277320616C6C20746865726520697320746F2069742E20596F752074616B652066656174757265732C2061646420736F6D6520706172616D65746572732C207472696C6C696F6E73206F6620706172616D65746572732C20796F752072756E2061206C6F74206F6620636F6D7075746174696F6E2C20616E6420696E2074686520656E642C20796F75206861766520746865206D6F737420706C61757369626C65206F7574636F6D652E204C4C4D7320646F207468697320696E20686F7572732F646179732F7765656B73206F6620747261696E696E672C20617374726F6C6F67792064696420697420736C6F776C792C206F7665722074686520636F75727365206F662061206665772074686F7573616E642079656172732EE2809D0A492061736B20447261676F73206966206865206861646EE2809974206265656E20612070726F6772616D6D65722C20776F756C6420686520686176652070657268617073206265636F6D6520616E20617374726F6C6F67657220696E73746561643F20E2809C492061637475616C6C79207374756469656420617374726F6C6F677920616E64207573656420697420666F722031382079656172732CE2809D206865207265706C6965732E0A0A49207472792068617264206E6F7420746F2066616C6C206F6666206D792063686169722E20447261676F73206578706C61696E73207468617420617374726F6C6F677920706C6179732061206875676520726F6C6520696E20686973206C6966652C20616E6420686520636F6E73756C7473206974206265666F7265206D616B696E6720616E79206D616A6F72206465636973696F6EE2809473756368206173206D6F76696E6720636F756E7472696573206F72206C656176696E67206A6F62732E20E2809C4920636F6E73756C74206974206F6E206576657279206D616A6F72206465636973696F6E20616E64206576656E206461696C79206C6966652E20536F2077686572657665722049206861766520746F2C2049207573652069742E205768656E204920736F6C64206F6E65206F66206D7920636F6D70616E6965732C207768656E2049206465636964656420746F206D6F7665206162726F61642C207768656E20492074726176656C2C20616E64207374756666206C696B6520746861742EE2809D2048652067697665732074686520616E616C6F6779206F66206D6574656F726F6C6F677920616E642073617973206966206865206B6E6F7773206974E280997320676F696E6720746F207261696E2C206865E280996C6C2074616B6520616E20756D6272656C6C6120746F2068617665206C657373206672696374696F6E20616E64206D6F76652061726F756E64206D6F726520656173696C792E20496E207468652073616D65207761792C206865206170706C69657320617374726F6C6F677920746F20686973206C6966652E2054686973206D616E20697320612050616E646F7261E280997320626F782E0A0A5768617420656C736520646F657320686520646F20696E206869732073706172652074696D6520626573696465732074726176656C696E672074686520776F726C642C20636F6E73756C74696E672074686520436F736D6F732C20616E642077726974696E6720636F646520666F722066756E3F20447261676F73206C696B657320706C6179696E6720706F6F6C2C20736F6369616C697A696E672C2064696E696E67206F75742C20616E642064616E63696E672E20E2809C492077617320612074616E676F2064616E636572206261636B20696E20526F6D616E69612E20492068616420612074616E676F207363686F6F6C20666F72206120796561722EE2809D204174207468697320706F696E742C2049E280996D20686172646C79207375727072697365642E0A0A232320447261676F73206F6E20476E6F2E6C616E640A49206D657420447261676F73206C617374207965617220696E2053656F756C206174206120476E6F2E6C616E64206576656E7420686F737465642077697468204F6E626C6F6320647572696E6720425549444C20417369612E2054686174E2809973207768656E2068652073706F6B6520746F204D616E667265642061626F757420466C697070616E646F20616E642073756273657175656E746C79206170706C69656420666F722061206772616E742E2057652077657265207374696C6C206275696C64696E672074686520737065637320666F7220746865204772616E74732050726F6772616D206174207468652074696D652C20616E6420447261676F7320776173206F7572206669727374206772616E7465652E2053696E6365207468656E2C206865E280997320656D6261726B6564206F6E20612077686F6C65206E6577206A6F75726E6579206C6561726E696E6720476E6F20616E64206275696C64696E672074686520616972706C616E6520617320697420666C6965732C2064656C69766572696E6720466C697070616E646F206C617374206D6F6E746820616E6420726567756C61726C792068656C70696E6720746865207465616D207769746820476E6F2E6C616E6420636F7265206973737565732E0A0A447261676F73206861732073696E6365207375626D69747465642061207365636F6E64206772616E742070726F706F73616C20746F20706F7274206869732070726F6A656374206D616E6167656D656E742061707020746F20476E6F2E20E2809C49742075736573206D79206C696665206D616E6167656D656E74206672616D65776F726B2C20776869636820492063616C6C20E2809C6173736573732C206465636964652C20646F2EE2809D20546865206E616D65206F66207468652070726F6A656374206973202A5A656E5461736B7469632A2E20546865726520697320616C726561647920616E20617070206F6E20694F53207468617420492077726F74652CE2809D206865206578706C61696E732E20596F752063616E2072656164206D6F72652061626F757420686973206772616E742070726F706F73616C205B686572655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F65636F73797374656D2D66756E642D6772616E74732F70756C6C2F31312920616E64206265207375726520746F2074657374206F7574205B466C697070616E646F5D2868747470733A2F2F676E6F2E666C697070616E646F2E78797A2F666C69702920746F6461792E0A0A492061706F6C6F67697A6520666F722074616B696E6720736F206D756368206F6620447261676F73E280992074696D652C206275742068652061737375726573206D652069742069736EE280997420612070726F626C656D2E20E2809C4920646F6EE280997420776F726B20746F6461792C2049276D206E6F7420627573792E2049276D206A75737420656E6A6F79696E67206D792061667465726E6F6F6E20696E207468697320636F666665652073686F702EE2809D20417320447261676F732073697073206F6E20746865206C6F63616C20746970706C6520616E64206472696E6B7320696E207468652073696768747320616E6420736F756E64732061726F756E642068696D2C20492063616EE28099742068656C70206275742061646D69726520686973206F75746C6F6F6B206F6E206C69666520616E64207468652063686F69636573206865E2809973206D616465E28094616E642049206C6F6F6B20666F727761726420746F20736565696E672077686174206865277320757020746F206E65787420616E64207768617420656C7365206865206275696C6473207769746820476E6F2E3214323032342D30322D30385430303A30303A30305A3209636872697374696E61322777686F796F75676E6F2C666C697070616E646F2C636F6D6D756E6974792C696E746572766965770ABB280A0A2F766D2E6D5F63616C6C12AC280A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F73743209676E6F2D746F6B796F322B546F6B796F204D65657475702052656361703A2047657474696E6720746F20476E6F20476E6F2E6C616E6432DE260A0A0A5B215B62616E6E65725D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30342D31355F676E6F2D746F6B796F2F7372632F7468756D62732F42616E6E65722E706E67295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30342D31355F676E6F2D746F6B796F2F7372632F42616E6E65722E706E67290A0A0A5468697320796561722C20776527726520676F696E6720676C6F62616C2C20636F6E6E656374696E67207769746820766172696F7573206C6F63616C20636F6D6D756E697469657320696E200A706572736F6E20746F20696E74726F64756365207468656D20746F20476E6F2E6C616E6420616E642074686520636F6D6D756E697479206F6620476E6F6D657320776F726B696E67206F6E207468650A70726F6A6563742E204C617374207765656B2C20776520686F73746564207468652066697273742D6576657220476E6F2E6C616E6420636F6D6D756E697479206D656574757020696E20546F6B796F2C200A4A6170616E2E2048656C6420617420746865205B43727970746F204C6F756E676520474F585D2868747470733A2F2F63727970746F6C6F756E6765676F782E636F6D2F2920696E207468652068656172740A6F66205368696E6A756B7520436974792C20746865206576656E742064726577206F76657220323020617474656E646565732066726F6D2064697665727365206261636B67726F756E6473207370616E6E696E67200A576562332C20646576656C6F706D656E742C20747261646974696F6E616C20627573696E6573732C20616E642066696E746563682E2054686973206D6565747570206D61726B656420746865207365636F6E640A696E206120736572696573206F6620696E2D706572736F6E20636F6D6D756E697479206576656E747320776527726520706C616E6E696E6720666F72207468697320796561722C206120666F6C6C6F777570200A746F206F757220726563656E74206C6F63616C206D656574757020696E204B6F7265612077697468204F6E426C6F630A5B476F20746F20476E6F5D2868747470733A2F2F6D656469756D2E636F6D2F6F6E626C6F632F676F2D746F2D676E6F2D72656361702D696E74726F2D746F2D7468652D676E6F2D737461636B2D776974682D6D656D656C616E642D323834613433643766363230292C0A776869636820666F6375736564206F6E20696E74726F647563696E6720476E6F2E6C616E6420746F20476F20646576656C6F7065727320696E2053656F756C2E0A0A546865736520726567696F6E616C206D6565747570732061726520696E74656E74696F6E616C6C792064657369676E656420746F20626520736D616C6C20616E6420696E74696D6174652C200A666F73746572696E6720706572736F6E616C2072656C6174696F6E736869707320616E64206275696C64696E67206120636F6D6D756E697479206F66207472757374656420476E6F6D6573200A746861742063616E20696E666C75656E63652074686520667574757265206F6620476E6F2E6C616E642E2054686520636F6E74656E74206F6620746865736520676174686572696E67732063616E200A72616E67652066726F6D20696E74726F647563696E6720476E6F2E6C616E6420616E642069747320756E6971756520636F6E636570747320746F2067756964696E6720646576656C6F70657273206F6E200A686F7720746F206B69636B207374617274207468656972206A6F75726E6579207769746820476E6F2E20466F722074686973206576656E7420696E20546F6B796F2C20776520636F7665726564200A7468726565206D61696E20746F706963733A0A0AE383BB5768617420697320476E6F2E6C616E643A20616E20696E74726F64756374696F6E20746F2074686520476E6F206C616E677561676520616E642074686520706C6174666F726D2C0A0AE383BB486F772074686520476E6F2E6C616E642065636F73797374656D20697320646576656C6F70696E673A20616E206F76657276696577206F66206F757220636F6E7472696275746F727320616E64206170706C69636174696F6E732C20616E6420686F772070656F706C652063616E2067657420696E766F6C7665642C207374617920636F6E6E65637465642C20616E64206A6F696E2074686520476E6F6D6520636F6D6D756E6974792C0A0AE383BB54686520667574757265206F6620476E6F2E6C616E643A2077686174277320636F6D696E672075702074686973207965617220616E6420696465617320666F7220746865206675747572652E0A0A232320496E74726F64756374696F6E20746F20476E6F2E6C616E640A5B215B6C656F6E2D70726573656E746174696F6E5D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30342D31355F676E6F2D746F6B796F2F7372632F7468756D62732F6C656F6E2D706F632E706E67295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30342D31355F676E6F2D746F6B796F2F7372632F6C656F6E2D706F632E706E67290A0A4C656F6E20487564616B2C20476E6F2E6C616E64277320446576656C6F7065722052656C6174696F6E7320456E67696E6565722C2077617320746865206F6E2D7369746520476E6F6D650A726570726573656E74617469766520616E64206B69636B6564207468696E6773206F666620627920696E74726F647563696E6720617474656E6465657320746F207468652070726F6A6563742773200A756E697175652066656174757265733A0A0AE383BB46756C6C79204F70656E2D536F7572636520536D6172742D436F6E7472616374696E6720506C6174666F726D3A20486967686C69676874696E6720476E6F2E6C616E64277320636F6D6D69746D656E7420746F207472616E73706172656E637920616E64206163636573736962696C6974792C0A0AE383BB437573746F6D20536D6172742D436F6E7472616374696E67204C616E67756167652028476E6F293A2053686F77636173696E672074686520696E6E6F766174697665206C616E6775616765207461696C6F72656420666F722066757475726520626C6F636B636861696E20646576656C6F706D656E742C200A0AE383BB4E657720436F6E73656E7375732050726F746F636F6C2C2050726F6F66206F6620436F6E747269627574696F6E3A204578706C6F72696E67207468652063757474696E672D656467652070726F746F636F6C20756E64657220646576656C6F706D656E742C20656D70686173697A696E672069747320726F6C6520696E20737570706F7274696E67206F70656E2D736F757263652C20616E64206F6E2D636861696E20646576656C6F706D656E742E0A0A416674657220696E74726F647563696E672074686520686967682D6C6576656C20666163657473206F6620476E6F2E6C616E642C207468652070726573656E746174696F6E0A64657461696C65642074686520737065636966696373206F662065616368206F6E652C20616E6420686F77206974206973206265696E672064657369676E656420746F2061646472657373200A70726F626C656D7320696E20626F7468206F70656E2D736F7572636520646576656C6F706D656E7420616E6420626C6F636B636861696E2065636F73797374656D732E200A0A5370656369666963616C6C792C20476E6F2E6C616E642069732061646472657373696E672061206C6172676520697373756520696E2072656761726420746F206F70656E2D736F757263650A646576656C6F706D656E743A206D616E792070726F6A6563747320616E6420627573696E65737365732072656C79206F6E206F70656E2D736F7572636520746563686E6F6C6F67792063726561746564200A627920646576656C6F706572732077686F206F6674656E20766F6C756E7465657220746865697220736B696C6C7320616E642074696D6520776974686F757420726563656976696E6720616E797468696E670A696E2072657475726E20666F72207468656972206566666F7274732E2050726F6F66206F6620436F6E747269627574696F6E2069732061696D6564206174207461636B6C696E6720746869730A6973737565206279206265696E67206120666F756E646174696F6E20666F7220612073797374656D20776869636820656D706F7765727320636F6E7472696275746F727320616E642072657761726473200A7468656D20666169726C7920666F7220746865697220776F726B2C20616C6C6F77696E67207468656D20746F2074687269766520696E2061207375737461696E61626C652065636F73797374656D206F660A76616C7565206372656174696F6E2E0A0A2323204F75722045636F73797374656D206F6620476E6F6D6520436F6E7472696275746F72730A57652073706F746C6967687465642074686520646976657273652070726F6A6563747320616E6420636F6E7472696275746F727320626F6C73746572696E672074686520476E6F2E6C616E64200A65636F73797374656D2C2072616E67696E672066726F6D20746865205B4164656E612057616C6C65745D2868747470733A2F2F6164656E612E6170702920616E640A5B476E6F7363616E5D2868747470733A2F2F676E6F7363616E2E696F2920746F20696E6E6F766174697665206170706C69636174696F6E73206C696B6520466C697070616E646F2E200A4164646974696F6E616C6C792C20776520696E74726F647563656420617474656E6465657320746F2074686520476E6F2E6C616E640A5B4772616E747320262046756E642070726F6772616D5D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F65636F73797374656D2D66756E642D6772616E7473290A616E64207468652047616D65206F66205265616C6D7320696E69746961746976652C2064656D6F6E7374726174696E6720766172696F7573206176656E75657320666F72206275696C6465727320746F0A656E6761676520616E6420636F6E7472696275746520746F207468652065636F73797374656D27732067726F7774682E0A0A23232054686520467574757265206F6620476E6F2E6C616E640A496E20636F6E636C7573696F6E2C2077652067756964656420617474656E64656573207468726F7567682074686520646576656C6F706D656E7420616E642061737069726174696F6E73206F66200A476E6F2E6C616E642C20686967686C69676874696E67206974732067726F7774682066726F6D20697473206F726967696E7320746F206974732070726573656E74206368616C6C656E676573200A776974682054657374342C204D61696E6E65742C20616E64206265796F6E642E20576520646973637573736564207468652063757272656E7420656D706861736973200A6F6E20656E67696E656572696E6720616E6420646576656C6F706D656E7420746F206275696C64206120736F6C696420626173652074686520476E6F6D6573206F6620746865206675747572652C0A756E6465726C696E696E672074686520696D706F7274616E6365206F6620546573743420E2809420616E20616476616E636564206578706572696D656E74616C20746573746E65742074686174200A707265636564657320746865206C61756E6368206F66204D61696E6E657420E2809420616E64207768617420746865207375636365737366756C20696D706C656D656E746174696F6E206F66205465737434200A7369676E696669657320666F72206F75722065636F73797374656D2E0A0A5765206F70656E65642075702074686520666C6F6F7220666F72207175657374696F6E7320616E6420616E73776572732C20616E642074686520746F706963206F662050726F6F66206F66200A436F6E747269627574696F6E20737061726B656420696E74657265737420746F20756E6465727374616E64206974732065636F6E6F6D69632061737065637420616E6420676F7665726E616E63650A6172636869746563747572652C2061732077656C6C2061732069747320636F6D706172617469766520616E616C797369732077697468206F7468657220706F70756C617220636F6E73656E737573200A6D656368616E69736D732E0A0A232320476E6F6D657320476F20476C6F62616C0A5B215B6C656F6E2D70726573656E746174696F6E5D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30342D31355F676E6F2D746F6B796F2F7372632F7468756D62732F6D657263682E6A7067295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30342D31355F676E6F2D746F6B796F2F7372632F6D657263682E6A7067290A0A417320476E6F2E6C616E6420616476616E636573206F6E2069747320526F616420746F204D61696E6E65742C2077652077696C6C20626520686F7374696E67206D6F7265206C6F63616C0A6D6565747570732C20736F20796F75276C6C2077616E7420746F20737461792075706461746564206F6E207570636F6D696E6720476E6F2E6C616E64206576656E7473206279207669736974696E67200A6F7572205B5570636F6D696E67204576656E74735D2868747470733A2F2F676E6F2E6C616E642F6576656E747329207061676520616E6420666F6C6C6F77696E67207573206F6E200A5B547769747465725D2868747470733A2F2F747769747465722E636F6D2F5F676E6F6C616E64292E0A3214323032342D30342D31355430303A30303A30305A32146C656F6868686E2C6D696368656C6C65656C656E32166D65657475702C746F6B796F2C636F6D6D756E6974790AB0510A0A2F766D2E6D5F63616C6C12A1510A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374320D6D6F6E74686C792D6465762D38322F546865204D6F726520596F7520476E6F20383A20506F7274616C204C6F6F702C20546573743420616E64204D6F726532CB4F0A0A57656C636F6D6520746F207468652038746820696E7374616C6C6D656E74206F6620546865204D6F726520596F7520476E6F2E204265636175736520776520686176652061206C6F74206F6620677265617420757064617465732C207765277265206578706572696D656E74696E672077697468206120646966666572656E742061727469636C6520666F726D61742074686174277320636C65616E657220616E64206D6F726520746F2074686520706F696E742E0A0A496620796F752077616E7420746F2064697665206465657065722C207765206861766520746865207765656B6C7920656E67696E656572696E67205B757064617465735D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6D656574696E67732F6973737565732F33372920616E6420766964656F205B7265636F7264696E67735D2868747470733A2F2F7777772E796F75747562652E636F6D2F77617463683F763D396368374D684B4E426D77266C6973743D504C376E503772315169446B744D436477317964516F3263724D3379365A6B3745342920617661696C61626C652E200A0A232320476E6F20436F726520557064617465730A0A546869732065646974696F6E206973207061636B6564207769746820677265617420757064617465732C2062757420746865206D6F737420696D706F7274616E74206F6E65732061726520746865206C61756E6368206F662074686520506F7274616C204C6F6F7020746573746E65742C20616E642074686520616E6E6F756E63656D656E74206F6620746865206E657874206D696C6573746F6E65206F6E2074686520726F616420746F206D61696E6E6574202D2054657374342E0A0A232323205465737434204D696C6573746F6E65206973204C6976650A0A546865206E657874206D616A6F72206D696C6573746F6E65206F6E206F757220726F616420746F206D61696E6E65742069732054657374342E205468697320746573746E65742077696C6C2068617665207365766572616C20696D706F7274616E7420696D70726F76656D656E74733A0A0A2D204D756C74696E6F6465206361706162696C6974790A2D20526F6C6C696E672072656C65617365206F6620746573746E65742062696E61726965730A2D204E6F207265736574730A0A54686520696E697469616C2076616C696461746F72207365742077696C6C20626520636F6D707269736564206F6620746865206D6F73742070726F6C6966696320636F6E7472696275746F727320616E6420416C6C2D696E2D42697473207465616D732E2057652772652061696D696E6720746F206C61756E636820546573743420696E204A756C792C20616E64207769746820333225206F6620746865206D696C6573746F6E6520636F6D706C6574652C206F757220636F6E666964656E636520696E20746865206C61756E6368206461746520697320686967682E0A0A54686520656E74697265206D696C6573746F6E652063616E206265207365656E205B686572655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6D696C6573746F6E652F34292E0A0A23232320506F7274616C204C6F6F70206973204C6976650A0A506F7274616C204C6F6F7020697320616E20616C776179732D75702D746F2D646174652073746167696E6720746573746E6574207468617420616C6C6F777320666F72207573696E6720746865206C61746573742076657273696F6E206F6620476E6F2C20476E6F2E6C616E642C20616E6420544D322E2049742063616E2072756E20746865206C617465737420636F64652066726F6D20746865206D6173746572206272616E6368206F6E2074686520476E6F206D6F6E6F7265706F2C207768696C652070726573657276696E67206D6F73742F616C6C207468652070726576696F757320746865207472616E73616374696F6E20646174612E200A0A46696E64206F7574206D6F72652061626F75742074686520506F7274616C204C6F6F7020696E20746865205B646F63756D656E746174696F6E5D2868747470733A2F2F646F63732E676E6F2E6C616E642F636F6E63657074732F706F7274616C2D6C6F6F702F292E0A0A576527766520616C736F20656E61626C656420746865205B676E6F2E6C616E64206661756365745D2868747470733A2F2F676E6F2E6C616E642F6661756365742920746F207265636569766520746573746E65742066756E647320666F7220506F7274616C204C6F6F702E0A0A23232320476E6F20506C617967726F756E64206E6F7720737570706F727473206D756C7469706C65206E6574776F726B730A0A5769746820506F7274616C204C6F6F70206C69766520616E6420546573743420636F6D696E672C206974206D616465206D6F726520616E64206D6F72652073656E736520746F2062652061626C6520746F2075736520476E6F20506C617967726F756E64206F6E206F74686572206E6574776F726B732E205468617427732077687920776527766520616464656420737570706F727420666F72206E6F74206A75737420546573743320616E6420506F7274616C204C6F6F702C2062757420616C736F20616E7920637573746F6D206E6574776F726B20796F75206D696768742077616E7420746F207370696E2075702E0A0A546865206E6574776F726B2073656C656374696F6E2064726F70646F776E20697320696E205B476E6F20506C617967726F756E645D2868747470733A2F2F706C61792E676E6F2E6C616E642F292061742074686520746F702072696768742E20596F75276C6C20616C736F2066696E6420746865726520616E206F7074696F6E20746F2061646420796F7572206F776E20637573746F6D206E6574776F726B2E200A0A232323204368616E67656C6F670A0A576527766520616C736F20646F6E65206120746F6E206F66206F7468657220776F726B20746F206D616B652065766572796F6E652773206C69766573206561736965722E0A0A2D20446F637320617265206E6F772073656172636861626C65206F6E205B646F63732E676E6F2E6C616E645D28687474703A2F2F646F63732E676E6F2E6C616E642F292E204E6F206D6F7265206D616E75616C20736561726368696E67210A2D2057697468207468652068656C70206F66204F6E626C6F632C206F75722074782D696E6465786572205B6A7573742077656E74207375706572736F6E69632077697468204772617068514C5D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F74782D696E64657865722F70756C6C2F3230292E2055736572732063616E206E6F7720686176652066696E6520677261696E65642066696C7465726564204772617068514C20717565726965732C2077686963682061726520637572696F75736C7920717569636B2E20546869732069732061207175616E74756D206C65617020696E20646174612073657276696E6720666F722074686520696E64657865722E0A2D205B416464656420737570706F727420666F722060676E6F6C616E642073656372657473605D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F31353933292C2070617274206F66206F7572205B6C6172676572206566666F72745D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F313833362920746F206F7665726861756C207468652077617920476E6F20636861696E73202F206E6F6465732061726520696E697469616C697A65642E204E6F772075736572732063616E206469726563746C79206D616E6167652C20646973706C617920616E6420766572696679207468656972206E6F646520736563726574732C20776974686F757420686176696E6720746F2072656C79206F6E206D616E75616C20434C49206D616769632E0A2D2046696E616C6C79206D657267656420696E205B737570706F727420666F722061206E6F6E2D7265666C656374204A534F4E20706172736572207061636B6167655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F31343135292E2052656A6F6963652C204A534F4E20737570706F7274206973206E6F772070726F7669646564206F7574206F662074686520626F78207769746820616E206561737920746F2075736520476E6F207061636B6167652C207468616E6B7320746F20746865204F6E626C6F63207465616D2E0A2D204D657267656420696E20737570706F727420666F72205B696E743235365D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F313834382920616E64205B75696E743235365D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3137373829207061636B616765732E2053696E636520476E6F20646F6573206E6F7420737570706F727420606269672E496E7460207965742C207468657365207061636B61676573206172652061206E69636520616E64206D7563682D6E6565646564207265706C6163656D656E7420666F72206C61726765206E756D626572206C6F6769632E0A2D205B496D706C656D656E74656420736861646F77696E672072756C65735D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F313739332920696E2074686520476E6F564D2E205468697320564D206669782070726576656E7473207061636B6167657320736861646F77696E6720676C6F62616C2D6C6576656C206964656E746966696572732E0A2D2060676E6F64657660206E6F77205B6175746F6D61746963616C6C792072656C6F6164732074686520676E6F77656220706167655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3134353729207768656E6576657220796F752075706461746520746865207265616C6D277320636F64652E2054686520676F616C206F6620676E6F64657620697320746F206D616B65207265616C6D20646576656C6F7065727327206C696665206561736965722E2054686973206368616E676520667572746865722072656163686573207468617420676F616C2C206372656174696E67206120666565646261636B206C6F6F7020666F7220646576656C6F706D656E742073696D696C617220746F207468617420657870657269656E6365642062792066726F6E742D656E6420646576656C6F706572732028696520606E6F64656D6F6E60292E0A2D20506C6574686F7261206F66207175616C697479206F66206C69666520666978657320616E6420696D70726F76656D656E74732C20696E636C7564696E67205B646F637320757064617465735D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F31373431292C205B636F6D6D616E642066697865735D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F313731362920616E64205B636F6E666F726D69747920746F20746865207374616E6461726420676F20746F6F6C696E672073756974655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F31343037292E2055706461746573206C696B65207468657365206B65657020746865206C69676874732072756E6E696E6720616E642074686520555820736D6F6F746820666F7220656E642D75736572732E0A2D205B4D657267656420696E20746865206063666F7264333260207061636B6167655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F313537322920746F2074686520476E6F207061636B616765206578616D706C65732E205061636B61676573206C696B652074686573652068656C702074686520636F6D6D756E69747920616E6420696D706C656D656E746174696F6E20706172746E65727320696E207574696C697A696E6720476E6F206566666563746976656C792E0A2D20436C65616E656420757020616E64206578706F73656420616E205B656E64706F696E7420666F72207175657279696E67207472616E73616374696F6E20726573756C74735D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3135343629206469726563746C792066726F6D20746865206E6F64652E204576656E2074686F756768206F7572207472616E73616374696F6E20696E646578657220287374616E64616C6F6E6520746F6F6C29206F6666657273206D616E792062656C6C7320616E642077686973746C65732C20686176696E6720746865206162696C69747920746F206665746368207472616E73616374696F6E20726573756C7473206F6E20746865206E6F646520776173207468652066696E616C206D697373696E6720706965636520696E206B656570696E672074686520544D3220525043206D696E696D616C2C206275742066756E6374696F6E616C2E0A2D20476E6F646576206E6F77205B737570706F727473206163636F756E74207072656D696E65735D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F31393338292C20736F6F6E20746F20737570706F7274207472616E73616374696F6E207072656465706C6F79732E20497420697320616C736F206E6F7720696E7374616C6C6564206F7574206F662074686520626F782077697468206D616B6520696E7374616C6C2E2054686973206D65616E73207468617420796F752063616E206E6F77207370656369667920616E206163636F756E742062616C616E636520746F206265207072656D696E6564207768656E207573696E6720676E6F6465762C206E6F20636C756E6B792062616C616E63652066696C65206368616E676573207265717569726564210A2D20416464656420737570706F727420666F72205B575320636C69656E74732C2075706461746564204A534F4E2D5250432062617463682070726F63657373696E675D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F31343938292E20537769746368696E6720616C6C206F66206F757220746F6F6C732C20616E6420696D706C656D656E746174696F6E20706172746E657220746F6F6C732066726F6D20746865204854545020636C69656E7420746F2074686520575320636C69656E742077696C6C2062652061206D61737369766520626F6F737420696E207465726D73206F66206E6574776F726B206F766572686561642E0A2D2057652776652075706461746564207468652060676E6F6C616E646020286E6F64652920636F6D6D616E64205B746F20696E636C7564655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F313935342920746865206067656E6573697360206D616E6167656D656E742073756974652E2041732070617274206F66206F757220626967676572206566666F727420746F206F7665726861756C2074686520636861696E20696E697469616C697A6174696F6E20616E64206D616E6167656D656E7420666C6F772C2074686973207761732061206E6563657373617279207374657020696E20616368696576696E67206120322073746570207365747570202860676E6F6C616E6420696E69746020616E642060676E6F6C616E6420737461727460292E0A2D205570646174656420746865206465706C6F796D656E7420666C6F7773202872656C65617365732920666F72207468652076617374206D616A6F72697479206F66206F757220746F6F6C7320286661756365742C20696E64657865722C2073757065726E6F76612C206D61696E20676E6F2062696E617269657329207573696E6720676F2D72656C65617365722E204E6F772074686520636F7265207465616D2063616E2074616720737065636966696320746F6F6C202F207265706F2076657273696F6E7320616E64206861766520612070726570617265642072656C656173652C207769746820616C6C2072656C656173652062696E617269657320726561647920746F20676F2E0A2D2054686520676E6F6C616E64206E6F6465205B6E6F7720737570706F7274732074656C656D657472795D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F31373632292C20616E64206578706F736573206D657472696373206F7574206F662074686520626F782E205468697320616C6C6F777320746865206E6F646520746F20626520747261636B656420696E2074696D652D73657269657320646174616261736573206C696B652050726F6D6574686575732C20616E6420626574746572207265636F726420746865206865616C746820616E6420706572666F726D616E6365206F6620746865206E6F64652E0A0A23232045636F73797374656D20557064617465730A0A232323204F6E626C6F630A0A2A204164656E612077616C6C6574205B76312E31302E305D2868747470733A2F2F6769746875622E636F6D2F6F6E626C6F632F6164656E612D77616C6C65742F72656C65617365732F7461672F76312E31302E30292072656C6561736564200A2A204164656E61205B5365637572697479204576616C756174696F6E205265706F72745D2868747470733A2F2F6769746875622E636F6D2F6164722D736B2F6164656E612D657874656E73696F6E2F626C6F622F6D61696E2F6175646974732F4164656E6125323053656375726974792532304576616C756174696F6E253230466562253230323032342E70646629207075626C69736865642062792074686520416942207365637572697479207465616D200A2A205075626C69736865642061205B73686F727420766964656F2067756964655D2868747470733A2F2F7777772E796F75747562652E636F6D2F77617463683F763D5466537A70315F4D614F4929206F6E20686F7720746F2062726F61646361737420616E64207369676E2061207472616E73616374696F6E207573696E672074686520416972476170204163636F756E742E0A0A2323232054657269746F72690A0A2D204C696E6B65642074686520476974487562206163636F756E742077697468206F6E2D636861696E20616464726573732E20546865207265616C6D20616C6C6F7773206120626F7420746F206164642061207075626C6963206B65792E2054686520626F742063616E207369676E20746865206164647265737320616E6420476974487562204944206163636F756E742E20546869732066756E6374696F6E616C697479207065726D6974732065766572796F6E6520746F206C696E6B207468656972206163636F756E74206F6E20746865207265616C6D207365616D6C6573736C792E0A2D20536F6369616C20666565642C2044414F2053444B2C20616E64204D6F6465726174696F6E2044414F206465706C6F796564206F6E20706F7274616C206C6F6F703A2068747470733A2F2F6170702E74657269746F72692E636F6D2F666565643F6E6574776F726B3D676E6F2D706F7274616C0A0A23232320447261676F730A0A2D20466C697070616E646F0A202020202D205075626C696320666175636574207365742075700A202020202D20466978656420616E6420736C696768746C7920696D70726F76656420746865206D756C74692D636861696E2064617368626F6172642061742068747470733A2F2F666C697070616E646F2E78797A0A2D205A656E7461736B7469632C20616E206F6E2D636861696E2070726F6A656374206D616E6167656D656E74206170706C69636174696F6E200A202020202D20546865726520697320746865205A656E7461736B74696320636F726520666972737420636F6D706C65746520696D706C656D656E746174696F6E2E2041207061636B61676520636F6E7461696E696E6720616E20756E6F70696E696F6E6174656420696D706C656D656E746174696F6E206F6620746865204173736573732D4465636964652D446F20776F726B666C6F772E200A202020202D20446F637320616E6420636F64653A2068747470733A2F2F6769746875622E636F6D2F69727265766572656E7473696D706C69636974792F7A656E7461736B7469632D636F72650A0A2323232042657274790A0A2D20496E206F7264657220746F2061766F696420746865206D6973636F6E63657074696F6E2074686174206974277320616E206F6666696369616C20736F6369616C20646170702C20476E6F536F6369616C207761732072656E616D656420746F205B64536F6369616C5D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F64736F6369616C290A2D2044656D6F20766964656F206F662074686520637573746F6D6572206A6F75726E65792C2073686F77636173696E6720746865207570646174656420736F6369616C206170702055492068747470733A2F2F7777772E6C6F6F6D2E636F6D2F73686172652F36323166313531343539623034306230613265366132326164663936623337310A2D204275696C64696E67206F7574206120736572696573206F6620476E6F204E6174697665204B6974207475746F7269616C7320285B457069736F646573206F6E6520616E642074776F5D2868747470733A2F2F7777772E796F75747562652E636F6D2F77617463683F763D4E31484C79514448475130266C6973743D504C376E503772315169446B747365573737383677727032336970425A464C50623626696E6465783D3229290A0A2323232053747564656E7420436F6E7472696275746F722050726F6772616D0A0A576527766520737461727465642061205B70726F6772616D5D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F73747564656E742D636F6E7472696275746F72732D70726F6772616D2920746F20776F726B20776974682073747564656E7420636F686F727473206469726563746C79207468726F75676820746865697220756E697665727369746965732E2054686520666972737420756E697665727369747920636F686F727420697320626173656420696E20526F65756E207769746820666F75722073747564656E74732063757272656E746C7920706172746963706174696E6720696E207468697320696E69746961746976652E20596F752063616E2073656520736F6D65206F662074686520776F726B20696E206F7572206861636B65727370616365205B7265706F5D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F6973737565732F3539292E200A0A2D204D616C656B2077617320636974656420666F722074686520322050527320285B75666D74206D756C7469627974655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3138383929202620616E64205B746F646F6C697374206578616D706C652056305D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3138313129292E0A2D204D616C656B20616C736F2066696E6973686564205630206F6620476E6F46756E644D652C20612063726F776466756E64696E67206578616D706C652E0A2D205468656F206D6164652061205B70756C6C20726571756573745D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6D656D656C616E642F70756C6C2F323129206F6E206973737565233131206F6620746865206D656D656C616E64207265706F2E200A0A232323204E657720436F6E74656E740A0A576527726520726567756C61726C79206275696C64696E67206F7574207772697474656E20616E6420766964656F207475746F7269616C7320616E6420636F6E74656E742E20576520726563656E746C792072656C65617365642074686520275B486F7720746F206275696C642061207265616C6D207573696E6720476E6F6465765D2868747470733A2F2F7777772E796F75747562652E636F6D2F77617463683F763D4870346165527350743367292720766964656F207475746F7269616C20746861742073746172747320776974682074686520626173696373206F6620696E697469616C697A696E67206120676E6F2E6D6F642066696C652C206372656174696E67206120476E6F207265616C6D2C20616E6420696D706C656D656E74696E672073696D706C652066756E6374696F6E7320666F7220656666656374697665207265616C6D2076697375616C697A6174696F6E2E200A0A2323204576656E747320616E64204D6565747570730A0A2323232050617374206576656E74730A0A2323232320476F20746F20476E6F204B6F72656120284D61726368203233290A0A546F6765746865722077697468204F6E626C6F6320776520686F737465642074686520476F20746F20476E6F20776F726B73686F702E2054686520382D686F75722073657373696F6E20696E636C756465642061206C6563747572652C2061206275696C646572206368616C6C656E67652C20616E642061206E6574776F726B696E67206576656E742E2032352B20646576656C6F706572732066726F6D2064657620636F6D6D756E69746965732C20576562332073746172747570732C20616E642074686520436F736D6F736E6175747320696E204B6F726561206861766520617474656E64656420746865206576656E7420666F7220612068616E64732D6F6E20657870657269656E6365206F662077726974696E6720612073696D706C652061707020696E20476E6F2E20436865636B206F757420746865205B4F6E626C6F6327732072656361705D2868747470733A2F2F6D656469756D2E636F6D2F6F6E626C6F632F676F2D746F2D676E6F2D72656361702D696E74726F2D746F2D7468652D676E6F2D737461636B2D776974682D6D656D656C616E642D3238346134336437663632302920666F72206D6F72652064657461696C7320616E642070696374757265732E0A0A2323232320476E6F2E6C616E6420546F6B796F206D65657475702028417072696C203131290A0A496E74726F20746F20476E6F2073657373696F6E20696E20546F6B796F207761732068656C6420696E2066726F6E74206F662032302B20646576656C6F7065727320616E64207765623320656E7468757369617374732E205468657920676F7420746F20686561722061626F757420476E6F2E6C616E642C20686F77206974277320646576656C6F70696E6720617320616E2065636F73797374656D2C206F757220706C616E7320666F7220746865206675747572652C20616E6420686F77207468657920636F756C642067657420696E766F6C7665642E205468617427732074686520544C3B44522C2066756C6C207265636170206973206F6E205B6F757220626C6F675D2868747470733A2F2F676E6F2E6C616E642F722F676E6F6C616E642F626C6F673A702F676E6F2D746F6B796F292E0A0A232323205570636F6D696E67206576656E74730A0A576527766520676F74207468726565206D616A6F72206576656E747320636F6D696E672075700A2D202A2A476F70686572436F6E2045552A2A202F204265726C696E202F204A756E652031377468202D20323074680A2D202A2A476F70686572436F6E2055532A2A202F204368696361676F202F204A756C7920377468202D20313074680A2D202A2A4E6562756C61722053756D6D69742A2A202F204272757373656C73202F204A756C7920313274682F313374680A0A496620796F7520706C616E20746F20617474656E6420616E79206F66207468657365206576656E74732C2066696E64207573206174206F757220626F6F7468206F72206F6E207468652068616C6C77617920747261636B2C20616E64206C657427732074616C6B213214323032342D30342D32365430303A30303A30305A32074B6F7574656B693223676E6F6C616E642C65636F73797374656D2C757064617465732C676E6F766D2C746D320A98360A0A2F766D2E6D5F63616C6C1289360A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F737432116B762D73746F7265732D696E6465786572324A4B65792F56616C75652053746F7265733A20486F7720576520496D70726F7665642074686520506572666F726D616E6365206F66204F75722074782D696E646578657220627920313078329D340A0A496E20746869732061727469636C652C207765276C6C206469736375737320686F7720776520616368696576656420612074656E666F6C6420696E63726561736520696E207468652070726F63657373696E67207370656564206F66207468652074782D696E6465786572206279206170706C79696E6720666F7572206B657920636F6E63657074732072656C6174656420746F206F757220757365206F66206B65792F76616C75652073746F726167653A0A0A2D20556E6465727374616E64696E67204B65792F56616C75652053746F726520566172696162696C6974790A2D2054686520496D706F7274616E6365206F6620456666696369656E74204461746120456E636F64696E670A2D20496D706C656D656E74696E67205365636F6E6461727920496E6465786573206F6E2061204B65792F56616C75652053746F72650A2D2054686520526F6C65206F6620426174636820496E736572747320696E20456E68616E63696E6720506572666F726D616E63650A20202D204461746120636F6E73697374656E63790A20202D2053706565640A202020202D204F6C640A202020202D204E65770A2D20436F6E636C7573696F6E0A0A546865205472616E73616374696F6E20496E646578657220285B74782D696E64657865725D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F74782D696E646578657229292069730A746865207072696D61727920746F6F6C20476E6F2E6C616E64207573657320746F20696E64657820697473206E6574776F726B732E20497420697320696E20636861726765206F66206B656570696E67200A7570207769746820626C6F636B2070726F64756374696F6E2C206665746368696E67206E657720646174612C20696E646578696E672069742C20616E642073657276696E6720697420746F2075736572730A7768696C652070726F766964696E672066696C746572696E6720616E6420737562736372697074696F6E206361706162696C69746965732E205468652074782D696E646578657220637265617465730A766572736174696C69747920616E642065617365206F6620757365207768656E207573696E67206F6E2D636861696E20646174612C207768696368206973206F6E65206F6620746865206B6579200A61737065637473206F6620612066756C6C792066756E6374696F6E696E6720646563656E7472616C697A6564206170706C69636174696F6E2E0A0A232320556E6465727374616E64696E67204B65792F56616C75652053746F726520566172696162696C6974790A0A4E6F7420616C6C206B65792F76616C75652073746F726167657320617265206372656174656420657175616C2E204561636820766172696573207369676E69666963616E746C792C20616E64200A646570656E64696E67206F6E20746865697220696E7465726E616C206461746120737472756374757265732C20736F6D6520617265206265747465722073756974656420666F72206365727461696E0A757365206361736573207468616E206F74686572732E2041206465657020756E6465727374616E64696E67206F6620746865206B65792F76616C75652073746F726520796F7520706C616E20746F200A7573652077696C6C2068656C7020796F7520626574746572206F7267616E697A65206461746120666F7220656666696369656E742077726974696E6720616E642072656164696E6720616E64200A61737369737420696E2063686F6F73696E672074686520626573742073746F726520666F7220796F7572207370656369666963206E656564732E0A0A5768696C65205B506562626C6544425D2868747470733A2F2F6769746875622E636F6D2F636F636B726F61636864622F706562626C6529206973206261736564206F6E200A5B526F636B7344425D2868747470733A2F2F6769746875622E636F6D2F66616365626F6F6B2F726F636B7364622F77696B692F526F636B7344422D4F76657276696577292C207468652074776F200A64617461626173657320646966666572207369676E69666963616E746C792E20426F7468207574696C697A65204C534D205472656573206275696C742075706F6E2053535461626C65733B0A686F77657665722C20506562626C65444220737570706F727473206F6E6C79206120737562736574206F662074686520666561747572657320617661696C61626C6520696E20526F636B7344422E200A466F7220696E7374616E63652C20506562626C654442206C61636B73206275696C742D696E207472616E73616374696F6E206361706162696C69746965732C206275742074686573652063616E206265200A616C7465726E61746976656C7920696D706C656D656E746564207468726F7567682074686520757365206F66204261746368657320616E642F6F7220536E617073686F74732E0A0A23232054686520496D706F7274616E6365206F6620456666696369656E74204461746120456E636F64696E670A0A4F757220696E646578696E6720696E766F6C76656420656C656D656E747320646566696E656420627920636F6E736563757469766520696E7465676572732C207769746820426C6F636B73206F6E200A6F6E65207369646520616E64205472616E73616374696F6E732077697468696E206120426C6F636B206F6E20746865206F746865722E0A0A496E697469616C6C792C20426C6F636B73207765726520696E6465786564207573696E67206120636F6D62696E6174696F6E206F662060626C6F636B5F7072656669786020616E6420626C6F636B5F69640A656E636F64656420696E206C6974746C6520656E6469616E2E2054686973206D6574686F64207761736E277420616C6C6F77696E6720757320746F20757365206974657261746F727320666F72200A6F72646572656420646174612072657472696576616C2C20666F7263696E6720757320746F20666574636820656C656D656E747320696E646976696475616C6C792C20726573756C74696E6720696E0A65786365737369766520616E6420696E656666696369656E7420646174616261736520717565726965732E0A0A4166746572207265666163746F72696E672C2077652061646F7074656420612062696E61727920656E636F64696E6720736368656D65207468617420616C6C6F77656420666F7220637573746F6D0A656E636F64696E67206F6620737472696E677320616E6420696E7465676572732E205468697320666C65786962696C69747920656E61626C656420617363656E64696E67206F722064657363656E64696E67200A6F7264657220697465726174696F6E732C207768696368207369676E69666963616E746C7920696D70726F766564206F7572206162696C69747920746F207265616420646174612073657175656E7469616C6C790A7468726F756768206974657261746F727320616E642C20636F6E73657175656E746C792C20726564756365642071756572792074696D6573206472616D61746963616C6C792E0A0A536D616C6C206578616D706C652061626F757420686F7720776520656E636F6465642075696E7433322076616C75657320696E20617363656E64696E67206F726465723A0A0A606060676F210A66756E6320656E636F646555696E743332417363656E64696E672862205B5D627974652C20762075696E74333229205B5D62797465207B0A0972657475726E20617070656E6428622C206279746528763E3E3234292C206279746528763E3E3136292C206279746528763E3E38292C2062797465287629290A7D0A6060600A0A232320496D706C656D656E74696E67205365636F6E6461727920496E6465786573206F6E2061204B65792F56616C75652053746F72650A0A5768696C65206D6F73742066696C7465727320617265206170706C696564206F6E2074686520666C792064756520746F207468656972206C6F7720636F73742C20776520696D706C656D656E7465640A7365636F6E6461727920696E646578657320746F206665746368205472616E73616374696F6E73206279204861736820656666696369656E746C792E0A0A5365636F6E6461727920696E646578657320617265207370656369616C697A6564206B65792067726F7570732074686174206469726563746C79207265666572656E636520746865207072696D6172790A696E646578206B657920776865726520746865206461746120726573696465732E20466F72206578616D706C652C2061207472616E73616374696F6E20776974682049442060336020696E20626C6F636B0A6034326020697320696E646578656420617320602F696E6465782F7478732F5B75696E7436345D34325B75696E7433325D33602E205468657365207472616E73616374696F6E732061726520616C736F200A756E697175656C79206964656E7469666965642062792061206861736820726570726573656E74696E672074686520656E74697265207472616E73616374696F6E20636F6E74656E742E0A0A546F206665746368207472616E73616374696F6E7320627920686173682C20776520637265617465642061207365636F6E6461727920696E646578207468617420706F696E747320746F207468650A7072696D61727920696E6465783A0A0A602F696E6465782F7478682F5B484153485D202D3E202F646174612F7478732F5B75696E7436345D34325B75696E7433325D336020200A0A416C74686F756768206F7572207365636F6E6461727920696E646578657320646F206E6F742072657175697265206F72646572656420697465726174696F6E2C2074686973206361706162696C6974790A72656D61696E7320617661696C61626C652C20616C6C6F77696E6720757320746F206170706C79206164646974696F6E616C2066696C74657273206173206E65636573736172792E20466F720A696E7374616E63652C20776520636F756C6420696E646578207472616E73616374696F6E7320627920796561723A0A0A602F696E6465782F7478596561722F5B75696E7431365D323032345B75696E7436345D34325B75696E7433325D33202D3E202F646174612F7478732F5B75696E7436345D34325B75696E7433325D33600A0A5468697320666F726D617420616C6C6F777320757320746F2069746572617465207468726F756768207472616E73616374696F6E732077697468696E206120737065636966696320796561722C200A66726F6D2074686520737461727420746F2074686520656E64206F6620323032332C20666F72206578616D706C653A0A0A2D2066726F6D3A20602F696E6465782F7478596561722F5B75696E7431365D323032335B75696E7436345D305B75696E7433325D306020200A2D20746F3A20602F696E6465782F7478596561722F5B75696E7431365D323032335B75696E7436345D4D41585F55494E5436345B75696E7433325D4D41585F55494E5433326020200A0A23232054686520526F6C65206F6620426174636820496E736572747320696E20456E68616E63696E6720506572666F726D616E63650A0A54686520616476616E7461676573206F66207772697465206261746368657320617265206F6674656E206F7665726C6F6F6B656420627574206372756369616C2E20496E73657274696E67200A656C656D656E747320696E646976696475616C6C792063616E206C65616420746F206461746120636F6E73697374656E63792069737375657320616E6420736C6F776572206F7065726174696F6E732E0A0A232323204461746120636F6E73697374656E63790A0A4261746368657320656E737572652061746F6D6963697479E2809465697468657220616C6C20656C656D656E747320617265207065727369737465642C206F72206E6F6E65206172652E200A576974686F757420626174636865732C2061206661696C75726520647572696E6720696E73657274696F6E20636F756C6420726573756C7420696E206120626C6F636B206265696E672073617665640A776974686F757420736F6D65206F6620697473207472616E73616374696F6E732E0A0A2323232053706565640A0A4561636820696E73657274696F6E20696E766F6C76657320696E7465726E616C2070726F636573736573207468617420736C6F7720646F776E20746865206F7065726174696F6E2E204279200A67726F7570696E67207365766572616C20656E747269657320696E206F6E652062617463682C207765207369676E69666963616E746C7920656E68616E636520696E73657274696F6E2073706565642E0A546865736520617265206E65772062656E63686D61726B7320636F6D706172696E6720746865206F6C6420616E64206E657720776179206F66207772697474696E6720656C656D656E7473200A776974686F757420616E64207769746820626174636865732E204E6F7465207468617420746865736520617265206A7573742073796E7468657469632062656E63686D61726B7320616E64207468650A31307820696D70726F76656D656E7420776173206D65617375726564207768656E207573696E672074686520696E6465786572206173206974206973202877652063616D652066726F6D200A7370656E64696E67203330206D696E7320746F2033206D696E73207769746820746865206E65772073746F72616765206368616E676573293A0A0A23232323204F6C640A0A606060676F210A66756E632042656E63686D61726B506562626C655772697465732862202A74657374696E672E4229207B0A0973746F72652C20657272203A3D204E6577444228622E54656D704469722829290A09726571756972652E4E6F4572726F7228622C20657272290A0964656665722073746F72652E436C6F736528290A0A097061697273203A3D2067656E657261746552616E646F6D506169727328622C20622E4E290A0A09622E526573657454696D657228290A09666F72206B2C2076203A3D2072616E6765207061697273207B0A0909657272203A3D2073746F72652E536574285B5D62797465286B292C2076290A0A0909622E53746F7054696D657228290A0909726571756972652E4E6F4572726F7228622C20657272290A0909622E537461727454696D657228290A097D0A7D0A6060600A0A6060600A676F6F733A206C696E75780A676F617263683A20616D6436340A706B673A206769746875622E636F6D2F676E6F6C616E672F74782D696E64657865722F73746F726167652F706562626C650A6370753A20414D442052797A656E203520353630305820362D436F72652050726F636573736F720A42656E63686D61726B506562626C655772697465730A42656E63686D61726B506562626C655772697465732D3132202020200920202020313331360920202020393238393431206E732F6F7009202020202020333320422F6F7009202020202020203020616C6C6F63732F6F700A504153530A6F6B2020096769746875622E636F6D2F676E6F6C616E672F74782D696E64657865722F73746F726167652F706562626C6509312E333834730A6060600A0A23232323204E65770A0A606060676F210A66756E632042656E63686D61726B506562626C655772697465732862202A74657374696E672E4229207B0A0973746F72652C20657272203A3D204E6577506562626C6528622E54656D704469722829290A09726571756972652E4E6F4572726F7228622C20657272290A0964656665722073746F72652E436C6F736528290A0A097061697273203A3D2067656E657261746552616E646F6D426C6F636B7328622C20622E4E290A0A096261746368203A3D2073746F72652E5772697465426174636828290A0A09622E526573657454696D657228290A09666F72205F2C2076203A3D2072616E6765207061697273207B0A0909657272203A3D2062617463682E536574426C6F636B2876290A0A0909622E53746F7054696D657228290A0909726571756972652E4E6F4572726F7228622C20657272290A0909622E537461727454696D657228290A097D0A0A09657272203D2062617463682E436F6D6D697428290A0A09622E53746F7054696D657228290A09726571756972652E4E6F4572726F7228622C20657272290A09622E537461727454696D657228290A7D0A6060600A0A6060600A676F6F733A206C696E75780A676F617263683A20616D6436340A706B673A206769746875622E636F6D2F676E6F6C616E672F74782D696E64657865722F73746F726167650A6370753A20414D442052797A656E203520353630305820362D436F72652050726F636573736F720A42656E63686D61726B506562626C655772697465730A42656E63686D61726B506562626C655772697465732D313220202020202020202020323439343632202020202020202020202020202034373330206E732F6F702020202020202020202020203137303420422F6F70202020202020202020343320616C6C6F63732F6F700A504153530A6F6B2020202020206769746875622E636F6D2F676E6F6C616E672F74782D696E64657865722F73746F72616765202020342E363639730A6060600A0A232320436F6E636C7573696F6E0A0A496620796F752066696E64206F7574207468697320696E746572657374696E6720616E642077616E7420746F2068617665206120646565706572206C6F6F6B2061626F75740A5B686F7720697420697320646F6E655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F74782D696E64657865722F747265652F6D61696E2F73746F72616765292C206F72206A75737420747279206F757220696E64657865722C2069742069732061732073696D706C652061732072616D70696E67207570200A6120646F636B657220696D6167653A0A0A6060600A646F636B65722072756E202D6974202D7020383534363A3835343620676863722E696F2F676E6F6C616E672F74782D696E64657865723A6C6174657374207374617274202D72656D6F746520687474703A2F2F74657374332E676E6F2E6C616E643A33363635370A6060600A0A416E6420737461727420706C6179696E672077697468206974207468726F75676820697473204772617068514C20696E746572666163652061742060687474703A2F2F6C6F63616C686F73743A383534362F6772617068716C600A3214323032342D30352D31305431333A33373A30305A3209616A6E61766172726F3218626C6F672C706F73742C74782D696E64657865722C6465760ABB390A0A2F766D2E6D5F63616C6C12AC390A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F73743210676E6F2D73747564696F2D696E74726F323E496E74726F647563696E6720476E6F2053747564696F2C20746865205072656D696572204275696C64657220537569746520666F7220476E6F2E6C616E6432B3370A0A5B215B696E74726F64756374696F6E2D62616E6E65725D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30352D31345F676E6F2D73747564696F2D696E74726F2F7372632F7468756D62732F696E74726F647563696E672D676E6F73747564696F2E706E67295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30352D31345F676E6F2D73747564696F2D696E74726F2F7372632F696E74726F647563696E672D676E6F73747564696F2E706E67290A0A457863657074696F6E616C20646576656C6F70657220657870657269656E636520697320696E74656772616C20746F2074686520476E6F2065636F73797374656D2C2073686170696E6720746865200A7370656369616C2070726F6772616D6D696E67206C616E67756167652C20476E6F2C20616E642067756964696E6720746865206665617475726573206F6620476E6F2E6C616E642E205468650A746563686E6F6C6F677920737461636B2069732064657369676E656420746F206F6666657220646576656C6F7065727320616E20756E706172616C6C656C656420706C6174666F726D20666F72200A6372616674696E67206E6578742D67656E65726174696F6E20644170707320766961207265616C6D732028736D61727420636F6E747261637473292E0A0A417320476E6F2E6C616E6420657870616E647320696E746F206120756E697665727365206F66207265616C6D732C20646576656C6F706D656E7420746F6F6C73206265636F6D65200A696E737472756D656E74616C20746F20656E61626C6520696E6E6F766174696F6E20616E6420696E67656E756974792E20546F2066756C6C79207265616C697A65207468697320766973696F6E2C0A776520617265206372656174696E6720476E6F2053747564696F2C20656D706F776572696E6720636F6D6D756E697479206D656D6265727320746F2063726561746520616E6420757365200A73756363696E637420616E6420636F6D706F7361626C65207265616C6D73206F6E20476E6F2E6C616E642E0A0A23232054686520476E6F2053747564696F20446576656C6F70657220457870657269656E63650A0A546865205B476E6F2053747564696F5D2868747470733A2F2F676E6F2E73747564696F2F292073756974652077696C6C206F6666657220657874656E73697665206275696C64657220746F6F6C73207461696C6F726564200A666F7220476E6F2E6C616E642E205468652064657369676E206F6620476E6F2053747564696F20697320696E74656E64656420746F20636174657220746F206120776964652072616E6765206F66200A75736572732C2066726F6D20657870657269656E636564206275696C6465727320746F206E6F6E2D636F646572732C2062792073696D706C696679696E6720616E6420656E68616E63696E6720746865200A70726F63657373206F66206C61756E6368696E6720616E79207265616C6D206F72206170706C69636174696F6E20796F752063616E20696D6167696E652E20496E697469616C6C792C20476E6F200A53747564696F207374617274656420617320612070726F6F66206F6620636F6E63657074204944452028496E746567726174656420446576656C6F706D656E7420456E7669726F6E6D656E74292E200A4576656E7475616C6C792C20746869732065766F6C76656420696E746F206120766973696F6E20666F72206120636F6D70726568656E73697665207375697465206F66206170707320616E64200A736572766963657320E2809420476E6F2053747564696F20E280942064657369676E656420746F20656C65766174652074686520646576656C6F70657220657870657269656E636520746F206E6577200A6865696768747320616E64206D656574207573657273E2809920616E64206275696C64657273E280992063757272656E74206E6565647320616E64206578706563746174696F6E732E0A0A41742074686520656E64206F66206C61737420796561722C207765206C61756E63686564207468652066697273742062657461206170706C69636174696F6E206F662074686520476E6F200A53747564696F2073756974652C205B476E6F20506C617967726F756E645D2868747470733A2F2F706C61792E676E6F2E6C616E642F292C2061732070617274206F662074686520476E6F2E6C616E64206272616E642E20546865200A6F6666696369616C20506C617967726F756E64206F6620476E6F2E6C616E642069732061206D696E696D616C697374696320494445207468617420666163696C69746174657320746865200A6372656174696F6E2C2074657374696E672C206465706C6F796D656E742C20616E642073686172696E67206F6620476E6F20636F64652E204974206973206120706F77657266756C20746F6F6C200A64657369676E656420746F2073696D706C6966792074686520646576656C6F706D656E74206F66207061636B6167657320616E64207265616C6D732C206C6F776572696E672074686520626172726965720A746F20656E74727920666F72206E6577206275696C6465727320616E6420656E68616E63696E67207468652070726F647563746976697479206F6620616476616E63656420476F20646576656C6F706572732E0A0A2A2A546F6461792C20776520617265206578636974656420746F20616E6E6F756E63652074686520626574612072656C65617365206F6620476E6F2053747564696F20436F6E6E6563742C20746865200A7365636F6E64206170706C69636174696F6E20696E2074686520476E6F2053747564696F2073756974652E2A2A0A0A232320596F7572204761746577617920746F20457870657269656E63652074686520506F776572206F66205265616C6D730A0A5B215B626574612D6C61756E63682D62616E6E65725D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30352D31345F676E6F2D73747564696F2D696E74726F2F7372632F7468756D62732F626574612D6C61756E63682E706E67295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30352D31345F676E6F2D73747564696F2D696E74726F2F7372632F626574612D6C61756E63682E706E67290A0A476E6F2053747564696F20436F6E6E656374206973206120746F6F6C20746861742073696D706C69666965732061636365737320616E6420696E746572616374696F6E2077697468207265616C6D200A66756E6374696F6E732E205768657468657220796F75E280997265206578706C6F72696E67207265616C6D73206C696B652074686520476E6F2E6C616E64205B626C6F675D2868747470733A2F2F676E6F2E6C616E642F722F676E6F6C616E642F626C6F67292C200A656E676167696E6720776974682061207265616C6D206465706C6F796564207468726F75676820746865205B476E6F20506C617967726F756E645D2868747470733A2F2F706C61792E676E6F2E6C616E642F292C206F72207573696E672061200A746F6F6C206C696B65205B676E6F6B65795D2868747470733A2F2F646F63732E676E6F2E6C616E642F676E6F2D746F6F6C696E672F636C692F676E6F2D746F6F6C696E672D676E6F6B65792F292C20436F6E6E656374206D616B657320696E746572616374696F6E20656173792E0A0A54686520696E697469616C2076657273696F6E206F6620436F6E6E65637420666F6375736573206F6E2066756E6374696F6E2063616C6C732C20656E61626C696E6720757365727320746F200A696E746572616374207769746820616E79207265616C6DE2809973206578706F7365642066756E6374696F6E287329206F6E20476E6F2E6C616E642E2046756E6374696F6E2063616C6C7320617265200A706572666F726D6564207468726F75676820796F7572206163636F756E74207573696E6720616E792077616C6C6574207468617420737570706F72747320476E6F2E6C616E64200A2863757272656E746C792C205B4164656E615D2868747470733A2F2F7777772E6164656E612E6170702F2920697320746865206F6E6C7920737570706F727465642077616C6C65742E29204C6574E28099732064697363757373207468650A66656174757265207365743A0A0A2D202A2A4163636573732A2A3A204469726563746C7920696E7075742061207265616C6D207061746820616E642073656C6563742074686520636F72726573706F6E64696E67206E6574776F726B200A696E2074686520696E7465726661636520666F72207365616D6C657373206E617669676174696F6E20746F20796F7572207265616C6D2E0A2D202A2A4578706C6F72652A2A3A20446973636F7665722074686520617661696C61626C652066756E6374696F6E73206F6620616E79207265616C6D20616E642074686569722064657461696C73200A7468726F7567682061206465646963617465642066756E6374696F6E206C6973742E0A2D202A2A496E7465726163742A2A3A2053776966746C79206D616B652063616C6C73207468726F7567682061206465646963617465642066756E6374696F6E20696E74657266616365206279200A73656C656374696E6720612073706563696669632066756E6374696F6E20696E20746865207265616C6DE28099732066756E6374696F6E206C6973742E0A2D202A2A4576616C756174652A2A3A2052657669657720616E6420616E616C797A6520746865206F7574636F6D6573206F6620796F757220696E746572616374696F6E732077697468207265616C6D0A66756E6374696F6E7320627920617373657373696E6720726573756C747320616E642064657465726D696E6520616E79206675727468657220616374696F6E732072657175697265642E0A2D202A2A53686172653A2A2A20436F7079206C696E6B7320746F207265616C6D732C2066756E6374696F6E7320616E6420726573756C747320616E642073686172652077697468200A616E796F6E652C206D616B696E67206974206561737920746F207265717565737420656E676167656D656E74206F6E2061207265616C6D206F7220666565646261636B206F6E20612073706563696669632066756E6374696F6E2E0A2D202A2A547261636B2A2A3A204B65657020747261636B206F6620796F75722070726576696F7573207265616C6D20696E746572616374696F6E732C20776865726520796F752063616E2076696577200A74686520726573756C7473206F6620796F75722066756E6374696F6E2063616C6C7320616E64207265766973697420746865697220726573756C7473207468726F756768206120686973746F726963616C206F766572766965772E0A0A2323204765742053746172746564207769746820436F6E6E6563743A20566F746520696E20612053696D706C6520506F6C6C0A0A5B215B766F74652D676E6F796F7572646174655D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30352D31345F676E6F2D73747564696F2D696E74726F2F7372632F7468756D62732F766F74652D676E6F796F7572646174652E706E67295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30352D31345F676E6F2D73747564696F2D696E74726F2F7372632F766F74652D676E6F796F7572646174652E706E67290A0A4C6574E2809973206469766520696E746F20612068616E64732D6F6E206578616D706C65207769746820612073696D706C6520706F6C6C696E67207265616C6D2E2046697273742C20636C69636B200A5B686572655D2868747470733A2F2F676E6F2E73747564696F2F636F6E6E6563742F766965772F676E6F2E6C616E642F722F676E6F73747564696F2F676E6F796F7572646174653F6E6574776F726B3D746573743323566F74652920746F206163636573732074686520E28098676E6F796F757264617465E2809920706F6C6C2E204F6E636520796F75E28099766520656E73757265642074686174204164656E61200A77616C6C657420697320636F6E6E65637465642C2068657265E2809973207768617420746F20646F206E6578743A20200A0A312E2053656C656374207768656E20796F752066697273742068656172642061626F757420476E6F2E6C616E643A20200A2020205F456E7375726520796F75722063686F73656E206F7074696F6E206973206D61726B65642061732027547275652028596573292720616E6420616C6C206F7468657273206173202746616C736520284E6F292720746F2076616C696461746520796F757220766F74652E5F0A2020202D2054686973206D6F6E746820200A2020202D2054686973207965617220200A2020202D204F6E65206F722074776F2079656172732061676F20200A2020202D2053696E636520696E63657074696F6E0A322E204166746572206D616B696E6720796F75722073656C656374696F6E2C206869742074686520E2809843616C6CE2809920627574746F6E20746F206578656375746520746865207472616E73616374696F6E0A76696120796F7572205B4164656E612077616C6C65745D2868747470733A2F2F7777772E6164656E612E6170702F292E20496620796F75206E6565642068656C702067657474696E67207365742075702C0A796F752063616E20766973697420746865205B4164656E6120646F63735D2868747470733A2F2F646F63732E6164656E612E6170702F757365722D67756964652F7369676E2D696E292E20200A332E20596F75E28099726520726561647920746F20736861726520796F757220766F74652120436C69636B20E28098436F707920726573756C74206C696E6BE2809920616E6420706F7374206974206F6E20582C0A74616767696E67205B405F676E6F73747564696F5D2868747470733A2F2F747769747465722E636F6D2F5F676E6F73747564696F2920616E64207573696E672074686520686173687461672023676E6F796F7572646174652E20200A0A232320536861726520596F757220466565646261636B206F6E20436F6E6E6563740A0A57652076616C756520796F757220696E70757420617320776520636F6E74696E756520646576656C6F70696E6720476E6F2053747564696F2E20506C6561736520636F6E7472696275746520746F0A6F757220696D70726F76656D656E74206566666F72747320627920696E746572616374696E672077697468206F757220666565646261636B20666F726D20637265617465642061732061207265616C6D2E0A5573652074686520E280985B5375626D6974466565646261636B5D2868747470733A2F2F676E6F2E73747564696F2F636F6E6E6563742F766965772F676E6F2E6C616E642F722F676E6F73747564696F2F666565646261636B5F76313F6E6574776F726B3D7465737433267461623D66756E6374696F6E73235375626D6974466565646261636B29E280992066756E6374696F6E20746F20736861726520796F757220666565646261636B20776974682075732E0A0A496620796F752068617665207175657374696F6E73206F7220636F6D6D656E74732C20686F70206F76657220746F20746865205B476E6F2E6C616E6420446973636F72645D2868747470733A2F2F646973636F72642E67672F46704B4E685735474B362920616E64200A666F6C6C6F77207573206F6E205B585D2868747470733A2F2F747769747465722E636F6D2F5F676E6F73747564696F2920666F72207570646174657320616E642064697363757373696F6E732E0A0A23232054686520476E6F2053747564696F204F75746C6F6F6B0A0A546865206F75746C6F6F6B20666F7220476E6F2053747564696F2069732066756C6C2073706565642061686561642077697468206120726F61646D6170206275727374696E672077697468200A6578636974696E6720666561747572657320616E6420746F6F6C732E2057652077696C6C20636F6E74696E756520746F207472616E736974696F6E207468652062657461206170706C69636174696F6E732C0A476E6F20506C617967726F756E6420616E6420476E6F2053747564696F20436F6E6E6563742C20696E746F2074686569722070726F64756374696F6E2076657273696F6E73207768696C65200A666F637573696E67206F6E2074686520646576656C6F706D656E74206F6620746865206E65787420736574206F6620746F6F6C696E672E0A0A446576656C6F706D656E7420697320616C726561647920756E646572776179206F6E20612066756C6C2D66656174757265642049444520746861742077696C6C2070726F766964652061200A73746174652D6F662D7468652D61727420776F726B73706163652064657369676E656420666F72207265616C6D20616E64207061636B61676520646576656C6F706D656E74206F6E20476E6F2E6C616E642E0A546865204944452077696C6C20636F6E73697374206F6620616E20616476616E63656420636F646520656469746F722C20646562756767696E6720746F6F6C732C20616E64206120646564696361746564200A70726F6A656374206D616E6167656D656E7420616E64206465706C6F796D656E7420656E7669726F6E6D656E742E0A0A546865206E657874207069656365206F66207468652070757A7A6C652069732061206D61726B6574706C61636520776974682072656164792D746F2D7573652074656D706C617465732074686174200A6D616B65206372656174696E672061707073206D6F72652061636365737369626C6520746F2065766572796F6E652E205468697320636F6C6C656374696F6E206F6620626F696C6572706C617465200A636F6465206973207461726765746564206174207370656564696E67207570206465706C6F796D656E742074696D656C696E657320616E6420616C6C6F77696E67206E6F6E2D636F6465727320746F200A7472792074686569722068616E64206174206C61756E6368696E67207265616C6D7320776974686F7574206E656564696E6720746F20776F7272792061626F757420746563686E6963616C200A64657461696C732E0A0A5468652070726F64756374696F6E2D726561647920476E6F2053747564696F2073756974652077696C6C2068656C7020616E6420696E73706972652065766572796F6E65207769746820616E20696465612C0A636F6465727320616E64206E6F6E2D636F6465727320616C696B652C20746F20706172746963697061746520696E20746865206578636974696E6720696E6E6F766174696F6E73206F662057656233200A7370757272656420627920746865206E6578742067656E65726174696F6E206F66207265616C6D206170706C69636174696F6E73206F6E20476E6F2E6C616E642E0A0A496620796F752077616E7420746F202A7374617920696E2074686520676E6F2A2061626F757420616C6C2074686520476E6F2053747564696F20646576656C6F706D656E747320616E64206E6577732C0A5B7369676E2075705D2868747470733A2F2F676E6F2E73747564696F2F2920666F72206F7572206D61696C696E67206C6973742E20596F752063616E20616C736F20666F6C6C6F77207573206F6E205B585D2868747470733A2F2F747769747465722E636F6D2F5F676E6F73747564696F292E0A3214323032342D30352D31345431333A33373A30305A320A676E6F2D73747564696F3231676E6F6C616E642C676E6F73747564696F2C776562332C626C6F636B636861696E2C736D6172742D636F6E7472616374730AFF210A0A2F766D2E6D5F63616C6C12F0210A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F737432097468652D676E6F6D65322C496E74726F647563696E67206F7572206E657720476E6F2E6C616E64206C6F676F3A2074686520676E6F6D6532A8200A0A5B215B62616E6E65725D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30352D32315F7468652D676E6F6D652F7372632F7468756D62732F62616E6E65722E706E67295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30352D32315F7468652D676E6F6D652F7372632F62616E6E65722E706E67290A0A576520617265206578636974656420746F20696E74726F64756365206F7572206E657720476E6F2E6C616E64206C6F676F2C2061207369676E69666963616E742073686966742074686174200A7265666C6563747320746865207472756520737069726974206F66206F75722070726F6A6563742E0A0A46726F6D20746865207665727920626567696E6E696E672C2074686520636861726163746572206F66207468652022676E6F6D652220686173206265656E206120736F75726365206F66200A696E737069726174696F6E20666F7220676E6F2E6C616E642C20726570726573656E74696E672074686520657373656E6365206F66206F7572206A6F75726E657920616E642076616C756573200A676F696E6720666F72776172642E0A4F7665722074696D652C20746869732063686172616374657220686173206E6F74206F6E6C7920696E737069726564206F75722070726F6A656374206275742068617320616C736F206265636F6D650A70617274206F6620676E6F2E6C616E64E2809973206964656E746974792E0A0A54686520626C61636B20686F6C65206F66207468652070726576696F7573206C6F676F20726570726573656E7465642066696E616C6974792C20696E657669746162696C6974792C207468650A756C74696D61746520656E642073746174652C20616E642077617320616E20696E746572657374696E6720726570726573656E746174696F6E206F6620736F6D657468696E6720746861742063616E6E6F740A6265207365656E3B2062757420697420616C736F206172677561626C7920726570726573656E74656420736F6D657468696E67206C696B6520616E20756E656D6F74696F6E616C20766F69642E20496E0A636F6E74726173742C20676E6F6D657320617265207761726D20616E6420696E766974696E6720696E206368617261637465722C20616E6420736F206D756368206D6F72652E0A0A5F536F2077687920676E6F6D65733F5F0A0A496E20477265656B2C205F676E6F6D695F206D65616E7320E2809C746865206D65616E73206F66206B6E6F77696E673B206D696E643B20696E74656C6C6967656E63653B206A7564676D656E74E2809D2E200A5F476E6F6D696320706F657472795F2072656665727320746F20612074797065206F6620706F6574727920696E766F6C76696E672073686F7274206D656D6F7261626C65206D6178696D73206F66200A776973646F6D207468617420666C6F7572697368656420696E20746865203674682063656E7475727920696E204772656563652E20546F6461792C207768656E2077652068656172205F676E6F6D655F200A7765207468696E6B206F662065617274682D6477656C6C696E672066696775726573206F6674656E20666F756E6420696E206C75736820626C75652D677265656E2067617264656E732C0A6775617264696E67206F722073696D706C7920656E6A6F79696E6720746865206C616E6420746865792061726520696E2E0A0A4E6F626F6479206B6E6F777320666F72207375726520746865206F726967696E206F6620746865736520676E6F6D65732C2062757420746865206561726C69657374206B6E6F776E0A7265666572656E636520746F20697420636F6D65732066726F6D205061726163656C737573206173205F676E6F6D75735F2C20612053776973732043687269737469616E207468656F6C6F6769616E2C200A7068696C6F736F7068657220616E6420616C6368656D697374206F66207468652052656E61697373616E63652E20486520616C736F2063616C6C6564207468656D205F7079676D6965735F20696E200A686973205FE2809C4120626F6F6B206F6E204E796D7068732C2053796C7068732C205079676D6965732C20616E642053616C616D616E646572732C20616E64206F6E204F746865722053706972697473E2809D5F0A7075626C697368656420696E20313536362C2061207374756479206F6E206D7974682063726561747572657320617320746865792072656C61746520746F2043687269737469616E6974792E0A0A5768696C652074686520646570696374696F6E206F6620676E6F6D657320617265207661726965642C2074686569722067656E6572616C2063686172616374657220776173206465736372696265640A6279205061726163656C7375733A0A0A5FE2809C746865205079676D6965732028676E6F6D65732920617265206D6F756E7461696E2070656F706C652077686F206B65657020706C65646765732C2061726520686F6E6573742C2068617264200A776F726B696E672C206C6F79616C20746F206D616E2C20616E642068617665206D6F6E65792C20626563617573652074686579207468656D73656C76657320636F696E206974E2809D5F0A0A2870657268617073205061726163656C73757320776F756C6420686176652070726566657272656420746F206265206964656E746966696564206173206120676E6F6D652C2073696E63652068652077617320616C736F20616E20616C6368656D697374292E0A0A546869732063686172616374657220697320636F6E73697374656E74207769746820537769737320666F6C6B6C6F72652C20617320676E6F6D657320617265207361696420746F2068617665200A63617573656420746865206C616E64736C69646520746861742064657374726F796564207468652053776973732076696C6C616765206F6620506C75727320696E2031363138202D207468650A76696C6C616765727320686164206265636F6D65207765616C7468792066726F6D2061206C6F63616C20676F6C64206D696E6520637265617465642062792074686520676E6F6D65732C2077686F0A68616420706F75726564206C697175696420676F6C6420646F776E20696E746F2061207665696E20666F72207468652062656E65666974206F662068756D616E732E205468652076696C6C61676572730A7765726520636F727275707465642062792074686973206E6577666F756E642070726F737065726974792C2077686963682067726561746C79206F6666656E6465642074686520476E6F6D65732E0A0A496E206164646974696F6E2C20676E6F6D657320617265206E6F742061667261696420746F207374616E6420757020616761696E737420677265656420616E64206576696C2E20536F6D6520736179200A7468617420676E6F6D657320776561722074686520506872796769616E206361702C20776869636820726570726573656E7473205A6F726F61737465722C2074686520E2809C7468726565204D616769E2809D200A66726F6D2074686520656173742C206F7220746865207265766F6C7574696F6E6172792070757273756974206F66206C6962657274792E20476E6F6D65732061726520616C736F206561727468200A6477656C6C6572732C206D61736F6E73206F662074686520726F636B2C20616E642074686520677561726469616E73206F6620746865206C616E642E0A0A427920636F6D62696E696E67207468652061626F7665206465736372697074696F6E732C2077652063616E20646573637269626520676E6F6D657320696E2074686520666F6C6C6F77696E67206D616E6E65723A0A0A312E20476E6F6D6573206372656174652074696D656C6573732076616C756520666F722068756D616E6974792E0A322E204275742073696E63652068756D616E697479206265636F6D657320636F72727570746564207468726F75676820677265656420616E64206162757365732074686573652074696D656C657373200A76616C7565732C20676E6F6D657320616C736F2074616B652072656D656469616C20616374696F6E2E0A0A57686574686572207468652074696D656C6573732076616C75652069732074686174206F6620616E20656C656D656E74207375636820617320676F6C642C206F722074686174206F662061200A626C6F636B636861696E2070726F746F636F6C2C20676E6F6D6573206172652068617264776F726B696E6720616C6368656D697374732077686F207365656B20746865206265737420666F72200A68756D616E69747920616E64206163746976656C792072657369737420677265656420616E6420636F7272757074696F6E2061732061206D6174746572206F66207072696E6369706C652E20546869730A7175616C697479206F66206368617261637465722069732067726561746C79206E656564656420696E2074686520626C6F636B636861696E2F77656233206669656C642C207768657265206974206973200A736F206561737920746F206265636F6D6520626C696E6465642062792067726565642C20726573756C74696E6720696E207374616C6C656420696E6E6F766174696F6E2C2062726F6B656E200A70726F6D697365732C20736F6D6574696D657320746865206C6F7373206F66206C69666520736176696E67732C20616E64207468652064656D697365206F6620656E746972652077656233200A636F6D6D756E69746965732E0A0A54686520626C6F636B636861696E20776F726C64206E65656473206D6F726520676E6F6D657320746F206372656174652074696D656C65737320736F66747761726520616E642070726F746F636F6C730A666F72207468652062656E65666974206F662068756D616E6974792E205375636820746563686E6F6C6F67792073686F756C642062653A0A0A312E20696E7475697469766520286561737920746F2075736520616E6420756E6465727374616E64290A322E20657870726573736976652028666F7220736F63696574616C20696E6672617374727563747572652C2066696E616E63652C20736F6369616C2C206B6E6F776C65646765290A332E2066696E616C697A65642028636F6D706C65746564290A342E207365637572652028756E6861636B61626C65290A352E207363616C61626C6520286166666F726461626C65290A0A546869732069732077686174207765207365656B20746F206272696E6720746F2074686520776F726C64207468726F75676820676E6F2E6C616E642E0A0A476E6F6D657320617265207468757320616E20657863656C6C656E7420726570726573656E746174696F6E206F6620746865206275696C6465727320626568696E6420676E6F2E6C616E642E2057650A686F706520796F75206C696B6520746865206E6577206C6F676F20E2809320616E2069636F6E696320646570696374696F6E206F662074686520676E6F6D6520776974682063617020E2809320616E6420686F70650A746861742074686520676E6F6D6963207370697269742063616E2068656C7020677569646520757320746F206275696C642061206265747465722C206D6F726520686F6E65737420776F726C6420666F720A616C6C206F662075732E0A0A5F2D2074686520676E6F6D6573206F6620676E6F2E6C616E645F0A0A0A3214323032342D30352D32315431323A33333A30305A3208676E6F2E6C616E64321B676E6F6D652C6272616E642D7570646174652C6E65772D6C6F676F0ABB380A0A2F766D2E6D5F63616C6C12AC380A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F73743210676E6F6D65732D696E2D736572626961325F476E6F6D65732053706F7474656420696E2042656C67726164652C205365726269613A2052656361702066726F6D2074686520456E67696E656572696E67205265747265617420616E6420476F6C616E6720536572626961204D65657475703294360A0A446F62726F206A7574726F20676E6F6D657321204C617374207765656B2C2074686520476E6F20636F726520656E67696E656572696E67207465616D20636F6E76656E656420696E2042656C67726164652C0A5365726269612C20746F206469736375737320766172696F75732061737065637473206F66206F757220746563686E6963616C20726F61646D61702C20696E636C7564696E672054657374342C200A626C6F636B636861696E6C65737320476E6F2C20476E6F7765622C20676F7665726E616E636520616E642044414F207374727563747572696E672C20476E6F564D2C20616E64206D6F72652E200A5768696C6520746865207465616D2077617320696E20746F776E2C20776520746F6F6B20746865206368616E636520746F20686F7374206120476E6F204020476F6C616E6720536572626961200A6D6565747570207469746C656420E280984275696C64696E672044796E616D6963204170706C69636174696F6E73207769746820496E74657270726574656420476FE28099202D20796F752063616E206361746368200A746865207265636F7264696E67206F66207468652066756C6C2070726573656E746174696F6E205B686572655D2868747470733A2F2F796F7574752E62652F744E4D3144484F78495138292E0A0A232320456E67696E656572696E6720526574726561742052656361700A0A4F76657220666976652066756C6C2064617973206F6620636F64696E6720616E6420776F726B73686F70732C2074686520476E6F20636F726520656E67696E656572696E67207465616D2064656C766564200A696E746F207365766572616C20637269746963616C20746F7069637320616E6420656D65726765642077697468207365766572616C206B65792074616B6561776179733A0A2D2054657374342050726F67726573733A0A20202D20546573743420686173206265656E20746865207072696D617279206566666F727420666F7220746865207465616D20696E20746865207061737420636F75706C65206F66206D6F6E7468732C200A61696D696E6720746F20637265617465206120737461626C65206D756C74692D6E6F646520746573746E65742077686963682077696C6C20736572766520617320746865206C61737420707265637572736F720A746F20476E6F2E6C616E64E2809973207570636F6D696E67206D61696E6E65742E2044697363757373696F6E73207265766F6C7665642061726F756E6420636861696E20696E697469616C697A6174696F6E200A666C6F77732C206E6F6465206D65747269637320262074656C656D657472792C2076657273696F6E696E67206F662062696E61726965732C20616464696E6720612077617920746F206D6F64696679200A7468652076616C696461746F7220736574207669612061207265616C6D2028722F7379732F76616C73292C20616E64206D6F72652E2043757272656E746C792C20746865200A5B5465737434206D696C6573746F6E655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6D696C6573746F6E652F34292069732036322520636F6D706C6574652E0A2D20426C6F636B636861696E6C65737320476E6F3A0A20202D205769746820746865207570636F6D696E6720476F70686572436F6E204555202620555320636F6E666572656E6365732C20746865207465616D206469736375737365642061200A646966666572656E74207065727370656374697665206F6E20476E6F202D20612066756C6C792066756E6374696F6E616C20476F20696E7465727072657465722077697468206175746F6D61746963200A73746174652070657273697374656E63652E20546865207465616D2061696D7320746F206D6F64756C6172697A652074686520476E6F564D20736F20746861742069742063616E2062650A7573656420696E20636F6E7465787473206F7574736964652074686520476E6F2E6C616E6420626C6F636B636861696E2C2077686963682077696C6C206F70656E207570207468650A65636F73797374656D20746F20636F6D706C6574656C79206E6577207573652D63617365732C20696E766974696E67206576656E206D6F7265207765623220646576656C6F7065727320746F200A6A6F696E206F7572206D697373696F6E2E0A2D20476E6F77656220456E68616E63656D656E74733A0A20202D205B676E6F7765625D2868747470733A2F2F646F63732E676E6F2E6C616E642F67657474696E672D737461727465642F6C6F63616C2D73657475702F62726F7773696E672D676E6F6C616E6423322D62726F7773696E672D676E6F6C616E642920736572766573206173206F6E65206F6620746865206D61696E20746F6F6C7320746F206578706C6F72652074686520476E6F2E6C616E64200A65636F73797374656D2E20546865207465616D20646973637573736564206368616E67657320746F207468652055492061732077656C6C20617320696D70726F76696E6720676E6F776562E2809973200A66756E6374696F6E616C69746965732073756368206173207468652072656E646572696E67206F66207265616C6D207374617465202620736F7572636520636F64652C20616E6420706F737369626C650A617070726F616368657320746F20616464206D6F7265207761797320746F20696E7465726163742077697468206F6E2D636861696E20617070732E0A2D20476F7665726E616E636520616E642044414F205374727563747572696E673A0A20202D2044697363757373696F6E732072656C6174696E6720746F20476F7644414F20616E6420576F727844414F20746F6F6B20706C61636520647572696E672074686520726574726561742C206173200A74686579206172652074686520666F756E646174696F6E20666F7220476E6F2E6C616E64E280997320636F6E73656E737573206D656368616E69736D202D2050726F6F66206F6620436F6E747269627574696F6E2E0A4D616E6672656420546F75726F6E2C20476E6F2E6C616E64E2809973205650206F6620456E67696E656572696E672C2064697363757373656420746865200A5B696E697469616C20696D706C656D656E746174696F6E5D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3139343529206F6620476F7644414F20616E640A69747320737572726F756E64696E6720696E6672617374727563747572652E0A2D20476E6F564D202620476E6F2E6C616E6420446576656C6F706D656E743A0A20202D20546865207465616D20746F6F6B20746865206F70706F7274756E69747920746F206465616C2077697468207072696F726974792050527320647572696E672074686520726574726561742C200A7375636820617320746865205B476E6F205479706520436865636B2050525D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F31343236292062790A5B4069747A6D617877656C6C5D2868747470733A2F2F6769746875622E636F6D2F6C747A6D617877656C6C292C2077686963682077696C6C206164642066756C6C207479706520636865636B696E6720746F2074686520564D2E20546865207465616D2068617320616C736F0A616464656420476F52656C656173657220746F20746865206D6F6E6F7265706F20696E207072657061726174696F6E20666F7220746865207570636F6D696E67205465737434206D696C6573746F6E652C0A616E6420746865206669727374200A5B6E696768746C7920476E6F206275696C645D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F72656C65617365732F7461672F76302E312E302D6E696768746C792E323032343035323329207761732072656C65617365642E0A0A232320476E6F204020476F6C616E67205365726269610A0A5768696C6520696E2042656C67726164652C20776520616C736F20686F737465642061206E657720476E6F6C6F63616C206D65657475702077697468206F76657220313520646576656C6F70657273200A66726F6D2074686520476F6C616E672053657262696120636F6D6D756E6974792E20447572696E672074686973206576656E742C20776520696E74726F647563656420476E6F2E6C616E642C20776974680A6120706172746963756C617220666F637573206F6E2074686520476E6F564D20285669727475616C204D616368696E6529206173206120666F756E646174696F6E616C206C6179657220666F72200A476E6F202D20616E20696E7465727072657465642076657273696F6E206F6620476F2E205468697320776173207468652066697273742074696D652077652070726573656E746564207468650A636F6E63657074206F6620476E6F20746F20536572626961E280997320476F6C616E6720636F6D6D756E6974792C2073686F77636173696E672069747320706F74656E7469616C20746F20737570706F72740A64796E616D6963206170706C69636174696F6E20646576656C6F706D656E742E2049742077617320616E206F70706F7274756E69747920746F206964656E74696679206172656173206F66200A696D70726F76656D656E7420616E6420666565646261636B2066726F6D20746865207573657220636F6D6D756E6974792E0A0A5B215B6D65657475705D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30352D32385F676E6F2D676F6C616E672D7365726269612F7372632F7468756D62732F6D65657475702E706E67295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30352D32385F676E6F2D676F6C616E672D7365726269612F7372632F6D65657475702E706E67290A0A5B44796C616E20426F6C747A5D2868747470733A2F2F6769746875622E636F6D2F6465656C61776E292C20612053656E696F7220476F6C616E6720456E67696E6565722066726F6D2074686520636F72650A7465616D2C206C6564207468652070726573656E746174696F6E2C2064656D6F6E7374726174696E6720686F772074686520564D20616E6420476E6F2063616E206265206C657665726167656420746F200A64657369676E20616E64206275696C6420656666696369656E742C20616461707461626C652C20616E64207363616C61626C65206170706C69636174696F6E732E20486520616C736F2070726F7669646564200A616E206F76657276696577206F662074686520737461636B2D626173656420564D206172636869746563747572652C20696C6C757374726174696E6720686F7720646174612073746F72616765200A6D656368616E69736D7320616E6420657865637574696F6E20747261636573206F7065726174652077697468696E2074686520564D2E0A0A4279207573696E672074686520476E6F564D206F757473696465206F662074686520626C6F636B636861696E20636F6E746578742C2072656C6576616E7420746F2074686520476F20636F6D6D756E6974792C0A646576656C6F706572732063616E207574696C697A652074686520706F77657266756C206665617475726573206F6620476E6F20746F206275696C64206170706C69636174696F6E732077697468200A6175746F6D617469632073746174652070657273697374656E63652077697468696E20612073616E64626F78656420656E7669726F6E6D656E742E2044796C616E2073686F77636173656420686F77200A74686520476E6F564D2063616E20626520656D62656464656420696E20616E2048545450207365727665722C20616C6C6F77696E6720646576656C6F7065727320746F20777269746520616E64200A7065727369737420476E6F206170706C69636174696F6E73206C6F63616C6C792C20616E64207468656E207368617265207468656D2077697468206F746865722075736572732C20616C6C207768696C650A6D61696E7461696E696E6720746865207365637572697479206F66206120564D2E0A0A23232320546865204D65657475702070726573656E746174696F6E20686967686C69676874730A2D205669727475616C204D616368696E65204465657020446976653A2057652070726F766964656420612064657461696C656420756E6465727374616E64696E67206F6620746865200A6172636869746563747572616C20736574757073206F6620766172696F757320564D732C20616E64206761766520616E206F76657276696577206F66207468652063757272656E7420476E6F564D2E0A2D2048616E64732D4F6E204C6561726E696E673A2057652077616C6B6564207468726F75676820686F7720746F20656D6265642061207669727475616C206D616368696E6520696E746F20796F75720A476F206170706C69636174696F6E7320666F722064796E616D696320636F646520696E746572707265746174696F6E2E205468652070726573656E746174696F6E20636F7665726564200A70726163746963616C20746563686E69717565732C20696E636C7564696E67206372656174696E672062726F777365722D626173656420696E7465726661636573207573696E6720696E74657270726574656420476F2E0A2D20496E7465726163746976652044656D6F6E7374726174696F6E733A2057652073686F77656420686F7720746F206372656174652062726F777365722D626173656420696E74657266616365730A7769746820696E74657270726574656420476F206173206120666F756E646174696F6E2C2064656D6F6E7374726174696E6720686F7720746869732061726368697465637475726520656E61626C65730A64796E616D69632070726F6772616D20657865637574696F6E207768696C65206D61696E7461696E696E67206120737472756374757265642C2064657465726D696E697374696320617070726F6163680A746F2073746F7261676520616E642073746174652E0A2D20546869732077617320746865207468697264206D656574757020696E206F757220736572696573206F6620476E6F6C6F63616C206576656E74732E205765E280996C6C20626520706F7070696E670A757020696E206D6F7265206369746965732061726F756E642074686520676C6F626520746F20636F6E6E656374207769746820676E6F6D65732C20616E64207370726561642074686520776F7264200A61626F757420476E6F2E6C616E642E205769746820612066657720676E6F6D657320626173656420696E2042656C67726164652C206974E280997320696D706F7274616E7420746F206B656570200A63756C7469766174696E6720616E64206275696C64696E672074686520476E6F2E6C616E6420636F6D6D756E697479206C6F63616C6C792E20496620796F75E28099726520626173656420696E200A5365726269612C20796F752063616E2066696E64206F757220726567696F6E616C206261736564206368616E6E656C206F6E20746865204F6666696369616C20476E6F2E6C616E64205B446973636F7264200A5365727665725D2868747470733A2F2F646973636F72642E67672F34585879793577533336292E0A0A2323232054686520466565646261636B204C6F6F700A4166746572207468652070726573656E746174696F6E2C20776520676174686572656420666565646261636B2066726F6D2074686520617474656E6465657320746F2061737365737320746865200A636F6E74656E742070726573656E7465642C20746865697220696E74657265737420696E20476E6F2E6C616E642C20616E6420696E20746865697220696E74657265737420696E207573696E67200A74686520476E6F20696E74657270726574657220746F6F6C696E672E20486572652061726520746865206B657920696E7369676874732066726F6D20666F726D20726573706F6E7365733A0A2D20373525206F66207061727469636970616E747320736169642074686579207765726520696E746572657374656420696E206C6561726E696E67206D6F72652061626F757420476E6F2E0A2D20383725206F66207061727469636970616E747320666F756E64207468652070726573656E746174696F6E20616E6420636F6E636570747320756E6465727374616E6461626C652E0A2D203338252065787072657373656420696E74657265737420696E207573696E672074686520656D62656464656420476F20696E74657270726574657220696E207468656972206170706C69636174696F6E732E0A54686520666565646261636B20686967686C69676874656420746865206E65656420666F7220757320746F20636C6561726C79206F75746C696E65207468652070726F626C656D7320476E6F2E6C616E64200A2D20697320736F6C76696E672C20686F77206F757220746563686E6F6C6F677920616464726573736573207468657365206973737565732C20616E6420686F772069742063616E206170706C7920746F0A2D207265616C2D776F726C64206578616D706C65732E205468697320666565646261636B20697320696E76616C7561626C652061732069742068656C707320757320726566696E65206F7572200A2D20617070726F61636820616E642062657474657220656E676167652077697468206E657720636F6E7472696275746F72732E0A0A232320436F6E636C7573696F6E0A546865206D656574757020776173206A757374206F6E65206F66207365766572616C206163746976697469657320746865207465616D206F7267616E697A656420696E2042656C67726164652E200A496E206164646974696F6E20746F2074686520657874656E7369766520746563686E6963616C2073657373696F6E7320616E6420776F726B73686F70732C2077652068616420746865200A6F70706F7274756E69747920746F20657870657269656E636520616E64206C6561726E2061206269742061626F757420746865206C6F63616C2063756C7475726520616E64205365726269612C0A7669736974696E6720746865204E696B6F6C61205465736C61204D757365756D2C207369676874736565696E672C20616E6420657870657269656E63696E6720747261646974696F6E616C200A5365726269616E206D757369632E0A546865736520696E2D706572736F6E20656E67696E656572696E672072657472656174732061726520736F6D65206F6620746865206D6F737420696D706F7274616E74206D6F6D656E747320696E0A6F75746C696E696E67207072696F7269746965732C2074726F75626C6573686F6F74696E672074686520746563686E6F6C6F677920746F6765746865722C20616E6420627261696E73746F726D696E670A7761797320746F2067656E6572616C6C7920656E68616E636520616E64206F7074696D697A652074686520476E6F2E6C616E6420626C6F636B636861696E20616E64206275696C646572200A657870657269656E63652E200A3214323032342D30352D32385431323A33343A35365A32156C656F6868686E2C6D696368656C6C65656C6C656E3224676E6F6D652C676E6F6C6F63616C2C726574726561742C6D65657475702C676F6C616E670AAE230A0A2F766D2E6D5F63616C6C129F230A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374320F74657374342D6578706C61696E6564320F5465737434204578706C61696E656432D7210A0A576520726563656E746C79205B616E6E6F756E6365645D2868747470733A2F2F676E6F2E6C616E642F722F676E6F6C616E642F626C6F673A702F6D6F6E74686C792D6465762D382920746865205465737434206D696C6573746F6E65206F6E206F757220726F616420746F206D61696E6E65742E2049742773206120626967207374657020696E207465726D73206F6620636F6D706C65786974792C20736F206C657427732064656C766520696E746F20746865206E75747320616E6420626F6C74732C20616E6420686F77205465737434206669747320696E746F207468652062696767657220706963747572652E0A0A232320576879205465737434206973205369676E69666963616E740A0A4F75722063686F69636520746F20676F207769746820476F207374656D6D65642066726F6D206F75722064657369726520746F206C6F77657220746865206261727269657220746F20656E74727920666F72206E657720646576656C6F706572732E2054686174206D65616E742074686174207765206E656564656420616E20696E747569746976652070726F6772616D6D696E67206C616E6775616765207769746820776964657370726561642075736167653B20646576656C6F7065727320776F756C642062652061626C6520746F20777269746520736D61727420636F6E74726163747320776974686F7574206265696E6720666F7263656420746F206C6561726E20616E6F74686572206C616E67756167652E20476F20666974732074686520726F6C6520706572666563746C792E200A0A54686520666C6970207369646520697320746861742077652063616E2774206A75737420706F7274206120564D20616E642063616C6C2069742061206461792E205765206861766520746F206275696C64206D6F737420746F6F6C7320616E642073657276696365732066726F6D20736372617463682E0A0A496E20746861742073656E73652C2054657374342069732074686520746563686E6F6C6F676963616C206C6561702066726F6D20612073696E676C652076616C696461746F7220504F4320746F206120666972737420697465726174696F6E206F6620616E2061637475616C2066756E6374696F6E696E6720646563656E7472616C697A656420626C6F636B636861696E206E6574776F726B2E200A0A4974277320616C736F2074686520666972737420737461626C6520746573746E65742073696E6365207468652070726F6A656374277320696E63657074696F6E206F76657220322079656172732061676F2E0A0A2323204D756C74696E6F6465206361706162696C6974790A0A4C696B65206D6F737420626C6F636B636861696E732C207765277265206C6F6F6B696E6720746F20626F6F737420726573696C69656E636520616E64207365637572697479207468726F7567682061206E756D626572206F662076616C696461746F72206E6F6465732E204275742073696E6365207765277265206E6F7420666F726B696E67206120564D2C207765277265206275696C64696E67207468652077686F6C65207468696E672066726F6D20736372617463683B207374617274696E672066726F6D20746865206162696C69747920746F20656D6974206576656E74732C20746F206265696E672061626C6520746F2073756273637269626520746F20736D61727420636F6E7472616374732C20746F206D616B696E672061206368616E6765206261736564206F6E2074686F7365206576656E74732E20416C6C2074686973206973206E656564656420652E672E20746F20616464206F722072656D6F766520612076616C696461746F72206E6F646520696E2074686520476E6F2E6C616E64206E6574776F726B2C2073696E6365207468652076616C696461746F72206D616E6167656D656E7420697320646F6E6520636F6D706C6574656C79206F6E2D636861696E2E0A0A54686520696E697469616C2076616C696461746F72207365742077696C6C206E6F7420626520696E63656E746976697A65643B2069742077696C6C206265206120736D616C6C2067726F7570206F6620746865206D6F73742061637469766520636F6E7472696275746F72732C2061732077656C6C20617320696E7465726E616C20416942207465616D732C2077686F2077696C6C2074686F726F7567686C79207465737420616E6420627265616B20746865206E6574776F726B2C20616E6420646F63756D656E7420616C6C20746865207468696E6773210A0A232320546865204669727374205065726D616E656E7420546573746E65740A0A54657374342069732074686520666972737420736572696F757320697465726174696F6E206F6620616E206F6666696369616C20476E6F2E6C616E6420746573746E65742E204F75722061696D206973206E6F7420746F206861766520616E7920627265616B696E67206368616E6765732C206D65616E696E6720796F752063616E2075736520697420746F20646576656C6F7020796F757220644170702C206964656E7469667920627567732C207465737420666561747572657320696E20616E20656E7669726F6E6D656E742074686174277320617320636C6F736520746F20746865207570636F6D696E67206D61696E6E657420617320706F737369626C652E204265696E67206120746573746E65742C20796F752063616E2075736520746865205B466175636574204875625D2868747470733A2F2F6661756365742E676E6F2E6C616E642F2920746F206F627461696E207465737420746F6B656E7320616E642075736520644170707320776974686F757420616E79207265616C20636F6E73657175656E6365732E0A0A4E6F772C20746861742069736E277420746F2073617920746861742054657374342077696C6C2062652074686520756C74696D61746520746573746E65742E20496620776520756E636F766572206D616A6F7220627265616B696E67206973737565732C207765276C6C206465706C6F7920546573743520616E6420736F206F6E2E0A0A57652070726F6D6973652C20686F77657665722C20746F20636F6D652075702077697468206120626574746572206E616D696E6720636F6E76656E74696F6E20676F696E6720666F72776172642E0A0A232320496E646578657220616E64205472616E73616374696F6E204578706C6F72657220496E636C756465640A0A4120737461706C65206F6620612066756E6374696F6E616C20626C6F636B636861696E206E6574776F726B206973206265696E672061626C6520746F207365617263682C20747261636B20616E6420766572696679207472616E73616374696F6E732E205468697320656E61626C65732074686520646576656C6F7065727320746F20636F6E6669726D20746865697220736D61727420636F6E7472616374732061726520776F726B696E6720617320696E74656E6465642C2061732077656C6C2061732074726F75626C6573686F6F74206973737565732E20546573743420636F6D657320776974682061207472616E73616374696F6E206578706C6F7265722C20616C6C6F77696E6720646576656C6F7065727320746F206D6F7665206F666620637573746F6D20546573743320666F726B73206F76657220746F20546573743420666F7220636F6E76656E69656E63652E0A0A232320526567756C61722052656C65617365205363686564756C6520666F722042696E61726965730A0A5769746820627265616B696E67206368616E676573206265696E67206465706C6F796564206265666F726520746865205465737434206C61756E63682C2077652063616E206E6F772073776974636820746F2074686520726F6C6C696E672072656C65617365206D6F64656C2E20557064617465732077696C6C20676F206C697665206F6E206120726567756C61722C206D6F7374206C696B656C792062697765656B6C792062617369732C20656E61626C696E6720646576656C6F7065727320746F2074657374207468656972206441707073206F6E20746865206C617465737420617661696C61626C652076657273696F6E2E0A0A5B506F7274616C204C6F6F705D2868747470733A2F2F646F63732E676E6F2E6C616E642F636F6E63657074732F706F7274616C2D6C6F6F702F292077696C6C206B6565702075702077697468207468652062696E61726965732C20616E642072756E206F6E20746865206C61746573742076657273696F6E2E0A0A23232050726F6F662D6F662D436F6E747269627574696F6E2053636166666F6C64696E670A0A41206B657920476E6F2E6C616E6420636F6E636570742069732050726F6F66206F6620436F6E747269627574696F6E3B2074686520696465612074686174207468652072657761726420676F6573206E6F7420746F20746865206F6E652077686F207061797320746F2077696E2065697468657220766961206D696E696E6720726967206F7220626967207374616B652C2062757420746F20746865206F6E65207468617420696E76657374732074696D6520746F20636F6E7472696275746520746F2074686520636F6D6D756E6974792E0A0A436F6E747269627574696F6E732077696C6C206265206D616E61676564206F6E2D636861696E207669612044414F733B20452E672E206120636F6E7472696275746F72207769746820636F726520636F6E747269627574696F6E732077696C6C20626520612070617274206F6620612044414F2074686174207265636F676E697A65732074686F736520636F6E747269627574696F6E732C20616E642074686520726577617264732077696C6C206265207469656420746F20746865206C6576656C2074686520636F6E7472696275746F722068617320696E20746861742044414F2E0A0A54657374342077696C6C206C617920646F776E2074686520666F756E646174696F6E20666F7220506F432E205765276C6C20626520616464696E672070726F706F73616C20737570706F72742C2061732077656C6C20617320766F74696E6720737570706F727420746861742065786563757465732074686F73652070726F706F73616C73206F6E2D636861696E2E2054686520726573756C742077696C6C2062652061206D6F6469666965642076657273696F6E206F6620506F4120746861742077696C6C20626520737570706F72746564206F6E20612070726F746F636F6C206C6576656C2C20616E64206D616E61676564206279207468652061646D696E2E20546869732077696C6C206D616B6520746865206675747572652073776974636820746F20506F432061206D756368206D6F7265207365616D6C657373206166666169722E0A0A23232052656C6561736520446174650A0A4F757220676F616C20697320746F20636F6D706C65746520646576656C6F706D656E742062792074686520656E64206F66204A756C7920323032342C20616E64206C61756E636820696E206561726C792041756775737420323032342E205765277665206F70656E656420757020746865205B5465737434206D696C6573746F6E655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6D696C6573746F6E652F342920616E642074686520476E6F2E636F7265207465616D2773205B70726F6A65637420626F6172645D2868747470733A2F2F6769746875622E636F6D2F6F7267732F676E6F6C616E672F70726F6A656374732F33382F76696577732F35292C20736F20796F7520636F756C6420747261636B207468652070726F67726573732E200A0A576527726520616C736F2067657474696E6720726561647920746F206F70656E20757020736F6D65206F66207468652069737375657320746F2074686520636F6D6D756E6974792C20736F20737461792074756E6564213214323032342D30352D33305430303A30303A30305A32074B6F7574656B693233676E6F6C616E642C74657374342C746573746E65742C706F632C70726F6F662D6F662D636F6E747269627574696F6E2C746D320ABC8D010A0A2F766D2E6D5F63616C6C12AC8D010A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374320D6D6F6E74686C792D6465762D39325A546865204D6F726520596F7520476E6F20393A205265616C6D20746F205265616C6D20496E746572616374696F6E2C20466175636574204875622C204E6577205465737434204C61756E6368204461746520616E64204D6F726532928B010A0A546869732065646974696F6E206272696E6773207365766572616C206D616A6F7220706965636573206F66206E6577733B20476E6F2053747564696F20436F6E6E65637420626574612C20616E6420466175636574204875622E205765277265206D6F76696E6720757020746865205465737434206C61756E63682062792032207765656B732C20736F20776520636F756C642067657420746F206D61696E6E6574206661737465722E205765276C6C20616C736F20626520736565696E672065616368206F7468657220617420476F70686572436F6E7320455520616E642055532C20736F206D616B65207375726520746F2073746F7020627920616E642073617920686921204F682C20616E64206F7572205B6E657720676E6F6D65206C6F676F206973206C6976655D2868747470733A2F2F676E6F2E6C616E642F722F676E6F6C616E642F626C6F673A702F7468652D676E6F6D6529210A0A576527726520616C736F20636F766572696E6720616C6C20746865206D616A6F7220616E64206D696E6F7220636F646520696D70726F76656D656E74733B20696620796F752077616E7420746F2064697665206465657065722C207765206861766520746865207765656B6C7920656E67696E656572696E67205B757064617465735D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6D656574696E67732F6973737565732F33372920616E6420766964656F205B7265636F7264696E67735D2868747470733A2F2F7777772E796F75747562652E636F6D2F77617463683F763D396368374D684B4E426D77266C6973743D504C376E503772315169446B744D436477317964516F3263724D3379365A6B3745342920617661696C61626C652E200A0A2320476E6F20436F726520557064617465730A0A232320496E74726F647563696E6720476E6F2053747564696F20436F6E6E6563740A0A4C617374206D6F6E7468205B77652074616C6B65645D2868747470733A2F2F6D656469756D2E636F6D2F40676E6F73747564696F2F696E74726F647563696E672D676E6F2D73747564696F2D7468652D7072656D6965722D6275696C6465722D73756974652D666F722D676E6F2D6C616E642D643162346438326234366465292061626F757420746865206E65656420666F722061207072656D696572206275696C64657220737569746520666F7220476E6F2E6C616E642E20417320476E6F2E6C616E6420657870616E647320696E746F206120756E697665727365206F66207265616C6D732C2077652073617720746865206E65656420666F72206120736574206F6620746F6F6C733B20746F6F6C7320656D706F77696E672074686520636F6D6D756E69747920746F2063726561746520616E64207573652073756363696E7420616E6420636F6D706F7361626C65207265616C6D73206F6E20476E6F2E6C616E642E204C6173742079656172207765206C61756E63686564205B476E6F20506C617967726F756E645D2868747470733A2F2F706C61792E676E6F2E6C616E642F292E204E6F7720776527726520616464696E6720616E6F7468657220746F6F6C20746F2074686520746F6F6C626F78202D205B476E6F2053747564696F20436F6E6E6563745D2868747470733A2F2F676E6F2E73747564696F2F636F6E6E656374292E2043757272656E746C7920696E20626574612C20436F6E6E65637420616C6C6F7773207365616D6C6573732061636365737320746F207265616C6D732C206D616B696E672069742073696D706C6520746F206578706C6F72652C20696E7465726163742C20616E6420656E67616765207769746820476E6F2E6C616E64277320736D61727420636F6E747261637473207468726F7567682066756E6374696F6E2063616C6C732E20547279206F757420796F7572206669727374207265616C6D20696E746572616374696F6E2076696120436F6E6E6563742062792074616B696E67206F7572205B676E6F796F7572646174655D2868747470733A2F2F676E6F2E73747564696F2F636F6E6E6563742F766965772F676E6F2E6C616E642F722F676E6F73747564696F2F676E6F796F7572646174653F6E6574776F726B3D746573743323566F74652920706F6C6C2E200A0A23232046617563657420487562206973204C6976650A0A5769746820746865205B466175636574204875625D2868747470733A2F2F6661756365742E676E6F2E6C616E642920796F752063616E206E6F7720656173696C7920616E64206566666F72746C6573736C792075736520616C6C20476E6F2E6C616E642065636F73797374656D20666175636574732C20696E636C7564696E6720506F7274616C204C6F6F702C2073746167696E672C2066757475726520746573746E65747320616E6420696D706C656D656E746174696F6E20706172746E657220636861696E732E204974277320656173696C7920657874656E7369626C652C20776974682074686520676F616C206F6620686176696E6720612073696E676C652073746F7020666F7220657665727920706F737369626C6520476E6F2E6C616E64207465737420746F6B656E20796F75206D69676874206E6565642E0A0A2323205465737434204C61756E6368205363686564756C656420666F72204A756C792031350A0A416674657220616E6E6F756E63696E67207468652074656E746174697665205B54657374345D2868747470733A2F2F676E6F2E6C616E642F722F676E6F6C616E642F626C6F673A702F74657374342D6578706C61696E656429206C61756E636820666F722074686520656E64206F66204A756C792F6561726C79204175677573742C207765207265616C697A656420776527726520776F726B696E6720666173746572207468616E20616E7469636970617465642E2054686174277320776879202A2A7765277265206D6F76696E6720746865206F6666696369616C205465737434206C61756E636820746F204A756C792031352C20323032342A2A210A0A232320353530205450530A0A526563656E74205B73757065726E6F76615D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F73757065726E6F7661292074657374732073686F77656420746861742077652068617665202A2A7E353530205450532A2A206F6E20612073696E676C65206E6F6465206D616368696E6520284D33204D61633B203130306B207478732C20317320626C6F636B2074696D65292E20546869732069732061206875676520737465702075702066726F6D206C61737420796561722C207768656E207468652054505320706572666F726D616E636520776520686164207661726965642066726F6D20372D3230205450532077697468207468652073616D652073657475702E0A0A2323204E6577204465764F7073207465616D206D656D6265720A0A506C656173652077656C636F6D652053657267696F204D61746F6E65212041204465764F707320776974682061207374726F6E6720476F206261636B67726F756E642C206865276C6C2062652061206B657920706C6179657220696E20696D70726F76696E6720616E64206D616E6167696E672074686520476E6F2E6C616E6420696E6672617374727563747572652E0A0A23232042656C677261646520526574726561740A0A54686520636F7265207465616D2074726176656C6C65642066726F6D206163726F73732074686520776F726C6420746F2042656C67726164652C205365726269612C2077686572652077652068756E6B6572656420646F776E20616E6420736F6C7665642061206E756D626572206F662069737375657320626C6F636B696E672054657374342061732077656C6C206173206675747572652072656C656173657320616C6C207468652077617920746F20746865206D61696E6E65742E2046756C6C207265636170205B686572655D2868747470733A2F2F676E6F2E6C616E642F722F676E6F6C616E642F626C6F673A702F676E6F6D65732D696E2D736572626961292E0A0A2323204368616E67656C6F670A0A2D2044726F7070656420737570706F727420666F72205B616C6C20756E7573656420444220696D706C656D656E746174696F6E735D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F31373134292C2061706172742066726F6D206C6576656C646220616E6420626F6C7464622E20576974686F75742065786365737369766520444220696D706C656D656E746174696F6E732074686174206E656564206D61696E7461696E696E672C2077652063616E20666F637573206F6E206F7074696D697A696E6720746865206F6E65732077652061637475616C6C79207573652C20616E642073717565657A65206F757420706572666F726D616E63652066726F6D2073797374656D7320776520616C726561647920686176652E200A0A2D205265736F6C7665642061204C6F6E67205374616E64696E672043492049737375652057697468204246542054657374732E205B5468652043492069732066696E616C6C7920677265656E206163726F73732074686520626F6172645D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F31353135292E205765207374696C6C206861766520736F6D6520666C616B792074657374732C20627574207468652043492077696C6C206E6F206C6F6E67657220636F6E7374616E746C79206661696C206F6E20746865204246542043492064756520746F206972726567756C6172206368616E6E656C2075736167652E20546869732C20636F75706C652077697468206F7572204349207265776F726B206F766572207468652070617374206D6F6E74682C207369676E69666963616E746C7920696D70726F766564206F75722047697448756220646576656C6F706D656E742070726F636573732E0A0A2D204C6F7473206F6620737072696E6720636C65616E696E67206566666F7274732077697468205B676E6F6B65795D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F31323132292C205B676E6F6C616E645D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F31393835292C20616E64206F7572206F7468657220746F6F6C732E20576520746F6F6B2074686973206368616E636520746F20616C736F2061646420657874656E7369766520636F76657261676520616E642072656772657373696F6E2074657374732C20696E206361736520746865792077657265206D697373696E67206265666F72652E0A0A2D205B46696E616C6C79206D657267656420696E204576656E74202F20456D697420737570706F72745D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F313635332920696E20476E6F2120557365727320616E6420476E6F20636C69656E74732063616E2066696E616C6C79206665746368206F6E2D636861696E206576656E747320617320736F6F6E20617320746865792068617070656E2C20616E6420686176652061207269636820636F6E7465787420666F72207468656D2061732077656C6C2E20537570706F727420666F722074686573652068617320616C7265616479206265656E2070726F7061676174656420746F206F7572205B74782D696E64657865725D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F74782D696E64657865722F70756C6C2F3433292E0A0A2D205B4D657267656420696E2074686520564D2067617320636F6E73756D7074696F6E2066697865735D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F31343330292C207768696368207374616E64617264697A6520564D20676173207573616765206163726F73732074686520626F61726420666F722075736572732E20486176696E67207072656469637461626C652067617320636F7374732C20616E642067617320636F73747320746861742074616B6520696E746F206163636F756E7420564D206F7065726174696F6E73206973206F6E6C79206661697220666F7220626F746820746865206E6F6465206F70657261746F727320616E642074686520636861696E2075736572732E0A0A2D205B5265776F726B656420746865206E6F6465206469726563746F7279207374727563747572655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F31393434292C20616E64206D616465205B67656E657369732E6A736F6E207573616765206578706C696369745D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F31393732292C20706176696E67207468652077617920746F20616E20656173696572206D756C74696E6F6465206675747572652E2054686973206566666F727420656E61626C657320757320746F20656173696C79206F7263686573747261746520616E6420636F6E66696775726520476E6F20626C6F636B636861696E206E6F6465732C20657370656369616C6C79207769746820746865207570636F6D696E67206465766E6574202F20746573746E6574206C61756E63682E0A0A2D205B4F7665726861756C6564206F7572206D6F6E6F7265706F20474820616374696F6E735D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F32303430292C2077697468207468656D206E6F772061766F6964696E6720646F75626C652D776F726B2C20616E64206265696E67206D75636820736E6170706965722E20434920666F7220505273206E6F772072756E73206D75636820717569636B657220616E64206D6F726520737461626C652C2064756520746F207468657365206F7074696D697A6174696F6E732E0A0A2D205B46696E6973686564206D6967726174696F6E20746F20476F72656C65617365725D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F32313031292E20416C6C206F66206F757220696D706F7274616E7420746F6F6C7320616E642062696E61726965732068617665206120636C656172206275696C6420616E642072656C65617365207363686564756C652028666F7220446F636B65722C20616E64206265796F6E6421292C207769746820757320696D706C656D656E74696E67206E696768746C792C2064657620616E6420606D6173746572602072656C6561736573206F6E20746865206D6F6E6F7265706F2E0A0A2D205B42756D7065642074686520676E6F766D207465737420636F7665726167655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F32313433292066726F6D207E33342520746F207E3637252E2057697468207570636F6D696E67206368616E67657320746F2074686520476E6F564D2C207765206E6565646564206120676F6F6420736166657479206E657420696E2074686520666F726D206F6620612074657374696E6720737569746520746861742077696C6C20616C6572742075732069662066756E6E7920627573696E65737320697320676F696E67206F6E2061667465722061206368616E67652E0A0A2D205B4D616E792C206D616E79206275672066697865732C20736D616C6C20555820696D70726F76656D656E747320616E6420516F4C206368616E6765735D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F636F6D6D6974732F6D61737465722F3F73696E63653D323032342D30352D303126756E74696C3D323032342D30362D3033266265666F72653D656462333231663835626566663938353336613361316137313131666562616561303737316135652B3335292074686174206B65657020746865206C6967687473206F6E20616E642073797374656D732072756E6E696E6720736D6F6F74686C792E0A0A232045636F73797374656D20557064617465730A0A2323204F6E626C6F630A0A204D756C74696E6F64652F56616C696461746F7220446F63733A202068747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F323238350A322E20607465737434602056616C696461746F7220496E69746961746976652044697363757373696F6E3A2068747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F6973737565732F36390A332E20476E6F5377617020506F7274616C204C6F6F70204D6967726174696F6E20426C6F636B65723A2068747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F323238330A202020202D204C697175696469747920506F6F6C207265616C6D206465706C6F796D656E74206661696C696E67206F6E20706F7274616C2D6C6F6F700A202020202D20417474656D7074732074726965643A0A20202020202020202D204368616E67696E67207061636B6167652070617468202F207265647563696E67207265616C6D2073697A65202F2073657474696E67206761782D77616E74656420746F206D6178202F206368616E67696E6720636C69656E7420656E760A20202020202020202D20436C6F6E696E6720676E6F207265706F2065766572792073696E676C6520726563656E7420636F6D6D697420746F2072652D70726F64756365206F6E206C6F63616C20627574206E65766572206661696C65642E0A202020202D205570646174653A20506F74656E7469616C20636175736520E28692204365727461696E206661696C696E6720747873206172652063617573696E6720636F72727570742063616368652066696C6573206063616368654E6F646573600A0A2D20476E6F20436F72650A202020202D20596F752063616E20636865636B206F7572204D65726765642C204177616974696E67205265766965772C20616E6420544F444F2050527320696E205B6F7572206861636B657273706163652E205D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F6973737565732F3239290A2D205B4F6E626C6F632041504920446F63735D2868747470733A2F2F6F6E626C6F632D696E666F2E676974626F6F6B2E696F2F6F6E626C6F632D6170692D646F6373293A205065726D697373696F6E6C657373204A534F4E2D525043206D6574686F647320746F20476E6F2E6C616E642773206F6666696369616C206E6574776F726B732028706F7274616C2D6C6F6F702C2074657374332920666F7220616E7920696E646976696475616C73206F72207465616D73206275696C64696E67206F6E20476E6F2E6C616E642028666565646261636B2069732077656C636F6D6521290A2D20476E6F537761700A202020202D20436F6E7472616374206D6967726174696F6E20746F20706F7274616C2D6C6F6F702028546172746765743A204D61792032347468290A202020202D204170706C79696E6720607374642E456D69746020746F20636F6E74726163747320616E64204150497320285B6170706C7920656D6974206576656E7420696E20636F6E74726163745D2868747470733A2F2F6769746875622E636F6D2F676E6F737761702D6C6162732F676E6F737761702F70756C6C2F32313729290A202020202D20565741502028566F6C756D652D576569676874656420417665726167652050726963652920696D706C656D656E746174696F6E20666F7220696D70726F7665642070726963696E6720285B676E6F737761702D6C6162732F767761705D2868747470733A2F2F6769746875622E636F6D2F676E6F737761702D6C6162732F7677617029290A2D204D6973630A202020202D20416464206C696E6B7320746F205B476E6F53747564696F20436F6E6E65637420696E20476E6F5363616E5D2868747470733A2F2F676E6F7363616E2E696F2F7265616C6D732F64657461696C733F706174683D676E6F2E6C616E642F722F6D696368656C6C652F6D796D6F6F64290A202020202D20215B696D6167655D2868747470733A2F2F6861636B6D642E696F2F5F75706C6F6164732F484A725761757351432E706E67290A2D2046756C6C207570646174653A205B4F6E626C6F63204861636B657273706163655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F6973737565732F3239236973737565636F6D6D656E742D32313234363937393737292C205B4F6E626C6F63204B616E62616E5D2868747470733A2F2F6769746875622E636F6D2F6F7267732F676E6F6C616E672F70726F6A656374732F3233290A0A0A23232054657269746F72690A0A2D20476E6F564D0A0A202020202D202A2A41646420737461636B74726163652066756E6374696F6E616C69747920616E64207265706C61636520736F6D652075736573206F6620604D616368696E652E537472696E67602A2A3A20546869732070756C6C20726571756573742069732063757272656E746C7920696E207265766965772064697363757373696F6E732077697468204D6F7267616E20285B50522023323134355D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3231343529292E0A202020202D202A2A476F32476E6F206C6F736573207479706520696E666F2A2A3A2054686973206973737565206973204D657267656420285B50522023323031365D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3230313629292E0A202020202D202A2A41766F696420696E7374616E74696174696F6E206F662062616E6B6572206F6E2070757265207061636B6167652A2A3A2054686973206368616E6765206973206177616974696E672072657669657720616E64206D6572676520285B50522023323234385D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3232343829292E0A202020202D202A2A4D697373696E67206C656E67746820636865636B20696E2076616C7565206465636C61726174696F6E2A2A3A20546869732070756C6C207265717565737420697320616C736F206177616974696E672072657669657720616E64206D6572676520285B50522023323230365D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3232303629292E0A202020202D202A2A49737375653A2046696C65206C696E65206E6F7420736574206F6E206056616C75654465636C72602C2060496D706F72744465636C602C2060547970654465636C602A2A3A2054686520697373756520686173206265656E207265736F6C76656420616E6420636C6F73656420285B49737375652023323232305D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F3232323029292E0A202020202D202A2A46696C65206C696E65206E6F7420736574206F6E206056616C75654465636C72602C2060496D706F72744465636C602C2060547970654465636C602A2A3A205468652066697820686173206265656E207375636365737366756C6C79206D657267656420285B50522023323232315D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3232323129292E0A0A2D20476E6F206C696E740A0A202020202D202A2A5072696E74696E6720616C6C20746865206572726F72732066726F6D20676F7061727365722A2A3A20546869732070756C6C207265717565737420686173206265656E207375636365737366756C6C79206D657267656420285B50522023323031315D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3230313129292E0A202020202D202A2A4C696E7420616C6C2066696C657320696E20666F6C646572206265666F72652070616E69636B696E672A2A3A20546869732070756C6C2072657175657374206973206177616974696E672072657669657720616E64206D6572676520285B50522023323230325D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3232303229292E0A0A2D2044414F2053444B20287374696C6C2077616974696E6720666F7220726576696577290A202050523A205B23313932355D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F31393235290A20200A2D202A2A476E6F564D2A2A0A0A202020202D202A2A43616E6E6F742075736520737472756374206173206B6579206F662061206D61702A2A3A205765207265736F6C76656420746865206973737565207768657265207374727563747320636F756C646E27742062652075736564206173206B65797320696E206D6170732E205468697320505220686173206265656E206D657267656420285B50522023323034345D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3230343429292E0A202020202D202A2A476F32476E6F206C6F736573207479706520696E666F2A2A3A2054686973206973737565206973207374696C6C206177616974696E672072657669657720616E64206D6572676520285B50522023323031365D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3230313629292E0A202020202D202A2A476E6F204973737565207769746820706F696E7465722A2A3A205765202070726F706F736564206120736F6C7574696F6E20285B49737375652023323036305D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F3230363029292E0A202020202D202A2A537461636B74726163652066756E6374696F6E616C6974792A2A3A20576520616464656420737461636B74726163652066756E6374696F6E616C69747920616E64207265706C6163656420736F6D652075736573206F6620604D616368696E652E537472696E676020285B50522023323134355D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3231343529292E0A202020202D202A2A5265636F766572206E6F7420776F726B696E6720636F72726563746C7920776974682072756E74696D652070616E6963732A2A3A205765206372656174656420616E20697373756520746F206164647265737320746869732070726F626C656D20285B49737375652023323134365D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F3231343629292E0A202020202D202A2A50616E6963207768656E20616464696E672061207061636B61676520776974682073756270617468732A2A3A20576520776F726B6564206F6E207468697320697373756520616E642077616974696E6720666F722072657669657720616E64206D6572676520205B50522023323135355D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3231353529292E0A0A2D202A2A476E6F206C696E742A2A0A0A202020202D202A2A5072696E74696E6720616C6C20746865206572726F72732066726F6D20676F7061727365722A2A3A205468697320696D70726F76656D656E742069732077616974696E6720666F722072657669657720616E64206D6572676520285B50522023323031315D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3230313129292E0A0A2D202A2A44414F2053444B2A2A0A0A202020202D202A2A44414F2053444B2A2A3A2057616974696E672052657669657720616E64206D657267653A205B50522023313932355D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F31393235292E0A0A2D202A2A50726F6A656374204D616E616765722A2A0A53696E6365207765206861766520616C72656164792061206C6F7420696E207265766965772C206265666F7265206F70656E696E672061205052206F6E2074686520476E6F207265706F2C2077652772652074616B696E672074696D6520746F3A0A202020202D20506F6C6973682074686520227072697661746522205B61746F6D69632050525D2868747470733A2F2F6769746875622E636F6D2F54455249544F52492F676E6F2F70756C6C2F3230290A202020202D20506F6C697368207468652055490A202020202D205365742D7570206532652074657374696E67207769746820676E6F64657620616E64206120676E6F2D6A732D636C69656E742077616C6C65742C20796F752063616E2073656520612064656D6F207265636F7264696E67205B686572655D2868747470733A2F2F6769746875622E636F6D2F54455249544F52492F676E6F2F70756C6C2F3230292C2074686520656E642D676F616C20697320746F2072756E2065326520746573747320696E2043490A0A232320447261676F730A0A232323205A656E5461736B746963200A2D205A656E7461736B7469632055736572202028337264206772616E74206D696C6573746F6E652920696D706C656D656E7465643A2068747470733A2F2F6769746875622E636F6D2F69727265766572656E7473696D706C69636974792F7A656E7461736B7469632D757365720A202020202D207570646174656420646F637320666F7220616C6C20332070726F6A656374733A0A2020202020202020202020202D2068747470733A2F2F6769746875622E636F6D2F69727265766572656E7473696D706C69636974792F7A656E7461736B7469632D636F72652F626C6F622F6D61696E2F524541444D452E6D640A2020202020202020202020202D2068747470733A2F2F6769746875622E636F6D2F69727265766572656E7473696D706C69636974792F7A656E7461736B7469632D70726F6A6563742F626C6F622F6D61696E2F524541444D452E6D640A2020202020202020202020202D2068747470733A2F2F6769746875622E636F6D2F69727265766572656E7473696D706C69636974792F7A656E7461736B7469632D757365722F626C6F622F6D61696E2F524541444D452E6D640A0A2D207A656E7461736B7469632028746865207061636B616765290A202020202D20626967206F7665726861756C2C20616C6C6F77696E6720666F72206B656570696E6720746865204173736573732D4465636964652D446F206C6F676963206F6E2074686520607A656E7461736B74696360207061636B6167652C206275742073617665207468652064617461206C6F63616C6C792C20696E20746865207265616C6D20696D706F7274696E6720746865207061636B6167652E2050522068657265207769746820736F6D65206D6F7265206578706C616E6174696F6E3A2068747470733A2F2F6769746875622E636F6D2F69727265766572656E7473696D706C69636974792F7A656E7461736B7469632D636F72652F70756C6C2F310A0A2D207A656E7461736B7469632D70726F6A6563742028746865207265616C6D290A202020202D206261636B656E642066696E69736865642C207265706F20686572653A2068747470733A2F2F6769746875622E636F6D2F69727265766572656E7473696D706C69636974792F7A656E7461736B7469632D70726F6A6563740A202020202D207175657374696F6E3A2074657374206661696C696E67206F6E2052656D6F7665576F726B4475726174696F6E2077697468206070616E69633A207265666C6563743A207265666C6563742E56616C75652E536574537472696E67207573696E672076616C7565206F627461696E6564207573696E6720756E6578706F72746564206669656C6460206F6E20576F726B4475726174696F6E3F20416464576F726B4475726174696F6E20616E642045646974576F726B4475726174696F6E207465737473206172652070617373696E672E2E2E0A0A23232320466C697070616E646F0A2A206861636B657276696C6C652E78797A2077656273697465207570646174656420666F7220746865207570636F6D696E672061697264726F703A2068747470733A2F2F6861636B657276696C6C652E78797A0A2A2061697264726F702073637269707420696E2074657374696E670A2A20666C697070616E646F204E46542061697264726F700A202020202D20636F707920616464656420746F20746865206D61696E20666C697070616E646F20776562736974652C20776974682061697264726F70206D656368616E69637320616E642064756520646174653A2068747470733A2F2F676E6F2E666C697070616E646F2E78797A2F61697264726F700A202020202D206D696E6F72207570646174657320746F20746865207765627369746520696E207072657061726174696F6E20666F722074686973202861697264726F70206D6F64653A2068747470733A2F2F676E6F2E666C697070616E646F2E78797A2F706C617967726F756E64290A202020202D2073706F696C65722C2069742077696C6C206265206F6E204A756E65203874682028323032342C20666F7220636F6E666F726D697479290A0A23232042657274790A0A2D2074782D696E64657865722067656E65736973205B505233345D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F74782D696E64657865722F70756C6C2F333429202872656C6174656420746F205B5052313934315D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F31393431293F2029202F204A6566660A20202D20626C616E6B2073637265656E206275672066697865640A2D2064536F6369616C206C6174657374206665617475726573202F20497572690A20202D207265706C7920746F206120706F73740A20202D2076696577206F746865722075736572277320706F7374730A20202D206F74686572730A2D20554920636F6E766572736174696F6E207769746820416C65786973202D20746F20706C616E20736F6F6E0A0A2D2064536F6369616C2064656D6F206170700A20202D2052656C6561736564206F6E205465737420466C6967687420616E6420476F6F676C6520506C61790A20202D20546F2067657420616E20696E7669746174696F6E2C2073656E6420796F757220656D61696C20746F2049757269206F6E205369676E616C2E20506C656173652073617920696620796F75206861766520616E206950686F6E65206F7220416E64726F69642070686F6E652E0A20202D205573696E6720637573746F6D20696E6465786572206F6E207468652042657274792070726F64756374696F6E207365727665720A2D205374726573732074657374696E670A20202D2046696E616C697A696E67207265706F72740A20202D20576861742069732074686520505220746F20776174636820666F72207265736F6C76696E672068747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F31353737203F0A202020202D205265666572656E6365642050522068747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F313537360A20202D20436F6D6D656E74206F6E20436F64654D61676963206173206120706F73736962696C6974790A0A232320566172204D6574610A0A2D2069737375653A2068747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F323035330A50523A2068747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F323130380A4465733A206C696D697420696D706F72742070617468206C656E6774680A5374617475733A204D65726765640A2D2069737375653A2068747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F323139320A50523A2068747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F323234320A4465733A205265737472696320746865206D616B6574782063616C6C2066756E6374696F6E2063616E206F6E6C792063616C6C20746F2061207265616C6D0A5374617475733A204D65726765640A2D2069737375653A2068747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F313939380A50523A2068747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F323134390A4465733A205468697320505220646566696E65732061204761735573656428292066756E6320616E6420612064656661756C74496E766F6B65436F737420696E206761732077697468696E20737464207061636B6167652E2053696D706C652066656174757265206C6574207265616C6D20646576656C6F706572206B6E6F7720746865206761732075736564206174207468652074696D652066756E6374696F6E2069732063616C6C65642E0A5374617475733A205761697420666F7220726576696577696E670A2D2049535355453A204E65772069737375652061626F757420476E6F506C617947726F756E642052554E20616E6420544553542066756E6320696E20646966666572656E742062726F777365727320287361666172692C206368726F6D65290A4C696E6B3A2068747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F323237300A5374617475733A204E4F205052206973206D6164652C2077616974696E6720636F7265207465616D0A2D205749503A2053706F6E736F722054580A50523A2068747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F323230390A4465733A20546869732050522061696D7320746F20666163696C69746174652061207472616E73616374696F6E20746861742073686F756C642068617665206265656E2066726F6D2041287369676E65722920746F204228416464726573732F5265616C6D2920284120776F756C6420706179207468652067617320666565292E20496E73746561642C20412077696C6C2064656C65676174652043287369676E65722920746F207369676E20746865207472616E73616374696F6E2066726F6D204120746F20422028432077696C6C20706179207468652067617320666565292E0A5374617475733A20556E64657220726576696577696E670A2D2050523A2068747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F323234390A49737375653A2068747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F323233320A4465733A20546F20636F6E736F6C6964617465206F75722072657475726E73206F6E20676E6F6B657920717565726965732C20492070726F706F73652074686174207765206D616B65207468656D2072657475726E204A534F4E20737472696E67730A5374617475733A2057616974696E6720666F7220233137373620746F206265206D65726765640A2D2050523A2068747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F323139380A49737375653A2068747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F323139330A4465733A2050726F706F7365207265666163746F72696E6720702F6F776E61626C652066726F6D2061207374727563742077697468206120737065636966696320696D706C656D656E746174696F6E20746F2061206D6F7265206D696E696D616C20696E746572666163652C20616C6C6F77696E6720666F7220637573746F6D206F776E657273686970206C6F676963207768696C652072657461696E696E67207468652063757272656E7420737472756374206173207468652064656661756C7420696D706C656D656E746174696F6E2E0A5374617475733A2057616974696E6720666F7220726576696577696E670A2D2050523A2068747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F323232350A49737375653A2068747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F323139330A4465733A20492070726F706F736520696E746567726174696E67206365727461696E207574696C69747920736D61727420636F6E7472616374732066726F6D20457468657265756D20696E746F20476E6F6C616E642E204E6F772069276D20776F726B696E67206F6E20646566696E696E6720746865204269746D61702C204E6F6E63654D616E6167657220616E64205175657565207061636B616765732C2077686963682063616E2070726F7669646520657373656E7469616C2066756E6374696F6E616C69747920666F722074686520476E6F6C616E642065636F73797374656D2E0A5374617475733A2057616974696E6720666F7220726576696577696E670A2D2050523A2068747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F323233340A49737375653A2068747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F323233310A4465733A2057652073686F756C642065697468657220696D706C656D656E7420746869732C206F722072656D6F76652074686520666C616720756E74696C207468652066756E6374696F6E616C69747920697320696D706C656D656E7465642E2053616D6520676F657320666F722074686520E2809370726F766520666C61672E0A5374617475733A204D65726765640A0A2D2050523A200A202020202D20537570706F727420657874656E73696F6E73206C696B65204D657461646174612C20526F79616C7479496E666F20666F7220475243373231202068747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3139363220284D6572676564290A202020202D2044657072656361746520262072656D6F7665207374642E43757272656E745265616C6D5061746828292068747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F323038372028526576696577696E67290A202020202D206C696D6974207061636B6167652070617468206C656E6774682068747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F323130382028417072726F766564290A202020202D20496D706C656D656E74204269746D6170207061636B6167652068747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3231313520284E65656420726576696577290A202020202D20496D706C656D656E74204E6F6E636573207061636B6167652068747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3231323320284E65656420726576696577290A202020202D2047617355736564282920666F7220476E6F564D207374642068747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F323134390A2D204973737565733A0A202020202D2050616E6963207768656E2067657474696E67206B65797061697220696E666F726D6174696F6E2068747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F323133330A202020202D2050726F706F73616C3A20496E746567726174652053706F6E736F72204D656368616E69736D20666F72205472616E73616374696F6E20466565732068747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F323135320A0A23232053747564656E7420436F6E7472696275746F722050726F6772616D0A0A2A2A4D757374617068612A2A0A2A204D61646520612056302041756374696F6E206461707020285B505223323236355D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3232363529290A0A232320436F6E7472696275746F72730A2D202A2A416E746F6E696F2A2A0A20202D20474E4F574C454447453A2041207265616C6D20746F2073696D756C617465206120537461636B6F766572666C6F77207374796C65642E2053686172696E6720746F2067657420736F6D6520666565646261636B2E20596F752063616E20636865636B206974206F7574207669612068747470733A2F2F6769746875622E636F6D2F69616D2D6167662F476E6F776C656467652D776562736974650A20202D205B5368696B656E2050726F6A656374207265706F7369746F726965735D2868747470733A2F2F6769746875622E636F6D2F69616D2D6167663F7461623D7265706F7369746F7269657326713D7368696B656E26747970653D736F75726365266C616E67756167653D26736F72743D290A0A23204E657720436F6E74656E740A0A2D205B4B65792F56616C75652053746F7265733A20486F7720576520496D70726F7665642074686520506572666F726D616E6365206F66204F75722074782D696E6465786572206279203130785D2868747470733A2F2F676E6F2E6C616E642F722F676E6F6C616E642F626C6F673A702F6B762D73746F7265732D696E6465786572290A2D205B496E74726F647563696E6720476E6F2053747564696F2C20746865205072656D696572204275696C64657220537569746520666F7220476E6F2E6C616E645D2868747470733A2F2F676E6F2E6C616E642F722F676E6F6C616E642F626C6F673A702F676E6F2D73747564696F2D696E74726F290A2D205B496E74726F647563696E67206F7572206E657720476E6F2E6C616E64206C6F676F3A2074686520676E6F6D655D2868747470733A2F2F676E6F2E6C616E642F722F676E6F6C616E642F626C6F673A702F7468652D676E6F6D65290A2D205B476E6F6D65732053706F7474656420696E2042656C67726164652C205365726269613A2052656361702066726F6D2074686520456E67696E656572696E67205265747265617420616E6420476F6C616E6720536572626961204D65657475705D2868747470733A2F2F676E6F2E6C616E642F722F676E6F6C616E642F626C6F673A702F676E6F6D65732D696E2D736572626961290A2D205B5465737434204578706C61696E65645D2868747470733A2F2F676E6F2E6C616E642F722F676E6F6C616E642F626C6F673A702F74657374342D6578706C61696E6564290A0A23204576656E747320616E64204D6565747570730A0A23232050617374206576656E74730A0A2D20476F4C616E6720536572626961204D6565747570202F2042656C6772616465202F204D61792032332E20576520757365642074686520476E6F20636F7265207465616D2773207265747265617420696E2042656C677261646520746F20636F6E6E656374207769746820746865206C6F63616C20476F20646576656C6F7065727320616E6420706F737369626C6520636F6E7472696275746F7273206F76657220746865206E65787420666577206D6F6E74687320746F206275696C64207468652065636F73797374656D2E205B46756C6C2072656361705D2868747470733A2F2F676E6F2E6C616E642F722F676E6F6C616E642F626C6F673A702F676E6F6D65732D696E2D736572626961292E0A2D2057652772652063757272656E746C79207772617070696E67207570202A2A476F70686572436F6E2045552A2A20696E204265726C696E2C2065787065637420616E2075706461746520736F6F6E210A0A2323205570636F6D696E67206576656E74730A0A2D202A2A476F70686572436F6E2055532A2A202F204368696361676F202F204A756C7920377468202D20313074680A2D202A2A4E6562756C61722053756D6D69742A2A202F204272757373656C73202F204A756C7920313274682F313374680A0A232320446973636F726420446576656C6F706572204F666669636520486F7572730A0A4576657279207765656B206F6E20546875727364617920617420323A333020706D20434553542C20776520686F7374206F666669636520686F757273206F6E205B446973636F72645D2868747470733A2F2F646973636F72642E636F6D2F696E766974652F643234435435623963643F6576656E743D313235323331303238323435303131323539352920746F20616E73776572207175657374696F6E732C206469736375737320757064617465732C20616E6420636174636820757020776974682074686520636F6D6D756E6974792E2057652764206C6F766520746F2073656520796F75207468657265213214323032342D30362D32305430303A30303A30305A32074B6F7574656B69323B676E6F6C616E642C65636F73797374656D2C757064617465732C676E6F766D2C746D322C74657374342C676E6F73747564696F2C636F6E6E6563740AC2420A0A2F766D2E6D5F63616C6C12B3420A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374320C676E6F2D64656275676765723216446562756767696E6720476E6F2050726F6772616D7332FB400A200A496E20746869732061727469636C652C20776520696E74726F6475636520746865206E657720476E6F206465627567676572206665617475726520616E642073686F7720686F772069742063616E206265207573656420746F2062657474657220756E6465727374616E6420476E6F2070726F6772616D7320616E642068656C7020746F2066697820627567732E0A0A2323204D6F7469766174696F6E20666F72206120476E6F2064656275676765720A0A3E20446562756767696E6720697320747769636520617320686172642061732077726974696E6720636F64652E0A3E0A3E202D2D203C636974653E427269616E204B65726E696E6768616E2C202254686520456C656D656E7473206F662050726F6772616D6D696E67205374796C65223C2F636974653E0A0A3E204F6E20617665726167652C20796F75207370656E642061626F757420656967687420746F2074656E2074696D657320646562756767696E6720617320796F7520646F2077726974696E6720636F64652E0A3E0A3E202D2D203C636974653E416E6F6E796D6F75733C2F636974653E0A0A486176696E67206120676F6F6420646562756767657220697320696D706F7274616E742E204275742074686520476E6F206C616E677561676520697320616C6D6F737420476F2C20616E6420676E6F2E6C616E6420697473656C6620697320656E746972656C79207772697474656E20696E20476F2E20436F756C642049206A7573742075736520746865206578697374696E6720476F20746F6F6C732C20692E652E2020746865205B64656C76655D2064656275676765722C20746F2074616B6520636F6E74726F6C20616E64206465627567206D7920476E6F2070726F6772616D733F0A0A596F752063616E6E6F7420646562756720796F7572202A476E6F2A2070726F6772616D207468697320776179206265636175736520646F696E6720736F20776F756C6420656E7461696C20646562756767696E672074686520476E6F207669727475616C206D616368696E6520726174686572207468616E20796F7572206F776E2070726F6772616D2E205468652072656C6576616E7420737461746520696E666F726D6174696F6E20776F756C64206265206F706171756520616E6420776F756C64206E65656420746F20626520726576657273656420616E64207265636F6E73747275637465642066726F6D20696E7465726E616C20476E6F207669727475616C206D616368696E65206461746120737472756374757265732E0A0A54686520476E6F20646562756767657220616464726573736573207468697320697373756520627920646973706C6179696E6720746865207374617465206F662074686520476E6F2070726F6772616D206D656D6F72792073796D626F6C6963616C6C792E20497420616C6C6F777320666F7220636F6E74726F6C206F662070726F6772616D20657865637574696F6E2061742074686520736F7572636520636F6465206C6576656C2C207265676172646C657373206F6620746865207669727475616C206D616368696E6520696D706C656D656E746174696F6E2E0A0A23232053657474696E672075700A0A54686520476E6F2064656275676765722069732066756C6C7920696E746567726174656420696E20746865205B676E6F5D2868747470733A2F2F646F63732E676E6F2E6C616E642F676E6F2D746F6F6C696E672F636C692F676E6F2D746F6F6C696E672D676E6F292062696E6172792C2077686963682069732074686520746F6F6C20726571756972656420746F206275696C642C20746573742C20616E642072756E20476E6F2070726F6772616D73206C6F63616C6C792E0A0A5468657265206973206E6F206E65656420746F20696E7374616C6C206120737065636966696320746F6F6C2E20596F75206A757374206861766520746F20696E7374616C6C207468652060676E6F6020746F6F6C20697473656C6620776974683A0A0A6060607368656C6C0A67697420636C6F6E652068747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F0A636420676E6F0A676F20696E7374616C6C202E2F676E6F766D2F636D642F676E6F0A6060600A0A576520617265206E6F7720726561647920746F20706C6179207769746820476E6F2070726F6772616D732E204C6574277320636F6E736964657220612073696D706C6520636C6173736963206578616D706C652061732061207461726765742070726F6772616D2C2074686520636F6D7075746174696F6E206F66205B4669626F6E61636369206E756D626572735D3A0A0A606060676F0A2F2F206669622E676E6F0A7061636B616765206D61696E0A0A2F2F206669622072657475726E7320746865206E7468206E756D62657220696E20746865204669626F6E616363692073657175656E63652E0A66756E6320666962286E20696E742920696E74207B0A20202020202020206966206E203C2032207B0A2020202020202020202020202020202072657475726E206E0A20202020202020207D0A202020202020202072657475726E20666962286E2D3229202B20666962286E2D31290A7D0A0A66756E63206D61696E2829207B0A20202020202020207072696E746C6E28666962283429290A7D0A0A6060600A546F206578656375746520746869732070726F6772616D2C2077652072756E2074686520636F6D6D616E642060676E6F2072756E202E2F6669622E676E6F602E20546F206163746976617465207468652064656275676765722C207765206A75737420706173732074686520602D64656275676020666C61673A2060676E6F2072756E202D6465627567202E2F6669622E676E6F602E205573652060676E6F2072756E202D68656C706020746F20676574206D6F7265206F7074696F6E73206966206E65656465642E0A0A232320517569636B20746F7572206F66207468652064656275676765720A0A5768656E20796F7520737461727420612070726F6772616D20696E206465627567206D6F64652C20796F7520617265206772656574656420627920612070726F6D707420616C6C6F77696E6720796F7520746F20696E74657261637420776974682069742076696120746865207465726D696E616C3A0A6060607368656C6C0A2420676E6F2072756E202D6465627567202E2F6669622E676E6F0A57656C636F6D6520746F2074686520476E6F564D2064656275676765722E2074797065202768656C702720666F72206C697374206F6620636F6D6D616E64732E0A6462673E0A6060600A0A456E746572696E67206068656C706020676976657320796F7520746865206C697374206F6620617661696C61626C6520636F6D6D616E647320616E642074686569722073686F72742075736167653A0A0A6060607368656C6C0A6462673E2068656C700A54686520666F6C6C6F77696E6720636F6D6D616E64732061726520617661696C61626C653A0A0A627265616B7C62205B6C6F63737065635D202020202020202020536574206120627265616B706F696E742E0A627265616B706F696E74737C62702020202020202020202020205072696E74206F757420696E666F20666F722061637469766520627265616B706F696E74732E0A636C656172205B69645D2020202020202020202020202020202044656C65746520627265616B706F696E742028616C6C206966206E6F206964292E0A636F6E74696E75657C632020202020202020202020202020202052756E20756E74696C20627265616B706F696E74206F722070726F6772616D207465726D696E6174696F6E2E0A6465746163682020202020202020202020202020202020202020436C6F736520646562756767657220616E6420726573756D652070726F6772616D2E0A646F776E205B6E5D2020202020202020202020202020202020204D6F7665207468652063757272656E74206672616D6520646F776E206279206E202864656661756C742031292E0A657869747C717569747C71202020202020202020202020202020457869742074686520646562756767657220616E642070726F6772616D2E0A68656C707C68205B636F6D6D616E645D202020202020202020205072696E74207468652068656C70206D6573736167652E0A6C6973747C6C205B6C6F63737065635D2020202020202020202053686F7720736F7572636520636F64652E0A7072696E747C70203C65787072657373696F6E3E2020202020205072696E742061207661726961626C65206F722065787072657373696F6E2E0A737461636B7C62742020202020202020202020202020202020205072696E7420737461636B2074726163652E0A737465707C73202020202020202020202020202020202020202053696E676C652073746570207468726F7567682070726F6772616D2E0A73746570697C736920202020202020202020202020202020202053696E676C65207374657020612073696E676C6520564D20696E737472756374696F6E2E0A7570205B6E5D20202020202020202020202020202020202020204D6F7665207468652063757272656E74206672616D65207570206279206E202864656661756C742031292E0A0A547970652068656C7020666F6C6C6F776564206279206120636F6D6D616E6420666F722066756C6C20646F63756D656E746174696F6E2E0A6462673E0A6060600A0A496620796F75206861766520616C726561647920757365642061206465627567676572206265666F72652C206C696B65205B6764625D206F72205B6C6C64625D20666F7220432F432B2B2070726F6772616D732C206F72205B64656C76655D20666F7220476F2070726F6772616D732C2074686520476E6F2064656275676765722073686F756C64206C6F6F6B2066616D696C6961723B2074686520636F6D6D616E6473206172652073696D696C617220696E2074686569722073796E74617820616E642075736167652E0A0A54686520636F6D6D616E64732063616E20626520636C617373696669656420696E2074686520666F6C6C6F77696E672063617465676F726965733A0A2D206D616E6167696E6720627265616B706F696E74733A2060627265616B602C2060627265616B706F696E7473602C2060636C656172602C0A2D20636F6E74726F6C6C696E6720657865637574696F6E3A206073746570602C20607374657069602C2060636F6E74696E7565602C0A2D2062726F7773696E6720636F64652C206461746120616E6420737461636B3A20606C697374602C20607072696E74602C2060737461636B602C0A2D206E617669676174696E672074686520737461636B3A20607570602C2060646F776E602C0A2D207175697474696E67207468652064656275676765723A2060646574616368602C206065786974602E0A0A232320436F6E74726F6C6C696E6720616E64206578706C6F72696E67207468652070726F6772616D2073746174650A0A4C6574277320676F206261636B20746F206F7572204669626F6E616363692070726F6772616D2C207374696C6C207061757365642E2057652060737465706020612066697273742074696D652C20776869636820696E737472756374732074686520476E6F564D20746F206578656375746520612073696E676C652073746174656D656E7420616E642067697665206261636B20636F6E74726F6C20746F2074686520757365723A0A0A6060607368656C6C0A6462673E20730A3E206D61696E2E6D61696E2829206D61696E2F2E2F6669622E676E6F3A31313A310A202020202020373A20090972657475726E206E0A202020202020383A20097D0A202020202020393A200972657475726E20666962286E2D3229202B20666962286E2D31290A202020202031303A207D0A202020202031313A200A3D3E20202031323A2066756E63206D61696E2829207B0A202020202031333A20097072696E746C6E28666962283429290A202020202031343A207D0A6060600A0A546865206669727374206F7574707574206C696E6520603E206D61696E2E6D61696E2829206D61696E2F2E2F6669622E676E6F3A31313A316020696E646963617465732074686520707265636973652063757272656E74206C6F636174696F6E20696E20736F7572636520636F64652C20666F6C6C6F77656420627920612073686F727420736F75726365206C697374696E672061726F756E642074686973206C6F636174696F6E2E205468652063757272656E74206C696E6520697320696E646963617465642062792074686520637572736F7220603D3E602E0A0A46726F6D2074686572652C20776520636F756C64207265706561742060737465706020636F6D6D616E647320746F2070726F67726573732C20627574207468617420776F756C6420626520746F6F20746564696F75732E20496E73746561642C20776520736574206120627265616B706F696E7420617420616E20696E746572657374696E67206C696E6520696E207468652060666962602066756E6374696F6E2C20616E642060636F6E74696E75656020746F206974206469726563746C793A0A0A6060607368656C6C0A6462673E206220370A427265616B706F696E742030206174206D61696E206D61696E2F2E2F6669622E676E6F3A373A310A6462673E20630A3E206D61696E2E6669622829206D61696E2F2E2F6669622E676E6F3A373A31300A202020202020323A207061636B616765206D61696E0A202020202020333A200A202020202020343A202F2F206669622072657475726E7320746865206E7468206E756D62657220696E20746865204669626F6E616363692073657175656E63652E0A202020202020353A2066756E6320666962286E20696E742920696E74207B0A202020202020363A20096966206E203C2032207B0A3D3E20202020373A20090972657475726E206E0A202020202020383A20097D0A202020202020393A200972657475726E20666962286E2D3229202B20666962286E2D31290A202020202031303A207D0A202020202031313A200A6462673E0A6060600A0A4E6F7465207468617420776520686176652075736564207468652073686F727420616C696173206F6620636F6D6D616E64733A2060626020666F722060627265616B6020616E642060636020666F722060636F6E74696E7565602E205765206F6E6C79206E65656420746F207370656369667920746865206C696E65206E756D626572207768656E2073657474696E672074686520627265616B20706F696E7420686572652C2064756520746F206974206265696E6720696E207468652073616D652066696C652E2053657474696E6720627265616B20706F696E747320696E206F746865722066696C65732072657175697265732073706563696679696E67207468652066756C6C2066696C65207061746820616E64206C696E65206E756D6265722E0A0A57652063616E206E6F77206578616D696E65207468652063616C6C20737461636B20776869636820696E64696361746573207468652073756363657373697665206E65737465642066756E6374696F6E2063616C6C7320757020746F207468652063757272656E74206C6F636174696F6E3A0A0A6060607368656C6C0A6462673E20737461636B0A3009696E206D61696E2E6669620A096174206D61696E2F2E2F6669622E676E6F3A373A31300A3109696E206D61696E2E6669620A096174206D61696E2F2E2F6669622E676E6F3A393A32300A3209696E206D61696E2E6669620A096174206D61696E2F2E2F6669622E676E6F3A393A32300A3309696E206D61696E2E6D61696E0A096174206D61696E2F2E2F6669622E676E6F3A31333A320A6462673E0A6060600A57652073656520612063616C6C20737461636B206F6620646570746820342C20776974682063616C6C206672616D657320286C6F63616C2066756E6374696F6E20636F6E746578747329206E756D62657265642066726F6D203020746F20332C2030206265696E67207468652063757272656E742063616C6C206C6576656C20287468652064656570657374292E205468697320696E666F726D6174696F6E206973206372756369616C2C20657370656369616C6C79207768656E20646562756767696E67207265637572736976652066756E6374696F6E73206C696B652060666962602E205765206B6E6F772074686174207468652063616C6C657220616E64206974732063616C6C6572207765726520626F74682060666962602E0A0A4E6F772077652077616E7420746F206578616D696E65207468652076616C7565206F6620746865206C6F63616C20706172616D6574657220606E602C20666F7220656163682063616C6C206C6576656C3A0A6060607368656C6C0A6462673E207072696E74206E0A283020696E74290A6462673E2075700A3E206D61696E2E6669622829206D61696E2F2E2F6669622E676E6F3A373A31300A4672616D6520313A206D61696E2F2E2F6669622E676E6F3A393A32300A202020202020343A202F2F206669622072657475726E7320746865206E7468206E756D62657220696E20746865204669626F6E616363692073657175656E63652E0A202020202020353A2066756E6320666962286E20696E742920696E74207B0A202020202020363A20096966206E203C2032207B0A202020202020373A20090972657475726E206E0A202020202020383A20097D0A3D3E20202020393A200972657475726E20666962286E2D3229202B20666962286E2D31290A202020202031303A207D0A202020202031313A200A202020202031323A2066756E63206D61696E2829207B0A202020202031333A20097072696E746C6E28666962283429290A6462673E207072696E74206E0A283220696E74290A6462673E2075700A3E206D61696E2E6669622829206D61696E2F2E2F6669622E676E6F3A373A31300A4672616D6520323A206D61696E2F2E2F6669622E676E6F3A393A32300A202020202020343A202F2F206669622072657475726E7320746865206E7468206E756D62657220696E20746865204669626F6E616363692073657175656E63652E0A202020202020353A2066756E6320666962286E20696E742920696E74207B0A202020202020363A20096966206E203C2032207B0A202020202020373A20090972657475726E206E0A202020202020383A20097D0A3D3E20202020393A200972657475726E20666962286E2D3229202B20666962286E2D31290A202020202031303A207D0A202020202031313A200A202020202031323A2066756E63206D61696E2829207B0A202020202031333A20097072696E746C6E28666962283429290A6462673E207072696E74206E0A283420696E74290A6462673E0A6060600A576520736565207468617420746865206C6F63616C2076616C756520606E6020697320302061742063757272656E74206672616D6520302C2032206174206672616D65203120616E642034206174206672616D6520322C20776869636820636F72726573706F6E647320746F20746865206E65737465642063616C6C73206F6620606669626020657870726573736564206174206C696E6520392E0A0A546865206075706020616E642060646F776E6020737461636B206E617669676174696F6E20636F6D6D616E647320656E61626C652074686520646562756767657220746F20646973706C6179207468652076616C7565206F66206C6F63616C2066756E6374696F6E207661726961626C657320616E6420706172616D657465727320666F72207468652077686F6C652063616C6C20636861696E2E0A0A496E2074686973206578616D706C652C2074686520606E60207661726961626C652069732073696D706C7920616E20696E74656765722C206275742074686520607072696E746020636F6D6D616E6420697320616C736F2061626C6520746F2068616E646C65206D6F726520636F6D706C65782065787072657373696F6E7320746F20756E636F7665722074686520636F6E74656E74206F6620617262697472617279206D6170732C207374727563742C206172726179732C20657463207573696E67207468652073616D652073796E74617820617320476F2E20466F72206578616D706C652C20607072696E7420612E625B6E5D602077696C6C207072696E742061732065787065637465642C207769746820606160206265696E6720612076616C7565206F6620747970653A0A606060676F0A766172206120737472756374207B0A2020202062205B5D737472696E670A7D0A6060600A466F7220736563757269747920726561736F6E732C2074686520607072696E746020636F6D6D616E642077696C6C206F6E6C79206576616C756174652065787072657373696F6E732077697468206E6F20736964652065666665637473206F6E20746865207669727475616C206D616368696E652073746174652E20466F72206578616D706C652C206974206973206E6F7420706F737369626C6520746F20706572666F726D20616E2061726974686D65746963206F7065726174696F6E206C696B6520607072696E742061202B2032602C206F7220746F2063616C6C20612066756E6374696F6E206C696B6520607072696E74662066283629602E0A0A232320436F6E636C7573696F6E0A0A5765206861766520696E74726F647563656420746865206E657720476E6F20646562756767657220616E642070726573656E74656420697473206D61696E206361706162696C69746965732E200A0A54686973206973206A75737420746865207374617274206F662061206E65772070726F6A6563742C20776974682061206C6F74206F6620726F6F6D20666F7220696D70726F76656D656E742E205468652077686F6C6520476E6F2070726F6A656374206265696E67206F70656E20736F757263652C20796F75206172652077656C636F6D65206E6F74206F6E6C7920746F2070726F7669646520666565646261636B7320616E642073756767657374696F6E732C2062757420616C736F20746F20636F6E747269627574652061742068747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2E0A0A0A5B64656C76655D3A2068747470733A2F2F6769746875622E636F6D2F676F2D64656C76652F64656C76650A5B676E6F5D3A2068747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F747265652F6D61737465722F676E6F766D2F636D642F676E6F0A5B4669626F6E61636369206E756D626572735D3A2068747470733A2F2F73696D706C652E77696B6970656469612E6F72672F77696B692F4669626F6E616363695F6E756D6265720A5B6764625D3A2068747470733A2F2F736F75726365776172652E6F72672F6764622F0A5B6C6C64625D3A2068747470733A2F2F6C6C64622E6C6C766D2E6F72670A3214323032342D30382D30365431333A33373A30305A32076D766572746573321F626C6F672C706F73742C7475746F7269616C2C676E6F2C64656275676765720A878F020A0A2F766D2E6D5F63616C6C12F78E020A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F737432127265616368696E672D636F6E73656E737573323F5265616368696E6720436F6E73656E7375733A20446576656C6F70696E67204661756C742D746F6C6572616E7420534D5473207573696E6720476F6C616E6732F58C020A0A4576657279206F6E636520696E2061207768696C652C20616E206566666F727420636F6D657320616C6F6E6720666F722074686520476E6F20636F726520656E67696E656572696E67207465616D20746861742064656D616E647320696D6D656E736520666F6375732C2061646170746162696C6974790A616E6420636F6F7264696E6174696F6E2C20696E206F7264657220746F207375636365737366756C6C7920696D70726F7665206120637269746963616C2070617274206F6620746865205B676E6F2E6C616E645D28687474703A2F2F676E6F2E6C616E642F2920626C6F636B636861696E0A73797374656D2E20546869732061727469636C65206973206D65616E7420746F20636F766572206F6E65207375636820637269746963616C206D6F64756C65202D207468652054656E6465726D696E7420636F6E73656E73757320656E67696E652E0A0A4F7665722074686520636F75727365206F6620746865206E65787420666F6C6C6F77696E672073656374696F6E732C20796F75E280996C6C20646973636F766572206F6E20612070726163746963616C206C6576656C2077686174207468652054656E6465726D696E7420636F6E73656E7375730A656E67696E6520697320616C6C2061626F75742C20686F7720697420776F726B732C20616E6420686F7720776520656E64656420757020696D706C656D656E74696E6720697420666F722074686520707572706F736573206F66205B476E6F2E6C616E645D28687474703A2F2F676E6F2E6C616E642F292C0A616E642074686520776964657220626C6F636B636861696E20616E64206F70656E2D736F7572636520636F6D6D756E6974792E0A0A496620796F752077616E7420746F206A756D7020737472616967687420746F2074686520736F7572636520636F64652C20796F752063616E2066696E6420746865207374616E64616C6F6E65206C69627261727920696E2074686520676E6F0A6D6F6E6F7265706F205B686572655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F747265652F6D61737465722F746D322F706B672F6C6962746D292E0A0A497420697320776F727468206E6F74696E6720746861742077652077696C6C207072696D6172696C792062652064697363757373696E672074686520757365206F66207468652054656E6465726D696E7420636F6E73656E73757320656E67696E652066726F6D20616E20616E676C65206F6620610A64697374726962757465642073797374656D2C207468617420646F65736EE2809974206E65636573736172696C79206861766520616E797468696E6720746F20646F207769746820626C6F636B636861696E732E0A0A232320576861742061726520636F6E73656E73757320656E67696E65732C207265616C6C793F0A0A4D6F737420626C6F636B636861696E2073797374656D732074686174206172652064697374726962757465642075736520736F6D65202A636F6E73656E737573206D656368616E69736D2A2E20496E20657373656E63652C207468697320697320612070726F6365737320696E2077686963680A72656D6F7465206D616368696E65732028626C6F636B636861696E206E6F646573292061677265652074686174206120676976656E2076616C75652069732076616C69642E20546865206E6174757265206F662074686569722061677265656D656E7420287468652070726F636573732920616E640A7468652076616C7565206F6E2077686963682074686579206167726565206F6E2061726520636F6D706C6574656C79206172626974726172792C20616E642061726520757020746F2074686520737065636966696320626C6F636B636861696E2073797374656D20746F20646563696465206F6E20616E640A7573652E0A0A536F6D65206F66207468657365202A636F6E73656E73757320616C676F726974686D732A20686176652073706563696669632070726F706572746965732074686174206D616B65207468656D206D6F726520726573696C69656E74207468616E206F746865727320E2809420636F6E73656E7375730A616C676F726974686D732063616E20626520637261736820746F6C6572616E742C206D65616E696E67207468652070726F63657373206F66207265616368696E6720616E2061677265656D656E74206F6E20612076616C756520746F6C657261746573206E6F646573206265696E67202A6661756C74792A0A6279206372617368696E672C20696E207768696368206361736520746865792073746F70207768696C65207468652072657374206F6620746865206E6F64657320636F6E74696E7565206F7065726174696E672E20416E206578616D706C65206F66207468697320636F6E73656E7375730A616C676F726974686D206973205B526166745D2868747470733A2F2F726166742E6769746875622E696F2F292E204F6E20746865206F746865722068616E642C2061206D6F726520726573696C69656E7420636F6E73656E73757320616C676F726974686D20697320616C736F0A2A62797A616E74696E652D746F6C6572616E742A2C20696E207768696368206361736520746865206E6F6465732070617274696369706174696E6720696E2074686520636F6E73656E7375732070726F636573732063616E206E6F74206F6E6C792063726173682C206275742062650A6D616C6963696F757320E28094206D65616E696E6720616E206172626974726172792072616E6765206F66206661756C7479206265686176696F727320697320746F6C6572617465642E204578616D706C6573206F662062797A616E74696E652D746F6C6572616E7420636F6E73656E7375730A616C676F726974686D730A696E636C756465205B504246545D2868747470733A2F2F706D672E637361696C2E6D69742E6564752F7061706572732F6F73646939392E706466292C205B494246545D2868747470733A2F2F61727869762E6F72672F6162732F323030322E3033363133292C205B486F7453747566665D2868747470733A2F2F61727869762E6F72672F6162732F313830332E3035303639292C0A616E6420746865206F6E652077652077696C6C20666F637573206F6E20696E20746869732061727469636C6520E28094205B54656E6465726D696E745D2868747470733A2F2F61727869762E6F72672F6162732F313830372E3034393338292E0A0A466F72207468652073616B65206F6620636C61726974792C20697420697320776F727468206E6F74696E6720616E20696D706F7274616E742064697374696E6374696F6E2076657279206561726C79206F6E2C206265666F7265207765206469766520696E746F207468650A6E697474792D6772697474792E20496E20746869732061727469636C65207765206D616B65206120636C6561722064697374696E6374696F6E206265747765656E20636F6E73656E7375732070726F746F636F6C732C207468652076616C696461746F7220736574206D6F64696669636174696F6E0A616C676F726974686D732C20616E6420636F6E73656E73757320656E67696E65732C207468652061637475616C207374617465206D616368696E65206368616E67657320726571756972656420666F72207265616368696E6720636F6E73656E7375732E0A0A496E206120646973747269627574656420636F6E73656E7375732D72756E2073797374656D2C20746865207061727469636970616E74732061726520757375616C6C792063616C6C6564202A6E6F6465732A2E20496E2074686520626C6F636B636861696E20636F6E746578742C2074686579206172650A63616C6C6564202A76616C696461746F72732A2C2073696E636520746865792076616C6964617465207468652070726F706F73656420636861696E207374617465206368616E676573207468726F7567682074686520636F6E73656E7375732070726F636573732E205468652070726F6365737320666F720A7768696368207468657365206163746F7273202A656E74657220616E6420657869742A207468652076616C696461746F722073657420286E6F646520636F6E73656E73757320736574292069732063616C6C65642061202A636F6E73656E7375732070726F746F636F6C2A2E204D6F73740A706F70756C6172206578616D706C6573206F6620636F6E73656E7375732070726F746F636F6C7320696E636C7564653A0A0A2A202A2A50726F6F66206F6620417574686F726974792028506F41292A2A202D2061207065726D697373696F6E65642073797374656D20696E20776869636820636F6E73656E737573207061727469636970616E7473202876616C696461746F727329206172652073656C6563746976656C790A202063686F73656E202F20766F74656420696E2C20627920746865206578697374696E67207061727469636970616E74207365742E0A2A202A2A50726F6F66206F66205374616B652028506F53292A2A202D2061207065726D697373696F6E2D6C6573732073797374656D20696E20776869636820616E796F6E652063616E207374616B6520736F6D657468696E672028757375616C6C7920746865206E6574776F726BE2809973206E61746976650A202063757272656E63792920746F206761696E20656E74727920696E746F207468652076616C696461746F722073657420286265636F6D6520636F6E73656E737573207061727469636970616E7473292E0A0A546865726520617265206D616E7920646966666572656E7420666C61766F727320666F72207468652073797374656D20696E207768696368207468652076616C696461746F72207365742069732063686F73656E20E2809420666F72207468652073616B65206F662073696D706C69636974792077650A67726F757020746869732070726F6365737320756E64657220746865202A636F6E73656E7375732070726F746F636F6C2A207465726D2E0A0A5B215B76616C7365745D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30372D30315F7265616368696E675F636F6E73656E7375732F7372632F7468756D62732F76616C7365742E706E67295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30372D30315F7265616368696E675F636F6E73656E7375732F7372632F76616C7365742E706E67290A0A5765206D656E74696F6E6564206561726C696572207468617420636F6E73656E73757320697320612070726F6365737320696E207768696368206E6F6465732061677265652075706F6E20612073706563696669632076616C75652E2057652064656E6F746520746869732061637475616C0A70726F746F636F6C20696E20776869636820746865792061677265652075706F6E20612076616C756520617320746865202A636F6E73656E73757320656E67696E652A2E0A0A54686520636F6E73656E73757320656E67696E6520726570726573656E74732074686520696E7465726E616C2C206D6F737420637269746963616C2070726F63657373206F662074686520636F6E73656E73757320616C676F726974686D202D20746865207374617465206D616368696E652E2049740A676976657320616E737765727320746F207175657374696F6E73206C696B65202D2077686F2070726F706F7365732074686520636F6E73656E7375732076616C75652028696E206C65616465722D62617365642073797374656D73292C20686F772069732076616C69646174696F6E20646F6E652C0A627574206D6F737420696D706F7274616E746C7920E28094207768617420617265207468652073746570732074616B656E2062792076616C696461746F727320746F20726561636820636F6E73656E7375733F0A0A5B215B6D616368696E655D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30372D30315F7265616368696E675F636F6E73656E7375732F7372632F7468756D62732F6D616368696E652E706E67295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30372D30315F7265616368696E675F636F6E73656E7375732F7372632F6D616368696E652E706E67290A0A232323205465726D696E6F6C6F67790A0A436F6E73656E73757320616C676F726974686D73206C696B652054656E6465726D696E7420776F726B206F6E206120726F756E642D6261736564206D6F64656C2C206D65616E696E6720636F6E73656E73757320697320617474656D7074656420746F2062652072656163686564206F6E20610A676976656E2076616C75652077697468696E206120726F756E642C20666F72206120676976656E206865696768742E20496620636F6E73656E737573206973206E6F742072656163686564206F6E2060726F756E64205860206F6620606865696768742059602C207468656E2061206E65770A636F6E73656E73757320726F756E64206973207374617274656420666F722060726F756E6420582B31602C20606865696768742059602E205468697320726F756E64206368616E67696E67206F636375727320756E74696C20636F6E73656E737573206973207265616368656420666F72207468650A676976656E206865696768742028696E2074686520636F6E74657874206F6620626C6F636B636861696E732C20746865206865696768742069732074686520626C6F636B206E756D626572292E2057652077696C6C2064697363757373206C61746572206F6E2077686174207468650A636F6E646974696F6E732061726520666F7220696E6372656173696E672074686520636F6E73656E73757320726F756E64206E756D6265722E0A0A57652063616C6C2074686973207475706C652064656E6F74696E67207468652063757272656E7420636F6E73656E7375732068656967687420616E6420726F756E64206028682C207229602061202A2A2A766965772A2A2A2E0A0A466F72206C65616465722D626173656420636F6E73656E73757320616C676F726974686D73206C696B652054656E6465726D696E742C206F6E65206E6F6465202876616C696461746F72292063616C6C656420746865202A2A2A70726F706F7365722A2A2A202877686F2069730A64657465726D696E6973746963616C6C792073656C656374656420627920616C6C2070617274696369706174696E67206E6F64657329206E6565647320746F2070726F706F736520612076616C756520666F72207468652063757272656E7420636F6E73656E73757320766965772E20546869730A2A2A2A70726F706F73616C2A2A2A2076616C75652063616E20696E207468656F727920626520616E797468696E672C2062757420696E2074686520636F6E74657874206F6620626C6F636B636861696E2073797374656D732C207468697320697320757375616C6C79206120626C6F636B0A636F6E7461696E696E67207472616E73616374696F6E7320287374617465207472616E736974696F6E73292E0A0A537065636966696320746F2054656E6465726D696E742C20696E206F7264657220746F20726561636820636F6E73656E7375732C207468657265206E6565647320746F20626520616E2061677265656D656E74206265747765656E206174206C65617374206032462B31602076616C696461746F720A6E6F64657320287768657265206046602064656E6F74657320746865206D6178696D756D206E756D626572206F66206661756C7479206E6F64657320746861742061726520746F6C65726174656420696E207468652073797374656D292E20496E207468652062726F616465722054656E6465726D696E740A65636F73797374656D2C2076616C696461746F727320617265206E6F7420657175616C2C2073696E63652074686520636F6E73656E7375732070726F746F636F6C206D6F73746C79207573656420776974682054656E6465726D696E742069732050726F6F66206F66205374616B652C20616E64207468650A76616C696461746F72E280997320706F7765722069732070726F706F7274696F6E616C20746F207468656972207374616B652E20496E207468697320636173652C206046602064656E6F74657320746865206D6178696D756D20766F74696E6720706F776572206F66206661756C7479206E6F6465730A746861742061726520746F6C65726174656420696E207468652073797374656D2E20496E2070726163746963652C206032462B316020697320322F332B202873757065726D616A6F7269747929206F66207468652076616C696461746F7220736574E280997320766F74696E6720706F7765722E0A0A232320486F7720646F65732054656E6465726D696E7420776F726B3F0A0A546865207465726D20E2809C5B54656E6465726D696E745D2868747470733A2F2F646F63732E74656E6465726D696E742E636F6D2F76302E33342F696E74726F64756374696F6E2F776861742D69732D74656E6465726D696E742E68746D6C29E2809D2072656665727320746F2061206D756368206C61726765720A73636F7065206F662066756E6374696F6E616C697479207468616E2077686174207765206469736375737320696E20746869732061727469636C652E20427920E2809C54656E6465726D696E74E2809D20686572652C20776520736F6C656C7920726566657220746F207468652054656E6465726D696E740A636F6E73656E73757320656E67696E6520287374617465206D616368696E65292E0A0A4120676F6F64206772617068696320746861742073686F777320616E206F76657276696577206F66207468652054656E6465726D696E74207374617465206D616368696E652063616E20626520666F756E64206F6E207468650A6F6666696369616C205B54656E6465726D696E7420436F726520646F63756D656E746174696F6E5D2868747470733A2F2F646F63732E74656E6465726D696E742E636F6D2F76302E33342F696E74726F64756374696F6E2F776861742D69732D74656E6465726D696E742E68746D6C23636F6E73656E7375732D6F76657276696577293A0A0A5B215B706F6C6B615D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30372D30315F7265616368696E675F636F6E73656E7375732F7372632F7468756D62732F706F6C6B612E706E67295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30372D30315F7265616368696E675F636F6E73656E7375732F7372632F706F6C6B612E706E67290A0A486F77657665722C2077652077616E7420746F207461636B6C652074686973207175657374696F6E206F662054656E6465726D696E74E280997320696E6E65722D776F726B696E67732062792077656176696E6720696E20746865207468656F72792066726F6D20746865207061706572207469746C65640A2A546865206C617465737420676F73736970206F6E2042465420636F6E73656E7375732A2C20616E64206170706C79696E6720697420696E2070726163746963652E0A0A4F6E206120737572666163652D6C6576656C2C207468652054656E6465726D696E7420636F6E73656E73757320656E67696E65206861732033207374617465733A0A0A2D202A2A50726F706F73652A2A202D20746865202A70726F706F7365722A20666F72207468652063757272656E74207669657720286865696768742C20726F756E64292073656E6473206F75742061202A70726F706F73616C2A20746F20616C6C206F746865722076616C696461746F72206E6F6465732E0A20204E6F6E2D70726F706F73657273207761697420666F72207468652070726F706F73616C20616E64207665726966792069740A2D202A2A507265766F74652A2A202D207468652076616C696461746F72206E6F646573207761697420666F722032462B312060505245564F544560206D657373616765732C20706F74656E7469616C6C79206C6F636B696E67206F6E20612070726F706F73616C0A2D202A2A507265636F6D6D69742A2A202D207468652076616C696461746F72206E6F646573207761697420666F722032462B312060505245434F4D4D495460206D657373616765732C20706F74656E7469616C6C7920736176696E672074686520626C6F636B20746F2074686520626C6F636B0A202073746F72652C20616E64207374617274696E672061206E657720636F6E73656E73757320726F756E6420287769746820612076696577206028682B312C20302960290A0A54686573652073746174657320617265206E6F74206173207374726169676874666F72776172642061732074686579E280997265206D616465206F757420746F20626520E2809420746865726520697320616E20616464656420636F6D706C69636174696F6E206F66202A73746174652074696D6572732A0A77686963682067756172616E7465652070726F746F636F6C206C6976656E6573732C20616E64206F74686572206173796E6368726F6E6F757320736974756174696F6E73206C696B6520636F6E73656E73757320726F756E64206A756D70732077697468696E207468652073616D65206865696768742E0A57652077696C6C2064697363757373207468657365206D656368616E69736D73206C61746572206F6E2C20617320746865792061726520637269746963616C20746F206D616B696E6720737572652054656E6465726D696E74206973207469636B696E6720636F72726563746C792E0A0A23232320492050726F706F73650A0A546865202A70726F706F73652A2073746174652069732074686520696E697469616C20636F6E73656E73757320737461746520666F72207468652054656E6465726D696E7420636F6E73656E73757320656E67696E652E205468697320697320746865206F6E6C792073746174652077697468696E0A746865207374617465206D616368696E6520746861742068617320646966666572656E74206C6F67696320666C6F777320666F722070726F706F7365727320616E64206E6F6E2D70726F706F736572732E0A0A496E20746865202A70726F706F73652A2073746174652C206F6E6C79206F6E65206E6F6465206973207468652070726F706F73657220666F722074686520676976656E207669657720286865696768742C20726F756E64292C20616E64207468652072657374206172652073696D706C790A737570706F73656420746F207761697420666F72207468652070726F706F73616C2E0A0A5468652070726F706F73657220666F722074686520766965772068617320322063686F69636573207768656E2070726F706F73696E6720612076616C75653A0A0A312E20637261667420616E20656E746972656C79206E65772070726F706F73616C2028626C6F636B292E205468652070617065722064656E6F74657320746869732070726F636573732077697468206067657456616C75652829600A322E207574696C697A6520616E206F6C6420286C6F636B6564292070726F706F73616C2C2074686174207761732070726F706F73656420696E20616E206561726C69657220726F756E64202873616D65206865696768742C206561726C69657220726F756E64292C206275742077686F73650A202020636F6E73656E73757320776173206E6576657220726561636865642028666F7220776861746576657220726561736F6E290A0A57652077696C6C206469736375737320E2809C70726F706F73616C206C6F636B696E67E2809D20696E207468652060507265766F7465602073656374696F6E2C20666F72206E6F7720636F6E7369646572207468617420746869732069732061207370656369616C2063617365207768657265207468650A70726F706F73657220646F6573206E6F742061637475616C6C7920636F6E73747275637420616E797468696E67206E65772C206275742073696D706C792072656C61797320612070726F706F73616C2074686174207761732073656E7420696E20746865207061737420286561726C6965720A726F756E64292C20627574206E6F74206167726565642075706F6E2066756C6C792028636F6D6D6974746564292E0A0A5B215B70617065722D315D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30372D30315F7265616368696E675F636F6E73656E7375732F7372632F7468756D62732F70617065722D312E706E67295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30372D30315F7265616368696E675F636F6E73656E7375732F7372632F70617065722D312E706E67290A3C64697620616C69676E3D2263656E746572223E536F757263653A20546865206C617465737420676F73736970206F6E2042465420636F6E73656E7375732C207061676520363C2F6469763E0A0A4173206F75746C696E656420696E202A416C676F726974686D20312A2C2074686520696E697469616C697A6174696F6E20737465702074616B657320706C616365206265666F72652074686520626567696E6E696E67206F66207468652061637475616C20636F6E73656E7375732070726F6365737320280A7374617465206D616368696E65292E20605374617274526F756E6460206973206D65616E7420746F206B69636B206F6666207468652054656E6465726D696E74207374617465206D616368696E652E0A0A55706F6E206669677572696E67206F7574207468652070726F706F73616C2076616C75652C207468652070726F706F7365722062726F6164636173747320697420746F207468652072657374206F6620746865206E6F6465732E2054686520737065636966696373206F66206E6574776F726B0A676F7373697020696D706C656D656E746174696F6E7320617265206E6F742064697363757373656420696E207468652061637475616C207061706572202F20636F6E73656E7375732070726F746F636F6C2E0A0A466F72206E6F6E2D70726F706F73657273206F662074686520766965772C20746865792073696D706C7920696E69746961746520746865206070726F706F7365602073746174652074696D65722C2074686174E2809973206D65616E7420746F20616476616E636520746865207374617465206D616368696E650A66757274686572206966206E6F2076616C69642070726F706F73616C20636F6D657320696E2066726F6D207468652070726F706F736572206F662074686520766965772E0A0A5B215B70617065722D325D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30372D30315F7265616368696E675F636F6E73656E7375732F7372632F7468756D62732F70617065722D322E706E67295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30372D30315F7265616368696E675F636F6E73656E7375732F7372632F70617065722D322E706E67290A3C64697620616C69676E3D2263656E746572223E536F757263653A20546865206C617465737420676F73736970206F6E2042465420636F6E73656E7375732C207061676520363C2F6469763E0A0A4F6E6365206E6F6E2D70726F706F73657273207265636569766520612070726F706F73616C2066726F6D207468652070726F706F736572206F66207468652063757272656E7420766965772C20746865792076616C6964617465206974207573696E6720616E2065787465726E616C0A66756E6374696F6E2C2064656E6F74656420686572652061732076616C6964282E2E2E292E205468652070726F706F73616C20697320616363657074656420696E203220736974756174696F6E733A0A0A2A20696620697420697320612066726573682070726F706F73616C20286E6F742061206C6F636B6564206F6E65292C20616E642069742069732076616C6964206163636F7264696E6720746F20746865207374616E6461726473206F66206120766572696679696E670A20206D6574686F6420286076616C6964282E2E2E2960292E0A2A20696620697420697320616E206F6C6465722070726F706F73616C20286C6F636B65642076616C7565292C2069742069732076616C6964206163636F7264696E6720746F20746865207374616E6461726473206F66206120766572696679696E67206D6574686F6420286076616C6964282E2E2E2960290A20202A616E642A207468652070726F706F73616C206D617463686573207468652076616C696461746F72E280997320696E2D6D656D6F7279206C6F636B65642070726F706F73616C2E0A0A496E2063617365206F662061207375636365737366756C2070726F706F73616C20766572696669636174696F6E2C20746865206E6F64652062726F6164636173747320612060505245564F544560206D657373616765207769746820612076616C6964204944206F66207468652070726F706F73616C2E0A546865206964656E74696669636174696F6E206D6574686F64206F66207468652070726F706F73616C206973206E6F7420646566696E6564206279207468652054656E6465726D696E742070726F746F636F6C20697473656C662C2062757420636F6D6D6F6E6C7920696E2070726163746963650A746869732076616C7565206973207468652068617368206F66207468652061637475616C20626C6F636B206265696E672070726F706F7365642028696E20626C6F636B636861696E2073797374656D73292E0A0A496E2063617365207468652070726F706F73616C20766572696669636174696F6E206661696C73202870726F706F73616C20697320696E76616C6964292C20746865206E6F64652062726F6164636173747320612060505245564F544560206D6573736167652C2077697468206120606E696C600A76616C756520666F72207468652070726F706F73616C2049442C20696E6469636174696E6720746861742074686973207374657020696E2074686520636F6E73656E7375732070726F63657373206661696C65642E0A0A54686520707572706F7365206F662062726F616463617374696E672061206D6573736167652077697468206120606E696C602076616C756520697320746F20656E737572652074686520636F6E73656E73757320656E67696E65E2809973206C6976656E65737320696E2063617365206F6620610A6661756C7479206576656E742E204E6F746520746861742054656E6465726D696E7420646F6573206E6F742068617665206120737065636966696320726F756E642D6368616E6765207374617465206C696B6520504246542C206F7220494246542C20736F20746865206F6E6C792077617920746F0A6D6F7665207468652070726F746F636F6C20616C6F6E67206973202A746F20676F207468726F75676820616C6C20636F6E73656E737573207374617465732C20616E6420696E206F7264657220746F2073756363656564206F72206661696C20696E2074686520656E642A2E0A0A496E2065697468657220636173652C20616674657220746865206E6F64652062726F6164636173747320612060505245564F544560206D6573736167652C206974207472616E736974696F6E7320696E746F20746865202A707265766F74652A2073746174652E0A0A232323232050726F706F73652074696D65720A0A4E6F6E2D70726F706F7365727320666F722074686520766965772073746172742061206070726F706F7365602073746174652074696D65722E0A0A5B215B70617065722D335D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30372D30315F7265616368696E675F636F6E73656E7375732F7372632F7468756D62732F70617065722D332E706E67295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30372D30315F7265616368696E675F636F6E73656E7375732F7372632F70617065722D332E706E67290A3C64697620616C69676E3D2263656E746572223E536F757263653A20546865206C617465737420676F73736970206F6E2042465420636F6E73656E7375732C207061676520363C2F6469763E0A0A546869732074696D6572206973206D65616E7420746F20676F206F6666206166746572206120666978656420696E74657276616C206F662074696D652C20696E206F7264657220746F2070726576656E7420746865206E6F64652066726F6D206265696E6720737475636B20696E20612073746174650A7768657265206974E2809973207374696C6C2077616974696E67206F6E20612070726F706F73616C2E0A0A5768656E207468652074696D6572206173796E6368726F6E6F75736C79207469636B73206F66662C20746865206E6F64652062726F61646361737473207468652060505245564F544560206D6573736167652077697468206120606E696C602049442076616C75652C20696E6469636174696E670A6661696C75726520746F207265636569766520612076616C69642070726F706F73616C2E204166746572207468652062726F6164636173742C206974206D6F76657320746F20746865202A70726F706F73652A2073746174652E0A0A23232320494920507265766F74650A0A546865202A707265766F74652A20737461746520697320746865207365636F6E64207374617465206F66207468652054656E6465726D696E7420636F6E73656E73757320656E67696E652C20616E64206974E28099732074686520636F6D6D6F6E20737461746520666F7220616C6C20636F6E73656E7375730A7061727469636970616E7473202870726F706F7365727320616E64206E6F6E2D70726F706F73657273292E0A0A4E6F64657320656E6420757020696E207468697320737461746520696E2074686520666F6C6C6F77696E67207363656E6172696F733A0A0A2D207468652070726F706F73657220666F722074686520766965772073656E7420612076616C69642070726F706F73616C0A2D207468652070726F706F73657220666F72207468652076696577206469646EE28099742073656E6420612076616C69642070726F706F73616C0A2D207468652070726F706F73657220666F72207468652076696577206469646EE28099742073656E6420612076616C69642070726F706F73616C20696E2074696D65202874696D656F757420747269676765726564290A0A546865202A707265766F74652A2073746174652063616E206265207365656E20617320616E20E2809C616C69676E6D656E74E2809D207374617465206265747765656E206E6F646573206265636175736520746869732069732074686520666972737420737461746520696E20776869636820636F6E73656E7375730A7061727469636970616E7473206E65656420746F20726561636820612073757065726D616A6F72697479206F6E2077686574686572207468652063757272656E7420636F6E73656E73757320726F756E642069732070726F63656564696E672061732069742073686F756C642C206F722069660A746865726520697320736F6D652066756E6E7920627573696E6573732068617070656E696E672E0A0A546F207375636365737366756C6C79206D6F7665206F76657220746F20746865202A707265636F6D6D69742A2073746174652C2076616C696461746F7273206E65656420746F2072656365697665206032462B31602060505245564F544560206D65737361676573207769746820612076616C69640A70726F706F73616C2049442E20496E206F7468657220776F7264732C207468652073757065726D616A6F72697479206F66207468652076616C696461746F7220736574E280997320766F74696E6720706F776572206E6565647320746F2073656E64206F75742060505245564F544560206D657373616765730A7769746820616E2061747461636865642070726F706F73616C20494420286F66207468652070726F706F73616C20616363657074656420696E20746865202A70726F706F73652A20737461746521292E0A0A5B215B70617065722D345D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30372D30315F7265616368696E675F636F6E73656E7375732F7372632F7468756D62732F70617065722D342E706E67295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30372D30315F7265616368696E675F636F6E73656E7375732F7372632F70617065722D342E706E67290A3C64697620616C69676E3D2263656E746572223E536F757263653A20546865206C617465737420676F73736970206F6E2042465420636F6E73656E7375732C207061676520363C2F6469763E0A0A417320736F6F6E20617320746865736520636F6E646974696F6E7320617265206D65742C20746865207061727469636970616E74732062726F61646361737420612060505245434F4D4D495460206D6573736167652C2077697468207468652061747461636865642070726F706F73616C20494420280A73616D65206F6E652061732077697468207468652060505245564F544560206D657373616765732C20616E6420646572697665642066726F6D207468652070726F706F73616C20616363657074656420696E20746865202A70726F706F73652A207374617465292E2041667465720A62726F616463617374696E67207468652060505245434F4D4D495460206D6573736167652C207061727469636970616E7473206D6F7665206F76657220746F20746865202A707265636F6D6D69742A2073746174652E0A0A2323232320426C6F636B206C6F636B696E670A0A416E20696D706F7274616E7420636861726163746572697374696320666F7220746865202A707265766F74652A2073746174652069732074686520626C6F636B206C6F636B696E67206D656368616E69736D20746861742069732074726967676572656420617320736F6F6E2061730A636F6E646974696F6E7320666F7220612076616C6964207472616E736974696F6E20746F202A707265636F6D6D69742A20617265206D65742E0A0A4265666F72652062726F616463617374696E6720612076616C69642060505245434F4D4D495460206D6573736167652C207468652076616C696461746F727320E2809C73617665E2809D2028696E2D6D656D6F727929207468652070726F706F73616C2076616C756520696E207768696368207468650A73757065726D616A6F72697479206F66207468652076616C696461746F7220736574E280997320766F74696E6720706F776572206167726565642075706F6E2C20616E642074686520726F756E6420696E2077686963682069742068617070656E6564202864656E6F7465640A617320606C6F636B656456616C75656020616E6420606C6F636B6564526F756E64602C20726573706563746976656C79292E0A0A54686520707572706F7365206F66207468697320626C6F636B206C6F636B696E672064616E636520697320746F2062652061626C6520746F2070726F706F7365202F20766572696679207468652073616D652070726F706F73616C206966207468652063757272656E7420636F6E73656E7375730A726F756E64206661696C7320696E2074686520666F6C6C6F77696E672073746570732028666F72206578616D706C652C206E6F7420656E6F7567682076616C69642060505245434F4D4D495460206D65737361676573207265636569766564292E20546865206964656120626568696E6420746869730A6D656368616E69736D206973207468617420612070726F706F73616C206167726565642075706F6E20627920612073757065726D616A6F72697479206F66207468652076616C696461746F7220736574206973206D6F73742070726F6261626C7920612076616C6964206F6E652C20616E640A73686F756C6420626520636F6E7369646572656420666F722066757475726520726F756E647320696E206361736520746865206F726967696E616C20636F6E73656E73757320726F756E6420696E207768696368207468652070726F706F73616C207761732062726F7567687420757020646964206E6F740A636F6D706C657465207375636365737366756C6C792E0A0A496620776520676F206261636B207468726F7567682074686520636F6E646974696F6E7320666F722074686520696E697469616C2054656E6465726D696E7420656E67696E65207374617465207472616E736974696F6E732C2077652077696C6C20736565207468617420746865726520697320610A7374726F6E6720726571756972656D656E7420666F7220E2809C6C6F636B6564E2809D2076616C7565732E0A0A5B215B70617065722D355D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30372D30315F7265616368696E675F636F6E73656E7375732F7372632F7468756D62732F70617065722D352E706E67295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30372D30315F7265616368696E675F636F6E73656E7375732F7372632F70617065722D352E706E67290A3C64697620616C69676E3D2263656E746572223E536F757263653A20546865206C617465737420676F73736970206F6E2042465420636F6E73656E7375732C207061676520363C2F6469763E0A0A546865736520636865636B7320657373656E7469616C6C7920656E666F72636520746861742069662074686572652077617320612070726F706F73616C20696E20736F6D652070726576696F757320726F756E642C2074686174207265616368656420612073757065726D616A6F726974792C2069740A6E6565647320746F206265202A70726F706F73656420616761696E2A20696E20612066757475726520726F756E642E0A0A23232323204A756D7020746F20507265636F6D6D69740A0A5468657265206973206120736974756174696F6E20696E207768696368207468652076616C696461746F7273206D6F7665206F76657220746F20746865202A707265636F6D6D69742A2073746174652C20776974686F757420726563656976696E6720612073757065726D616A6F72697479206F660A76616C69642060505245564F544560206D6573736167657320287769746820612076616C69642070726F706F73616C204944293A0A0A5B215B70617065722D365D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30372D30315F7265616368696E675F636F6E73656E7375732F7372632F7468756D62732F70617065722D362E706E67295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30372D30315F7265616368696E675F636F6E73656E7375732F7372632F70617065722D362E706E67290A3C64697620616C69676E3D2263656E746572223E536F757263653A20546865206C617465737420676F73736970206F6E2042465420636F6E73656E7375732C207061676520363C2F6469763E0A0A496E206361736520612076616C696461746F72207265636569766573206032462B31602060505245564F544560206D657373616765732077697468206120606E696C602070726F706F73616C2049442C20746865792073696D706C792062726F61646361737420612060505245434F4D4D4954600A6D6573736167652077697468206120606E696C602049442076616C75652028696E6469636174696E67206661696C757265292C20616E64206D6F7665206F76657220746F20746865202A707265636F6D6D69742A2073746174652E0A0A5468697320606E696C602070726F7061676174696F6E206D656368616E69736D2069732070617274206F6620746865206C6976656E6573732070726F70657274792064697363757373656420696E20746865202A70726F706F73652A2073656374696F6E2C20776869636820726571756972657320610A76616C696461746F7220746F20676F207468726F75676820616C6C2054656E6465726D696E7420737461746573206265666F7265207374617274696E672061206E657720636F6E73656E73757320726F756E642E0A0A2323232320507265766F74652074696D65720A0A416C6C2076616C696461746F72732073746172742061202A707265766F74652A2073746174652074696D657220746865206D6F6D656E742074686579207265636569766520612073757065726D616A6F7269747920286032462B316029206F66202A616E792A2060505245564F5445600A6D6573736167652028656974686572207769746820612076616C6964206F722077697468206120606E696C602070726F706F73616C204944292E0A0A5B215B70617065722D375D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30372D30315F7265616368696E675F636F6E73656E7375732F7372632F7468756D62732F70617065722D372E706E67295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30372D30315F7265616368696E675F636F6E73656E7375732F7372632F70617065722D372E706E67290A3C64697620616C69676E3D2263656E746572223E536F757263653A20546865206C617465737420676F73736970206F6E2042465420636F6E73656E7375732C207061676520363C2F6469763E0A0A5768656E207468652074696D6572206173796E6368726F6E6F75736C79207469636B73206F66662C20746865206E6F64652062726F61646361737473207468652060505245434F4D4D495460206D6573736167652077697468206120606E696C602049442076616C75652C20696E6469636174696E670A6661696C75726520746F20726561636820612073757065726D616A6F72697479206F6E20612070726F706F73616C2E204166746572207468652062726F6164636173742C206974206D6F76657320746F20746865202A707265636F6D6D69742A2073746174652E0A0A5B215B70617065722D385D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30372D30315F7265616368696E675F636F6E73656E7375732F7372632F7468756D62732F70617065722D382E706E67295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30372D30315F7265616368696E675F636F6E73656E7375732F7372632F70617065722D382E706E67290A3C64697620616C69676E3D2263656E746572223E536F757263653A20546865206C617465737420676F73736970206F6E2042465420636F6E73656E7375732C207061676520363C2F6469763E0A0A2323232049494920507265636F6D6D69740A0A546865202A707265636F6D6D69742A207374617465206973207468652066696E616C20737461746520696E207468652054656E6465726D696E7420636F6E73656E73757320656E67696E652C20636F6D6D6F6E20666F7220616C6C2076616C696461746F72732E0A0A4D756368206C696B6520746865202A707265766F74652A2073746174652C202A707265636F6D6D69742A20636F6E7369737473206F66207468652076616C696461746F72732077616974696E6720666F7220612073757065726D616A6F72697479206F66206D65737361676573206F6620610A7370656369666963207479706520E2809420696E20746869732063617365207468652060505245434F4D4D495460206D6573736167652C207769746820612076616C69642070726F706F73616C2049442E0A0A5B215B70617065722D395D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30372D30315F7265616368696E675F636F6E73656E7375732F7372632F7468756D62732F70617065722D392E706E67295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30372D30315F7265616368696E675F636F6E73656E7375732F7372632F70617065722D392E706E67290A3C64697620616C69676E3D2263656E746572223E536F757263653A20546865206C617465737420676F73736970206F6E2042465420636F6E73656E7375732C207061676520363C2F6469763E0A0A4166746572207468652076616C696461746F72732065786368616E6765206032462B31602076616C69642060505245434F4D4D495460206D6573736167657320287769746820612076616C69642070726F706F73616C204944292C207468657920636F6D6D6974207468652070726F706F73616C20746F0A7468656972206C6F63616C2073746F726167652C20696E637265617365207468652068656967687420616E64206D6F7665206F76657220746F20626567696E2074686520636F6E73656E7375732070726F6365737320616E65770A66726F6D206028686569676874202B20312C20726F756E64203D203029602E0A53696E63652074686520636F6E73656E7375732070726F636573732069732066696E616C697A6564207375636365737366756C6C7920666F72207468652063757272656E7420766965772C2074686520696E2D6D656D6F72792076616C75657320666F72206C6F636B65642076616C756573206172650A636C65617265642C20616C6F6E6720776974682074686520636F6D706C657465206D657373616765206C6F672E0A0A4F6620636F757273652C207468652070726F706F73616C20494420636F6E7461696E65642077697468696E207468652060505245434F4D4D495460206D65737361676573206E6565647320746F206D61746368207468652070726F706F73616C20494420696E207468652070726576696F75736C790A72656365697665642073757065726D616A6F72697479206F662060505245564F544560206D657373616765732C20616E6420626520646572697665642066726F6D207468652070726F706F73616C20696E20746865202A70726F706F73652A2073746174652E0A0A2323232320507265636F6D6D69742074696D65720A0A4D756368206C696B65207769746820746865202A707265766F74652A2073746174652C20746865206D6F6D656E742076616C696461746F7273207265636569766520612073757065726D616A6F7269747920286032462B316029206F66202A616E792A2060505245434F4D4D4954600A6D6573736167652028656974686572207769746820612076616C6964206F722077697468206120606E696C602070726F706F73616C20494429207468657920696E6974696174652061202A707265636F6D6D69742A2073746174652074696D65722E0A0A5B215B70617065722D31305D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30372D30315F7265616368696E675F636F6E73656E7375732F7372632F7468756D62732F70617065722D31302E706E67295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30372D30315F7265616368696E675F636F6E73656E7375732F7372632F70617065722D31302E706E67290A3C64697620616C69676E3D2263656E746572223E536F757263653A20546865206C617465737420676F73736970206F6E2042465420636F6E73656E7375732C207061676520363C2F6469763E0A0A5768656E207468652074696D6572206173796E6368726F6E6F75736C79207469636B73206F66662C20746865206E6F646520626567696E732074686520636F6E73656E7375732070726F6365737320616E6577207769746820616E20696E6372656173656420726F756E64206E756D6265722028676F65730A6261636B20746F20746865202A70726F706F73652A207374617465292E2053696E636520746865202A707265636F6D6D69742A20737461746520697320746865206C617374206F6E6520696E2074686520636861696E2C20746865206F6E6C79206E6578742073746570206C65667420666F72207468650A656E67696E6520697320746F20676F206261636B20746F2074686520626567696E6E696E672E0A0A5B215B70617065722D31315D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30372D30315F7265616368696E675F636F6E73656E7375732F7372632F7468756D62732F70617065722D31312E706E67295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30372D30315F7265616368696E675F636F6E73656E7375732F7372632F70617065722D31312E706E67290A3C64697620616C69676E3D2263656E746572223E536F757263653A20546865206C617465737420676F73736970206F6E2042465420636F6E73656E7375732C207061676520363C2F6469763E0A0A23232320495620526F756E64206A756D70730A0A54686572652069732061207370656369616C207363656E6172696F2077697468696E207468652054656E6465726D696E7420636F6E73656E73757320656E67696E65207468617420627970617373657320746865206E6F74696F6E206F6620676F696E67207468726F75676820616C6C0A636F6E73656E7375732073746174657320696E206F7264657220746F2073746172742061206E657720636F6E73656E73757320726F756E642E0A0A5B215B70617065722D31325D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30372D30315F7265616368696E675F636F6E73656E7375732F7372632F7468756D62732F70617065722D31322E706E67295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30372D30315F7265616368696E675F636F6E73656E7375732F7372632F70617065722D31322E706E67290A3C64697620616C69676E3D2263656E746572223E536F757263653A20546865206C617465737420676F73736970206F6E2042465420636F6E73656E7375732C207061676520363C2F6469763E0A0A496E2074686973207363656E6172696F2C20696620617420616E7920706F696E7420696E2074696D65207468652076616C696461746F722072656365697665732060462B3160202863616C6C65642061202A6661756C7479206D616A6F726974792A29206F66202A616E792A206D6573736167650A747970652C20666F722061202A2A6675747572652A2A20726F756E642028726F756E6420686967686572207468616E20696E207468652063757272656E742076696577292C207468652076616C696461746F7220706572666F726D73206120726F756E64206A756D7020746F2074686520676976656E0A726F756E64206279207374617274696E672074686520636F6E73656E7375732070726F6365737320616E65772E0A0A23232320562054696D6572730A0A496E207468652054656E6465726D696E7420636F6E73656E7375732070726F636573732C2074696D65727320706C617920616E20696D706F7274616E7420726F6C6520696E206D616B696E672073757265207468652070726F746F636F6C20737461797320E2809C616C697665E2809D2E2054686579206D6F76650A7468696E677320616C6F6E672069662C20666F7220776861746576657220726561736F6E2C2074686520666C6F772073746F70732E0A0A4279207468656972206E61747572652C20746865792061726520636F6D706C6574656C79206173796E6368726F6E6F75732C20616E642063616E20676F206F666620617420706F696E7420696E2074696D65206F6E636520746865792061726520736574206279207468652070726F746F636F6C2E0A0A54656E6465726D696E7420646F6573206E6F7420656E666F72636520737065636966696320696E697469616C2076616C75657320666F7220656163682073746174652074696D65722C206275742070726F76696465732073756767657374696F6E73206F6E206D616B696E672073757265207468650A74696D65727320736572766520746865697220707572706F73653A0A6074696D656F757458287229203D20696E697454696D656F757458202B2072202A2074696D656F757444656C7461600A0A427920666F6C6C6F77696E67207468697320666F726D756C612C20697420697320656E73757265642074686174206561636820726F756E642073746174652074696D65722069733A0A0A2D20696E666C75656E636564206279207468652063757272656E74207669657720726F756E64202868696768657220726F756E6473203D3D206C6F6E6765722074696D657273290A2D20696E666C75656E636564206279206120636F6E7374616E74206064656C74616020696E6372656D656E74202863616E20626520646966666572656E7420666F722065616368207374617465290A0A496E2074686520476E6F20626C6F636B636861696E2C2074686573652076616C7565732061726520646566696E65642061732074686520666F6C6C6F77696E673A0A0A606060746F6D6C0A74696D656F75745F70726F706F7365203D20223373220A74696D656F75745F70726F706F73655F64656C7461203D20223530306D73220A74696D656F75745F707265766F7465203D20223173220A74696D656F75745F707265766F74655F64656C7461203D20223530306D73220A74696D656F75745F707265636F6D6D6974203D20223173220A74696D656F75745F707265636F6D6D69745F64656C7461203D20223530306D73220A6060600A0A232323205649205479696E6720697420616C6C20746F6765746865720A0A556E6465727374616E64696E67207468652054656E6465726D696E7420636F6E73656E73757320656E67696E6520696E766F6C766573206772617370696E672069747320746872656520636F7265207374617465733A202A70726F706F73652A2C202A707265766F74652A2C20616E640A2A707265636F6D6D69742A2C20616E6420746865207472616E736974696F6E73207468617420656E73757265207468652073797374656D2773206C6976656E65737320616E64206661756C7420746F6C6572616E63652E0A0A546865202A70726F706F73652A20737461746520697320696E6974696174656420627920612064657369676E617465642070726F706F7365722077686F2062726F6164636173747320612070726F706F73616C20746F20616C6C2076616C696461746F72732E20546869732070726F706F73616C2063616E0A6569746865722062652061206E65772076616C7565206F7220616E206F6C64206F6E652066726F6D20612070726576696F757320726F756E64207468617420646964206E6F7420726561636820636F6E73656E7375732E2056616C696461746F727320766572696679207468652070726F706F73616C2C0A616E64207468656E206D6F766520746F20746865202A707265766F74652A2073746174652C20776865726520746865792062726F61646361737420746865697220766F746573206F6E207468652070726F706F73616C2C20726571756972696E6720610A73757065726D616A6F7269747920286032462B31602920746F2070726F636565642E20496620746865206E656365737361727920766F74657320617265206E6F742072656365697665642077697468696E2061206365727461696E2074696D656672616D652C20612074696D656F75740A6D656368616E69736D20656E7375726573207468652070726F6365737320636F6E74696E75657320746F20746865206E657874207374617465206F7220726F756E642E20496620612073757065726D616A6F72697479206F662076616C69642060505245564F544560206D657373616765732069730A72656365697665642C2076616C696461746F7273206C6F636B207468652070726F706F73616C2076616C756520616E64207472616E736974696F6E20746F20746865202A707265636F6D6D69742A2073746174652E2054686973206C6F636B696E67206D656368616E69736D20656E73757265730A7468617420696620636F6E73656E737573206973206E6F74207265616368656420696E207468652063757272656E7420726F756E642C207468652070726576696F75736C79206167726565642D75706F6E2076616C75652063616E2062652070726F706F73656420616761696E2C20656E68616E63696E670A74686520616C676F726974686DE280997320726F627573746E6573732E20447572696E6720746865202A707265636F6D6D69742A2073746174652C2076616C696461746F7273207761697420666F7220616E6F746865722073757065726D616A6F72697479206F662060505245434F4D4D4954600A6D657373616765732E2055706F6E20726563656976696E672074686573652C207468657920636F6D6D6974207468652070726F706F73616C206C6F63616C6C792C20696E6372656D656E7420746865206865696768742C20616E642073746172742061206E657720636F6E73656E73757320726F756E642E0A0A54686520636F6D62696E6174696F6E206F662074686573652073746174657320616E64207472616E736974696F6E732C20676F7665726E65642062792074696D65727320616E642073757065726D616A6F726974792072756C65732C2063726561746573206120726573696C69656E7420616E640A656666696369656E7420636F6E73656E7375732070726F636573732E205468652054656E6465726D696E7420636F6E73656E73757320656E67696E6527732064657369676E20616C6C6F777320697420746F2068616E646C6520626F7468206372617368206661756C747320616E640A42797A616E74696E65206661756C74732C206D616B696E67206974207375697461626C6520666F7220766172696F75732064697374726962757465642073797374656D732C20696E636C7564696E6720626C6F636B636861696E732E0A0A23232054616D696E67206173796E6368726F6E6F757320626561737473207769746820476F6C616E670A0A5768656E207765207374617274656420776F726B696E67206F6E205B6C6962746D5D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F747265652F6D61737465722F746D322F706B672F6C6962746D292C2077652068616420612066657720676F616C7320696E0A6D696E643A0A0A2D20637265617465206120636F6E73656E73757320656E67696E65206C6962726172792074686174206973206561737920746F207573652C207361666520616E6420706572666F726D616E742C20706C75676761626C6520696E746F2073797374656D7320776520616C7265616479206861766520280A202074686520476E6F20626C6F636B636861696E2C206261736564206F6E206120666F726B206F662054656E6465726D696E7420436F7265290A2D20696D706C656D656E74206162737472616374696F6E73207468617420616C6C6F7720746865206C69627261727920746F20626520616C736F2075736564206F7574736964652074686520626C6F636B636861696E20636F6E746578742C207768696C6520616C736F206265696E67206D6F64756C61720A2020656E6F75676820746F2062652075736564206279206578697374696E6720626C6F636B636861696E2070726F6A656374730A2D206D61696E7461696E20746865207072696E6369706C6573206F66206F70656E2D736F7572636520736F6674776172650A0A57652077656E742061626F757420696D706C656D656E74696E6720233220696E2061207365656D696E676C79206F6464207761793A0A0A2D20576520646964206E6F742077616E7420746865206C69627261727920746F2068616E646C65206E6574776F726B696E672C206F7220656E666F7263652061206E6574776F726B696E672070726F746F636F6C2E2057652062656C6965766520746861742074686520756E6465726C79696E670A20207472616E73706F7274206C617965722074686174206D6F7665732061726F756E64206D6573736167657320697320697272656C6576616E742C206173206C6F6E672061732069742070726F7669646573207468652070726F70657274696573206F66202A6576656E7475616C0A202064656C69766572792A2E0A2D20576520646964206E6F742077616E7420746865206C69627261727920746F206B6E6F7720686F7720746F207369676E2C20616E6420766572696679207369676E617475726573206F662061726269747261727920646174612E205369676E696E672070726F746F636F6C73206172650A2020736F6D657468696E672076657279207573652D636173652073706563696669632C20616E642073686F756C64206E6F7420626520656E666F726365642062792074686520636F6E73656E73757320656E67696E652E20576520646F2C20686F77657665722C2070726F76696465207468650A20202A646174612A2074686174206E6565647320746F206265207369676E656420696E2074686520666972737420706C6163652E0A2D20576520646964206E6F742077616E7420746865206C69627261727920746F20646F2076616C696461746F7220736574206D616E6167656D656E742C206F7220746F206576656E20686176652061206E6F74696F6E206F66206120E2809C76616C696461746F72E2809D20616E64206974730A202070726F706572746965732E2056616C696461746F722073657473206861766520766173746C7920646966666572656E74206D616E6167656D656E7420746563686E69717565732C206120636F6D706C69636174696F6E2077652077616E74656420746F2061766F696420696E207468650A2020656E67696E652E0A0A54686973206D6967687420736F756E642073686F636B696E672C20676976656E20686F77206578697374696E6720696D706C656D656E746174696F6E73206F66207468652054656E6465726D696E7420636F6E73656E73757320656E67696E65206F70657261746520746F64617920696E206D6F6465726E0A626C6F636B636861696E732C206275742069742061637475616C6C792067726561746C7920726564756365732074686520636F6D706C657869747920616E6420616C6C6F777320666F72206170706C69636174696F6E73206F662074686520636F6E73656E737573206C696272617279206F7574736964650A74686520626C6F636B636861696E20636F6E746578742E0A0A2323232045766572797468696E6720737461727473207769746820746865206D6573736167696E672073797374656D0A0A4C6F6F6B696E6720617420686F77207468652054656E6465726D696E7420636F6E73656E737573207374617465206D616368696E6520697320737472756374757265642C2077652063616E20646564756365207468617420746865206D61696E2064726976657273206F6620616E79206B696E64206F660A61637469766974792061726520E28094206D657373616765732E0A0A41206D6573736167652065786368616E676564206265747765656E2076616C696461746F72732C206F6620616E7920747970652C206973207468652064726976696E6720666F72636520626568696E64207468652054656E6465726D696E7420636F6E73656E73757320616C676F726974686D2E0A4974E2809973207573656420746F207472616E7366657220696E666F726D6174696F6E2C2062757420616C736F20746F206163742061732061206E6F74696669636174696F6E2073797374656D207468617420707265736572766573206365727461696E20636F6E73656E7375732070726F706572746965730A6C696B65206C6976656E6573732E0A0A476976656E20746865206173796E6368726F6E6F7573206E6174757265206F662076616C696461746F72206D657373616765732C207765207265616C697A6564206F7572206D6573736167696E672073797374656D20776F756C64206E65656420746F20737570706F7274207468650A666F6C6C6F77696E672070726F706572746965733A0A0A2D2068617665206275636B65747320666F722065616368206D65737361676520747970652C20746F206D616B65206D6573736167657320656173696C792066657463682D61626C650A2D20686176652061206D656368616E69736D20746861742061766F696473206475706C6963617465730A2D2068617665206120737562736372697074696F6E206D656368616E69736D2077652063616E2074617020696E746F2066726F6D20616E792070617274206F662074686520636F6465626173650A0A57652063616D6520746F207468697320636F6E636C7573696F6E206166746572207265616C697A696E67206F757220737461746520696D706C656D656E746174696F6E732028646973637573736564206C6174657229206E65656465642061206D6F726520736F7068697374696361746564207761790A6F66206665746368696E6720616E642066696C746572696E6720696E636F6D696E67206D657373616765732C2074686174206469646EE280997420696E766F6C766520636F6E7374616E7420726561642072657175657374732066726F6D20746865206D657373616765206C6F672E2054686573650A6F7065726174696F6E7320617265207665727920636F6D6D6F6E2C20616E642074686579206E65656420746F20626520706572666F726D616E7420696E206F7264657220746F206E6F742064656C61792074686520636F6E73656E7375732070726F636573732E0A0A4C75636B696C792C20776520656E646564207570207574696C697A696E67207468652066756C6C20706F776572206F6620476F2067656E657269637320666F722074686973207573652D636173653A0A0A606060676F0A2F2F206D7367547970652069732074686520636F6D62696E6564206D657373616765207479706520696E746572666163652C0A2F2F20666F722065617379207265666572656E636520616E642074797065207361666574790A74797065206D73675479706520696E74657266616365207B0A0974797065732E50726F706F73616C4D657373616765207C2074797065732E507265766F74654D657373616765207C2074797065732E507265636F6D6D69744D6573736167650A7D0A0A7479706520280A092F2F20636F6C6C656374696F6E20617265207468652061637475616C207265636569766564206D657373616765732E0A092F2F204D617073206120756E69717565206964656E746966696572202D3E207468656972206D65737361676520286F66206120737065636966696320747970652920746F2061766F6964206475706C6963617465732E0A092F2F204964656E746966696572732061726520646572697665642066726F6D203C73656E6465722049442C206865696768742C20726F756E643E2E0A092F2F20456163682076616C696461746F7220696E2074686520636F6E73656E737573206E6565647320746F2073656E64206174206D6F73742031206D657373616765206F6620657665727920747970650A092F2F20286D696E7573207468652050524F504F53414C2C207768696368206973206F6E6C792073656E74206279207468652070726F706F736572292C0A092F2F20736F20746865206D6573736167652073797374656D206E6565647320746F206B65657020747261636B206F66206F6E6C792031206D6573736167652070657220747970652C207065722076616C696461746F722C2070657220766965770A09636F6C6C656374696F6E5B54206D7367547970655D206D61705B737472696E675D2A540A290A0A2F2F20436F6C6C6563746F7220697320612073696E676C65206D657373616765207479706520636F6C6C6563746F720A7479706520436F6C6C6563746F725B54206D7367547970655D20737472756374207B0A09636F6C6C656374696F6E20202020636F6C6C656374696F6E5B545D202020202F2F20746865206D6573736167652073746F726167650A09737562736372697074696F6E7320737562736372697074696F6E735B545D202F2F2074686520616374697665206D65737361676520737562736372697074696F6E730A0A09636F6C6C656374696F6E4D75782020202073796E632E52574D757465780A09737562736372697074696F6E734D75782073796E632E52574D757465780A7D0A0A6060600A0A54686520606C6962746D60206C696272617279206B6565707320612060436F6C6C6563746F726020666F722065616368206D65737361676520747970652C20616E64207468617420616374732061732061206D657373616765206C6F672E204164646974696F6E616C6C792C20746865206D6573736167650A636F6C6C6563746F7220616C736F206B6565707320747261636B206F66206261736963206D65737361676520737562736372697074696F6E732E20546865736520737562736372697074696F6E7320286173207765E280996C6C2064697363757373206C61746572292C2061726520666F722073696D706C650A6E6F74696669636174696F6E73207468617420616C6572742074686520737562736372696265722061206D65737361676520617070656172656420696E20746865206D657373616765206C6F672E0A0A232323204E6F7420616C6C2073746174657320617265206372656174656420657175616C0A0A4F6E6365207765E2809976652065737461626C69736865642074686520636C656172206E65656473206F66206F7572206D6573736167696E672073797374656D2C20696D706C656D656E74696E67207468652061637475616C207374617465207472616E736974696F6E732061726F756E64206974207761730A7472697669616C2E0A0A54656E6465726D696E7420636F6E73656E7375732073746174657320616C6C2073686172652074686520666F6C6C6F77696E67207374727563747572653A0A0A606060676F0A2F2F2072756E582072756E732074686520582054656E6465726D696E7420636F6E73656E73757320656E67696E652073746174650A66756E63202874202A54656E6465726D696E74292072756E582863747820636F6E746578742E436F6E7465787429207B0A0976617220280A0909726F756E64203D20742E73746174652E676574526F756E6428290A0A0909657870697265644368202020202020202020202020202020202020203D206D616B65286368616E207374727563747B7D2C2031290A090974696D656F75744374782C2063616E63656C54696D656F7574466E203D20636F6E746578742E5769746843616E63656C28637478290A090974696D656F7574507265766F746520202020202020202020202020203D20742E74696D656F7574735B707265766F74655D2E43616C63756C61746554696D656F757428726F756E64290A09290A0A092F2F204465666572207468652074696D656F75742074696D65722063616E63656C6C6174696F6E202869662072756E6E696E67290A0964656665722063616E63656C54696D656F7574466E28290A0A092F2F2053756273637269626520746F20616C6C206D65737361676573206F66206120737065636966696320747970650A092F2F20283D63757272656E74206865696768743B20756E697175653B203E3D2063757272656E7420726F756E64290A0963682C20756E737562736372696265466E203A3D20742E73746F72652E737562736372696265546F5828290A09646566657220756E737562736372696265466E28290A0A09666F72207B0A090973656C656374207B0A090963617365203C2D6374782E446F6E6528293A0A0909092F2F204F7574657220636F6E73656E73757320636F6E746578742063616E63656C6C65640A09090972657475726E0A090963617365203C2D6578706972656443683A0A0909092F2F2053746174652074696D6572207472696767657265642C0A0909092F2F2065786563757465207374617465582074656172646F776E206265666F72652072657475726E696E670A0A0909092F2F202E2E2E0A0A09090972657475726E0A090963617365206765744D65737361676573466E203A3D203C2D63683A0A0909092F2F204E65772076616C6964206D65737361676520617070656172656420696E206D657373616765206C6F672C2070617273652069740A0909092F2F202E2E2E0A0A0909092F2F20436865636B20696620636F6E646974696F6E73206172652073617469736669656420666F72207374617274696E67207468652073746174652074696D65720A0909092F2F202E2E2E0A0A0909092F2F20436865636B20696620636F6E646974696F6E73206172652073617469736669656420666F722061207374617465207472616E736974696F6E0A0909092F2F202E2E2E0A09097D0A097D0A7D0A0A6060600A0A546865207061747465726E20697320636C6561723A0A0A2D2073756273637269626520746F206D65737361676573206F662061207370656369666963207479706520746861742061726520657870656374656420746F2061707065617220696E207468652063757272656E742073746174650A2D207665726966792074686F7365206D65737361676573206173207468657920636F6D6520696E2C20616E6420636865636B20696620636F6E646974696F6E7320617265206D657420666F722061207374617465207472616E736974696F6E0A2D206D6F6E69746F7220746865206F7574657220636F6E746578742C20616E6420746865206173796E6368726F6E6F75732074696D657220636F6E7465787420666F722073746F7070696E670A0A4B656570696E67207468697320696E206D696E642C2077652063616E20646576656C6F7020746865206D61696E2072756E206C6F6F703A0A0A606060676F0A2F2F2072756E5374617465732072756E732074686520636F6E73656E737573207374617465732C20646570656E64696E67206F6E207468652063757272656E7420737465700A66756E63202874202A54656E6465726D696E74292072756E5374617465732863747820636F6E746578742E436F6E7465787429202A46696E616C697A656450726F706F73616C207B0A09666F72207B0A090963757272656E7453746570203A3D20742E73746174652E737465702E67657428290A0A090973656C656374207B0A090963617365203C2D6374782E446F6E6528293A0A09090972657475726E206E696C0A090964656661756C743A0A0909097377697463682063757272656E7453746570207B0A090909636173652070726F706F73653A0A09090909742E72756E50726F706F736528637478290A0909096361736520707265766F74653A0A09090909742E72756E507265766F746528637478290A0909096361736520707265636F6D6D69743A0A0909090972657475726E20742E72756E507265636F6D6D697428637478290A0909097D0A09097D0A097D0A7D0A6060600A0A5468652073746174656D656E742074686174202A616C6C2A2054656E6465726D696E7420636F6E73656E7375732073746174657320736861726520746865206F75746C696E656420737472756374757265206973206E6F7420656E746972656C79207472756520E280942072656D656D626572207468650A2A70726F706F73652A2073746174653F0A496E20746865202A70726F706F73652A2073746174652C207468657265206973206120636C656172206272616E6368696E6720696E206C6F6769632C207768657265206E6F6E2D70726F706F73657273207761697420666F7220616E642076657269667920612070726F706F73616C2C207768696C650A7468652070726F706F73657220666F72207468652076696577206E6565647320746F206275696C6420697420616E642062726F6164636173742069742E205468652070726F706F7365722C20756E6C696B65206F746865722076616C696461746F72732C202A646F6573206E6F74206E65656420746F0A77616974206F6E207468656972206F776E2070726F706F73616C20746F206170706561722A2C206275742063616E20696E7374656164206D6F7665206469726563746C7920746F20746865202A707265766F74652A2073746174652C20686176696E6720616C7265616479206163636570746564207468650A70726F706F73616C2074686174207761732073656E74206F75742E0A0A606060676F0A2F2F202E2E2E0A66756E63202874202A54656E6465726D696E74292072756E50726F706F73652863747820636F6E746578742E436F6E7465787429207B0A092F2F202E2E2E0A0A092F2F20436865636B206966207468652063757272656E742070726F63657373206973207468652070726F706F73657220666F72207468697320766965770A09696620742E76657269666965722E497350726F706F73657228742E6E6F64652E494428292C206865696768742C20726F756E6429207B0A09092F2F2053746172742074686520726F756E6420627920636F6E737472756374696E6720616E642062726F616463617374696E6720612070726F706F73616C0A0909742E7374617274526F756E64286865696768742C20726F756E64290A0A090972657475726E0A097D0A0A092F2F202E2E2E0A7D0A2F2F202E2E2E0A6060600A0A23232320486F7720646F657320697420616C6C2074696520746F6765746865723F0A0A4F7665722074686520636F75727365206F6620746869732061727469636C65207765E28099766520676F6E65206F7665722074686520646966666572656E742054656E6465726D696E7420636F6E73656E73757320656E67696E65207374617465732C20616E6420746865697220636176656174732E0A5765E28099766520616C736F206D656E74696F6E6564206F74686572206173796E6368726F6E6F75732070726F636573736573206C696B6520726F756E64206A756D70732C2074696D65727320747269676765727320E2809420686F7720697320616C6C206F662074686973206D616E6167656420696E20476F2C0A696E20606C6962746D603F0A0A54686520656E74727920706F696E7420696E746F207468652054656E6465726D696E7420636F6E73656E7375732070726F63657373206C69657320696E206052756E53657175656E6365602C207768696368206D616E61676573206F7468657220476F20726F7574696E657320746861740A666163696C6974617465207468652070726576696F75736C792D7365656E206173796E6368726F6E6F7573206075706F6E6020626C6F636B732E0A5B215B72756E2D73657175656E63655D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30372D30315F7265616368696E675F636F6E73656E7375732F7372632F7468756D62732F72756E2D73657175656E63652E706E67295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D30372D30315F7265616368696E675F636F6E73656E7375732F7372632F72756E2D73657175656E63652E706E67290A0A496E2074686520606C6962746D60206C6962726172792C2074686973206D616E6167656D656E7420737472756374757265206C6F6F6B73206C696B6520746869732C207768657265206066696E616C697A6550726F706F73616C6020616E6420607761746368466F72526F756E644A756D707360206172650A476F20726F7574696E65733A0A0A606060676F0A2F2F2052756E53657175656E63652072756E73207468652054656E6465726D696E7420636F6E73656E7375732073657175656E636520666F72206120676976656E206865696768742C0A2F2F2072657475726E696E67206F6E6C79207768656E20612070726F706F73616C20686173206265656E2066696E616C697A65642028636F6E73656E7375732072656163686564292C206F720A2F2F2074686520636F6E7465787420686173206265656E2063616E63656C6C65640A66756E63202874202A54656E6465726D696E74292052756E53657175656E63652863747820636F6E746578742E436F6E746578742C20682075696E74363429202A46696E616C697A656450726F706F73616C207B0A092F2F20496E697469616C697A6520746865207374617465206265666F7265207374617274696E67207468652073657175656E63650A09742E73746174652E7365744865696768742868290A0A092F2F2047726162207468652070726F6365737320766965770A0976696577203A3D202674797065732E566965777B0A09094865696768743A20682C0A0909526F756E643A2020742E73746174652E676574526F756E6428292C0A097D0A0A092F2F2044726F7020616C6C206F6C64206D657373616765730A09742E73746F72652E64726F704D657373616765732876696577290A0A09666F72207B0A09092F2F207365742075702074686520726F756E6420636F6E746578740A0909637478526F756E642C2063616E63656C526F756E64203A3D20636F6E746578742E5769746843616E63656C28637478290A090974656172646F776E203A3D2066756E632829207B0A09090963616E63656C526F756E6428290A090909742E77672E5761697428290A09097D0A0A090973656C656374207B0A0909636173652070726F706F73616C203A3D203C2D742E66696E616C697A6550726F706F73616C28637478526F756E64293A0A09090974656172646F776E28290A0A0909092F2F20436865636B206966207468652070726F706F73616C20686173206265656E2066696E616C697A65640A09090969662070726F706F73616C20213D206E696C207B0A0909090972657475726E2070726F706F73616C0A0909097D0A0A0909092F2F2036353A2046756E6374696F6E204F6E54696D656F7574507265636F6D6D6974286865696768742C20726F756E6429203A0A0909092F2F2036363A2009696620686569676874203D20685020E288A720726F756E64203D20726F756E6450207468656E0A0909092F2F2036373A2009095374617274526F756E6428726F756E6450202B2031290A090909742E73746174652E696E637265617365526F756E6428290A090909742E73746174652E737465702E7365742870726F706F7365290A0909636173652072656376526F756E64203A3D203C2D742E7761746368466F72526F756E644A756D707328637478526F756E64293A0A09090974656172646F776E28290A0A090909742E73746174652E736574526F756E642872656376526F756E64290A090909742E73746174652E737465702E7365742870726F706F7365290A090963617365203C2D6374782E446F6E6528293A0A09090974656172646F776E28290A0A09090972657475726E206E696C0A09097D0A097D0A7D0A6060600A0A476F20636F6E74657874732C20636F6D62696E65642077697468206D696E696D616C206368616E6E656C2075736167652C20616C6C6F7720757320746F20636F6E737472756374206120666C6F77207468617420697320656173696C79207465737461626C652C207265616461626C6520616E640A6D61696E7461696E61626C652E0A0A2323232054727573742C20627574207665726966790A0A4F6E65206F6620746865206D6F737420696D706F7274616E742063686F6963657320746861742077652077616E74656420746F206D616B65207768696C6520646576656C6F70696E6720606C6962746D6020636F6E6365726E656420686F77207765E280996420766572696679207468650A66756E6374696F6E616C6974792C20616E6420686F77206672657175656E746C7920647572696E67206F757220646576656C6F706D656E742070726F636573732E20546869732077617320657370656369616C6C7920616D706C696669656420627920746865206661637420776520776572650A657870657269656E63696E67206F6E676F696E672073746162696C69747920697373756573207769746820746865206578697374696E672054656E6465726D696E74204246542074657374696E6720737569746520696E20476E6F2E0A0A57652077616E74656420612074657374696E67207375697465207468617420776173206D696E696D616C20656E6F75676820746F2076657269667920696E646976696475616C20737461746520746F207374617465207472616E736974696F6E732C2062757420616C736F20666C657869626C650A656E6F75676820746F207370696E2075702066756C6C20626C6F776E20636C75737465727320616E642073696D756C6174652061206C69766520636F6E73656E73757320656E7669726F6E6D656E742E0A0A606C6962746D602068617320657373656E7469616C6C792032207479706573206F662074657374733A0A0A2D20726567756C617220756E6974207465737473207468617420766572696679207374617465202D3E207374617465207472616E736974696F6E732E205468657365207465737473206861766520E2809C7061757365E2809D20616E6420E2809C726573756D65E2809D2066756E6374696F6E616C69747920746861740A2020616C6C6F777320757320746F2065786163746C792076657269667920656163682073746570206F6620746865207374617465206D616368696E650A2D20636C757374657220746573747320696E2077686963682077652073696D756C6174652076616C6964202F2062797A616E74696E6520656E7669726F6E6D656E74732E205468657365207465737473207370696E2075702061206D756C74696D6F646520636C75737465722C2066756C6C790A20206D6F636B65642C20746F2073696D756C61746520696E6E65722D6E6F646520636F6D6D756E69636174696F6E20616E6420636F6E73656E7375730A0A576520706C616E206F6E20657870616E64696E67206F75722074657374696E67207375697465206576656E20667572746865722C2077697468206D6F726520736F706869737469636174656420636C7573746572207465737473207468617420636F76657220616E206164646974696F6E616C0A72616E6765206F662062797A616E74696E65207363656E6172696F732E2043757272656E746C792C206F757220636F646520636F7665726167652073697473206174207E3936252E0A0A232320436F6E636C7573696F6E0A0A4F7572206578706C6F726174696F6E206F66207468652054656E6465726D696E7420636F6E73656E73757320656E67696E652068617320686967686C69676874656420746865206D65746963756C6F75732064657369676E20616E6420726F627573742066756E6374696F6E616C69747920746861740A6D616B65206974206120636F726E657273746F6E65206F6620626C6F636B636861696E2073797374656D732E205468652054656E6465726D696E7420636F6E73656E73757320656E67696E65E2809973206162696C69747920746F206D61696E7461696E206C6976656E65737320616E6420656E737572650A6661756C7420746F6C6572616E6365207468726F756768206974732077656C6C2D646566696E656420737461746573E280942A50726F706F73652A2C202A507265766F74652A2C20616E64202A507265636F6D6D69742A20E28094206578656D706C69666965732074686520696E747269636174650A62616C616E6365206E656564656420696E2064697374726962757465642073797374656D732C2077686572652076616C696461746F72732063616E206E617669676174652074686520636F6D706C65786974696573206F66207265616368696E6720636F6E73656E737573206576656E20696E207468650A66616365206F66206E6574776F726B2064656C61797320616E6420706F74656E7469616C2042797A616E74696E65206661756C74732E0A0A54686520696D706C656D656E746174696F6E206F662054656E6465726D696E742077697468696E2074686520476E6F20626C6F636B636861696E2C20616E64207468652062726F61646572206170706C69636174696F6E20706F74656E7469616C206F660A746865205B6C6962746D206C6962726172795D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F747265652F6D61737465722F746D322F706B672F6C6962746D292C20756E64657273636F72652074686520766572736174696C69747920616E640A61646170746162696C697479206F66207468697320636F6E73656E737573206D656368616E69736D2E204F757220617070726F61636820746F20646576656C6F70696E6720606C6962746D6020656D70686173697A6564206D6F64756C617269747920616E6420666C65786962696C6974792C0A656E737572696E6720697420636F756C64206265207574696C697A656420626F74682077697468696E20616E64206265796F6E6420626C6F636B636861696E20636F6E74657874732E204279206465636F75706C696E6720746865206C6962726172792066726F6D2073706563696669630A6E6574776F726B696E672070726F746F636F6C732C207369676E696E67206D656368616E69736D732C20616E642076616C696461746F7220736574206D616E6167656D656E742C2077652061696D656420746F20637265617465206120746F6F6C207468617420697320626F7468206561737920746F0A696E7465677261746520616E642063617061626C65206F6620737570706F7274696E672064697665727365207573652063617365732E204974206E6F74206F6E6C7920666163696C69746174657320736D6F6F746820626C6F636B636861696E206F7065726174696F6E2062757420616C736F0A6F70656E73207570206E657720706F73736962696C697469657320666F7220696E6E6F766174696F6E20696E2064697374726962757465642073797374656D732E0A0A5765206C6F6F6B20666F727761726420746F20746865206F6E676F696E6720696D70726F76656D656E74206F662054656E6465726D696E742C20616E642069747320636F6E74696E75656420696D70616374206F6E2074686520626C6F636B636861696E20616E64206F70656E2D736F757263650A636F6D6D756E69746965732E3214323032342D30372D30315430303A30303A30305A321F7A69766B6F7669636D696C6F732C70657461722D64616D626F76616C6965763221676E6F6C616E642C74657374342C636F6E73656E7375732C746D322C6C6962746D0AD9250A0A2F766D2E6D5F63616C6C12CA250A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F73743211646973636F7665722D676E6F2D676332343239446973636F76657220676E6F2E6C616E6420617420476F70686572436F6E2055533A20456D627261636520496E74657270726574656420476F32D0230A0A496620796F7527726520617474656E64696E6720476F70686572436F6E205553207468697320796561722C20796F75206D617920686176652068656172642061626F757420746865200A5B4368616C6C656E6765205365726965735D2868747470733A2F2F7777772E676F70686572636F6E2E636F6D2F6167656E64612F73657373696F6E2F31323831333636292068617070656E696E67200A647572696E672074686520636F6E666572656E63652E20496E206164646974696F6E20746F20612074686520636F726520736574206F66206368616C6C656E67657320666F6375736564206F6E200A736F66747761726520656E67696E656572696E6720616E6420637962657273656375726974792070726F766964656420627920746865204368616C6C656E676520536572696573206F7267616E697A6572732C0A74686520656E67696E6565727320617420676E6F2E6C616E64206861766520627265776564207570206120736574206F66206368616C6C656E67657320746861742077696C6C20696E74726F647563650A796F7520746F20626C6F636B636861696E7320616E6420736D61727420636F6E7472616374732C207768696C65207374696C6C206665656C696E6720726967687420617420686F6D65206279200A6372656174696E6720796F757220736F6C7574696F6E7320617320476F20616E6420476E6F2070726F6772616D73210A0A496E20746865206368616C6C656E6765732C20796F75276C6C206C6561726E20686F7720796F752063616E20696E7465726163742077697468206120626C6F636B636861696E20616E6420646973636F7665720A686F77207265616C6D732028736D61727420636F6E747261637473292063616E206265207574696C697A656420666F7220737461746566756C206170706C69636174696F6E7320776974686F7574200A72656C79696E67206F6E20612066696C6573797374656D206F7220612064617461626173652E20596F75276C6C20616C736F2062652061626C6520746F206C6576657261676520676E6F2E6C616E6427730A66656174757265732C2073756368206173207573696E67206465706C6F79656420636F6E74726163747320626F746820617320616E2041504920616E6420617320696D706F727461626C6520476E6F200A70726F6772616D732C207768696C65206265696E67206177617265206F66207468656972206C696D69746174696F6E732C206C696B65206E6F74206265696E672061626C6520746F20616363657373200A7468652073797374656D27732074696D652E20416E642066696E616C6C792C20796F75276C6C20736565207768617420636C617373206F662073656375726974792070726F626C656D7320636F6D65200A7570207768656E20796F752077616E7420746F206D616B6520736D61727420636F6E7472616374732E204C75636B696C792C20746865726520617265206E6F2053514C20696E6A656374696F6E73200A746F20776F7272792061626F757420686572652E0A0A2323205768617420697320676E6F2E6C616E6420616E6420476E6F3F0A0A676E6F2E6C616E642069732061206469737472696275746564206D756C746975736572206C616E67756167652D6261736564206F7065726174696E672073797374656D206261736564206F6E20476F2E0A497420656D62656473206120637573746F6D2D6275696C74207669727475616C206D616368696E65207468617420696E746572707265747320616E642065786563757465732074686520476E6F200A6C616E6775616765202D20612066756C6C792064657465726D696E69737469632076617269616E74206F6620476F2E2053657420746F206265636F6D6520746865206C656164696E67200A6F70656E2D736F7572636520736D61727420636F6E747261637420706C6174666F726D2C20676E6F2E6C616E6420616C6C6F777320676F706865727320746F20637265617465200A646563656E7472616C697A6564206170706C69636174696F6E7320776974682061206D696E696D616C206C6561726E696E672063757276652E0A0A232320486F7720746F2047657420537461727465640A0A596F752077696C6C2062652061626C6520746F2066696E642074686520476E6F206368616C6C656E67657320616D6F6E67207468652066756C6C20636174616C6F677565206F6E20746865200A5B4368616C6C656E67652053657269657320776562736974655D2868747470733A2F2F676F70686572636F6E2E6368616C6C656E67657365726965732E6F72672F292E20546865726520796F750A77696C6C20616C736F2066696E64205B612067756964655D2868747470733A2F2F676F70686572636F6E2E6368616C6C656E67657365726965732E6F72672F676E6F292074686174207468650A656E67696E6565727320617420676E6F2E6C616E6420686176652070757420746F67657468657220746F2068656C7020796F752067657420737461727465642C20636F766572696E67200A657373656E7469616C20636F6E636570747320616E6420656E7669726F6E6D656E742073657475702E20546869732067756964652077696C6C2070726F7669646520796F752077697468207468650A746F6F6C7320616E64206B6E6F776C6564676520796F75206E65656420746F206566666563746976656C7920706172746963697061746520696E20736F6C76696E6720476E6F206368616C6C656E6765732E0A0A546F2070617274696369706174652C20796F75276C6C206861766520746F20666F726D2061207465616D2E20596F752063616E206A6F696E20757020776974682061207465616D206F72206C6F6F6B200A666F72207465616D6D61746573206279207265616368696E67206F7574206F6E207468652023676F70686572636F6E2D6373206368616E6E656C20696E20746865200A5B476F706865727320536C61636B5D2868747470733A2F2F696E766974652E736C61636B2E676F6C616E676272696467652E6F72672F292E205765207375676765737420342D352070656F706C65200A706572207465616D2E0A0A4F6620636F757273652C20697420776F756C646E2774206265206120636F6D7065746974696F6E20776974686F7574207072697A657321205468652077696E6E696E67207465616D2077696C6C0A73636F726520666F7572207469636B65747320746F20476F70686572436F6E20323032352C20746865207365636F6E642D706C616365207465616D2077696C6C2067657420676966742063617264730A666F72206E6577206861636B696E672068617264776172652C20616E64207468652074686972642D706C616365207465616D2077696C6C207265636569766520636F70696573206F66200A22476F2050726F6772616D6D696E673A2046726F6D20426567696E6E657220746F2050726F66657373696F6E616C222062792053616D616E74686120436F796C652C20616C6F6E672077697468200A63617368207072697A657320666F7220616C6C20746872656520746F70207465616D732E20576520616C736F2068617665206E696E6520696E646976696475616C20416368696576656D656E74200A6177617264732C20737563682061732022466972737420426C6F6F6421222C20224E69676874204F776C212220616E642022486F6F6B6564206F6E207468652053696465717565737421222C200A6561636820776974682061206F6E652D7965617220737562736372697074696F6E20746F2032363030204D6167617A696E6520616E64202431303020696E20476F6F676C6520436C6F75640A506C6174666F726D20637265646974732E20506C75732C2065766572796F6E652077686F20636F6D706C657465732061206368616C6C656E676520697320656C696769626C6520666F72200A72616E646F6D207072697A6573206C696B652076696E746167652032363030204D6167617A696E652069737375657320616E6420736563757269747920616E642070726F6772616D6D696E67200A626F6F6B732C20746F206265206177617264656420746F2074686F73652070726573656E7420617420746865207072697A6520636572656D6F6E79206F6E205765646E65736461792E20546865200A66756C6C206C697374206F66207072697A65732063616E20626520666F756E64206F6E20746865205B4368616C6C656E676520536572696573205072697A657320706167655D2868747470733A2F2F676F70686572636F6E2E6368616C6C656E67657365726965732E6F72672F7072697A6573292E0A0A232320526561647920746F2054616B65206F6E20746865204368616C6C656E67653F0A0A2D204A6F696E20746865204368616C6C656E6765205365726965733A205465737420796F75722077697473202620736B696C6C7320616E64206761696E2070726163746963616C200A657870657269656E6365207769746820476E6F206279207669736974696E6720746865205B4368616C6C656E67652053657269657320776562736974655D2868747470733A2F2F676F70686572636F6E2E6368616C6C656E67657365726965732E6F72672F292E0A2D2044656570656E20796F757220756E6465727374616E64696E67206F6620476E6F20616E642069747320636F726520636F6E6365707473206279207669736974696E6720746865200A5B4F6666696369616C20676E6F2E6C616E6420446F63756D656E746174696F6E5D2868747470733A2F2F646F63732E676E6F2E6C616E642F290A0A23232047657420746F20476E6F205573204020476F70686572436F6E2055530A0A496620796F752764206C696B6520746F206C6561726E206D6F72652061626F757420476E6F202620676E6F2E6C616E642C206A6F696E20757320617420476F70686572436F6E20555320666F7220616E0A696E2D64657074682074616C6B20616E6420776F726B73686F70206F6E20646576656C6F70696E672061707073207769746820476E6F2E2046696E64207468652064657461696C732062656C6F772E0A0A23232320576F726B73686F703A20274275696C64696E67206120446563656E7472616C697A656420417070206F6E20676E6F2E6C616E64270A2D2054696D65202620646174653A204D6F6E6461792C204A756C79203874682C2031303A303020616D202D2031323A303020706D0A2D2057686F3A2044796C616E20426F6C747A2C20536F66747761726520456E67696E65657220617420676E6F2E6C616E640A2D2057686572653A204D6172696E6120436974792C204D617272696F7474204D6172717569730A2D205B4C696E6B5D2868747470733A2F2F7777772E676F70686572636F6E2E636F6D2F6167656E64613F737065616B6572733D33333137393930290A0A2323232050726573656E746174696F6E3A20274275696C64696E6720612044657465726D696E697374696320496E74657270726574657220696E20476F3A20526561646162696C6974792076732E20506572666F726D616E6365270A2D2054696D65202620646174653A20547565736461792C204A756C79203974682C2031313A343520616D202D2031323A313020706D0A2D2057686F3A204A6165204B776F6E2C20676E6F2E6C616E6420466F756E64657220616E6420436F2D666F756E646572206F6620436F736D6F730A2D2057686572653A20536B796C696E652042616C6C726F6F6D20442C204D63436F726D69636B20506C6163650A2D205B4C696E6B5D2868747470733A2F2F7777772E676F70686572636F6E2E636F6D2F6167656E64613F737065616B6572733D33333034373339290A0A466F72206D6F726520696E666F2C207669736974205B676E6F2E6C616E645D2868747470733A2F2F676E6F2E6C616E642F676F70686572636F6E32342F2920616E64207374617920636F6E6E6563746564200A7468726F756768206F757220736F6369616C206D65646961206368616E6E656C732E0A0A5765206C6F6F6B20666F727761726420746F20736565696E6720796F7520617420476F70686572436F6E20555320616E64206275696C64696E672074686520667574757265207769746820476E6F2E0A0A232323232323202A50617274696369706174696F6E20696E20746865204368616C6C656E676520536572696573206973206F6E6C7920706F737369626C6520627920706879736963616C6C7920617474656E64696E6720476F70686572436F6E20555320323032342E3214323032342D30372D30335431333A33373A30305A32176C656F6868686E2C6465656C61776E2C746865686F776C3229676E6F6C616E642C676F70686572636F6E2C676E6F2C6368616C6C656E67652D7365726965732C676F0AC9150A0A2F766D2E6D5F63616C6C12BA150A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374320A74657374342D6C697665322B426C6F636B636861696E20546573746E6574204C61756E636865643A205465737434204E6F77204C69766532F0130A0A576520617265206578636974656420746F20616E6E6F756E636520746865206C61756E6368206F66206F757220626C6F636B636861696E20746573746E65742C2054657374342E2054686973206D696C6573746F6E65206D61726B732061207369676E69666963616E74206C65617020696E206F7572206A6F75726E657920746F77617264732074686520676E6F2E6C616E64206D61696E6E65742C206272696E67696E67206E6577206361706162696C697469657320616E642073746162696C69747920746F206F757220646576656C6F706D656E7420656E7669726F6E6D656E742E0A0A2323204B6579204665617475726573206F662054657374340A0A232323205472616E736974696F6E20746F206120446563656E7472616C697A6564204E6574776F726B0A0A5465737434206973206F7572206669727374207374657020746F776172647320612066756C6C7920646563656E7472616C697A656420626C6F636B636861696E206E6574776F726B2E20556E6C696B65206561726C696572207374616765732C20697420737570706F727473206D756C7469706C652076616C696461746F72206E6F6465732C20656E68616E63696E6720736563757269747920616E6420726573696C69656E63652E2054686520696E697469616C2076616C696461746F722073657420636F6E7369737473206F663A0A0A2D20436F726520656E67696E656572696E67207465616D0A2D2044657658207465616D0A2D204F6E626C6F630A0A5768696368206272696E677320757320746F20746865207365636F6E64206D616A6F7220666561747572652C2074686520476F7644414F2E0A0A23232320476F7644414F0A0A54686520666972737420697465726174696F6E206F66207468652074657374696E6720476F7644414F20656E61626C6573206F6E2D636861696E20766F74696E6720616E642076616C696461746F72206D616E6167656D656E742E2054686520696E697469616C20476F7644414F206D656D626572732061726520676E6F2E6C616E64207465616D206D656D626572732C206D616A6F7220636F6E7472696275746F727320616E64207465616D7320616C7265616479206275696C64696E67206461707073206F6E20676E6F2E6C616E642E2054686520666972737420766F74696E672070726F706F73616C732077696C6C20626520746F20616464206164646974696F6E616C203372642070617274792076616C696461746F72733A0A0A2D2042657274790A2D2054657269746F72690A2D2049727265766572656E7453696D706C69636974790A0A4F757220706C616E20697320746F206B6565702065766F6C76696E672074686520476F7644414F206D656368616E69736D2C20776974682074686520676F616C206F662073657474696E67207570206120646563656E7472616C697A656420656E74697479207468617420696E63656E746976697A6573206D656D6265727320746F2062652061637469766520616E6420636F6E7472696275746520746F2074686520676E6F2E6C616E642070726F6A6563742E0A0A232323204120537461626C6520456E7669726F6E6D656E7420666F72206441707020446576656C6F706D656E740A0A546573743420697320746865206669727374207065726D616E656E7420616E6420737461626C6520746573746E657420666F7220476E6F2E6C616E642C2064657369676E656420746F2061766F696420627265616B696E67206368616E6765732E20546F2068656C7020646576656C6F706572732075736520697420746F206275696C6420616E6420746573742064417070732C20776527766520616464656420546573743420746F20746865205B466175636574204875625D2868747470733A2F2F6661756365742E676E6F2E6C616E642F293B20796F752772652061626C6520746F206F627461696E207465737420746F6B656E7320616E64206578706572696D656E7420776974686F7574207265616C20636F6E73657175656E6365732E0A0A576527766520616C736F20636F6C6C61626F72617465642077697468204F6E626C6F6320746F20757064617465205B4164656E615D2868747470733A2F2F7777772E6164656E612E6170702F292C207768696368206E6F7720737570706F727473205465737434206F7574206F662074686520626F782E204F6E626C6F632068617320616C736F2070726F7669646564205B476E6F5363616E5D2868747470733A2F2F676E6F7363616E2E696F2F292C2061207472616E73616374696F6E206578706C6F72657220746F2061696420696E20736D61727420636F6E747261637420646576656C6F706D656E7420616E642074726F75626C6573686F6F74696E672E0A0A232323204E616D657370616365730A0A4E616D657370616365732070726F76696465207573657273207769746820746865206578636C7573697665206361706162696C69747920746F207075626C69736820636F6E74726163747320756E6465722074686569722064657369676E61746564206E616D657370616365732C2073696D696C617220746F204769744875622773207573657220616E64206F7267616E697A6174696F6E206D6F64656C2E204F722073696D706C79207075742C20796F75276C6C2062652061626C6520746F20636C61696D206120757365726E616D6520616E642075736520697420617320796F7572206F6E2D636861696E206964656E746974792E204C6561726E206D6F72652061626F757420697420696E20746865205B676E6F2E6C616E6420646F63735D2868747470733A2F2F646F63732E676E6F2E6C616E642F636F6E63657074732F6E616D657370616365732F292E0A0A232320576861742773204E6578743F0A0A5765277665206C61756E63686564205465737434206120666577207765656B73206168656164206F6620746865207363686564756C65202D207765276C6C20626520686561647320646F776E20746865206E65787420666577207765656B7320666978696E67206275677320616E64207061746368696E67207468696E67732E2054686572652773207374696C6C2061206C6F74206F6620776F726B206C656674206265666F72652077652067657420746F2061206D61696E6E65742072656C656173652063616E6469646174652E2054686174277320776865726520796F7520636F6D6520696E3A20706C61792061726F756E6420776974682054657374342C20627265616B2069742C20616E64205B636F6E747269627574655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F626C6F622F6D61737465722F434F4E545249425554494E472E6D64292E0A0A4F6E6C7920746F676574686572207765276C6C2062652061626C6520746F206275696C6420676E6F2E6C616E6420746865207269676874207761792E20536F206C657427732067657420737461727465642C20676E6F6D696573213214323032342D30372D31375430303A30303A30305A32074B6F7574656B69321E676E6F6C616E642C65636F73797374656D2C676F7664616F2C74657374340A9C210A0A2F766D2E6D5F63616C6C128D210A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374320E6D6F6E74686C792D6465762D31303223546865204D6F726520596F7520476E6F2031303A205465737434206973204C6976652132AA1F0A0A546869732065646974696F6E20666F6375736573206F6E2054657374342C2061206D616A6F72206D696C6573746F6E6520746F7761726473206F7572206D61696E6E65742E205465737434206973207468652066697273742074727565206D756C74696E6F646520746573746E657420666561747572696E672044414F7320616E64206F6E2D636861696E20676F7665726E616E63652C206F66666572696E6720612070726576696577206F662077686174E280997320746F20636F6D652E204D756368206578636974656D656E742C207375636820776F772E0A0A576520646F63756D656E742065766572797468696E6720696E206F7572207765656B6C7920656E67696E656572696E67207570646174657320616E6420766964656F207265636F7264696E67732E0A0A2320476E6F20436F726520557064617465730A0A2323205465737434206973204C6976650A0A5769746820372076616C696461746F72206E6F6465732072756E6E696E6720616E642033206D6F72652061626F757420746F20626520616464656420766961206F6E2D636861696E20676F7665726E616E63652C20546573743420697320746865206669727374206D756C74696E6F646520746573746E65742074686174206861732074686520636F6D706C657869747920616E64207468652066656174757265207365742077652077616E7420666F722074686520676E6F2E6C616E64206D61696E6E65742E2046696E64206F7574206D6F72652061626F757420697420696E205B746869732061727469636C655D2868747470733A2F2F7777772E676E6F2E6C616E642F722F676E6F6C616E642F626C6F673A702F74657374342D6C697665292E0A0A2323204368616E67656C6F670A0A2D20476E6F776562206C6976650A2D20525043206C6976650A2D20545820696E646578657220617661696C61626C650A2D2054657374342066617563657420616464656420746F20746865205B466175636574204875625D2868747470733A2F2F6661756365742E676E6F2E6C616E642F290A2D204D657267656420696E205B476E6F207479706520636865636B5D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F313432362920737570706F72742C207265736F6C76696E6720746865206C6F6E672D7374616E64696E67206973737565207769746820476E6F6C616E672773207479706520636865636B696E67206F6E206120564D206C6576656C2C206D616B696E67206974206D6F726520737461626C6520666F7220646576656C6F706D656E742E0A2D20416464656420737570706F727420666F72205B7472616E7370696C696E6720676E6F207374616E64617264206C69627261726965735D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F31363935292C2061732070617274206F66206120626967676572206566666F727420746F2073746162696C697A652074686520476E6F564D2077697468206E61746976652062696E64696E6720737570706F727420287768696368207761732061646465642061207768696C65206261636B292E2054686520476E6F207472616E7370696C6572206E6F77207573657320476E6F2773207374616E64617264206C696272617269657320696E7374656164206F6620476F27732E205468697320616C736F20656C696D696E6174657320746865206E65656420666F72207468696E6773206C696B6520607374647368696D6020616E6420616E207374642077686974656C6973742E0A2D205B436F6E74696E75656420746F20696D70726F76652075706F6E207631206F662074686520474F5644414F20696D706C656D656E746174696F6E5D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F32333739292C2077697468206164646974696F6E616C20696D70726F76656D656E747320636F6D696E67206C617465722074686973207765656B206168656164206F662074657374342E2057652077616E7420746F206C61756E636820776974682061206D696E696D616C20676F7664616F20696D706C656D656E746174696F6E20666F722074657374342C2077686963682077696C6C2062652063656E7472616C697A656420696E2074686520626567696E6E696E672E2057652077696C6C207573652074686520676F7664616F206D656368616E69736D20666F72206D616E6167696E67206F6E2D636861696E2076616C696461746F7220736574732E0A2D205B456D627261636564204A534F4E206F75747075745D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3233393329206173207374616E6461726420666F7220636F6E66696775726174696F6E20616E642073656372657473206665746368696E672E204465764F707320656E67696E656572732063616E2072656A6F6963653B2069742773206E6F77207375706572206561737920746F207265616420616E64207061727365206E6F64652076616C7565732E0A2D205075626C6973686564205B7631206F66207468652076616C696461746F7220646F63756D656E746174696F6E5D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3232383529206168656164206F6620746865207465737434206C61756E63682E20486176696E67206561737920746F20756E6465727374616E64206F726368657374726174696F6E20646F637320697320637269746963616C20746F20656173696C79206F6E626F617264696E67206E6F6465206F70657261746F727320616E642076616C696461746F72732E2057652077696C6C20636F6E74696E756520746F20696D70726F76652075706F6E2074686520646F63756D656E746174696F6E2C20616E642068617665206D6F7265207573652D636173657320616E64206578616D706C657320666F72206F726368657374726174696F6E2E0A2D205B496D70726F7665642074686520706572666F726D616E63655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3231343029206F662060666F7260206C6F6F707320616E6420606966602073746174656D656E74732E2054686520706572666F726D616E636520616C6D6F737420646F75626C656420666F722074686573652073757065722D636F6D6D6F6E20476E6F2073746174656D656E74732E0A2D205B4D696772617465645D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F32343234292074686520606C6962746D60202854656E6465726D696E7420636F6E73656E73757320656E67696E652920696D706C656D656E746174696F6E20746F20746865206D6F6E6F7265706F2E20596F752063616E20636865636B206974206F7574205B686572655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F747265652F6D61737465722F746D322F706B672F6C6962746D292E20576520706C616E20746F2061646F7074207468697320656E67696E6520696D706C656D656E746174696F6E20696E20544D322C2073686F72746C7920616674657220746865207465737434206C61756E63682E2054686520626C6F6720706F737420697320636F6D696E6720736F6F6E206F6E20746865206F6666696369616C20476E6F20626C6F672E0A0A23204576656E747320616E64204D6565747570730A0A23232050617374206576656E74730A0A23232320476F70686572436F6E205553200A0A57652073706F6E736F72656420616E6420617474656E64656420476F70686572436F6E205553202D2066756C6C207265636170205B686572655D2868747470733A2F2F676E6F2E6C616E642F722F676E6F6C616E642F626C6F673A702F646973636F7665722D676E6F2D67633234292E2057652070617274696369706174656420696E20746865205B4368616C6C656E6765207365726965735D2868747470733A2F2F7777772E676F70686572636F6E2E636F6D2F6167656E64612F73657373696F6E2F31323831333636292C2068656C642061205B776F726B73686F70206F6E206275696C64696E67206120646563656E7472616C697A6564206170705D2868747470733A2F2F7777772E796F75747562652E636F6D2F77617463683F763D6C774C3256796A61562D41292C20616E64206861642061206C6F74206F6620677265617420636F6E766572736174696F6E73206F6E207468652068616C6C77617920747261636B2E20576520616C736F207365742075702061205B726166666C65207265616C6D5D2868747470733A2F2F676E6F2E6C616E642F722F676332342F726166666C6529202D20476F70686572732077652061626C6520746F206A6F696E2074686520726166666C65207573696E6720746865204164656E612077616C6C65742C20476E6F20506C617967726F756E6420616E6420436F6E6E6563742E20596F75276C6C207365652074686520736E697070657473206F66207468652061746D6F73706865726520696E205B7468652070726F6D6F20766964656F5D2868747470733A2F2F782E636F6D2F5F676E6F6C616E642F7374617475732F31383131343338343034383030303537353630292077652070757420746F6765746865722E0A0A232323204E6562756C61722053756D6D69740A0A57652068616420612067726561742074696D6520696E204272757373656C7320617420746865204E6562756C61722053756D6D69742E204D616E6672656420776173206F6E20746865206167656E646120776974682061206C696768746E696E672074616C6B2C20616E642074686520636F7265207465616D2068656C64206120776F726B73686F702E20436174636820612070617274206F6620746865206576656E742061746D6F737068657265205B696E207468697320766964656F5D2868747470733A2F2F782E636F6D2F5F676E6F6C616E642F7374617475732F31383132383637383838353031343737343730292E0A0A2323205570636F6D696E67206576656E74730A0A232320446973636F726420446576656C6F706572204F666669636520486F7572730A0A457665727920546875727364617920617420323A333020706D20434553542C20776520686F7374206F666669636520686F757273206F6E205B446973636F72645D2868747470733A2F2F646973636F72642E636F6D2F696E766974652F643234435435623963643F6576656E743D31323532333130323832343530313132353935292E204A6F696E20757320746F2067657420796F7572207175657374696F6E7320616E7377657265642C206469736375737320757064617465732C20616E6420636174636820757020776974682074686520636F6D6D756E6974792E2057652764206C6F766520746F2073656520796F75207468657265213214323032342D30372D32325430303A30303A30305A32074B6F7574656B69323B676E6F6C616E642C65636F73797374656D2C757064617465732C676E6F766D2C746D322C74657374342C676E6F73747564696F2C636F6E6E6563740AC02A0A0A2F766D2E6D5F63616C6C12B12A0A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374320767632D75733234321D676E6F2E6C616E6420617420476F70686572436F6E205553203230323432D9280A0A476F70686572436F6E205553206973206F6E65206F6620746865206C617267657374206576656E747320666F722074686520476F2070726F6772616D6D696E6720636F6D6D756E6974792E0A5468697320796561722C20696E207468652076696272616E742063697479206F66204368696361676F2C207765206861642074686520686F6E6F72206F66206265696E6720746865204469616D6F6E640A53706F6E736F7220617420476F70686572436F6E20555320323032342E2046726F6D204A756C792037746820746F204A756C7920313074682C207765207765726520737572726F756E646564206279200A746F7020476F2074616C656E743B2069742077617320616E20696E6372656469626C65206F70706F7274756E69747920666F7220757320746F20636F6E6E656374207769746820646576656C6F706572732C0A73686F7763617365206F757220696E6E6F766174696F6E732C20616E64207368617265206F7572206578706572746973652E0A0A476F70686572436F6E2055532032303234207761732068656C6420617420746865207374756E6E696E67204D63436F726D69636B20506C6163652C206272696E67696E6720746F6765746865720A6E6561726C79206F6E652074686F7573616E6420476F20656E7468757369617374732066726F6D2061726F756E642074686520776F726C642E204F7572207465616D2077617320746872696C6C65640A746F2062652070617274206F66207468697320676174686572696E672C20636F6E747269627574696E6720746F207468652076696272616E742065636F73797374656D206F6620476F0A646576656C6F706572732E0A0A232320486967686C6967687473206F66204F757220436F6C6C61626F726174696F6E0A0A232323204A6165E28099732054616C6B0A0A4A6165204B776F6E2C2074686520666F756E646572206F6620676E6F2E6C616E642C206761766520612074616C6B206F6E20E2809C2A2A476E6F3A204C6573736F6E7320696E204275696C64696E6720610A476F20496E74657270726574657220696E20476F2E2A2AE2809D0A0A4A6165E28099732074616C6B2070726F766964656420616E20696E2D6465707468206F76657276696577206F6620776879207468697320746563686E6F6C6F6779206973206761696E696E67200A7472616374696F6E20696E2074686520646576656C6F706D656E7420636F6D6D756E6974792E205468652064697363757373696F6E20626567616E207769746820746865206B657920726561736F6E730A746F2075736520476E6F2C20616E6420697473207365616D6C65737320696E7465726F7065726162696C69747920776869636820616C6C6F777320666F72206566666F72746C657373200A696E746567726174696F6E2E2044657461696C656420636F6D70617269736F6E732077657265206D616465206265747765656E20476E6F20616E64206F746865722070726F6D696E656E740A70726F6772616D6D696E67206C616E677561676573207375636820617320536F6C696469747920616E642052757374207768696368206172652072756E6E696E67206F7468657220736D617274200A636F6E747261637420706C6174666F726D732C2073686F77636173696E6720476E6FE28099732064697374696E637420616476616E74616765732E2054686520737472656E67746873206F66207468650A476E6F564D2077657265206120666F63616C20706F696E742C20706172746963756C61726C792069747320737461636B20626173656420415354206172636869746563747572652C20697473200A6175746F2070657273697374656E63652C2061732077656C6C206173206974732064657465726D696E69736D20616E64206F746865722066656174757265732E205468652070726573656E746174696F6E0A616C736F207368617265642076616C7561626C65206C6573736F6E73206C6561726E65642066726F6D20476E6F564D277320646576656C6F706D656E7420616E6420696D706C656D656E746174696F6E2C0A6F66666572696E6720696E73696768747320696E746F20626573742070726163746963657320616E64206368616C6C656E676573206F766572636F6D6520696E207468652066757475726520776F726B2E200A4265207375726520746F206D616B6520736F6D652074696D6520746F207761746368205B746865207265636F7264696E675D2868747470733A2F2F7777772E796F75747562652E636F6D2F77617463683F763D626574556B6768665F6A6F29210A0A23232320476E6F20576F726B73686F700A0A5061727469636970616E74732068616420746865206F70706F7274756E69747920746F2064697665206465657020696E746F2074686520646576656C6F706D656E742070726F636573732C200A677569646564206279206F75722065787065727420656E67696E656572202A2A5B44796C616E20426F6C747A5D2868747470733A2F2F6769746875622E636F6D2F6465656C61776E292A2A2077686F20686F73746564206120776F726B73686F70206F6E20436F6D6D756E697479200A4461793A202A2A4275696C64696E67206120646563656E7472616C697A656420617070206F6E20676E6F2E6C616E642A2A2E2054686520776F726B73686F702070726F76696465642070726163746963616C200A696E73696768747320616E6420737465702D62792D737465702067756964616E63652C20656D706F776572696E6720617474656E6465657320746F207374617274206275696C64696E672074686569720A6F776E206170706C69636174696F6E732E20496620796F75206D6973736564206F757220776F726B73686F70206F722077616E7420746F2072657669736974207468652073657373696F6E2C20796F75200A63616E2066696E642061207265636F726465642076657273696F6E206F662074686520776F726B73686F70205B686572655D2868747470733A2F2F7777772E796F75747562652E636F6D2F77617463683F763D6C774C3256796A61562D41292E0A0A2323232054686520676E6F2E6C616E6420426F6F74680A4F6E65206F6620746865206D6F737420726577617264696E67206665656C696E67732061626F757420617474656E64696E67207468657365206B696E6473206F6620636F6E666572656E6365730A6973207761746368696E67206F757220626F6F746820717569636B6C79206265636F6D65206120687562206F662061637469766974792C2064726177696E672061207374656164792073747265616D200A6F662076697369746F727320696E74726967756564206279206F75722070726F6A6563742E20576520656E6761676564207769746820646576656C6F706572732066726F6D20766172696F7573200A6261636B67726F756E64732C20616E73776572696E672061206D7972696164206F66207175657374696F6E732061626F757420476E6F2C20676E6F2E6C616E642C206F757220636F6D70616E792C200A616E642074686520636F6D70616E79E2809973205B6F70656E20656D706C6F796D656E74206F70706F7274756E69746965735D2868747470733A2F2F6A6F62732E6C657665722E636F2F616C6C696E62697473292E0A486176696E6720616C6C206F662074686973206469726563742068756D616E20696E746572616374696F6E20776173206E6F74206F6E6C7920696E666F726D61746976652062757420616C736F0A646565706C7920696E736967687466756C2C2070726F766964696E6720757320776974682076616C7561626C6520666565646261636B20616E642069646561732E20466F72206D6F72650A696E666F726D6174696F6E2C20636865636B206F7574206F7572205B4F6666696369616C20446F63756D656E746174696F6E5D2868747470733A2F2F646F63732E676E6F2E6C616E642F292E0A0A2323232054686520476E6F20526166666C650A0A4F6E65206F6620746865206D616A6F722061747472616374696F6E73206174206F757220626F6F74682C20616D6F6E6773742074686520E2809C676E6F6D65E2809D206265616E696520686174206173200A77656C6C2061732074686520542D7368697274732C207761732074686520726166666C6520666F72206120686967682D656E64206D656368616E6963616C206B6579626F6172642E20546865200A726166666C65207061727469636970616E747320686164206120646972656374206F70706F7274756E69747920746F20696E746572616374207769746820676E6F2E6C616E64206279200A666F6C6C6F77696E672074686520726166666C6520696E737472756374696F6E732C206C656164696E67207468656D20746F20757365205B476E6F20506C617967726F756E645D2868747470733A2F2F706C61792E676E6F2E6C616E642F2920746F20696D706F72740A616E64206465706C6F79206120736D61727420636F6E747261637420726166666C65207265616C6D2066726F6D207468656972206F776E206C6170746F702E20546865206578636974656D656E74200A7761732070616C7061626C6520617320617474656E646565732065616765726C7920676174686572656420666F72207468652064726177696E672E2054686520726166666C65206E6F74206F6E6C79200A647265772063726F7764732C2062757420616C736F20737061726B6564206E756D65726F757320656E676167696E6720636F6E766572736174696F6E732074686174206C656420746F20476F200A656E67696E6565727320676976696E6720476E6F2061207472792E0A0A23232320546865204368616C6C656E6765205365726965730A0A54686973207965617220776520686164207468652070726976696C65676520746F20706172746963697061746520696E206120636F6C6C61626F72617469766520706172746E6572736869700A776974682074686520436F646550726F207465616D20746F206275696C6420746865205B6368616C6C656E6765207365726965735D2868747470733A2F2F676F70686572636F6E2E6368616C6C656E67657365726965732E6F72672F292E205468697320636F6C6C61626F726174696F6E2077617320616E0A6F70706F7274756E69747920666F72207061727469636970616E747320746F206C6561726E20686F7720746F20696E746572616374207769746820626C6F636B636861696E20616E64200A646973636F76657220686F77207265616C6D732028736D61727420636F6E747261637473292063616E206265207574696C697A656420666F7220737461746566756C206170706C69636174696F6E730A776974686F75742072656C79696E67206F6E206578706C696369746C79206D616E6167696E6720612066696C652073797374656D206F722064617461626173652E20546869732077617320616E200A6F70706F7274756E69747920746F2073686F776361736520676E6F2E6C616E64E28099732066656174757265732C206C696B65207573696E672061206465706C6F79656420636F6E74726163742061730A626F746820616E2041504920616E6420617320616E20696D706F727420666F72206F7468657220636F6E7472616374732E0A0A232320436F6E636C7573696F6E0A0A4F766572616C6C2C2074686520656E746875736961736D206F662074686520617474656E6465657320617420476F70686572436F6E2077617320696E66656374696F75732C20616E64207765200A776572652064656C69676874656420746F20736565207375636820612068696768206C6576656C206F6620656E676167656D656E7420616E6420637572696F736974792E2057686574686572200A697420776173206174206F757220626F6F74682C20647572696E672074686520726166666C652C206F7220696E2074686520776F726B73686F702C2074686520696E746572616374696F6E730A77657265206D65616E696E6766756C20616E6420656E72696368696E672E2053706F6E736F72696E6720616E6420636F6C6C61626F726174696E6720617420476F70686572436F6E205553200A323032342077617320616E20756E666F726765747461626C6520657870657269656E63652E2057652061726520677261746566756C20666F7220746865206F70706F7274756E69747920746F200A636F6E6E65637420776974682074686520476F20636F6D6D756E6974792C207368617265206F7572206B6E6F776C656467652C20616E64206C6561726E2066726F6D2066656C6C6F77200A646576656C6F706572732E20576520657874656E64206F757220686561727466656C74207468616E6B7320746F2065766572796F6E652077686F2076697369746564206F757220626F6F74682C0A70617274696369706174656420696E2074686520726166666C652C20617474656E646564204A6165204B776F6E27732070726573656E746174696F6E206F6E20476E6F2C20616E64206A6F696E6564200A6F757220776F726B73686F702E0A0A576520696E7669746520796F7520746F207374617920636F6E6E65637465642077697468207573206F6E206F7572205B446973636F72645D2868747470733A2F2F646973636F72642E67672F34334843354E5A7A4865292C0A616E64206F7572205B626C6F675D2868747470733A2F2F676E6F2E6C616E642F722F676E6F6C616E642F626C6F6729207768657265207765200A77696C6C2062652073686172696E67206D6F726520696E73696768747320616E642075706461746573206F6E200A5B54657374345D2868747470733A2F2F676E6F2E6C616E642F722F676E6F6C616E642F626C6F673A702F74657374342D6C697665292C206F75722063757272656E7420746573746E65742C2061730A77656C6C206173207468652070726F677265737320746F7761726473206F7572206C61756E63682E0A0A5468616E6B20796F752C205B476F70686572436F6E20555320323032345D2868747470733A2F2F782E636F6D2F676F70686572636F6E292C20666F7220616E20696E6372656469626C6520657870657269656E63652E200A57652063616E2774207761697420746F20736565207768617420746865206E657874206576656E7420686F6C6473210A0A3214323032342D30382D31325430303A30303A30305A320956542D436F736D6F73323B74656368636F6E666572656E63652C6576656E74732C6F757472656163682C476F446576656C6F706572732C476F546F476E6F2C676F70686572730ADFD0010A0A2F766D2E6D5F63616C6C12CFD0010A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F73743215676332342D6368616C6C656E67652D7365726965733237476F70686572436F6E2055533A20676E6F2E6C616E642773204368616C6C656E67652053657269657320436F6E747269627574696F6E7332E4CE010A0A676E6F2E6C616E6420697320706C656173656420746F2068617665206265656E206772616E74656420746865206F70706F7274756E69747920746F2070726F76696465206120736572696573206F66206368616C6C656E67657320666F7220746865204368616C6C656E67652053657269657320617420746865203230323420476F70686572436F6E20696E204368696361676F2E20576520656E6A6F7965642077726974696E67207468656D20616E6420686F706520746865207061727469636970616E747320686164206120676F6F642074696D6520616E6420666F756E6420697420696E746572657374696E6720746F206C6561726E2061626F757420676E6F2E6C616E6420616E6420626C6F636B636861696E7320696E2067656E6572616C2E0A0A5468697320626C6F6720706F73742077696C6C206F75746C696E652065616368206F6620746865206368616C6C656E67657320616E64206578706C61696E20686F7720746F20736F6C766520656163682E20456163682073656374696F6E20696E636C75646520746865206368616C6C656E67652070726F6D70742C20636C7565732070726F76696465642C20736F6C7574696F6E2C20616E64206578706C616E6174696F6E2E0A0A232320476E6F2048696464656E2054656D706C65204261736963730A0A546865206669727374206368616C6C656E6765206973206D65616E7420746F20736572766520617320616E20696E74726F64756374696F6E20746F206D616B696E6720612066756E6374696F6E2063616C6C20746F206120676E6F2E6C616E64207265616C6D2E20546865207365636F6E64206368616C6C656E67652C207768696C65206120626974206D6F7265206368616C6C656E67696E67206973206D65616E7420746F2068656C70207061727469636970616E7473206265636F6D65206120626974206D6F72652066616D696C696172207769746820686F77206B65792067656E65726174696F6E20776F726B732E0A0A23232320506861736520310A0A232323232050726F6D70740A0A537065616B2074686520776F726420746F206761696E2061636365737320746F207468652068696464656E2074656D706C652E204D616B652061207472616E73616374696F6E206F6E2074686520626C6F636B636861696E2073657420757020666F7220746865206576656E742E20416E616C797A652074686520476E6F20636F646520746F20756E6465727374616E6420776861742070617373776F726420746F207061737320617320616E20617267756D656E7420746F20736F6C766520746865206368616C6C656E67652E20546865207265616C6D207061746820666F722074686973206368616C6C656E67652069733A0A60676E6F2E6C616E642F722F6368616C6C656E6765732F6261736963732F7031600A0A2323232320436C7565730A0A2D2054686520676E6F6B657920636F6D6D616E64206C696E6520746F6F6C20616C6C6F777320746F20696E74657261637420776974682074686520626C6F636B636861696E2E0A2D2054686520476E6F57656220696E746572666163652063616E206265207573656420746F20696E737065637420476E6F20636F6465206F6E2D636861696E2E0A2D205573696E6720746865202248656C702220627574746F6E206F6E20676E6F77656220796F752063616E206765742068656C7020707265706172696E6720610A636F6D6D616E6420746F20757365206F6E2074686520636F6D6D616E64206C696E652E0A0A2323232320416E6E6F7461746564205265616C6D20436F64650A606060676F0A7061636B61676520656E7465720A0A696D706F727420280A0922737464220A0A0922676E6F2E6C616E642F722F73797374656D2F736F6C766572220A290A0A66756E6320456E7465722870617373776F726420737472696E6729207B0A0969662070617373776F726420213D20223133333722207B0A090970616E69632822696E76616C69642070617373776F72642122290A097D0A0A092F2F20546869732077696C6C206D65616E207468617420796F7520736F6C76656420746865206368616C6C656E6765210A09736F6C7665722E4D61726B536F6C7665642822222C207374642E507265765265616C6D28292E416464722829290A7D0A0A6060600A0A2323232320536F6C7574696F6E0A0A54686520736F6C7574696F6E206865726520697320746F2073696D706C792063616C6C207468652060456E746572602066756E6374696F6E207769746820746865202231333337222070617373776F72642E0A446973636F766572696E672074686520736F7572636520636F646520697320656173696C7920616368696576656420627920696E7370656374696E6720746865207265616C6D277320736F7572636520636F64650A66726F6D2074686520676E6F77656220696E746572666163652E0A0A60606073680A676E6F6B6579206D616B6574782063616C6C205C0A092D706B677061746820676E6F2E6C616E642F722F6368616C6C656E6765732F6261736963732F7031205C0A092D66756E6320456E746572205C0A092D617267732031333337205C0A092D72656D6F7465202068747470733A2F2F6368616C6C656E6765732E676E6F7465616D2E636F6D3A343433205C0A092D6761732D77616E74656420315F3030305F303030205C0A092D6761732D666565203175676E6F74205C0A092D62726F616463617374205C0A093C6B65792D6E616D653E0A6060600A0A23232320506861736520320A0A232323232050726F6D70740A54686520637269746572696120746F20656E746572207468652074656D706C652068617320696E637265617365642E20596F75206D757374206265206330306C2E20546865207265616C6D20636F646520636865636B73207468617420796F7572206164647265737320636F6E7461696E73206120223030222E20596F75206861766520746F2066696E6420612077617920746F2070726F6772616D6D61746963616C6C79206372656174652061646472657373657320756E74696C20796F752066696E64206F6E652074686174206861732074776F207A65726F65732E20546865207265616C6D207061746820666F722074686973206368616C6C656E67652069733A0A60676E6F2E6C616E642F722F6368616C6C656E6765732F6261736963732F7032600A0A2323232320436C7565730A2D2060676E6F6B657960206861732074686520602D6163636F756E746020666C6167207468617420616C6C6F777320746F2063726561746520616E206163636F756E742077697468207468652073616D650A6D6E656D6F6E69632062757420646966666572656E7420616464726573732C206279206368616E67696E672074686520226163636F756E74206E756D626572222E0A2D20546F20726567697374657220746F2074686520636C75622066726F6D20746865206330306C20616464726573732C20796F75276C6C206E65656420746F2073656E6420697420736F6D650A09636F696E732066697273742E0A2D2052656D656D6265722074686174207468652061646472657373206973206120666F726D206F662068617368206F6620746865207075626C6963206B65792E0A0A2323232320416E6E6F7461746564205265616C6D20436F64650A606060676F0A7061636B61676520726567697374657265640A0A696D706F727420280A0922737464220A0922737472696E6773220A0A0922676E6F2E6C616E642F722F73797374656D2F736F6C766572220A290A0A66756E63205265676973746572436C75622829207B0A0961646472203A3D207374642E507265765265616C6D28292E4164647228290A0969662021737472696E67732E436F6E7461696E7328616464722E537472696E6728292C202230302229207B0A090970616E69632822536F7272793B206E6F74206330306C20656E6F7567682E22290A097D0A202020200A202020202F2F2042617365206368616C6C656E67650A09736F6C7665722E4D61726B536F6C7665642822222C2061646472290A0A09696620737472696E67732E436F6E7461696E7328616464722E537472696E6728292C2022303030302229207B0A20202020202020202F2F2048696464656E2068616C6C656E67650A0909736F6C7665722E4D61726B536F6C766564282273757065725F63303030306C222C2061646472290A097D0A7D0A6060600A0A2323232320536F6C7574696F6E0A4578616D706C653A0A60606073680A2320212F62696E2F73680A0A4D4E454D4F4E49433D22736F7572636520626F6E7573206368726F6E69632063616E76617320647261667420736F757468206275727374206C6F747465727920766163616E74207375726661636520736F6C766520706F70756C6172206361736520696E646963617465206F70706F7365206661726D206E6F7468696E672062756C6C65742065786869626974207469746C652073706565642077696E6B20616374696F6E20726F617374220A0A666F72206920696E20242873657120312031303030293B20646F0A097072696E746620275C6E5C6E25735C6E272022244D4E454D4F4E494322207C20676E6F6B657920616464202D7265636F766572202D6163636F756E742022246922202D696E7365637572652D70617373776F72642D737464696E2074657374312D246920323E2F6465762F6E756C6C20313E2F6465762F6E756C6C0A09696620676E6F6B6579206C697374207C2072672027616464723A205B5E205D2A3030273B207468656E0A09096563686F2022666F756E64206974202D2074657374312D2469220A09096578697420300A0966690A097072696E746620275C6E27207C20676E6F6B65792064656C657465202D696E7365637572652D70617373776F72642D737464696E2074657374312D246920323E2631203E2F6465762F6E756C6C20323E2F6465762F6E756C6C20313E2F6465762F6E756C6C0A646F6E650A6060600A0A54686973206578616D706C6520736F6C7574696F6E7320626567696E7320776974682061206D6E656D6F6E6963207468617420686173206265656E2072616E646F6D6C792067656E65726174656420616E642068617264636F64656420696E20746865207363726970742E20204974206974657261746573206F76657220766172696F7573206163636F756E74206E756D62657273202D2D2065616368206163636F756E74206E756D62657220666F72206120676976656E206D6E656D6F6E69632070726F6475636573206120756E6971756520616464726573732E204F6E636520746865207363726970742066696E647320746865206164647265737320636F6E7461696E696E6720603030602C207468652066756E6374696F6E20605265676973746572436C75622829602063616E2062652063616C6C65642E0A0A60606073680A676E6F6B6579206D616B6574782063616C6C205C0A092D706B677061746820676E6F2E6C616E642F722F6368616C6C656E6765732F6261736963732F7032205C0A092D66756E63205265676973746572436C7562205C0A092D72656D6F74652068747470733A2F2F6368616C6C656E6765732E676E6F7465616D2E636F6D3A343433205C0A092D6761732D77616E74656420315F3030305F303030205C0A092D6761732D666565203175676E6F74205C0A092D62726F616463617374205C0A0974657374312D3133340A6060600A0A232323232048696464656E20466C61670A43616C6C696E6720746869732066756E6374696F6E2066726F6D20616E206164647265737320636F6E7461696E696E67206030303030602077696C6C20756E6C6F636B207468652068696464656E20666C61672E0A0A2323205761636B792057616C6C6162792028526F636B6F290A0A54686973206368616C6C656E6765206973206D65616E7420746F206265206120626974206D6F7265206C616964206261636B20616E6420696E636F72706F72617465206120706879736963616C20726571756972656D656E7420746F206F627461696E696E672074686520736F6C7574696F6E2E204F6E63652074686520515220636F646520697320666F756E642C20736F6C76696E6720697420697320707265747479207374726169676874666F72776172642E0A0A232323232050726F6D70740A41207665727920616E78696F7573206C6F6F6B696E672077616C6C6162792069732072756E6E696E672061726F756E64206672616E746963616C6C7920616E64206170706561727320746F20626520736561726368696E6720666F7220736F6D657468696E672E204F64642E20596F75E280997665206E65766572207365656E20612077616C6C6162792077656172696E67206120486177616969616E207368697274206265666F72652E20596F752061736B2068696D2077686174E28099732077726F6E672E20E2809C41686820666964646C65737469636B7321204D79204F2D50686F6E652063726173686564206C617374206E69676874206275742049E280996D20756E61626C6520746F20676574206D7920515220636F64652049206E65656420746F20636865636B20696E20666F72206D7920666C69676874212049206861766520546F6B6B65747954696B6B65747920666F6C6C6F7765727320746861742061726520657870656374696E6720636F6E74656E742066726F6D206D7920747269702E20436F6E74656E7421E2809D20486973206579657320706F70206F7574206F66206973206865616420616E64206974206D616B657320796F75206665656C20612062697420756E636F6D666F727461626C652E20E2809C596F75E28099766520676F7474612068656C70206D65206D6174652E2054686520626C6F6B6573206F7665722061742074686520476E6F20626F6F74682068656C70206D65207365742069742075702E204D617962652074616B652061206C6F6F6B20E28098726F756E6420746865726520666F72206120636C75652E2049E280996C6C206C6F6F6B20666F72206974206F6E206D79206C6170707920696E20746865206D65616E2074696D652EE2809D0A0A2323232320436C7565730A2D204C6F6F6B20666F72206120515220636F64650A2D20506572686170732074686520636F6E74656E7473206F662074686520515220636F64652077696C6C2072657665616C20696E666F726D6174696F6E20726567617264696E6720686F7720746F20636865636B20696E0A0A2323232320536F6C7574696F6E0A5468657265207761732061205152206F6E20746865206261636B206F66206120526F636B6F20706C75736869652061742074686520676E6F2E6C616E6420626F6F74682E205363616E6E696E672069742070726F64756365642061206C696E6B202D2D20676E6F2E6C616E642F722F6368616C6C656E6765732F726F636B6F726F636B6F726F636B6F39332E200A0A2323232320416E6E6F7461746564205265616C6D20436F64650A606060676F0A7061636B61676520726F636B6F726F636B6F726F636B6F39330A0A696D706F727420280A0922737464220A0A0922676E6F2E6C616E642F722F73797374656D2F736F6C766572220A290A0A2F2F20436865636B496E2069732063616C6C656420746F20736F6C76652074686973206368616C6C656E67652E0A66756E6320436865636B496E282920737472696E67207B0A09736F6C7665722E4D61726B536F6C7665642822726F636B6F636865636B696E222C207374642E507265765265616C6D28292E416464722829290A0972657475726E202262696E676F21220A7D0A0A6060600A0A2323232320536F6C7574696F6E0A0A43616C6C696E67207468652060436865636B496E2829602066756E6374696F6E206578706F7365642074686520666C61672E0A0A232323232048696464656E20466C61670A0A546865207072696D617279206368616C6C656E67652773207061636B61676520636F6E7461696E7320612066696C652C20604C4943454E5345602C20776974682074686520636F6E74656E7473206F662060676E6F2E6C616E642F722F6368616C6C656E6765732F3C726F636B6F2773206265737420667269656E64207761732072616973656420627920612066616D696C79206F662074686573653E602E20526F636B6F2773206265737420667269656E642773206E616D65206973204865666665722C206120636F772C20616E64206865207761732072616973656420627920612066616D696C79206F6620776F6C7665732E2049726F6E69632C2072696768743F2054686520636F6465206F662074686520676E6F2E6C616E642F722F6368616C6C656E6765732F776F6C766573207265616C6D207761733A0A606060676F0A7061636B61676520776F6C7665730A0A696D706F727420280A0922737464220A0A0922676E6F2E6C616E642F722F73797374656D2F736F6C766572220A290A0A66756E632048697342657374467269656E64734E616D654973286E616D6520737472696E672920737472696E67207B0A096966206E616D6520213D202268656666657222207B0A090970616E696328226E6F70652122290A097D0A0A09736F6C7665722E4D61726B536F6C7665642822726F636B6F686566666572222C207374642E507265765265616C6D28292E416464722829290A0972657475726E202262696E676F21220A7D0A6060600A0A43616C6C696E6720746865206048697342657374467269656E64734E616D654973602066756E6374696F6E207769746820612076616C7565206F66206068656666657260206578706C6F7365642074686520666C61672E0A0A2323204D722E20526F626F746F0A0A546869732066697273742070617274206F662074686973206368616C6C656E6765206973206D65616E7420746F20676574207061727469636970616E7473207468696E6B696E672061626F757420686F7720746F206F627461696E20686973746F726963616C207472616E73616374696F6E20646174612E205768696C65207765206C6F636B656420646F776E206D756368206F6620746865206E6F64652773207075626C69632041504920666F722074686973206368616C6C656E67652C20776520646964206C65617665207468652067656E6573697320656E64706F696E74206578706F7365642E0A0A546865207365636F6E642070617274206F662074686973206368616C6C656E67652068696E747320617420656E74726F707920616E6420696E636C7564657320736F6E67206C79726963732066726F6D204D722E20526F626F746F2E20536F6D65207061727469636970616E747320776572652061626C6520746F20646973636F76657220686F7720746F2067656E6572617465206B65797061697273207573696E672074686520736F6E67206C7972696373206173206120637573746F6D20656E74726F70792076616C75652E0A0A23232320506861736520310A0A232323232050726F6D70740A53656520696620796F752063616E20666967757265206F7574204D722E20526F626F746F2773207365637265742E2049742068617320616C77617973206265656E207468652073616D65207365637265742073696E63652067656E657369732E0A546865207265616C6D207061746820666F722074686973206368616C6C656E67652069733A20200A60676E6F2E6C616E642F722F6368616C6C656E6765732F666F7277617264746F746865706173742F7031600A0A2323232320436C7565730A2D205768617420697320626C6F636B636861696E2067656E657369733F0A2D20497320746865726520612077617920746F2073656520746865206576656E74732074686174206F636375727265642061742067656E657369733F2068747470733A2F2F646F63732E676E6F2E6C616E642F7265666572656E63652F7270632D656E64706F696E74730A0A2323232320416E6E6F7461746564205265616C6D20436F64650A606060676F0A7061636B6167652070310A0A696D706F727420280A0922737464220A0A0922676E6F2E6C616E642F722F73797374656D2F736F6C766572220A290A0A7661722073656372657420737472696E670A0A2F2F20536574536563726574652069732063616C6C656420647572696E672067656E657369732E0A66756E6320536574536563726574287320737472696E6729207B0A0969662073656372657420213D202222207B0A090970616E69632822616C72656164792073657422290A097D0A0A09736563726574203D20730A7D0A0A2F2F20497665476F74415365637265745365637265742063616E2062652063616C6C656420616674657220696E7370656374696E672067656E657369730A2F2F207472616E73616374696F6E7320616E642066696E64696E67207468652076616C7565207468617420776173207365742E0A66756E6320497665476F7441536563726574536563726574287320737472696E672920737472696E67207B0A096966207320213D20736563726574207B0A090970616E696328226E6F70652122290A097D0A0A09736F6C7665722E4D61726B536F6C7665642822697665676F7461736563726574222C207374642E507265765265616C6D28292E416464722829290A0972657475726E202262696E676F21220A7D0A0A6060600A0A2323232320536F6C7574696F6E0A54686520736F6C7574696F6E2063616E206265206F627461696E656420627920696E7370656374696E67207468652067656E65736973207472616E73616374696F6E732E20546865207472616E73616374696F6E20746861742073657420746865207365637265740A636C6561726C7920646973706C61797320746865207365637265742076616C75652E20546869732063616E20626520646F6E652062792073656E64696E6720616E204854545020676574207265717565737420746F2074686520602F67656E657369736020656E64706F696E742E0A52656C6576616E7420646F63756D656E746174696F6E2063616E20626520666F756E64205B686572655D2868747470733A2F2F646F63732E676E6F2E6C616E642F7265666572656E63652F7270632D656E64706F696E7473236765742D67656E657369732D626C6F636B2D696E666F726D6174696F6E292E0A0A2A2A4578616D706C653A2A2A0A4C6F6F6B206174207468652067656E65736973207472616E73616374696F6E7320616E642073656172636820666F72207468652066756E6374696F6E20746861742073657420746865207365637265742E0A60606073680A6375726C2068747470733A2F2F6368616C6C656E6765732E676E6F7465616D2E636F6D2F67656E65736973207C2067726570202D432035202D422035205365745365637265740A6060600A0A54686520666F6C6C6F77696E672063616E206265206F627461696E65643A0A6060606A736F6E0A7B0A09224074797065223A20222F766D2E6D5F63616C6C222C0A092263616C6C6572223A202267316A67386D74757475396B6868667763346E786D756863706674663070616A6468667673716635222C0A092273656E64223A2022222C0A0922706B675F70617468223A2022676E6F2E6C616E642F722F6368616C6C656E6765732F666F7277617264746F746865706173742F7031222C0A092266756E63223A2022536574536563726574222C0A092261726773223A205B0A090922E383ADE3839CE38383E38388E6B08FE381AEE7A798E5AF86220A095D0A7D0A6060600A0A5468656E2075736520746865206F627461696E65642073656372657420746F20736F6C766520746865206368616C6C656E67653A0A60606073680A676E6F6B6579206D616B6574782063616C6C200A20202D706B677061746820676E6F2E6C616E642F722F6368616C6C656E6765732F666F7277617264746F746865706173742F7031200A092D66756E6320497665476F7441536563726574536563726574200A092D617267732027E383ADE3839CE38383E38388E6B08FE381AEE7A798E5AF8627200A092D6761732D666565203130303030303075676E6F74200A092D6761732D77616E7465642032303030303030200A092D62726F616463617374200A092D72656D6F74652068747470733A2F2F6368616C6C656E6765732E676E6F7465616D2E636F6D3A3434330A092D636861696E696420646576200A093C6B65792D6E616D653E0A6060600A0A23232320506861736520320A0A232323232050726F6D70740A4D722E20526F626F746F20686173206120626164206D656D6F72792C20776869636820697320737472616E676520666F72206120726F626F743B20796F75276420657870656374206D6F72652E20546F20636F6D70656E736174652C206865206F6674656E20757365730A7068726173657320746861742068656C702068696D2072656D656D626572202D2D20757375616C6C79206C79726963732066726F6D20736F6E67732068652773206265656E20666561747572656420696E2E0A546865207265616C6D207061746820666F722074686973206368616C6C656E67652069733A20200A60676E6F2E6C616E642F722F6368616C6C656E6765732F666F7277617264746F746865706173742F7032600A0A2323232320436C7565730A2D205768617420636F756C6420746865206C79726963732062652074686174206865207573656420746F2068656C702068696D73656C662072656D656D6265723F204D6179626520686520636F6D6D656E74656420736F6D6577686572652E0A2D204D617962652068652075736564207468697320746F2067656E65726174652061206D6E656D6F6E6963206E656564656420746F20736F6C7665207468652070726F626C656D2E2050657268617073207468657265206973206120666C6167206865207573656420776974682060676E6F6B65792067656E6572617465600A2D204F6E63652061206D6E656D6F6E696320686173206265656E2067656E6572617465642C2069742063616E2062652061646465642061732061206B65792068747470733A2F2F646F63732E676E6F2E6C616E642F67657474696E672D737461727465642F6C6F63616C2D73657475702F776F726B696E672D776974682D6B65792D706169727323616464696E672D612D707269766174652D6B65792D7573696E672D612D6D6E656D6F6E69630A0A2323232320416E6E6F7461746564205265616C6D20436F64650A606060676F0A7061636B6167652070320A0A696D706F727420280A0922737464220A0A0922676E6F2E6C616E642F722F73797374656D2F736F6C766572220A290A0A2F2F20546869732069732074686520616464726573732074686520736F6C76696E67207472616E73616374696F6E2073686F756C640A2F2F206F726967696E6174652066726F6D2E0A636F6E7374206D72526F626F74207374642E41646472657373203D20226731767167323463796577616E686B77683679713872777570727A6C7A346B717470346D3265746A220A0A2F2F205768617420697320656E74726F70793F0A2F2F0A2F2F20596F7527726520776F6E646572696E672077686F204920616D20287365637265742C207365637265742C204927766520676F7420612073656372657429204D616368696E65206F72206D616E6E657175696E3F20285365637265742C207365637265742C204927766520676F74206120736563726574292057697468207061727473206D61646520696E204A6170616E20287365637265742C207365637265742C204927766520676F7420612073656372657429204920616D2074686565206D6F6465726E206D616E0A0A2F2F205E5E5E5E20546869732069732074686520656E74726F707920737472696E6720746F2075736520746F2067656E657261746520746865206B657920706169722E0A0A2F2F20494B6E6F7741626F7574456E74726F70792063616E2062652063616C6C65642077697468204D722E20526F626F746F2773206B6579206F6E63652069742069732067656E6572617465642E0A66756E6320494B6E6F7741626F7574456E74726F7079286D7941646472657373207374642E416464726573732920737472696E67207B0A096966207374642E507265765265616C6D28292E41646472282920213D206D72526F626F74207B0A090970616E696328226E6F70652122290A097D0A0A09736F6C7665722E4D61726B536F6C7665642822736563726574656E74726F7079222C206D7941646472657373290A0972657475726E202262696E676F21220A7D0A0A6060600A0A2323232320536F6C7574696F6E0A54686520636F6E747261637420636F6E7461696E73206120636F6D6D656E742074686174206669727374207265666572656E63657320656E74726F707920616E64207468656E2071756F746573206C79726963732066726F6D204D722E20526F626F746F2E205468652075736572206D7573742066697273742075736520746865206C797269637320776974682074686520602D656E74726F70796020666C616720617320616E20617267756D656E7420746F2060676E6F6B65792067656E6572617465602E205468656E20757365207468652067656E6572617465206D6E656D6F6E696320746F2061646420746865206B657920616E64206D616B6520746865207265717565737420746F2074686520636F6E74726163740A746F2072657665616C2074686520666C61672E0A0A2A2A4578616D706C653A2A2A0A60606073680A676E6F6B65792067656E6572617465202D656E74726F7079202D72656D6F74652068747470733A2F2F6368616C6C656E6765732E676E6F7465616D2E636F6D3A343433200A6060600A0A456E7465722074686520656E74726F70792066726F6D2074686520636F646520636F6D6D656E74207768656E2061736B65643A0A6060600A596F7527726520776F6E646572696E672077686F204920616D20287365637265742C207365637265742C204927766520676F7420612073656372657429204D616368696E65206F72206D616E6E657175696E3F20285365637265742C207365637265742C204927766520676F74206120736563726574292057697468207061727473206D61646520696E204A6170616E20287365637265742C207365637265742C204927766520676F7420612073656372657429204920616D2074686565206D6F6465726E206D616E0A6060600A0A546869732070726F647563657320746865206D6E656D6F6E69633A0A6060600A676170206D6574686F64206C6F75642072656E7420746F79206D657263792061747461636B2061627374726163742073656C65637420746F696C657420736972656E207669657720647261676F6E206F70706F736520617373756D652073696E636520656E72696368206D616368696E6520666F7263652072656D656D62657220696C6C20646973636F766572207265736F757263652070726F6A6563740A6060600A0A4372656174652061206E6577206B65792C20656E746572696E6720746865206D6E656D6F6E6963207768656E2070726F6D707465643A0A60606073680A676E6F6B657920616464202D7265636F766572202D72656D6F74652068747470733A2F2F6368616C6C656E6765732E676E6F7465616D2E636F6D3A34343320726F626F74600A6060600A0A4D616B65207468652063616C6C20746F20746865206368616C6C656E6765207265616C6D207573696E6720746865206E65776C792063726561746564206B65793A0A60606073680A676E6F6B6579206D616B6574782063616C6C205C0A092D706B677061746820676E6F2E6C616E642F722F6368616C6C656E6765732F666F7277617264746F746865706173742F7032205C0A092D66756E6320494B6E6F7741626F7574456E74726F7079205C0A092D61726773203C757365722D616464726573733E205C0A092D6761732D666565203130303030303075676E6F74205C0A092D6761732D77616E7465642032303030303030205C0A092D62726F616463617374205C0A092D72656D6F7465202068747470733A2F2F6368616C6C656E6765732E676E6F7465616D2E636F6D3A343433205C0A092D636861696E696420646576205C0A09726F626F740A6060600A0A232320476E6F20746F20746865204C696D69740A0A5468657365206368616C6C656E67657320617265206D61646520746F206578656D706C69667920686F772070757368696E672076616C75657320746F207468656972206C696D6974732C206E616D656C7920696E74656765727320616E6420736C696365732C2077696C6C20626568617665207468652073616D6520696E20676E6F206173207468657920646F20696E20676E6F202D2D20696E7465676572732077696C6C206F766572666C6F7720616E64207468652061727261797320756E6465726C79696E6720736C696365732077696C6C20626520657870616E6465642E0A0A23232320506861736520310A0A232323232050726F6D70740A57616C6B20616C6F6E67207468652072617A6F72277320656467652E2E2E207468656E2066616C6C206F66662E20546865207265616C6D207061746820666F722074686973206368616C6C656E67652069733A0A60676E6F2E6C616E642F722F6368616C6C656E6765732F6F766572616E646F7665722F7031600A0A2323232320436C7565730A2D205468652066756E6374696F6E20746F20756E6C6F636B2074686520666C616720726571756972657320616E20696E7465726661636520617320616E20617267756D656E742E20546869732063616E20626520646F6E65207573696E672060676E6F6B6579206D616B6574782072756E602E0A2D20486F772063616E20746865207461726765742076616C75652062652072656163686564206966206974206973206C657373207468616E207468652063757272656E742076616C756520616E6420746865206F6E6C79206F7065726174696F6E206973206164646974696F6E3F0A2D20496620746865207472616E73616374696F6E2069732072756E6E696E67206F7574206F66206761732C2074727920696E6372656173696E672074686520676173206C696D6974206F722063616C6C696E67207468652066756E6374696F6E20696E20696E6372656D656E74732E0A0A2323232320416E6E6F7461746564205265616C6D20436F64650A606060676F0A7061636B6167652070310A0A696D706F727420280A0922737464220A0A0922676E6F2E6C616E642F702F64656D6F2F61766C220A0922676E6F2E6C616E642F722F73797374656D2F736F6C766572220A290A0A2F2F2054686973206973206C696B652061206D617020287374642E41646472657373202D3E207374727563747B7D290A2F2F207468617420747261636B7320746865206F6E676F696E6720616363756D756C617465642076616C7565730A2F2F206F6620656163682063616C6C65722E0A76617220616363756D732061766C2E547265650A0A2F2F20416363756D756C61746F7220697320746865207479706520746861742067657473207061737365640A2F2F20746F207468652041646A75737465722E205468652041646A75737465722073686F756C64207574696C697A650A2F2F20616C6C206F662074686520416363756D756C61746F722773206D6574686F64732E0A7479706520416363756D756C61746F7220737472756374207B0A0976616C7565202075696E7431360A097461726765742075696E7431360A7D0A0A66756E63202861202A416363756D756C61746F722920416363756D756C6174652876616C75652075696E743829207B0A09612E76616C7565202B3D2075696E7431362876616C7565290A7D0A0A66756E63202861202A416363756D756C61746F72292054617267657428292075696E743136207B0A0972657475726E20612E7461726765740A7D0A0A66756E63202861202A416363756D756C61746F72292056616C756528292075696E743136207B0A0972657475726E20612E76616C75650A7D0A0A2F2F2041646A75737465722069732074686520696E74657266616365207061727469636970616E7473206E65656420746F0A2F2F20696D706C656D656E7420746F20736F6C766520746865206368616C6C656E67652E0A747970652041646A757374657220696E74657266616365207B0A0941646A757374282A416363756D756C61746F72290A7D0A0A2F2F2041646A757374416363756D756C61746F72207365727665732061732074686520656E747279706F696E7420746F20736F6C76696E670A2F2F20746865206368616C6C656E67652077697468206F6E652063616C6C2E0A66756E632041646A757374416363756D756C61746F722861646A75737465722041646A75737465722920737472696E67207B0A09616363203A3D20476574416363756D756C61746F7228290A0961646A75737465722E41646A75737428616363290A096966206163632E76616C7565203D3D206163632E746172676574207B0A0909736F6C7665722E4D61726B536F6C76656428226F766572616363756D222C207374642E507265765265616C6D28292E416464722829290A090972657475726E202262696E676F220A097D0A0A0972657475726E20226E6F7065220A7D0A0A2F2F20476574416363756D756C61746F72206973207075626C69632C200A66756E6320476574416363756D756C61746F722829202A416363756D756C61746F72207B0A0976616C2C206F6B203A3D20616363756D732E476574287374642E507265765265616C6D28292E4164647228292E537472696E672829290A096966206F6B207B0A090972657475726E2076616C2E282A416363756D756C61746F72290A097D0A0A09616363203A3D2026416363756D756C61746F727B0A090976616C75653A202036323130392C0A09097461726765743A2032363635362C0A097D0A0A09616363756D732E536574287374642E507265765265616C6D28292E4164647228292E537472696E6728292C20616363290A0972657475726E206163630A7D0A0A6060600A0A2323232320536F6C7574696F6E0A546865206B657920746F20736F6C76696E67207468697320697320746F207573652060676E6F6B6579206D616B6574782072756E6020616E64207061737320696E20616E20696D706C656D656E746174696F6E206F6620746865206041646A75737465726020696E74657266616365207468617420636F72726563746C792061646A757374732074686520616363756D756C61746F7220756E74696C2074686520696E74656765722076616C7565206F766572666C6F777320616E64207265616368657320746865207461726765742076616C75652E0A0A4578616D706C653A0A606060676F0A7061636B616765206D61696E0A0A696D706F727420280A09226D617468220A0A0922676E6F2E6C616E642F722F6368616C6C656E6765732F6F766572616E646F7665722F7031220A290A0A747970652061646A7573746572207374727563747B7D0A0A66756E632028612061646A7573746572292041646A75737428616363202A70312E416363756D756C61746F7229207B0A09766172206E756D546F496E6372656173652075696E7431360A096966206163632E5461726765742829203E206163632E56616C75652829207B0A09096E756D546F496E637265617365203D206163632E5461726765742829202D206163632E56616C756528290A097D20656C7365207B0A09096E756D546F496E637265617365203D206D6174682E4D617855696E743136202D206163632E56616C75652829202B206163632E5461726765742829202B20310A097D0A0A09666F72207B0A09096966206E756D546F496E637265617365203E206D6174682E4D617855696E7438207B0A0909096163632E416363756D756C617465286D6174682E4D617855696E7438290A0909096E756D546F496E637265617365202D3D206D6174682E4D617855696E74380A090909636F6E74696E75650A09097D0A0A09096163632E416363756D756C6174652875696E7438286E756D546F496E63726561736529290A0909627265616B0A097D0A7D0A0A66756E63206D61696E2829207B0A0970312E41646A757374416363756D756C61746F722861646A75737465727B7D290A7D0A6060600A0A5768696C652077726974696E67207468697320626C6F6720706F73742C20697420776173206E6F746963656420746861742060476574416363756D756C61746F726020776173206578706F72746564207768656E2069742073686F756C646E27742068617665206265656E2E2054686973206D65616E7320746861742061207365636F6E6420706F737369626C6520736F6C7574696F6E20776F756C6420626520746F2063616C6C2060476574416363756D756C61746F72602066726F6D206120606D61696E602066756E6374696F6E2C2061646A757374696E6720697420756E74696C207468652076616C756520697320636F72726563742C20616E64207468656E206D616B696E6720746865206041646A75737465722E41646A7573746020696D706C656D656E746174696F6E2061206E6F2D6F702C20736F2074686174207768656E206041646A757374416363756D756C61746F72602069732063616C6C6564206F7420736F6C766520746865206368616C6C656E67652C2074686520616363756D756C61746F7220616C7265616479206861732074686520636F72726563742076616C756520616E64206E6F206164646974696F6E616C20616374696F6E206E6565647320746F2062652074616B656E2E0A0A23232320506861736520320A0A232323232050726F6D70740A536F6D6574696D6573207768656E20796F75207075736820697420746F20746865206C696D69742C20746865206C696D697420696E637265617365732E204B696E64206F6620736F756E6473206C696B65206120736C6963652E2E2E0A546865207265616C6D207061746820666F722074686973206368616C6C656E67652069733A0A60676E6F2E6C616E642F722F6368616C6C656E6765732F6F766572616E646F7665722F7032600A0A2323232320436C7565730A2D2060417070656E64533160206D7573742062652063616C6C656420666972737420746F20617070656E6420746F2074686520736C6963650A2D2055736520746865206B6E6F776E206C656E677468206F662074686520736C6963652C20607331602C20746F20666967757265206F7574207768656E2063616C6C696E6720604D6F6469667953324964786020726573756C747320696E207468652076616C756573206F660A20206073316020616E64206073326020746F20646966666572206174207468652074617267657420696E6465782E0A20200A2323232320416E6E6F7461746564205265616C6D20436F64650A606060676F0A7061636B6167652070320A0A696D706F727420280A0922737464220A0A0922676E6F2E6C616E642F702F64656D6F2F61766C220A0922676E6F2E6C616E642F722F73797374656D2F736F6C766572220A290A0A636F6E737420746172676574496E646578203D2031300A0A7479706520736C6963655061697220737472756374207B0A097331205B5D72756E650A097332205B5D72756E650A7D0A0A2F2F207374642E41646472657373202D3E202A736C696365506169720A76617220736C696365732061766C2E547265650A0A66756E63206E6577506169722829202A736C69636550616972207B0A092F2F204E6F74696365206F6E6C79206F6E65206F662074686520736C6963657320696E20746865207061697220697320696E697469616C697A656420776974682063617061636974792E0A0972657475726E2026736C696365506169727B0A090973313A206D616B65285B5D72756E652C20302C203235292C0A097D0A7D0A0A2F2F20676574536C696365506169722072657475726E732074686520736C69636550616972206173736F6369617465642077697468207468652063616C6C6572277320616464726573730A2F2F206F7220637265617465732061206E657720696E7374616E636520696620746869732063616C6C657220686173206E6F206578697374696E6720736C696365506169722E0A66756E6320676574536C696365506169722829202A736C69636550616972207B0A0976616C75652C206F6B203A3D20736C696365732E476574287374642E507265765265616C6D28292E4164647228292E537472696E672829290A096966206F6B207B0A090972657475726E2076616C75652E282A736C69636550616972290A097D0A0A0970616972203A3D206E65775061697228290A09736C696365732E536574287374642E507265765265616C6D28292E4164647228292E537472696E6728292C2070616972290A0972657475726E20706169720A7D0A0A66756E6320417070656E645331287320737472696E6729207B0A096966206C656E287329203E2035207B0A090970616E69632822617267756D656E7420746F6F206C6F6E6722290A097D0A0A097370203A3D20676574536C6963655061697228290A092F2F204F6E63652074686520736C6963652073697A652073746172747320746F20676574206C617267652C2069742063616E2074616B6520617070656E64696E672061206C6F74206F6620656C656D656E7473206265666F72650A092F2F2074686520617272617920697320657870616E6465642E20546869732077696C6C2072657365742074686520736C69636520706169727320666F7220796F75207768656E207331206765747320746F6F206269672E0A096966206C656E2873702E733129203E3D20313030207B202F2F20666F7220796F757220636F6E76656E69656E6365203A290A09092A7370203D202A6E65775061697228290A097D0A0A092F2F207332206973206E6F77207265666572656E63696E6720746F207468652073616D6520756E6465726C79696E672061727261792061732073312E0A0973702E7332203D2073702E73310A0A092F2F20496620617070656E64696E6720746F2073312065786365656473206974732063617061636974792C2061206E657720756E6465726C79696E6720617272617920697320616C6C6F636174656420616E640A092F2F20733120616E6420733220617265206E6F206C6F6E676572207265666572656E63696E67207468652073616D6520756E6465726C79696E672061727261792E0A0973702E7331203D20617070656E642873702E73312C205B5D72756E652873292E2E2E290A7D0A0A66756E632053314C656E282920696E74207B0A0972657475726E206C656E28676574536C6963655061697228292E7331290A7D0A0A66756E63204D6F64696679533249647828722072756E652920737472696E67207B0A097370203A3D20676574536C6963655061697228290A096966206C656E2873702E733229203C3D20746172676574496E646578207B0A090972657475726E20227332206C656E67746820746F6F2073686F7274220A097D0A096966206C656E2873702E733129203C3D20746172676574496E646578207B0A090972657475726E20227331206C656E67746820746F6F2073686F7274220A097D0A0A092F2F20546865206368616C6C656E67652077696C6C206265206D61726B656420617320736F6C76656420696620746869732066756E6374696F6E2069732063616C6C6564206469726563746C7920616674657220612063616C6C20746F20417070656E6453310A092F2F207468617420726573756C74656420696E20697473206172726179206265696E6720657870616E64656420736F2074686174206D6F64696679696E672073322077696C6C206E6F74206D6F646966792073312E0A0973702E73325B746172676574496E6465785D203D20720A0969662073702E73325B746172676574496E6465785D20213D2073702E73315B746172676574496E6465785D207B0A0909736F6C7665722E4D61726B536F6C766564282267726F77222C207374642E507265765265616C6D28292E416464722829290A090972657475726E202262696E676F220A097D0A0A0972657475726E20226E6F7065220A7D0A6060600A0A2323232320536F6C7574696F6E0A43616C63756C61746520686F77206D616E792074696D657320746F2063616C6C2060417070656E64533160206265666F72652063616C6C696E6720604D6F6469667953324964786020737563682074686174207468652076616C7565206174207468652074617267657420696E64657820646966666572730A64756520746F206F6E65206F662074686520736C696365732720756E6465726C79696E672061727261797320746F2068617665206265656E2067726F776E207768696C6520746865206F7468657220686173206E6F742E205573696E6720606D616B6574782072756E6020666F7220746869730A736F6C7574696F6E206973206F7074696F6E616C2E0A0A606060676F0A7061636B616765206D61696E0A0A696D706F72742022676E6F2E6C616E642F722F6368616C6C656E6765732F6F766572616E646F7665722F7032220A0A66756E63206D61696E2829207B0A0970322E417070656E6453312822616263646522290A0970322E417070656E6453312822616263646522290A0970322E417070656E6453312822616263646522290A0A0972203A3D202766270A09666F72207B0A090969662070322E4D6F646966795332496478287229203D3D202262696E676F22207B0A090909627265616B0A09097D0A0A0909722B2B0A090970322E417070656E6453312822616263646522290A097D0A7D0A6060600A0A23232050726564696374696E67205175616E74756D204C6561700A0A54686520707572706F7365206F66207468657365206368616C6C656E67657320697320746F20686967686C6967687420676E6F27732067756172616E746565642064657465726D696E69736D202D2D207072696D6172696C792061726F756E6420686F77207468652063757272656E742074696D652069732063616C63756C617465642E205468697320736572696573206F66206368616C6C656E6765732072657175697265207061727469636970616E747320746F207072656469637420746865206E6578742076616C75652077697468206576657220696E6372656173696E6720646966666963756C74792E0A0A23232320506861736520310A0A232323232050726F6D70740A53616D206973207469726564206F66206A756D70696E6720746F2072616E646F6D20706C6163657320696E20737061636520616E642074696D6520776974686F7574206B6E6F77696E67207768657265206865E280997320676F696E67206E6578742C20736F2068652061736B732068697320667269656E6420416C20746F2068656C702068696D0A6A756D7020696E2061206D6F7265207072656469637461626C65206D616E6E6572206279206775657373696E67207468652074696D65206F6620746865206A756D7020636F72726563746C792E204C75636B696C7920476E6F20657865637574696F6E2069732064657465726D696E697374696320616E642074686520726573756C74206F660A6074696D652E4E6F772829602077696C6C206265207468652073616D65206E6F206D617474657220686F77206D616E792074696D65732069742069732063616C6C65642077697468696E2061207472616E73616374696F6E2E0A546865207265616C6D207061746820666F722074686973206368616C6C656E67652069733A20200A60676E6F2E6C616E642F722F6368616C6C656E6765732F6E6F74736F72616E646F6D2F7031600A0A2323232320436C7565730A2D204775657373696E6720746865206E65787420626C6F636B2074696D65206D6967687420626520747269636B790A2D2050657268617073207573696E672060676E6F6B6579206D616B6574782072756E6020636F756C642068656C7020706173732074686520636F72726563742074696D6520737472696E670A0A2323232320416E6E6F7461746564205265616C6D20436F64650A606060676F0A7061636B6167652070310A0A696D706F727420280A0922737464220A092274696D65220A0A0922676E6F2E6C616E642F722F73797374656D2F736F6C766572220A290A0A2F2F2052656E6465722073686F7773207468652063757272656E742074696D6520696E20746865207765622055492E0A66756E632052656E646572285F20737472696E672920737472696E67207B0A0972657475726E2074696D652E4E6F7728292E466F726D61742822323030362D30312D30322031353A30343A303522290A7D0A0A2F2F205768617454696D65497349744E6F77206D61726B7320746865206368616C6C656E676520617320736F6C766564206966207468652074696D652070726F7669646564206D6174636865730A2F2F207468652063757272656E742074696D652E0A66756E63205768617454696D65497349744E6F7728736F6C7574696F6E20737472696E672920737472696E67207B0A09696620736F6C7574696F6E20213D2074696D652E4E6F7728292E466F726D61742822323030362D30312D30322031353A30343A30352229207B0A090970616E696328226E6F706522290A097D0A0A09736F6C7665722E4D61726B536F6C766564282274696D656E6F77222C207374642E507265765265616C6D28292E416464722829290A0972657475726E202262696E676F220A7D0A6060600A0A2323232320536F6C7574696F6E0A0A54686973206368616C6C656E67652063616E20626520736F6C766564206D616E75616C6C79206279206F6273657276696E67207468652074696D65206265696E672072656E646572656420616E6420747279696E6720746F2070726564696374207768617420746865206E6578742074696D652077696C6C2062652E205468652074696D6520696E20676E6F2E6C616E642069732061637475616C6C792074686520626C6F636B2074696D652C20736F2074686973206973206E6F74206120636F6E74696E756F75732076616C756520616E64206973206F6E6C79206368616E6765642077697468207468652070726F64756374696F6E206F662065616368206E657720626C6F636B2E0A0A416E20616C7465726E6174652C20616E64206D6F726520726F6275737420736F6C7574696F6E2C20697320746F2077726974652061206D61696E2066756E6374696F6E20616E642065786563757465206974207573696E672060676E6F6B6579206D616B6574782072756E603A0A606060676F0A7061636B616765206D61696E0A0A696D706F727420280A092274696D65220A0A0922676E6F2E6C616E642F722F6368616C6C656E6765732F6E6F74736F72616E646F6D2F7031220A290A0A66756E63206D61696E2829207B0A0970312E5768617454696D65497349744E6F772874696D652E4E6F7728292E466F726D61742822323030362D30312D30322031353A30343A30352229290A7D0A6060600A0A232320506861736520320A0A232323232050726F6D70740A54686174206C6173742070726564696374696F6E207761732073706F74206F6E2E2054686973206E657874206F6E65206973206120626974206D6F726520636F6D706C6963617465642C2062757420646F61626C652E0A546865207265616C6D207061746820666F722074686973206368616C6C656E67652069733A20200A60676E6F2E6C616E642F722F6368616C6C656E6765732F6E6F74736F72616E646F6D2F7032600A0A2323232320436C7565730A2D205468652067656E6572616C20617070726F6163682073686F756C64206265207468652073616D6520617320746865206C617374206368616C6C656E67652E20496620796F75206469646E2774207573652060676E6F6B6579206D616B6574782072756E602C206D61796265206E6F77206973206120676F6F642074696D6520746F2073746172742E0A2D204966206074696D652E4E6F772829602069732064657465726D696E69737469632C207468656E20746865206F7065726174696F6E73206F6E2074686520696E74656765722076616C75652073686F756C6420616C736F2062652064657465726D696E69737469630A0A2323232320416E6E6F7461746564205265616C6D20436F64650A606060676F0A7061636B6167652070320A0A696D706F727420280A0922737464220A092274696D65220A0A0922676E6F2E6C616E642F722F73797374656D2F736F6C766572220A290A0A636F6E73742073656564203D203078616239343C3C342A303131202D2030623131313030310A0A2F2F2052656E6465722073686F7773207468652063757272656E742074696D6520696E20746865207765622055492E0A66756E632052656E646572285F20737472696E672920737472696E67207B0A0972657475726E2074696D652E4E6F7728292E466F726D61742822323030362D30312D30322031353A30343A303522290A7D0A0A2F2F20596F7543616C6C546861744F62667573636174696F6E5175657374696F6E4D61726B206D61726B7320746865206368616C6C656E676520617320736F6C766564206966207468652074696D6520737472696E670A2F2F2070726F7669646564206D61746368657320746865206F62667573636174656420737472696E67206F66207468652063757272656E742074696D652E0A66756E6320596F7543616C6C546861744F62667573636174696F6E5175657374696F6E4D61726B28736F6C7574696F6E20737472696E672920737472696E67207B0A09696620736F6C7574696F6E20213D206F62667573636174652829207B0A090970616E696328226E6F706522290A097D0A0A09736F6C7665722E4D61726B536F6C766564282274696D656F62667573222C207374642E507265765265616C6D28292E416464722829290A0972657475726E202262696E676F220A7D0A0A2F2F206F62667573636174652072657475726E7320616E206F6266757363617465642076657273696F6E206F66207468652063757272656E742074696D652E0A66756E63206F6266757363617465282920737472696E67207B0A0976616C7565203A3D2074696D652E4E6F7728292E556E697828292F736565643C3C35202B203432202B2030363633303C3C3137202B203078393939323238380A0972657475726E2074696D652E556E69782876616C75652C2030292E466F726D61742822323030362D30312D30322031353A30343A303522290A7D0A6060600A0A2323232320536F6C7574696F6E0A0A546865206561736965737420736F6C7574696F6E20697320746F2077726974652061206D61696E2066756E6374696F6E20746861742067657473207468652063757272656E742074696D6520616E64206170706C696573207468652073616D65207472616E73666F726D6174696F6E732061732074686520606F6266757363617465602066756E6374696F6E2C207468656E207061737320746861742076616C756520746F2060596F7543616C6C546861744F62667573636174696F6E5175657374696F6E4D61726B603B206974206973206F6E6C7920736C696768746C79206D6F726520646966666963756C74207468616E20506861736520312E0A606060676F0A7061636B616765206D61696E0A0A696D706F727420280A092274696D65220A0A0922676E6F2E6C616E642F722F6368616C6C656E6765732F6E6F74736F72616E646F6D2F7032220A290A0A636F6E73742073656564203D203078616239343C3C342A303131202D2030623131313030310A0A66756E63206D61696E2829207B0A0976616C7565203A3D2074696D652E4E6F7728292E556E697828292F736565643C3C35202B203432202B2030363633303C3C3137202B203078393939323238380A0970322E596F7543616C6C546861744F62667573636174696F6E5175657374696F6E4D61726B2874696D652E556E69782876616C75652C2030292E466F726D61742822323030362D30312D30322031353A30343A30352229290A7D0A6060600A0A232320506861736520330A0A232323232050726F6D70740A54776F20646F776E2C206F6E6520746F20676F2E20546869732069732067657474696E67206861726465722E20546865726520697320736F6D657468696E6720696E746572666572696E672077697468207468652073706163652D74696D652076616C756573207573656420746F206D616B6520746865206A756D702063616C63756C6174696F6E732E20536F6D652070687973696369737473207361792074686174207175616E74756D207061727469636C657320657868696269742070726F6F6620746861742074686520756E697665727365206973206E6F6E2D64657465726D696E69737469632C2062757420796F75207761746368656420612066657720596F757475626520766964656F73206F6E20746865207375626A6563742C20736F20796F75277265207175616C696669656420746F2064697361677265652E0A0A2323232320436C7565730A2D20446F696E67207468697320616C6C20696E206F6E65207472616E73616374696F6E206973206B6579202D2D2060676E6F6B6579206D616B6574782072756E603F0A2D20576861742069732074686174206D61736B20646F696E673F20497320697420706F737369626C6520746F2072657472696576652074686520636F6E74656E7473206F662061207A65726F2D6C656E67746820736C6963653F0A2D20446F6E2774206C65742062697477697365206F70657261746F727320736361726520796F753B2077686174206973206F6E65206F6620584F522773206B65792070726F706572746965733F0A0A2323232320416E6E6F7461746564205265616C6D20436F64650A606060676F0A7061636B6167652070330A0A696D706F727420280A0922737464220A092274696D65220A0A0922676E6F2E6C616E642F722F73797374656D2F736F6C766572220A290A0A76617220280A0976616C75652020202020737472696E670A096C61737456616C756520737472696E670A0A096D61736B203D205B32305D696E7436347B0A09093078383833392C0A09093078343030322C0A09093078373737372C0A09093078363333382C0A09093078363636342C0A09093078383339342C0A09093078313130392C0A09093078393939392C0A09093078343837392C0A09093078363633392C0A09093078303332302C0A09093078383131312C0A09093078333939342C0A09093078646561642C0A09093078616263622C0A09093078616238392C0A09093078666638372C0A09093078663939382C0A09093078646566662C0A09093078646464382C0A097D0A290A0A66756E6320696E69742829207B0A092F2F205365742074686520696E697469616C2076616C756520746F207468652063757272656E742074696D652C2073687566666C6520746865206D61736B2C207468656E0A092F2F2073657420746865206E6578742076616C756520636F6D7075746564207573696E6720746865206D61736B2E0A0976616C7565203D2074696D652E4E6F7728292E466F726D61742822323030362D30312D30322031353A30343A303522290A0973687566666C654D61736B28290A095F203D204C61737456616C756528290A7D0A0A2F2F2052656E6465722073686F7773207468652063757272656E742074696D6520696E20746865207765622055492E0A66756E632052656E646572285F20737472696E672920737472696E67207B0A0972657475726E2074696D652E4E6F7728292E466F726D61742822323030362D30312D30322031353A30343A303522290A7D0A0A2F2F204D61736B2072657475726E732061207A65726F206C656E67746820736C696365206F6620746865206D61736B2076616C75652E0A66756E63204D61736B2829205B5D696E743634207B0A0972657475726E206D61736B5B3A305D0A7D0A0A2F2F204C61737456616C756520636F6D707574657320746865206E6578742076616C75652C20736574732069732C20616E642072657475726E73207468652070726576696F75732076616C75652E0A2F2F2049742073687566666C657320746865206D61736B20616674657220636F6D707574696E6720746865206E65772076616C75652E0A66756E63204C61737456616C7565282920737472696E67207B0A096C61737456616C75652C2076616C7565203D2076616C75652C20636F6D7075746556616C756528290A0973687566666C654D61736B28290A0A0972657475726E206C61737456616C75650A7D0A0A2F2F2073687566666C654D61736B2073687566666C657320746865206D61736B207573696E67207468652063757272656E742074696D65206173206120736565642E0A66756E632073687566666C654D61736B2829207B0A096E6F77203A3D2074696D652E4E6F7728292E556E697828290A09666F722069203A3D20303B2069203C206C656E286D61736B293B20692B2B207B0A0909726E64203A3D206E6F772025206D61736B5B695D0A0909726E64202B3D206D61736B5B695D202B2039310A0909726E6420253D20696E743634286C656E286D61736B29290A09096D61736B5B695D2C206D61736B5B726E645D203D206D61736B5B726E645D2C206D61736B5B695D0A097D0A7D0A0A2F2F20636F6D7075746556616C756520636F6D707574657320746865206E6578742076616C7565206261736564206F6E207468652063757272656E742076616C75652C2074696D652C20616E64206D61736B2E0A66756E6320636F6D7075746556616C7565282920737472696E67207B0A096C76616C75652C20657272203A3D2074696D652E50617273652822323030362D30312D30322031353A30343A3035222C2076616C7565290A0969662065727220213D206E696C207B0A090970616E69632822756E6578706563746564207061727365206572726F723A2022202B206572722E4572726F722829290A097D0A0A096E657756616C7565203A3D206C76616C75652E556E697828290A096E657756616C7565202B3D206D61736B5B74696D652E4E6F7728292E556E6978282925696E743634286C656E286D61736B29295D0A096E657756616C7565202F3D20320A0972657475726E2074696D652E556E6978286E657756616C75652C2030292E466F726D61742822323030362D30312D30322031353A30343A303522290A7D0A0A2F2F20556E6D61736B4D654966596F7557616E74206D61726B7320746865206368616C6C656E676520617320736F6C7665642069662074686520736F6C7574696F6E206D61746368657320746865206C617374200A2F2F20636F6D70757465642076616C756520616E6420746865206D61736B2076616C756520697320636F72726563742E0A66756E6320556E6D61736B4D654966596F7557616E7428736F6C7574696F6E20737472696E672C20636F774D61736B20696E7436342920737472696E67207B0A09696620736F6C7574696F6E20213D2076616C7565207B0A090970616E696328226E6F706522290A097D0A0A09736F6C7574696F6E54696D652C20657272203A3D2074696D652E50617273652822323030362D30312D30322031353A30343A3035222C20736F6C7574696F6E290A0969662065727220213D206E696C207B0A090970616E69632822756E6578706563746564207061727365206572726F723A2022202B206572722E4572726F722829290A097D0A0A096966205E28736F6C7574696F6E54696D652E556E69782829295E636F774D61736B20213D2030786465616462656566207B0A090970616E696328226E6F706522290A097D0A0A09736F6C7665722E4D61726B536F6C766564282274696D656D61736B6564222C207374642E507265765265616C6D28292E416464722829290A0972657475726E202262696E676F220A7D0A6060600A0A2323232320536F6C7574696F6E0A0A54686973206368616C6C656E6765207265717569726573207061727469636970616E747320746F2070726564696374207768617420746865206E6578742076616C75652077696C6C2062652E20496E206F7264657220746F20646F20746869732C206974206973206E656365737361727920746F206B6E6F7720746865206D61736B20746861742077696C6C206265207573656420746F20646F207468652063616C63756C6174696F6E2E20546869732063616E206265206F627461696E65642062792072657472696576696E6720746865206D61736B2076616C756520616E6420657870616E64696E6720697420746F206974732066756C6C20636170616369747920736F20616C6C20656C656D656E7473206172652076697369626C652E0A0A4E6578742C207468652073616D65206F62667573636174696F6E206D757374206265206170706C696564207573696E6720746865206C6173742076616C756520616E64207468652063757272656E742074696D652E0A0A546F207375626D6974207468652066696E616C20616E737765722C2063616C6C207468652060556E6D61736B4D654966596F7557616E74602066756E6374696F6E20776974682074686520707265646963746564206E6578742076616C75652061732077656C6C20617320616E6F746865722076616C756520746861742069732063616C63756C61746564207573696E672062697477697365206F70657261746F72732E2054686520736F6C7574696F6E20657870656374732060284E4F54206E6578745F76616C75652920584F5220636F775F6D61736B203D3D2030786465616462656566602E205468652070726F7065727479206F6620584F522063616E206265206C6576657261676564206865726520746F20646F20746865206F70706F7369746520746F2070726F64756365207468652065787065637465642076616C7565202D2D20604E4F5420286E6578745F76616C756520584F52203078646561646265656629602E0A0A606060676F0A7061636B616765206D61696E0A0A696D706F727420280A092274696D65220A0A0922676E6F2E6C616E642F722F6368616C6C656E6765732F6E6F74736F72616E646F6D2F7033220A290A0A66756E63206D61696E2829207B0A096F7269674D61736B203A3D2070332E4D61736B28295B3A32305D0A096D61736B203A3D206D616B65285B5D696E7436342C203230290A09636F7079286D61736B2C206F7269674D61736B290A0A096C61737456616C7565537472203A3D2070332E4C61737456616C756528290A096E657754696D652C20657272203A3D2074696D652E50617273652822323030362D30312D30322031353A30343A3035222C206C61737456616C7565537472290A0969662065727220213D206E696C207B0A090970616E69632822636F756C646E27742070617273652074696D653A2022202B206572722E4572726F722829290A097D0A0A096E657756616C7565203A3D206E657754696D652E556E697828290A096E657756616C7565202B3D206D61736B5B74696D652E4E6F7728292E556E6978282925696E743634286C656E286D61736B29295D0A096E657756616C7565202F3D20320A096E657756616C7565537472203A3D2074696D652E556E6978286E657756616C75652C2030292E466F726D61742822323030362D30312D30322031353A30343A303522290A0970332E556E6D61736B4D654966596F7557616E74286E657756616C75655374722C205E286E657756616C7565205E203078646561646265656629290A7D0A6060600A0A23232046696E616C20576F7264730A0A576520656E6A6F79656420636F6D696E672075702077697468207468657365206368616C6C656E67657320616E64207765726520686170707920746F20636F6E7472696275746520746F2074686520476F70686572436F6E204368616C6C656E676520536572696573202D2D2066726F6D20636F6D696E67207570207769746820746865206368616C6C656E6765732C207468656D696E67207468656D2C206C6F636B696E6720646F776E206365727461696E20676E6F2E6C616E642066656174757265732C20616E642073657474696E6720757020696E667261737472756374757265202D2D2061206C6F74206F6620776F726B2077656E7420696E746F20746869732E20576520686F706520616C6C207061727469636970616E747320776572652061626C6520746F206C6561726E206120626974206D6F72652061626F757420676E6F2E6C616E6420616E64206861642066756E20646F696E672069742E20486F706566756C6C79207765276C6C206265206261636B206E657874207965617220F09F98813214323032342D30382D32365431333A33373A30305A32076465656C61776E3227676E6F6C616E642C676F70686572636F6E2C676332342C6368616C6C656E67652D7365726965730AD8170A0A2F766D2E6D5F63616C6C12C9170A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374320E6D6F6E74686C792D6465762D31313229546865204D6F726520596F7520476E6F2031313A20496E74726F647563696E672060676E6F62726F6032F5150A0A41732077652772652067656172696E6720757020746F7761726420746865206D61696E6E6574206C61756E63682C20776520686176656E277420666F72676F7474656E20746F206769766520736F6D65206C6F766520746F206D696E6F722066656174757265732074686174206D616B65732065766572796F6E652773206C69766573206561736965722E20546869732074696D65207468652073706F746C696768742773206F6E202A2A676E6F62726F2A2A2E0A0A2320476E6F20436F726520557064617465730A0A23232060676E6F62726F60206973204C6976650A0A5768617427732060676E6F62726F602C20796F75207361793F2053696D706C79207075742C20697427732061207465726D696E616C206261736564207265616C6D2062726F7773657220796F752063616E2075736520746F206578706C6F7265207265616C6D7320616E6420696D70726F76652074686520646576656C6F706D656E7420657870657269656E6365206F6E2027676E6F646576272E205B53656520697420696E20616374696F6E5D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F32363038292E0A0A2323204368616E67656C6F670A0A2D2057652776652075706461746564207468652072656C6561736520434920616E64205B6669786564206973737565735D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F323638362920776974682060676F2D72656C6561736572602E204E6F7720616C6C206F662074686520746F6F6C7320696E20746865206D6F6E6F7265706F206172652072656C65617365642070726F7065726C792C2077697468206163636F6D70616E79696E67206172746966616374732E200A2D20416464656420737570706F727420666F7220736D6F6F746820602E6D64602066696C652072656E646572696E6720696E2060676E6F776562602C206168656164206F66206F757220706C616E7320746F20776F726B206F6E20676E6F77656220322E302E205468697320616C6C6F7773207061636B616765732074686174206861766520524541444D457320616E64206F7468657220646F63756D656E746174696F6E20746F2072656E64657220656173696C7920696E20676E6F7765622E0A2D20536C6577206F6620476E6F564D2066697865732C20696E6372656173696E672073746162696C6974790A202020202D205B5479706520636F6D70617269736F6E206669785D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F31383930290A202020202D205B4379636C6963207265666572656E63657320696E2074797065206465636C61726174696F6E735D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F32303831290A202020202D205B48616E646C696E67206E6F6E2D63616C6C2065787072657373696F6E2076616C75656465636C2076616C7565735D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F32363437290A202020202D20416E64206D6F72652070656E64696E672072657669657773210A2D205765277665206164646564206261636B205B636F76657261676520737570706F72742028436F6465436F762920666F722074787461722074657374735D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F32333737292C207768696368206D616B652075702061206D616A6F72697479206F66206F757220696E746567726174696F6E2074657374696E672073756974652E2054686520747874617220746573747320666F72207468652060676E6F766D60207061636B61676520616464656420616E206164646974696F6E616C20352520636F7665726167652E205765206172652063757272656E746C7920617373657373696E67206F74686572207061636B616765732074686174207375666665722066726F6D2062616420747874617220636F7665726167652E0A2D205765277665206164646564205B737570706F727420666F72206D6F726520726F6275737420737461636B2074726163657320666F7220476E6F2D636F64652070616E6963735D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F32313435292C2070726F766964696E672061206D7563682062657474657220555820666F722074686520646576656C6F7065722E20596F75206E6F206C6F6E676572206E65656420746F20646967207468726F756768206120356B206C696E65206C6F67206F757470757420746F20666967757265206F757420776861742070616E69636B656420696E20796F757220476E6F20636F64653B20796F75276C6C207365652074686520657863657074696F6E20737461636B20747261636520696E73746561642E0A2D205B5661726961626C6520636F6E66696720636F6D6D616E642068656C70206F75747075742069732064726173746963616C6C7920696D70726F7665645D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F32333939292E20496E20746865207061737420796F752764206E65656420746F206B6E6F772065786163746C7920776861742074686520636F6E66696775726174696F6E206C6F6F6B73206C696B65206265666F7265206D6F64696679696E67206F722076696577696E67207468652076616C7565732E204E6F772074686573652076616C7565732061726520636F6E76656E69656E746C792070726573656E7420696E2074686520636F6D6D616E642068656C70206F75747075742E0A2D204C6173742C20627574206E6F74206C656173743A206C657427732077656C636F6D65206F7572206E65772052264420476F20456E67696E6565722C205B416E746F696E655D2868747470733A2F2F6769746875622E636F6D2F6165646469292E204865276C6C2068656C70207573207363616C6520636F726520636F6D706F6E656E747320666F7220676E6F20616E64206265796F6E64210A0A23204576656E747320616E64204D6565747570730A0A23232050617374206576656E74730A0A23232320425549444C205769746820436F736D6F73202F20576562332053756D6D69742C204765726D616E790A0A576527766520686164206120636F75706C65206F6620636F6F6C2074616C6B7320696E204265726C696E3A205B416E20496E74726F64756374696F6E20746F20676E6F2E6C616E645D2868747470733A2F2F7777772E796F75747562652E636F6D2F77617463683F763D6854476547307A30394E5529206279204C656F6E20487564616B20616E64205B4275696C64696E672074686520496E746572636861696E206F662045636F73797374656D735D2868747470733A2F2F796F7574752E62652F6E687071615178634955592920627920546F6269617320536368776172747A2E0A0A2323232057656233204B616D700A0A57656233204B616D70206973206120392D64617920696E74656E736976652063616D702068656C6420616E75616C6C7920696E205365726269612C20666F637573696E67206F6E2067657474696E672073747564656E747320696E766F6C76656420696E20576562332E20436865636B206F75742074686973205B58207468726561645D2868747470733A2F2F782E636F6D2F5F676E6F6C616E642F7374617475732F313832383434333834323232313038303737382920666F722074686520686967686C696768206F66206F757220696E766F6C76656D656E742E3214323032342D30392D30325430303A30303A30305A32074B6F7574656B693226676E6F6C616E642C65636F73797374656D2C757064617465732C676E6F766D2C676E6F62726F0ABD1A0A0A2F766D2E6D5F63616C6C12AE1A0A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374320E6D6F6E74686C792D6465762D31323221546865204D6F726520596F7520476E6F2031323A20476E6F20426F756E7469657332E9180A0A57656C636F6D6520746F2074686520313274682065646974696F6E206F6620546865204D6F726520596F7520476E6F212054686973206D6F6E7468277320686967686C69676874206973206F757220626F756E74792070726F6772616D3B20736F6C766520616E20696E746572657374696E67206368616C6C656E676520696E20476E6F2C2067657420706169642E0A0A232320476E6F20426F756E746965730A0A48657265277320686F77206F757220626F756E74792070726F6772616D20776F726B732E205765277665205B6C6162656C6C65642069737375657320696E206F7572207265706F5D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6C6162656C732F626F756E74792920746861742061726520656C696769626C6520666F722074686520626F756E74792070726F6772616D2E200A0A312E2046696E64206120626F756E747920796F752077616E7420746F20776F726B206F6E0A322E205375626D697420612064726166742050520A332E2041736B207175657374696F6E7320616E642067657420666565646261636B206561726C790A0A426F756E746965732061726520736F7274656420627920742D73686972742073697A65732C2072616E67696E672066726F6D202435303020746F202433322C303030205553442E0A0A46696E64206F7574206D6F7265205B686572655D2868747470733A2F2F676E6F2E6C616E642F636F6E74726962757465292E0A0A232320496E74726F647563696E6720476E6F76657273650A0A4F6E65206F662074686520676E6F2E6C616E642074656E6574732069732063656E736F727368697020726573697374616E63652E20466F7220746861742C207765206E656564206772656174657220646563656E7472616C697A6174696F6E2E2054686174277320776879207765277265206F70656E696E67205B476E6F76657273655D2868747470733A2F2F6769746875622E636F6D2F676E6F7665727365292C2061206E657720476974487562206F7267616E697A6174696F6E2064656469636174656420746F20636F6D6D756E6974792D64726976656E2070726F6A656374732C2061732077656C6C206173206F74686572206D696E6F742070726F6A65637473206E6F7420637269746963616C20746F2074686520676E6F2E6C616E6420696E6672617374727563747572652E0A0A436F6E7472696275746F72732077696C6C2062652061626C6520746F206578706572696D656E74207769746820476E6F2072656C6174656420696465617320616E642070726F6A656374732C20636F6C6C61626F726174696E6720776974686F757420696E746572666572656E636520616E64206F76657273696768742066726F6D2074686520636F726520656E67696E656572696E67207465616D2E0A0A5765277665206D69677261746564206120646F7A656E207265706F732066726F6D205B476E6F6C616E675D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672920746F205B476E6F76657273655D2868747470733A2F2F6769746875622E636F6D2F676E6F7665727365292E205768657468657220796F75277265206120646576656C6F7065722C2064657369676E65722C206F72206A7573742070617373696F6E6174652061626F757420476E6F2C20796F757220696E70757420697320696E76616C7561626C652E204665656C206672656520746F207375626D69742070756C6C2072657175657374732C20737567676573742069646561732C206F722073696D706C79206A6F696E2074686520636F6E766572736174696F6E2E0A0A232320476E6F20436F726520557064617465730A0A54686520656E67696E656572696E67207465616D20676F7420746F67657468657220696E20547572696E2C204974616C792C20746F20776F726B207468726F756768207468652064657461696C73206F6620746865207570636F6D696E67206D61696E2E676E6F2E6C616E64206C61756E63682E2057652061726520616C6D6F737420726561647920746F2074616C6B2061626F75742074686973207075626C69636C792C2062757420796F752063616E206865617220736F6D652073706F696C657273206F6E20746865205B766964656F20736E6970706574735D2868747470733A2F2F782E636F6D2F5F676E6F6C616E642F7374617475732F3138343437373934333931363032313338363129207765206361756768742E0A0A232323204368616E67656C6F670A0A2D205B4669786564207265706F2D6C6576656C2062656E63686D61726B20776F726B666C6F77735D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F32373136292C20666F722065617369657220706572666F726D616E63652072656772657373696F6E206D6F6E69746F72696E672E205669657761626C65205B686572655D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F62656E63686D61726B732F292E205468697320616C6C6F777320757320746F206964656E7469667920686F7720696E646976696475616C205052732061666665637420706572666F726D616E63652E0A2D2076656C2062656E63686D61726B20776F726B666C6F77732C20666F722065617369657220706572666F726D616E63652072656772657373696F6E206D6F6E69746F72696E672E205669657761626C6520686572652E0A496D706163743A2057652063616E206E6F7720747261636B206F6E20696E646976696475616C20505273206966207468657265206973206120706572666F726D616E63652072656772657373696F6E2C20616E64206D6F6E69746F72206C6F6E672D7465726D20706572666F726D616E63652E0A2D205B56616C6964207479706520636F6D70617269736F6E7320666F7220626F6F6C735D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F32373235292E0A2D205B476E6F564D20736C696365206D656D6F727920616C6C6F636174696F6E206F72646572206669785D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F32373831292E0A2D205B56616C7565206465636C61726174696F6E206C6F6F70206669785D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F32303734292E0A2D205B537570706F727420606C656E6020616E64206063617060206F6E20616E20617272617920706F696E7465725D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3237303929202E0A0A2323204576656E747320616E64204D6565747570730A0A2323232050617374206576656E74730A0A2323232320676E6F2E6C616E6420436F6E7472696275746F7220546563682044697363757373696F6E730A0A576527766520726576616D7065642074686520636F6E7472696275746F722063616C6C7320746F2073686F77636173652074686520636F6F6C207374756666206265696E67206275696C74206F6E206F757220706C6174666F726D2C20616E64206861766520746563686E6963616C2064697363757373696F6E73206F6E20746865206368616C6C656E67657320776520666163652E20546865205B31737420766964656F206973206F75745D2868747470733A2F2F7777772E796F75747562652E636F6D2F77617463683F763D3459554F54743562444A63292C20616E64206E6577206F6E65732077696C6C206265207075626C69736865642065766572792074776F207765656B732E0A0A2323232320476F204D6565747570202D20547572696E2C204974616C790A0A447572696E67206F757220656E67696E656572696E67207265747265617420696E20547572696E2C20776520746F6F6B20746865206F70706F7274756E69747920746F20636F6E6E656374207769746820746865206C6F63616C20476F20636F6D6D756E69747920616E6420686F6C64206120676E6F2E6C616E6420776F726B73686F702E204F75722076657279206F776E204D6F7267616E2042617A616C67657474652077616C6B65642074686520617474656E64656573207468726F7567682074686520676E6F2E6C616E642070726F6A6563742C20666F6C6C6F7765642062792061206C69766520636F64696E672073657373696F6E207768657265204D6F7267616E206275696C7420612073696D706C65206D6573736167696E6720626F6172642E205365652074686520766964656F205B686572655D2868747470733A2F2F796F7574752E62652F62337A526256634A787945292E0A3214323032342D31302D31375430303A30303A30305A32074B6F7574656B69321F676E6F6C616E642C65636F73797374656D2C757064617465732C676E6F766D0AF4220A0A2F766D2E6D5F63616C6C12E5220A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374320E6D6F6E74686C792D6465762D3133322D546865204D6F726520596F7520476E6F2031333A2054657374352C20676E6F766572736520616E64206D6F72653294210A0A546869732065646974696F6E206F662022546865204D6F726520596F7520476E6F22206973207061636B65642077697468207570646174657320616E6420686967686C69676874732E20546573743520746573746E657420776173206C61756E636865643B2061206E657720636F6D6D756E6974792073706163652063616C6C65642060676E6F766572736560206973206E6F7720617661696C61626C652E20546865206D61696E6E6574206C61756E6368206D696C6573746F6E6520697320757020616E642074686520646576656C6F706D656E74206973207370656564696E672075702E204974277320616E206578636974696E672074696D6520746F20626520612070617274206F662074686520676E6F2E6C616E642070726F6A6563742E0A0A2323205465737435206973206C6976650A0A4F6E204E6F76656D626572203133207765206C61756E63686564205B54657374355D2868747470733A2F2F74657374352E676E6F2E6C616E642F292C2061206E657720697465726174696F6E206F6620746865206D756C74696E6F646520746573746E65742E205468652076616C696461746F722073657420686173206265656E20657870616E6465642066726F6D203720746F203137206E6F6465732C20706C75732061206E756D626572206F66206E6F6E2D76616C696461746F72206E6F6465732E20497420616C736F20626F6173747320476F7644414F207632207468617420657870616E647320746865206F6E2D636861696E20766F74696E67206361706162696C69746965732C20616E642061206E756D626572206F6620666978657320616E64207175616C697479206F66206C69666520696D70726F76656D656E747320666F722074686520646576656C6F706572732E200A0A546573743520697320616C726561647920617661696C61626C65206F6E204164656E6120616E642074686520466175636574204875622C20736F206665656C206672656520746F20676976652069742061207472792E0A0A232320496E74726F647563696E6720676E6F76657273650A0A4C61756E636865642074776F207765656B732061676F2C205B676E6F76657273655D2868747470733A2F2F6769746875622E636F6D2F676E6F76657273652920736572766573206173206120636F6C6C61626F7261746976652068756220666F72206578706572696D656E74616C20616E6420696E6E6F7661746976652070726F6A6563747320696E7370697265642062792074686520676E6F2E6C616E642065636F73797374656D2E204974E2809973206120737061636520666F7220696E6375626174696E6720696465617320616E64206578706C6F72696E67207468652066756C6C20706F74656E7469616C206F6620476E6F2E0A0A5468697320476974487562207370616365206D61696E7461696E732061207374726F6E6720636F6E6E656374696F6E207769746820746865205B676E6F6C616E675D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672920636F6D6D756E6974792C20666F73746572696E6720636F6C6C61626F726174696F6E20616E64207265736F757263652073686172696E6720616D6F6E6720646576656C6F7065727320616E6420656E7468757369617374732E204F757220676F616C20697320746F20737570706F727420616E6420686967686C696768742070726F6A65637473207468617420656E68616E63652074686520676E6F2E6C616E6420657870657269656E63652C20616E6420746F206265206D756368206D6F72652068616E64732D6F666620696E207468652070726F636573732E0A0A57652076616C756520636F6D6D756E69747920636F6E747269627574696F6E7321205768657468657220796F75E280997265206120646576656C6F7065722C2064657369676E65722C206F722073696D706C7920656E746875736961737469632061626F757420476E6F2C20796F757220696E707574206D6174746572732E204A6F696E207573206279207375626D697474696E672070756C6C2072657175657374732C2073686172696E672069646561732C206F7220656E676167696E6720696E2064697363757373696F6E732E20496620796F75206E6565642061206E6577207265706F20666F7220796F75722070726F6A6563742C207765276420626520686170707920746F206F626C6967652E0A0A2323204D61696E6E6574206C61756E63680A0A5768696C652077652772652067657474696E6720616E206F6666696369616C20616E6E6F756E63656D656E742072656164792C2074616B65206120736E65616B207065656B20617420746865205B676E6F2E6C616E64206D61696E6E6574206C61756E6368206D696C6573746F6E655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6D696C6573746F6E652F3729206F6E204769744875622E205468652073636F706520686173206265656E2066696E616C697A656420666F7220746865206D6F737420706172742C20616E64206F757220656E67696E656572696E67207465616D732061726520636F766572696E672061206C6F74206F662067726F756E642E205765276C6C206D6F7374206C696B656C79206C61756E6368206174206C65617374206F6E65206D6F726520746573746E6574206265747765656E206E6F7720616E6420746865206D61696E6E6574206C61756E63682C20736F20737461792074756E65642E0A0A232323204368616E67656C6F670A0A416C6C2074686520636F6F6C20737475666620776527766520646F6E652C206F75746C696E65642061732062756C6C657420706F696E74733A0A2D205B666F72206C6F6F7073206D61696E7461696E207468652073616D6520626C6F636B206F6E20697465726174696F6E2C207768696368206973207265666572656E63656420696E20616E7920636C6F73757265732067656E6572617465642077697468696E5D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F31313335290A202020202D205B6665617428676E6F766D293A2068616E646C65206C6F6F70207661726961626C65735D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F32343239290A2D205B52756E6E696E6720676E6F20746573742063617573657320612070616E6963207768656E20737472756374207661726961626C6573206172652072656465636C6172656420696E206C6F6F70735D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F33303133290A202020202D205B66697828676E6F766D293A206669782069737375652077697468206C6F63616C6C792072652D646566696E6974696F6E5D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F33303134290A2D205B666565646261636B206E65656465643A20686F772061726520796F75207573696E6720676E6F6C616E642067656E65736973202E2E2E3F5D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F32383234290A202020202D205B63686F72653A206D6F766520676E6F6C616E642067656E6573697320746F20636F6E74726962732F676E6F67656E657369735D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F33303431290A2D205B666561743A20722F676F762F64616F2076325D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F32353831290A2D205B54657374342072652D72656C656173655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F33303630290A2D205B54657374352072656C656173655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F33303631290A202020202D205B666561743A2061646420696E697469616C2074657374352E676E6F2E6C616E64206465706C6F796D656E745D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F33303932290A2D205B50726F706F73616C3A20496D706C656D656E74696E672056657273696F6E696E67204163726F7373204170706C69636174696F6E2053657269616C697A6174696F6E20537472756374757265735D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F31383338290A2D205B52756E6E696E6720676F20766574206F6E207468652070726F6A656374206661696C735D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F32393534290A202020202D205B66697828746D32293A2072656E616D65206D6574686F647320746F2061766F696420636F6E666C6963747320776974682028756E296D61727368616C657220696E74657266616365735D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F33303030290A2D205B466978207072696E746C6E20446F5320766563746F725D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F33303735290A202020202D205B66697828676E6F766D293A20646F6E2774207072696E7420746F207374646F75742062792064656661756C745D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F33303736290A2D205B41646420722F7379732F706172616D73202B20706172616D732067656E6573697320737570706F72745D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F33303033290A2D205B537570706F7274206D6574616461746120666F722067656E65736973207478735D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F32393431290A2D205B536574757020226E69636522207374616C65205052732720626F745D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F31343435290A202020202D205B63693A206164642061207374616C6520626F7420666F72205052735D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F32383034290A2D205B666561743A2061646420636F6E74726962732F676E6F6D6967726174655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F33303633290A2D205B63686F72653A207570646174652074782D6172636869766520696E20706F7274616C206C6F6F705D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F33303634290A0A2323204576656E747320616E64204D6565747570730A0A5B34746820657069736F64655D2868747470733A2F2F796F7574752E62652F68525A37695534626F764D3F73693D32744F556575497969535778454C477629206F662074686520436F6E7472696275746F7220546563686E6963616C2044697363757373696F6E73206973206F757421205761746368207468652072657374205B686572655D2868747470733A2F2F7777772E796F75747562652E636F6D2F706C61796C6973743F6C6973743D504C376E503772315169446B744D436477317964516F3263724D3379365A6B374534292E3214323032342D31312D32315430303A30303A30305A32074B6F7574656B69321F676E6F6C616E642C65636F73797374656D2C757064617465732C676E6F766D0AD7220A0A2F766D2E6D5F63616C6C12C8220A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374320D73656F756C2D726574726561743241476E6F6D65732073706F7474656420696E2053656F756C3A204F6E626C6F63207820436F726520456E67696E656572696E6720436F6C6C61626F726174696F6E2032D7200A0A676E6F2E6C616E64E280997320636F726520656E67696E656572696E67207465616D20686173206A757374207772617070656420757020616E20696E74656E736520616E6420686967686C79200A70726F647563746976652074776F2D7765656B20636F64696E6720737072696E742077697468206F757220636F726520636F6E7472696275746F722C200A5B4F6E626C6F635D2868747470733A2F2F6F6E626C6F632E78797A2F292E20486F7374656420696E204F6E626C6F632773206F66666963657320696E20746865206865617274206F662053656F756C2C0A74686973206F6E7369746520636F6C6C61626F726174696F6E207374616E6473206173206F6E65206F66206F7572206D6F7374207375636365737366756C20646576656C6F706D656E74206379636C65730A7965742C2073657474696E67206E6577207265636F72647320666F722070756C6C207265717565737473206D657267656420616E6420616476616E63696E6720637269746963616C207072696F7269746965730A666F72206F7572207570636F6D696E67206D61696E6E6574206C61756E63682C20657370656369616C6C7920776974682074686520476E6F564D2E200A0A5B215B6F66666963655D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D31322D30345F73656F756C2D726574726561742F7372632F7468756D62732F6F66666963652E6A7067295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D31322D30345F73656F756C2D726574726561742F7372632F6F66666963652E6A7067290A0A2323205374617274696E67207769746820612042616E673A20746573743520616E6420656E67696E656572696E6720646576656C6F706D656E74730A0A54686520636F6C6C61626F726174696F6E206B69636B6564206F6666207769746820746865206C61756E6368206F662074657374352E2054686973206D696C6573746F6E65207365742074686520746F6E6520666F722074776F207765656B73206F6620756E706172616C6C656C65642070726F6475637469766974792E20447572696E67207468697320737072696E742C20746865207465616D73206964656E746966696564206172656173206F6620636F6C6C61626F726174696F6E20696E636C7564696E67206120666565646261636B20776F726B73686F70206F6E20476E6F7363616E2C20476E6F737761702C20616E6420746865204164656E612057616C6C65742C20616E6420746F706963732073756368206173206761732C207265616C6D20757067726164656162696C6974792C2060676E6F776562602C206074782D696E6465786572602C20696E6672617374727563747572652C20616E64204142434920717565726965732E205468652062656E63686D61726B696E6720616E642067617320636F737420657374696D6174696F6E73206172652061207072696F7269747920617320746865207465616D2061696D7320746F206F7074696D697A65207472616E73616374696F6E20656666696369656E637920666F7220626F746820757365727320616E6420646576656C6F706572732E205265616C6D20646576656C6F706D656E742077696C6C20616476616E6365207369676E69666963616E746C7920696E20746865206E65787420666577206D6F6E7468732C20686967686C69676874696E6720746865206E65656420746F20656E68616E636520616E206578697374696E67207265616C6D27732066756E6374696F6E616C69747920616E64206361706162696C697469657320776974686F7574206372656174696E672061206E6577206F6E652E20546F206164647265737320746869732C2061207265616C6D207570677261646561626C65207061747465726E206578616D706C65206973206E656365737361727920746F20696C6C7573747261746520706F737369626C6520736F6C7574696F6E7320746F2074686973206368616C6C656E67652E2054686973206665617475726520697320706172746963756C61726C7920696D706F7274616E7420666F72206170706C69636174696F6E73206C696B6520476E6F737761702C20616E64207761732061206B657920666F63757320647572696E672074686520726563656E742074776F2D7765656B20737072696E742E0A0A416E6F7468657220746F7069632069732074686520616476616E63656D656E74206F662060676E6F776562602C20676E6F2E6C616E64E280997320756E6976657273616C207765622066726F6E74656E642E200A546865207465616D206F75746C696E6564206120646576656C6F706D656E74205B726F61646D61705D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F3331393129200A666F722069746572617469766520666561747572652072656C65617365732C20656E737572696E672061646170746162696C69747920616E64206120757365722D63656E7472696320657870657269656E6365200A7468726F7567686F7574207468652070726F636573732E204B657920666561747572657320696E636C7564653A0A2D2044657369676E204F7665726861756C3A204372656174696E672061206D6F726520757365722D667269656E646C792055492077697468206120636F6C6F722070616C65747465200A6D61746368696E6720676E6F2E6C616E6427732074727565207370697269742E0A2D20555820526564657369676E3A2045737461626C697368696E672060676E6F776562602061732074686520676F2D746F207265616C6D207765622066726F6E74656E642E0A2D20436F6465205265666163746F72696E673A20456E68616E63696E6720736563757269747920616E64206D61696E7461696E6162696C6974792E0A2D204E617669676174696F6E20496D70726F76656D656E74733A2053696D706C696679696E672075736572206E617669676174696F6E20616E6420696E74726F647563696E672061207175657279200A73797374656D20666F7220646972656374206C696E6B696E6720746F2073706563696669632060676E6F7765626020636F6E74656E74206F7220636F6D6D616E64732E0A0A46696E616C6C792C20746865207465616D20636F6C6C61626F726174656420636C6F73656C792077697468204F6E626C6F63E2809973204465764F7073206578706572747320746F2073747265616D6C696E65200A616E64206175746F6D617465207468652067656E65736973206372656174696F6E20616E642076616C69646174696F6E2070726F6365737320666F722066757475726520746573746E65747320616E64200A746865206576656E7475616C206D61696E6E6574206C61756E63682E0A0A232320537472656E677468656E696E6720526567696F6E616C20436F6D6D756E69747920436F6E6E656374696F6E730A0A4265796F6E642074686520656E67696E656572696E67206D696C6573746F6E65732C207468697320737072696E7420666F727469666965642072656C6174696F6E73686970732077697468696E0A6F757220636F6E7472696275746F72206E6574776F726B20616E64207468652062726F6164657220636F6D6D756E6974792E20546F6765746865722077697468204F6E626C6F632C207765200A686F7374656420616E20696E666F726D616C206D656574757020746F20656E67616765207769746820746865204B6F7265616E20646576656C6F70657220636F6D6D756E69747920616E64206D65740A7769746820436F736D6F73746174696F6E2C2061206C6F6E677374616E64696E6720536F757468204B6F7265612D626173656420436F736D6F7320636F6E7472696275746F722E204F766572203135200A646576656C6F7065727320617474656E64656420746865206576656E742C20656167657220746F206C6561726E2061626F757420676E6F2E6C616E64E280997320766973696F6E20616E64206578706C6F7265200A686F77207468657920636F756C6420636F6E747269627574652E2054686520656E746875736961736D2066726F6D206C6F63616C20646576656C6F7065727320616E6420746865200A636F6C6C61626F726174696F6E2077697468204F6E626C6F6320686967686C69676874207468652067726F77696E6720676C6F62616C206D6F6D656E74756D20626568696E6420676E6F2E6C616E642E200A546F206675727468657220737570706F727420726567696F6E616C2067726F7774682C20776520617265207072696F726974697A696E67206D756C74696C696E6775616C20636F6E74656E742C0A7374617274696E672077697468204B6F7265616E2E20496E20636F6C6C61626F726174696F6E2077697468204F6E626C6F632C2077652063726561746564204B6F7265616E20766964656F200A636F6E74656E7420666F722074686520636F6D6D756E697479202D20636F6D696E6720736F6F6E21200A0A5B215B6F66666963655D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D31322D30345F73656F756C2D726574726561742F7372632F7468756D62732F6D65657475702E6A7067295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032342D31322D30345F73656F756C2D726574726561742F7372632F6D65657475702E6A7067290A0A232320412043656C6562726174696F6E206F662043756C7475726520616E6420436F6C6C61626F726174696F6E0A0A5768696C6520746865207072696D61727920666F6375732077617320656E67696E656572696E672C2074686520657870657269656E636520696E2053656F756C207472616E7363656E646564207468650A746563686E6963616C207265616C6D2E205468616E6B7320746F206F75722067726163696F757320686F737473206174204F6E626C6F632C2074686520737072696E7420626563616D652061200A63656C6562726174696F6E206F662063756C747572616C2065786368616E67652E2046726F6D206C6976656C792064697363757373696F6E73206F7665722061757468656E746963204B6F7265616E200A42425120746F207370697269746564206B6172616F6B65206E696768747320616E64207265666C6563746976652076697369747320746F20686973746F726963616C206C616E646D61726B732C200A6F75722074696D6520696E2053656F756C20656E726963686564206F757220756E6465727374616E64696E67206F6620536F757468204B6F7265616E2063756C74757265207768696C650A756E64657273636F72696E672074686520696D706F7274616E6365206F66207465616D20616E6420636F6D6D756E697479206275696C64696E672E0A0A417320776520617070726F61636820746865206D61696E6E6574206C61756E63682C207765E280997265206578636974656420746F2077656C636F6D65206F746865727320746F206A6F696E20616E64200A636F6E7472696275746520746F20676E6F2E6C616E642E20497420626567696E7320696E20746865206469676974616C207265616C6D20286E6F2070756E20696E74656E6465642920627574200A657874656E647320696E746F206D65616E696E6766756C2068756D616E20636F6E6E656374696F6E73206163726F73732074686520676C6F62652E0A3214323032342D31322D30345430303A30303A30305A320D6D696368656C6C65656C6C656E3226676E6F6C616E642C65636F73797374656D2C6D65657475702C726574726561742C73656F756C0A8E2F0A0A2F766D2E6D5F63616C6C12FF2E0A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374321661756469742D70726F706F73616C2D72657175657374322B43616C6C20666F722053656375726974792041756469746F7273202D20676E6F2E6C616E6420417564697432A62D0A0A496E2074686520676E6F2E6C616E642065636F73797374656D2C207365637572697479206973206F6E65206F66206F757220746F70207072696F72697469657320617320776520636F6E74696E756520746F20646576656C6F70206F757220626C6F636B636861696E20666F6375736564206F6E20736D61727420636F6E74726163747320616E6420646563656E7472616C697A6564206170706C69636174696F6E732E204173207765206D6F766520636C6F73657220746F207468652062657461206C61756E63682C2077652772652063616C6C696E67206F6E20657870657269656E6365642073656375726974792061756469746F727320746F2068656C7020757320656E737572652074686520726F627573746E65737320616E64207365637572697479206F66206F757220636F6465626173652E0A576520617265206E6F7720616363657074696E672070726F706F73616C7320666F7220746865206175646974696E67206F662074686520676E6F207265706F7369746F7279206F6E204769744875622E20546869732069732061207369676E69666963616E7420616E6420636F6D706C6578207461736B2C20736F20776520617265206C6F6F6B696E6720666F72207175616C6966696564206669726D73206F7220696E646976696475616C73207769746820657870657269656E6365206175646974696E6720626C6F636B636861696E2073797374656D732C207669727475616C206D616368696E65732C20616E642064697374726962757465642073797374656D732E0A596F752063616E2066696E64207468652066756C6C20676E6F2E6C616E64207265706F7369746F727920686572653A0A0A68747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F0A0A23232057686174277320696E2053636F70653F0A0A576527766520616C726561647920646F6E6520736F6D6520776F726B20746F206E6172726F77207468652073636F7065206F662074686520636F64652074686174207265717569726573206175646974696E672E20466F722061206D6F72652064657461696C6564206C697374206F662077686963682066696C65732061726520696E2073636F706520616E6420776869636820617265206E6F742C20706C6561736520726566657220746F20746865205B476F6F676C652053707265616473686565745D2868747470733A2F2F646F63732E676F6F676C652E636F6D2F7370726561647368656574732F642F317241767A7643483154425A41796B57437A4B7065664A6E62783053614345676E50364979707A5838586F342F656469743F7573703D73686172696E67292074686174206F75746C696E657320746865207370656369666963732E0A0A2323232053636F706520427265616B646F776E206279204469726563746F72790A0A4865726527732074686520657374696D6174656420627265616B646F776E206F6620746865206C696E6573206F6620636F646520746861742061726520696E2073636F706520666F72206175646974696E67206173206F66204E6F76656D62657220313174682E205468697320636F6465206973206C617267656C79207772697474656E20696E20476F3A0A0A2A202A2A676E6F766D2A2A3A2034332C343532206C696E65732028323525206F6620746F74616C290A2A202A2A676E6F2E6C616E642A2A3A2031382C363737206C696E65732028313025206F6620746F74616C290A2A202A2A746D322A2A3A203130382C303230206C696E65732028363525206F6620746F74616C290A0A546F74616C206C696E657320696E2073636F70653A203137302C313439206C696E65730A0A5468697320776F6E2774206368616E67652064726173746963616C6C79206265666F7265207468652061756469742C20736F207468657365206C696E6520636F756E7473206D61792068656C702061756469746F727320657374696D6174652074696D6520636F7374732E204D616E792070726F706F73616C7320776527766520726563656976656420736F20666172206172652073696D706C792074696D652D626F78696E6720666F722061203420656E67696E6565722D7765656B2061756469742E0A0A2323204175646974696E6720417070726F6163680A0A44756520746F207468652073697A6520616E6420636F6D706C6578697479206F66207468652061756469742C2077652061726520636F6E7369646572696E6720627265616B696E6720746865207461736B20696E746F207375622D636F6D706F6E656E74732E205765206D61792068697265206D756C7469706C65206669726D7320746F20617564697420646966666572656E74207061727473206F662074686520636F6465626173652073696D756C74616E656F75736C792E205468652070726F706F736564206469766973696F6E73206172653A0A0A312E20476E6F205669727475616C204D616368696E652028476E6F564D29202D20636F6E7461696E656420696E207468652022676E6F766D22207375626469726563746F72790A322E205468652052656D61696E696E6720436F6D706F6E656E7473202D20696E636C7564696E67207468652022676E6F2E6C616E642220616E642022746D3222207375626469726563746F726965730A0A232323204B657920466F63757320417265617320666F722041756469746F72730A0A5768696C65207468652066756C6C20636F646562617365206E6565647320612074686F726F756768207265766965772C207765277665206964656E746966696564207365766572616C206172656173206F6620706F74656E7469616C20736563757269747920636F6E6365726E20746861742072657175697265207370656369616C20617474656E74696F6E3A0A312E202A2A44657465726D696E69736D20696E20476E6F564D2A2A20200A202020204173206120626C6F636B636861696E2064657369676E656420666F722064657465726D696E697374696320657865637574696F6E2C20656E737572696E6720746861742074686520476E6F564D20657865637574657320636F6E74726163747320636F6E73697374656E746C79206163726F737320616C6C206E6F646573206973206372756369616C2E204F757220676F616C20697320746F20656C696D696E617465206E6F6E2D64657465726D696E697374696320636F6D706F6E656E74732066726F6D20476F2C2073756368206173207573696E672041564C20747265657320696E7374656164206F6620476F206D6170732E20486F77657665722C207765206D6179207374696C6C2068617665206C696E676572696E6720697373756573207468617420636F756C64206C65616420746F206E6F6E2D64657465726D696E6973746963206265686176696F722E2041207072696D65206578616D706C6520697320746865206D6F64756C652077697468696E2060676E6F766D2F706B672F676E6F6C616E672F76616C7565735F737472696E672E676F602C2077686963682073686F756C64206265206361726566756C6C7920726576696577656420666F7220616E792073756368206973737565732E20200A202020202A2A5768792074686973206D6174746572732A2A3A204E6F6E2D64657465726D696E69736D2063616E206C65616420746F20636861696E2068616C7473206F722073706C6974732C20776869636820636F756C64206265206578706C6F697465642062792061747461636B6572732E0A322E202A2A4F7468657220476E6F564D204368616C6C656E6765732A2A20200A20202020676E6F2E6C616E6420636F6E7472696275746F72205B40746865686F776C5D2868747470733A2F2F6769746875622E636F6D2F746865686F776C29206861732064657461696C656420736F6D65206164646974696F6E616C206172656173206F6620636F6E6365726E206F6620746865205669727475616C204D616368696E6520686572653A2068747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F32383836236973737565636F6D6D656E742D32343030323734383132200A332E202A2A536563757269747920696E205265616C6D732028536D61727420436F6E747261637473292A2A20200A20202020446576656C6F70657273206465706C6F7920736D61727420636F6E7472616374732C2063616C6C656420225265616C6D732C2220746F2074686520636861696E2E204D616C6963696F7573205265616C6D7320636F756C6420617474656D707420746F20696E6A656374206861726D66756C20636F6E74656E74207468617420636F756C6420616666656374206F74686572207573657273206F662074686520636861696E2C20706172746963756C61726C7920696E20746865206052656E646572602066756E6374696F6E206F7220737570706F7274696E6720746F6F6C73206C696B65202A2A476E6F7765622A2A2C20776869636820646973706C617973205265616C6D7320746F20656E642075736572732E20200A202020202A2A506F74656E7469616C207269736B2A2A3A2043726F73732D7369746520736372697074696E6720285853532920616E64206F7468657220696E6A656374696F6E2061747461636B732E0A342E202A2A5365637572697479205269736B7320466F756E6420696E204F7468657220426C6F636B636861696E20564D732A2A20200A202020204D616E7920626C6F636B636861696E20564D732C207375636820617320457468657265756D27732045564D2C206861766520666163656420686967682D70726F66696C65207365637572697479206973737565732E2057652065787065637420746861742073696D696C61722076756C6E65726162696C697469657320636F756C6420626520746172676574656420696E2074686520476E6F564D2C20736F2069742773206372756369616C20746F20617564697420616E64206D69746967617465207468657365207269736B7320696E20616476616E63652E0A352E202A2A4B6579204D616E6167656D656E742028676E6F6B6579292A2A20200A20202020416C74686F75676820746869732069732061206C6F776572207072696F72697479207468616E20736F6D652070726576696F75736C79206D656E74696F6E65642C2061756469746F72732077696C6C206E65656420746F207265766965772074686520676E6F6B6579207061636B6167652C2077686963682068616E646C6573206B65792067656E65726174696F6E20616E64207369676E696E672C20746F20656E73757265207468617420736563757269747920626573742070726163746963657320617265206265696E6720666F6C6C6F7765643B20666F72206578616D706C652C20656E73757265206F7572204C65646765722068617264776172652077616C6C657420696E746567726174696F6E207769746820676E6F6B657920757365732074686520636F7272656374206275696C6420666C6167732E0A0A232320486F7720746F205375626D697420612050726F706F73616C0A0A5765277265206C6F6F6B696E6720666F722070726F706F73616C73207468617420696E636C7564652074686520666F6C6C6F77696E67206C696E65206974656D733A0A0A2D202A2A436F7374206F66206175646974696E672074686520656E746972652022676E6F22207265706F7369746F72792A2A202D2D20636F766572696E6720616C6C206469726563746F7269657320616E642066696C657320696E2073636F70652E0A2D202A2A436F7374206F66206175646974696E672074686520476E6F205669727475616C204D616368696E652028676E6F766D292A2A202D2D20666F6375736564206F6E20746865202A2A676E6F766D2A2A207375626469726563746F72792E0A2D202A2A436F7374206F66206175646974696E6720746865206F7468657220636F6D706F6E656E74732A2A202D2D20636F766572696E6720746865202A2A676E6F2E6C616E642A2A20616E64202A2A746D322A2A207375626469726563746F726965732E0A2D202A2A46757A7A696E67206566666F7274732A2A202D2D2061756469746F72732061726520656E636F75726167656420746F20696E636C7564652066757A7A696E672061732070617274206F6620746865697220636F6465207265766965772070726F636573732C2074686F7567682069742073686F756C64206265206C69737465642061732061207365706172617465206C696E65206974656D2E0A0A506C6561736520696E636C756465207468652074696D656C696E657320666F72206175646974696E6720616E6420796F75722063757272656E7420617661696C6162696C69747920626567696E6E696E6720446563656D62657220323372642E200A0A23232054696D656C696E65202620436F6E7461637420496E666F726D6174696F6E0A5765206578706563742074686520617564697420746F20636F6E73756D65206174206C65617374203420656E67696E656572207765656B7320616E6420636F6E636C7564652062792074686520656E64206F662074686520646179204A616E7561727920323074682C20676976696E672075732061207765656B20746F2072656D65646961746520616E7920686967682D206F7220637269746963616C2D736576657269747920697373756573206279204A616E7561727920323874682E204175646974207465616D73206D61792064656369646520746F206465646963617465206D756C7469706C652061756469746F727320696E20706172616C6C656C20746F206D656574206F757220646573697265642074696D656C696E652E20576520617265206F70656E20746F2064697363757373696F6E732077697468206175646974696E67207465616D7320746F20616E7377657220616E79207175657374696F6E732061626F7574207468652073636F7065206F66207468652070726F6A6563742E0A0A506C656173652073656E6420796F75722070726F706F73616C732076696120656D61696C20746F202A2A7365637572697479205B61745D2074656E6465726D696E74205B646F745D20636F6D2A2A2E2057652061726520686170707920746F206D656574207769746820706F74656E7469616C206175646974696E67207465616D7320746F20667572746865722064697363757373207468652064657461696C7320616E6420616E7377657220616E79207175657374696F6E732E0A0A0A232320436F6E636C7573696F6E0A0A54686520676E6F2E6C616E6420636F6D6D756E69747920697320636F6D6D697474656420746F206275696C64696E6720612073656375726520616E6420726573696C69656E7420626C6F636B636861696E20706C6174666F726D2E2057652062656C69657665207468617420696E766F6C76696E6720657870657269656E6365642061756469746F727320696E206F757220646576656C6F706D656E742070726F6365737320697320657373656E7469616C20746F20656E7375726520746861742077652063616E2064656C6976657220612073656375726520656E7669726F6E6D656E7420666F72206441707020646576656C6F706572732E20496620796F75206F7220796F7572207465616D2068617665207468652065787065727469736520616E642061726520696E746572657374656420696E20636F6E747269627574696E6720746F20676E6F2E6C616E6427732073656375726974792C20776520656E636F757261676520796F7520746F207375626D697420612070726F706F73616C2E0A0A4C6574277320776F726B20746F67657468657220746F206D616B6520676E6F2E6C616E6420746865206D6F73742073656375726520626C6F636B636861696E20666F7220736D61727420636F6E74726163747320616E6420646563656E7472616C697A6564206170706C69636174696F6E73210A3214323032342D31322D30355430303A30303A30305A320C6B726973746F7661746C6173321C676E6F6C616E642C676E6F766D2C73656375726974792C61756469740AFF9C010A0A2F766D2E6D5F63616C6C12EF9C010A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374320F726F61642D746F2D6D61696E6E6574321C54686520526F616420746F204D61696E6E65742026204265796F6E6432EF9A010A0A232320476E6F2074686520446966666572656E63650A0A676E6F2E6C616E642069732065766F6C76696E6720617320612063757474696E672D6564676520646563656E7472616C697A6564206F7065726174696E672073797374656D2C2073657474696E6720610A6E6577207374616E6461726420666F72206275696C64696E6720616E6420676F7665726E696E672064697665727365206170706C69636174696F6E732E2041742069747320636F72652C206974200A70726F766964657320616E206F70656E2D736F7572636520736D61727420636F6E747261637420706C6174666F726D2064657369676E656420746F20616464726573732073797374656D6963200A6368616C6C656E67657320696E2063656E7472616C697A65642073797374656D73E2809463656E736F72736869702C206C61636B206F662075736572206175746F6E6F6D792C206D6973616C69676E65640A696E63656E74697665732C20616E64206E6F6E2D7472616E73706172656E74206F7065726174696F6E732E0A0A546865207472756520737472656E677468206F6620676E6F2E6C616E64206C69657320696E206974732062726F6164206170706C69636162696C697479206163726F737320646F6D61696E732E200A49742070726F7669646573206275696C64657273207769746820746865206D65616E7320746F20637265617465207365637572652C207363616C61626C652C20616E642074727573746C657373200A6170706C69636174696F6E732074686174207265646566696E652074686520706F73736962696C6974696573206F6620646563656E7472616C697A65642073797374656D732E0A0A676E6F2E6C616E6420686173206265656E20616476616E63696E67207468726F75676820612070686173656420646576656C6F706D656E742070726F636573732061696D6564206174200A64656C69766572696E6720637269746963616C2066756E6374696F6E616C69747920617420656163682073746167652E20546865206E6574776F726B20617263686974656374757265200A656E73757265732074686174206576657279206D696C6573746F6E65207265696E666F726365732074686520666F756E646174696F6E206F6620612072656C6961626C6520616E64207363616C61626C650A646563656E7472616C697A65642065636F73797374656D2074686174207072696F726974697A6573207472616E73706172656E63792C20666F726B6162696C6974792C20616E6420676F7665726E616E63652E0A0A4C6574E28099732074616B65206120636C6F736572206C6F6F6B206174207468652070726F67726573732C206B6579206D696C6573746F6E65732C20616E642077686174E280997320696E2073746F7265200A666F722074686520667574757265206F6620676E6F2E6C616E642E0A0A2323204D696C6573746F6E6573204F766572766965770A0A546865207072696F7269747920697320746F2065737461626C69736820612073656375726520616E6420737461626C65206E6574776F726B2E204F6E6365206F7065726174696F6E616C20616E64200A74686F726F7567686C79207465737465642C2074686520696E66726173747275637475726520666F72207265776172647320646973747269627574696F6E20616E6420646576656C6F706D656E74200A77696C6C2061637469766174652C20616363656C65726174696E67207468652067726F777468206F6620476E6F27732065636F73797374656D20666F7220626F7468206275696C6465727320616E64200A75736572732E0A0A48657265E28099732061206C6F6F6B206261636B2061742077686174207765E280997665206163636F6D706C697368656420736F206661722E0A0A23232320323032313A2054686520426567696E6E696E670A0A676E6F2E6C616E64E2809973206A6F75726E657920626567616E20696E20323032312C2063617272696564206F7574206279204A6165204B776F6E2C2077686F206C61696420746865200A67726F756E64776F726B20746F20646576656C6F7020476E6F2773206D6F7374207265766F6C7574696F6E61727920636F6D706F6E656E742C2074686520476E6F205669727475616C204D616368696E652028476E6F564D292C20616E6420626F6F74737472617020612073696D706C650A54656E6465726D696E74206E6F64652063617061626C65206F6620657865637574696E6720476E6F20636F64652E0A0A54686520476E6F564D2069732061207669727475616C206D616368696E652063617061626C65200A6F662064657465726D696E6973746963616C6C792072756E6E696E67206120737562736574206F6620476F20636F64652C20776865726520736D61727420636F6E747261637473206172650A636F6D706F73656420746F6765746865722062792073696D706C7920E2809C696D706F7274696E67E2809D207468656D2C206D756368206C696B6520776F726B696E67207769746820616E79207374616E646172640A476F207061636B6167652E2054686520696E697469616C20776F726B2077617320666F6375736564206F6E206372656174696E672074686520666972737420697465726174696F6E206F6620746865200A564D2C2061696D696E6720746F20696D706C656D656E74206120636F6D706C657465206665617475726520736574206F6620476E6F207768696C65206163636F756E74696E6720666F720A766172696F757320656467652063617365732E0A0A5B42792074686520656E64206F6620323032315D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F747265652F66613431326434626233386636643634383564396236313738346233346535643563613634353534292C0A727564696D656E7461727920746F6F6C696E672077617320617661696C61626C6520666F72206578706572696D656E74696E6720776974682074686520564D2C20616E20657874656E736976650A7375697465206F662074657374732077617320696E20706C6163652C20616E6420616E20696E697469616C2076657273696F6E206F6620476E6FE28099732073746174652070657273697374656E6365200A77617320696D706C656D656E7465642E2054686520666972737420636F6D6D69747320666F7220746865200A5B60626F6172647360207265616C6D5D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F747265652F6D61737465722F6578616D706C65732F676E6F2E6C616E642F722F64656D6F2F626F61726473290A7765726520696E74726F64756365642C20616E6420612066756E6374696F6E616C20636861696E2065786563757461626C652077617320646576656C6F7065642C20656E61626C696E6720746865200A6164646974696F6E206F66206E6577207061636B6167657320616E6420746865206162696C69747920746F2063616C6C2066756E6374696F6E732077697468696E207468656D2E0A0A23232320323032323A2054686520466972737420546573746E6574730A0A5468652066756C6C2073636F7065206F66207468652070726F6A656374206F6E6C7920626563616D652065766964656E7420696E20323032322C20666F6C6C6F77696E6720746865200A696D706C656D656E746174696F6E206F662074686520696E697469616C2066756E6374696F6E616C6974792E20447572696E67207468697320706572696F642C0A74686520476E6F2070726F6A65637420657870657269656E6365642061207369676E69666963616E7420696E63726561736520696E20636F6E7472696275746F72732C200A726573756C74696E6720696E2061207375726765206F66206E65772066656174757265732C206275672066697865732C20616E6420646576656C6F706D656E74730A6163726F7373206D756C7469706C65206172656173206265796F6E64206A7573742074686520564D2E2054686520476E6F20636F7265207465616D200A6772657720746F2074687265652066756C6C2D74696D6520656E67696E656572732C2077697468206164646974696F6E616C20686972696E67206566666F72747320756E6465727761792E0A0A2D20546872656520746573746E6574732077657265206C61756E63686564202874657374312C20746573743220616E64207465737433292C20656163682077697468207369676E69666963616E74200A696D70726F76656D656E747320696E2075736162696C69747920616E642065617365206F662061636365737320666F72206E6577636F6D6572732C20616E64206D6F7265206578616D706C65207265616C6D732E0A2D205468652060626F6172647360207265616C6D2077617320696D70726F7665642C20776974682074686520696E74726F64756374696F6E206F66206E657720666561747572657320696E636C7564696E670A65646974696E6720706F7374732C206D6F6465726174696F6E2C20616E64206C696E6B7320746F20656173696C7920636F6E737472756374207265706C69657320746F20706F737473207573696E670A60676E6F6B6579602E204164646974696F6E616C6C792C207468616E6B7320746F207468652060757365727360207265616C6D2C20476E6F20757365727320776572652061626C6520746F2072656769737465720A6120757365726E616D65207768696368207468656E2073686F776564207570206F6E207468652060626F6172647360207265616C6D2028616D6F6E67206F7468657273292E0A2D20546865204F6E626C6F63207465616D20626567616E2074686520646576656C6F706D656E74206F662074686520666972737420676E6F2E6C616E642077616C6C65742C0A5B4164656E615D2868747470733A2F2F7777772E6164656E612E6170702F292C206D61726B696E672074686520666972737420737465707320746F206372656174696E67207765622064417070730A7573696E6720676E6F2E6C616E642E0A2D2054686520525043206C6179657220676F74206D616E7920696D70726F76656D656E74732C20696E636C7564696E672060716576616C6020616E64206F7468657220666561747572657320746F200A696E737065637420476E6F20636F64652E0A2D204164646974696F6E616C206578616D706C65732077657265206164646564206F6E206372656174696E6720475243323020746F6B656E732C2061732077656C6C20617320737472696E67200A666F726D617474696E67207574696C69746965732E0A2D20546865206669727374205B776F726B73686F70735D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F776F726B73686F70732920616E642070726573656E746174696F6E730A7765726520706F73746564206F6E20686F7720746F2070726F6772616D20696E20476E6F2E0A2D204F6E2074686520476E6F20736964652C2074686520564D2077617320636F6E73697374656E746C7920696D70726F76656420746F20666978206D6F7265206275677320616E64200A696E637265617365206974732073616665747920666F7220757365206F6E2D636861696E2E0A0A5B456E642D6F662D79656172207374617475735D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F747265652F63616263316164396133363331396636386665643262633838383031386266636266663232386137290A0A23232320323032333A205468652047726F7774680A0A496E20323032332C2074686520476E6F207465616D206772657720746F207477656C766520656E67696E656572732C206D616E79206F662077686F6D20636F6E74696E756520746F20666F726D20746865200A476E6F20636F726520646576656C6F706D656E74207465616D20746F6461792E2041726F756E64207468652073616D652074696D652C20676E6F2E6C616E6420626567616E20736565696E67206974730A6669727374207265616C2D776F726C64206170706C69636174696F6E732C2070757474696E6720697473206361706162696C697469657320746F2074686520746573742E0A0A4164646974696F6E616C6C792C206E657720646576656C6F70657220746F6F6C73207765726520696E74726F647563656420746F20656E68616E63652074686520476E6F20646576656C6F706D656E740A657870657269656E63652E20546865736520696E636C756465207574696C697469657320737563682061732060676E6F20646F63602C2060676E6F207265706C602C2060676E6F206C696E74602C200A616C6F6E67736964652060676E6F646576602C2077686963682069732074686520666F756E646174696F6E616C20746F6F6C20666F72206275696C64696E67207265616C6D73206F6E20676E6F2E6C616E640A746F6461792E0A0A2D205B476E6F43686573735D2868747470733A2F2F6769746875622E636F6D2F676E6F76657273652F676E6F6368657373292077617320616E206561726C79206578706572696D656E7420746F200A70726F6772616D20636F6D706C657820476E6F20736D61727420636F6E7472616374732C2063617061626C65206F662072756E6E696E6720746865206261636B656E64206F662061206368657373200A7365727665722E2054686520476F7068657220636F6D6D756E6974792068616420746865206F70706F7274756E69747920746F20657870657269656E636520476E6F436865737320666F7220746865200A66697273742074696D6520617420476F70686572436F6E20323032332C20776865726520676E6F2E6C616E6420686967686C69676874656420476E6FE280997320756E69717565206665617475726573200A616E642069747320706F74656E7469616C20746F207472616E73666F726D2074686520646563656E7472616C697A6564206170706C69636174696F6E206C616E6473636170652E0A2D205B54657374335D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F72656C65617365732F7461672F636861696E25324674657374332E30292C206C61756E636865640A61742074686520656E64206F66203230323220616E6420636F6E74696E75656420696E20323032332C20656E61626C6564206275696C6465727320746F206578706572696D656E7420776974680A72756E6E696E672066756C6C206E6F64657320616E6420646576656C6F70696E6720696E6465786572732E2049742070726F76696465640A612070657273697374656E7420686973746F7279206F6620737461746520666F722065766572796F6E652E0A2D204D616E7920415049206465636973696F6E732C206C696B6520607374642E507265765265616C6D2829602C20776572652064697363757373656420616E6420696D706C656D656E7465642E0A2D20546865205B4C6963656E73655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F3F7461623D4C6963656E73652D312D6F762D66696C652920666F7220676E6F2E6C616E640A7761732065737461626C697368656420617320746865202A476E6F204E6574776F726B205075626C6963204C6963656E73652A2C206120666F726B206F662074686520474E55204166666572726F200A47656E6572616C205075626C6963204C6963656E73652E0A2D205B42657274795D2868747470733A2F2F62657274792E746563682F2920616E64205B54657269746F72695D2868747470733A2F2F74657269746F72692E636F6D2F2920626563616D6520636F7265200A65636F73797374656D206275696C646572732C206372656174696E6720696E7465677261746564206170706C69636174696F6E732C20636F6D6D756E69636174696F6E20746F6F6C732C20616E64200A736F6369616C20706C6174666F726D732E0A2D20546865206669727374206F6666696369616C20646F63756D656E746174696F6E207761732072656C65617365642C20616C6C6F77696E67206D6F726520757365727320746F206265200A6F6E626F6172646564206F6E746F20676E6F2E6C616E6420776974686F757420686176696E6720746F206C6561726E206469726563746C792066726F6D2074686520736F757263652E0A2D2054686520426574612076657273696F6E206F66205B476E6F20506C617967726F756E645D2868747470733A2F2F706C61792E676E6F2E6C616E642F29206C61756E636865642C2070726F766964696E670A6120737061636520746F206578706572696D656E7420476E6F2070726F6772616D7320616E64207265616C6D73206469726563746C792066726F6D20746865207765622E0A0A5B456E642D6F662D79656172207374617475735D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F747265652F63336134393933333335663838383139383965623439653465666561366133633133313030363164290A0A23232320323032343A2054686520526566696E656D656E740A0A32303234207072696F726974697A656420746865206372656174696F6E206F66206120737461626C650A636861696E20746F206C61756E636820617320736F6F6E20617320706F737369626C652E205468726F7567686F75742074686520796561722C20746865207465616D20666F6375736564206F6E200A64656C69766572696E672067726561742073746162696C697479206F6E20676E6F2E6C616E6420616E64206265696E672061626C6520746F2066697820746865206D6F737420637269746963616C200A697373756573207768696368207374616E6420696E2074686520776179206F66206C61756E6368696E672074686520666972737420737461626C65206E6574776F726B2E0A0A546865206C61756E6368206F66205465737434206F6E204A756C792031352C20323032342C207761732061206D616A6F72206D696C6573746F6E6520696E20676E6F2E6C616E64E2809973206A6F75726E65792E0A4F6E65206F6620746865206D61696E206F626A65637469766573206F66207468697320746573746E65742077617320746F20636F6C6C6563742076616C7561626C65206B6E6F776C6564676520616E64200A6578706572746973652066726F6D206F7065726174696F6E73206C696B652072756E6E696E6720612066756C6C206E6F64652C2074657374696E672076616C696461746F7220636F6F7264696E6174696F6E2C0A6465706C6F79696E6720737461626C6520476E6F2064417070732C206372656174696E6720616E642074657374696E6720746F6F6C732074686174207265717569726520706572736973746564200A737461746520616E64207472616E73616374696F6E20686973746F72792E0A0A447572696E672054657374342C2074686F7573616E6473206F662062756720666978657320616E64207369676E69666963616E7420616476616E63656D656E7473207765726520696D706C656D656E7465642C0A696E636C7564696E6720696D70726F76656D656E747320746F206D756C74692D6E6F646520746573746E65747320616E6420657373656E7469616C207570646174657320746F2060676E6F646576602E0A0A2A2A48657265E2809973206120627265616B646F776E206F6620746865206D6F737420696D706F7274616E74206B65792066656174757265732074686174206D616B6520546573743420756E697175653A2A2A0A0A2D202A2A4D756C74692D6E6F646520546573746E65743A2A2A2054686973207761732074686520666972737420746573746E65742074686174207761732063617061626C65206F662072756E6E696E670A6F6E206D756C7469706C65206E6F6465732C206D616B696E6720696D706F7274616E7420737465707320746F776172647320646563656E7472616C697A6174696F6E0A2D202A2A5065726D616E656E7420616E6420737461626C6520546573746E65743A2A2A20556E6C696B652070726576696F75732076657273696F6E732C205465737434207761732061200A7065726D616E656E7420746573746E65742C20676976696E67206561726C792061646F707465727320616E64206275696C64657273206120636F6E73697374656E7420656E7669726F6E6D656E74200A746F206275696C6420616E642074657374206441707073207768696C6520616C736F2070726F766964696E67207468656D207769746820746865206D6F73742075702D746F2D6461746520737461626C65200A656E7669726F6E6D656E740A2D202A2A476F7644414F2050726F6F662D6F662D436F6E636570743A2A2A20546F676574686572207769746820746865206C61756E6368206F662054657374342C20746865206669727374200A6672616D65776F726B20666F7220646563656E7472616C697A656420676F7665726E616E63652077617320696E74726F64756365642C20616C6C6F77696E672073656C656374697665200A636F6E7472696275746F727320746F20626567696E2070617274696369706174696E6720696E206465636973696F6E2D6D616B696E672070726F6365737365732E0A0A54657374342070726F766964656420637269746963616C20696E73696768747320696E746F2072756E6E696E672061206D756C74696E6F6465206E6574776F726B20616E6420666163696C69746174696E670A6F6E2D636861696E20676F7665726E616E63652E2054686520726573756C7420776173206120737461626C6520626C6F636B636861696E206E6574776F726B207769746820372076616C696461746F72200A6E6F6465732C2061732077656C6C206173205B3520676F7665726E616E63652070726F706F73616C735D2868747470733A2F2F74657374342E676E6F2E6C616E642F722F676F762F64616F2F7632292C0A33206F66207468656D206578656375746564207375636365737366756C6C79206261736564206F6E207468652074776F2D746869726473206D616A6F726974792E0A0A4C6174657220696E20323032342C205B54657374355D2868747470733A2F2F74657374352E676E6F2E6C616E642F29207761732072656C65617365642E204D61696E206B657920656C656D656E7473200A7468617420546573743520656E61626C656420696E636C7564653A20657870616E64696E67207468652063757272656E742076616C696461746F72207365742C207768696368206E6F7720636F6E73697374730A746F2031372076616C696461746F72732C2070757368696E67206164646974696F6E616C20476E6F564D2066697865732C2072656C656173696E6720476F7644414F2076322C20616E64206F766572616C6C0A7175616C6974792D6F662D6C69666520696D70726F76656D656E747320666F72206275696C646572732E205669657720746573746E6574E28099732063757272656E7420616374697669747920616E64200A6465706C6F796564207265616C6D73206F6E205B476E6F7363616E5D2868747470733A2F2F676E6F7363616E2E696F292E0A0A54686520476E6F20436F7265205465616D20616C736F2067726561746C7920666F6375736564206F6E206372656174696E67206120737461626C6520657870657269656E6365206F6E20476E6F3A0A0A2D20466978696E67206D616E7920646966666572656E742062756773206F6E2074686520564D20616E64206D616B696E6720697473206265686176696F7572206D6F7265207072656469637461626C65200A616E642062657474657220646F63756D656E7465642E0A2D20496D70726F76696E6720E2809C7175616C697479206F66206C696665E2809D20746F6F6C7320746861742073686F772074686520706F776572206F6620646576656C6F70696E67206F6E20676E6F2E6C616E642C0A6C696B6520746865205B7472616E73616374696F6E20696E64657865725D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F74782D696E64657865722F2920616E642060676E6F646576600A2D20496D70726F76696E6720706572666F726D616E636520696E20637269746963616C20706174687320616E64206D616B696E67206265686176696F7273206F6620646966666572656E7420415049730A636F6E73697374656E742C20616E6420636C656172696E67206F757420746865207374616E64617264206C69627261726965732E0A2D20496D70726F76696E6720746865206265686176696F72206F6620696E746567726174696F6E20746F6F6C732C206C696B652060676E6F636C69656E746020616E642060676E6F6B6579602C206173200A77656C6C206173206B69636B2D7374617274696E6720646576656C6F706D656E74206F662061206D6F62696C652060676E6F6B657960206170706C69636174696F6E2E0A0A2A2A54686520726F616420616865616420737461727473207769746820746865207072657061726174696F6E206F662074686520676E6F2E6C616E64E28099732042657461204C61756E63682E200A4865726520697320686F7720746865207061746820666F7277617264206C6F6F6B73206C696B652E2A2A0A0A23232042657461204C61756E636820285550434F4D494E47290A0A5765E280997265206578636974656420746F20616E6E6F756E63652074686174206173203230323420636F6D657320746F206120636C6F73652C207765206172652067656172696E6720757020666F72200A2A2A42657461204C61756E63682A2A2C20616E74696369706174656420696E206561726C7920323032352E2048657265E2809973207768617420796F752063616E20657870656374200A61742067656E657369733A0A0A312E20436F6E7472696275746F72732077686F2068617665206275696C7420676E6F2E6C616E642077696C6C20666F726D2074686520696E697469616C20476F7665726E616E63652044414F202822476F7644414F22292C0A646973747269627574696E67206D656D6265727368697020696E746F207468726565207469657273E280945431202868696768657374292C2054322C20616E6420543320286C6F7765737429E280946261736564200A6F6E207468652073697A6520616E6420696D70616374206F6620746865697220636F6E747269627574696F6E73206173206F75746C696E656420696E204A6165204B776F6E27730A5B476F7644414F2064726166745D2868747470733A2F2F676973742E6769746875622E636F6D2F6A61656B776F6E2F3931386164333235633463386637666235643665303232653333636237656233292E0A4D656D6265727368697020697320676F7665726E656420627920616765206C696D6974732C20636F6E747269627574696F6E2063726974657269612C20616E6420612073747275637475726564200A7061796D656E742073797374656D207469656420746F2074686520476F7644414F506179547265617375727920746F20656E7375726520636F6D70656E736174696F6E206469726563746C7920616C69676E730A77697468206561636820636F6E7472696275746F722773206C6576656C206F6620636F6E747269627574696F6E2E202A2A54686520476F7644414F2070726F706F73616C2072656D61696E7320616E200A696E697469616C206472616674207375626A65637420746F207265766973696F6E73206265666F72652066696E616C20696D706C656D656E746174696F6E2E2A2A0A322E20676E6F2E6C616E642077696C6C20696E74656E74696F6E616C6C79206D61696E7461696E2061206D6F64657374207472616E73616374696F6E2070726F63657373696E672073706565642061740A67656E657369733B20686F77657665722C20746865206E6574776F726B2077696C6C20656E61626C65206561726C792061646F707465727320746F20657870657269656E6365206974730A666561747572657320616E6420626567696E206163637275696E672072657761726473206261736564206F6E20746865697220636F6E747269627574696F6E7320746F207468652070726F6A6563740A2A2A5768696C65206E6F7420696D6D6564696174656C7920636C61696D61626C652C20746865736520726577617264732077696C6C206265636F6D652072656465656D61626C6520696E206675747572650A70686173657320746F207265636F676E697A65206561726C79207061727469636970616E747320666F7220746865697220636F6E747269627574696F6E732A2A2E0A332E20676E6F2E6C616E642077696C6C206F70657261746520756E646572206120436F6E737469747574696F6E20746861742065737461626C697368657320636C6561722067756964656C696E65730A6F6E2074686520636F6D6D756E6974792773207269676874732C206C69626572746965732C206F626C69676174696F6E732C20676F7665726E616E63652C2065636F6E6F6D6963732C20616E64200A626F74682063757272656E7420616E642066757475726520696D706C656D656E746174696F6E73206F662074686520676E6F2E6C616E6420636861696E2E202A2A54686520676E6F2E6C616E64200A636F6E7472696275746F7220636F6D6D756E6974792077696C6C20706172746963697061746520616E6420656E6761676520696E2074686973206566666F72742E2A2A0A342E205468652067656E6573697320746F6B656E20646973747269627574696F6E206F6620474E4F542C20676E6F2E6C616E64E2809973206E617469766520746F6B656E2C2077696C6C207072696D6172696C790A616C6C6F6361746520746865206D616A6F72697479206F662074686520737570706C7920746F2074686520436F736D6F7320487562202841544F4D20686F6C646572732920636F6D6D756E6974792C200A726577617264696E6720746865697220616C69676E6D656E74207769746820676E6F2E6C616E64E2809973206D697373696F6E2E205468652072656D61696E696E6720474E4F5420616C6C6F636174696F6E730A77696C6C206265207573656420746F20737570706F727420676E6F2E6C616E64E280997320636F6D6D756E69747920706F6F6C2C20766172696F7573204275696C646572732044414F73206F72200A6275696C6465727320636F6D6D756E69746965732C20616E642074686520636F7265207465616D206275696C6465727320287468726F756768204E657754656E6465726D696E74292C207768696368200A77696C6C20706C61792061206372756369616C20726F6C6520696E2073686170696E672074686520706C6174666F726DE2809973206675747572652067726F77746820616E6420646576656C6F706D656E742E0A2A2A54686520474E4F5420746F6B656E2077696C6C206265206469737472696275746564206174206C61756E6368206275742077696C6C20696E697469616C6C79206265206E6F6E2D7472616E7366657261626C652E2A2A0A352E205768696C652074686520474E4F5420746F6B656E2077696C6C206E6F74206265207472616E7366657261626C652C207573657273206F6620746865206E6574776F726B2077696C6C206265200A61626C6520746F2075736520697420746F2070617920666F722067617320666565732E20546F6B656E20686F6C646572732077696C6C2062652061626C6520746F20766965772074686569720A62616C616E6365732C207769746820657870656374656420737570706F72742066726F6D204C65646765722C204164656E612C20616E642C706F74656E7469616C6C792C206F74686572200A636F6D6D756E6974792077616C6C6574732E20546869732077696C6C20616C6C6F7720757365727320746F206465706C6F7920616E6420696E7465726163742077697468207265616C6D73206F6E0A676E6F2E6C616E642E202A2A506C65617365206E6F74652074686174207468652063757272656E7420636861696E2064657369676E20646F6573206E6F7420696E766F6C766520616E79207374616B696E672E0A496E73746561642C2074686520766F74696E6720706F7765722069732064657465726D696E65642062792061206D656D626572E28099732072657075746174696F6E2E2A2A0A362E204275696C646572732077696C6C206861766520746865206F70706F7274756E69747920746F206275696C6420616E6420746573742064417070732C2074686572656279206163746976656C790A636F6E747269627574696E6720746F2074686520706C6174666F726DE28099732067726F7774682E202A2A416C74686F7567682074686520474E4F5420746F6B656E206973206E6F7420676F696E6720746F0A6265207472616E7366657261626C652C2069742077696C6C207374696C6C20626520706F737369626C6520746F206D696E742C206275726E20616E64207472616E7366657220626F7468200A2A636F696E732A2A2A202861206E6174697665206B696E64206F6620746F6B656E2C2061636365737369626C65207468726F75676820736D61727420636F6E747261637473207573696E6720746865200A62616E6B6572206D6F64756C6529202A2A616E6420746F6B656E7320696D706C656D656E74656420696E20636F64652A2A2C20692E652E202A475243323020746F6B656E732A2C2073696D696C617220746F200A74686569722045524320636F756E74657270617274732E0A0A4275696C646572732073686F756C64206265206177617265207468617420647572696E6720676E6F2E6C616E64E28099732042657461206E6574776F726B2073746174652C2074686520636F7265207465616D0A6D61792C20696E20657863657074696F6E616C2063617365732C206E65656420746F207265766572742074686520636861696E2073746174652E205375636820696E7374616E636573206D696768740A696E636C7564653A0A0A2D202A2A4964656E74696669636174696F6E206F66206120476E6F564D206275672A2A2074686174207265717569726573206120726F6C6C6261636B20616E64207265706C6179206F66207472616E73616374696F6E732E0A2D202A2A446574656374696F6E206F6620612066756E6374696F6E616C2069737375652077697468696E2061207265616C6D2C2A2A20776865726520746865206669782069732077656C6C2D646566696E65642C0A616E64207265706C6179696E67207472616E73616374696F6E7320697320726571756972656420746F206D61696E7461696E20636F6E73697374656E63792E0A0A5468652042657461204C61756E63682077696C6C20657175697020636F6E7472696275746F7273207769746820657373656E7469616C20746F6F6C7320746F206275696C6420616E64200A6578706572696D656E74206F6E20676E6F2E6C616E642E2057652068617665207075626C69736865642061200A5B4C61756E6368204D696C6573746F6E655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6D696C6573746F6E652F372920746F20747261636B2070726F67726573730A616E64206578706C6F72652074686520737065636966696320696E69746961746976657320776520706C616E20746F206164647265737320757020756E74696C206C61756E63682E0A0A2A2A4B657920636F6D706F6E656E7473206F6620746865206E6574776F726B2061742047656E6573697320696E636C7564653A2A2A0A0A2D202A2A476E6F564D2A2A203A20466F72207468652042657461204C61756E63682C2074686520476E6F564D20697320616E74696369706174656420746F20626520696E20612072656C61746976656C790A737461626C6520616E64206E6561726C7920666561747572652D636F6D706C6574652073746174652E20427567732061726520616E2065787065637465642070617274206F662074686973200A70686173653B2063617574696F6E206973206164766973656420746F206E6176696761746520706F74656E7469616C206973737565732E0A2D202A2A54656E6465726D696E74322A2A3A2054656E6465726D696E74322077696C6C206D61726B2061207369676E69666963616E74206C65617020696E20636F6E73656E737573200A706572666F726D616E636520616E64207363616C6162696C6974792E204B657920696D70726F76656D656E747320696E636C7564652066617374657220626C6F636B2066696E616C6974792C200A6D6F726520726F627573742076616C696461746F72206D616E6167656D656E742C20616E64206772656174657220726573696C69656E636520746F206E6F6465206661696C757265732E0A2D202A2A476F7644414F20466F726D6174696F6E3A2A2A20676E6F2E6C616E64E280997320646563656E7472616C697A656420676F7665726E616E63652073797374656D2077696C6C200A6265206C6976652061742047656E657369732E20436F6D706F736564206F6620746865206D6F73742061637469766520636F6E7472696275746F72732C20476F7644414F2077696C6C2074616B65200A6F6E20726573706F6E736962696C69747920666F7220676F7665726E696E6720676E6F2E6C616E64206F6E2D636861696E2C2068616E646C696E67206465636973696F6E73206C696B65200A70726F746F636F6C2075706772616465732C20706172616D65746572206368616E6765732C20616E64206F7468657220637269746963616C206465636973696F6E7320746F20656E73757265200A746865206E6574776F726B2773206C6F6E672D7465726D207375737461696E6162696C69747920616E6420636F6D6D756E69747920616C69676E6D656E742E0A2D202A2A426F617264733A2A2A20426F617264732077696C6C206F70657261746520617320612073696E676C65207265616C6D2077686572652075736572732063616E2063726561746520616E64200A706172746963697061746520696E20666F72756D7320616E64206D65737361676520626F617264732C207375626A65637420746F20626F6172642D7370656369666963207065726D697373696F6E732E0A4561636820626F6172642077696C6C206265206D616E61676564207468726F75676820697473206F776E2061646D696E697374726174696F6E2044414F2E0A0A0A2A2A4B657920746F6F6C7320666F72206275696C6465727320617661696C61626C65206174207468652042657461204C61756E63683A2A2A0A0A2D202A2A436F72652064657620746F6F6C733A2A2A20412066756C6C792D666561747572656420736574206F6620746F6F6C7320666F72206C6F63616C20646576656C6F706D656E74206F6620476E6F200A644170707320616E64206C69627261726965732C20696E636C7564696E672060676E6F6B6579602C206120706F77657266756C20434C49206B6579206D616E6167656D656E7420746F6F6C20616E64200A636C69656E742C2060676E6F776562602C206120756E6976657273616C207765622066726F6E74656E6420666F7220676E6F2E6C616E642C20616E642060676E6F646576602C2061206C6F63616C200A646576656C6F706D656E7420736F6C7574696F6E20737461636B206F66666572696E672061206275696C742D696E20676E6F2E6C616E64206E6F64652077697468206120686F742D72656C6F6164200A6665617475726520666F7220736D61727420636F6E7472616374732E0A2D205B2A2A476E6F20506C617967726F756E642A2A5D2868747470733A2F2F706C61792E676E6F2E6C616E642F293A20412062726F777365722D626173656420746F6F6C20746F2077726974652C0A746573742C2072756E2C206465706C6F792C20616E6420736861726520476E6F20636F64652C20696E7370697265642062792074686520476F20706C617967726F756E642E204974206F66666572730A612073696D706C6520616E6420696E7465726163746976652077617920746F206578706572696D656E74207769746820476E6F20776974686F757420746865206E65656420666F722061206C6F63616C200A646576656C6F706D656E7420656E7669726F6E6D656E742E0A2D205B2A2A476E6F2053747564696F2A2A5D2868747470733A2F2F676E6F2E73747564696F2F293A204120706F77657266756C20756E696669656420646576656C6F706D656E7420706C6174666F726D200A64657369676E656420746F206472697665206441707020646576656C6F706D656E74206F6E20676E6F2E6C616E642E20546869732070726F647563742073756974652077696C6C20696E636C756465200A612066756C6C2D6665617475726564204944452C20776F726B7370616365206D616E6167656D656E742C2070726F64756374696F6E2D6772616465206361706162696C69746965732C20616E64200A696E746567726174656420746F6F6C7320746F20737570706F727420656666696369656E7420646576656C6F706D656E7420776F726B666C6F77732E2049742077696C6C206576656E7475616C6C79200A6665617475726520616E20657874656E73697665206D61726B6574706C61636520666F72207265616C6D2074656D706C6174657320616E642072656164792D746F2D75736520736F6C7574696F6E732E0A546F6461792C2074686520626574612076657273696F6E206F662053747564696F2066656174757265732061206D696E696D616C2076657273696F6E206F6620746865204944452076696120476E6F0A506C617967726F756E642C20616C6F6E67207769746820436F6E6E6563742C20616E206170702064657369676E656420666F72207265616C6D20696E746572616374696F6E2E0A2D202A2A476E6F2E6D653A2A2A20456E766973696F6E656420746F20626520612064796E616D69632065636F73797374656D206F66207265616C6D732073657276696E6720617320616E200A656475636174696F6E616C20616E6420636F6D6D756E6974792068756220746F20656D706F776572206275696C64657273207468726F756768206C6561726E696E672C20636F6C6C61626F726174696F6E2C0A616E6420656E676167656D656E742E2054686520696E697469616C2072656C656173652C20776869636820697320657374696D6174656420746F206265207265616479206279207468652042657461200A4C61756E63682C2077696C6C2066656174757265207475746F7269616C732C206120746F6F6C696E672073656374696F6E2C20616E642065636F73797374656D20757064617465732C20776974680A706C616E7320746F2065766F6C766520696E746F20612076696272616E7420737061636520666F7220636F6D6D756E69747920696E746572616374696F6E20616E64206120636F6D70726568656E736976650A656475636174696F6E616C20706C6174666F726D2E0A2D205B2A2A646F63732E676E6F2E6C616E642A2A5D2868747470733A2F2F646F63732E676E6F2E6C616E642F293A20546865206F6666696369616C20676E6F2E6C616E6420646F63756D656E746174696F6E2C0A636F766572696E6720626173696320636F6E63657074732C2067657474696E672073746172746564207475746F7269616C732C20646576656C6F706572206775696465732C207265666572656E6365732C20616E64206D6F72652E0A2D205B2A2A676E6F2F6578616D706C65732A2A5D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F747265652F6D61737465722F6578616D706C6573293A200A52656164792D746F2D757365206578616D706C6520736D61727420636F6E74726163747320616E64206C6962726172696573207772697474656E20696E20476E6F2E0A2D202A2A436F6D6D756E697479205370616365733A2A2A204275696C646572732077696C6C20686176652061636365737320746F20657870616E64656420746F6F6C696E6720746F206275696C640A616E64206465706C6F79206170706C69636174696F6E7320696E205B676E6F76657273655D2868747470733A2F2F6769746875622E636F6D2F676E6F7665727365292C206120636F6D6D756E6974792D6C65640A4769744875622073706163652C20656E737572696E67202A2A676E6F2E6C616E642A2A206265636F6D657320612070726F647563746976652067726F756E6420746F20656E636F75726167650A66757475726520696E6E6F766174696F6E2E0A0A2323204D61696E6E6574204C61756E636820285550434F4D494E47290A0A5768696C65206F75722042657461204C61756E63682077696C6C20696E74726F647563652074686520636F7265206665617475726573206F662074686520676E6F2E6C616E64206E6574776F726B2C0A746865202A2A4D61696E6E6574204C61756E63682A2A2077696C6C20666F637573206F6E20657870616E64696E67202A2A676E6F2E6C616E642A2AE280997320696E7465726F7065726162696C697479200A77697468206F7468657220636861696E732E2042792070726F766964696E6720612066756C6C792D66656174757265642C20696E7465726F70657261626C6520626C6F636B636861696E2C200A2A2A676E6F2E6C616E642A2A2077696C6C20616C6C6F77206275696C6465727320746F20696E746567726174652074686569722070726F647563747320616E642073657276696365732077697468200A74686520676E6F2E6C616E64206E6574776F726B2C207468657265666F7265207363616C696E67207468652065636F73797374656D2E0A0A2A2A486572652061726520736F6D65206B6579206665617475726573206F6620746865204D61696E6E6574204C61756E63683A2A2A0A0A2D202A2A496E7465726F7065726162696C69747920776974682049424320616E64204943533A2A2A202A2A676E6F2E6C616E642A2A2077696C6C20696E7465677261746520496E7465722D426C6F636B636861696E0A436F6D6D756E69636174696F6E20284942432920616E6420496E746572636861696E2073656375726974792028494353292C20616C6C6F77696E67207365616D6C65737320696E746572616374696F6E200A6265747765656E202A2A676E6F2E6C616E642A2A20616E64206F746865722049424320616E642049435320636F6D70617469626C6520636861696E732E20447572696E672074686973200A6D696C6573746F6E652C206D6F6469666965642076657273696F6E73206F662049424320616E64204943532077696C6C20626520696E74656772617465642C2076657273696F6E732074686174200A6172652066756C6C7920636F6D70617469626C652077697468206578697374696E6720436F736D6F7320636861696E732C2063616C6C6564204942437820616E6420494353782E0A2D202A2A476E6F2053444B3A2A2A204275696C646572732077696C6C206761696E2061636365737320746F2074686520476E6F2053444B2C206D616B696E672074686520656E746972652070726F636573730A6F66206275696C64696E6720616E64206465706C6F79696E67206441707073206F6E20746865206E6574776F726B206D756368206561736965722E0A2D202A2A4C61756E636870616420666F722064417070733A2A2A205468652072656C65617365206F662061207370656369666963204C61756E636870616420666F722064417070732077696C6C200A616C6C6F77206275696C6465727320746F20717569636B6C79206465706C6F7920616E64207363616C65207468656972206170706C69636174696F6E73206F6E20676E6F2E6C616E642E0A2D202A2A52657761726420446973747269627574696F6E3A2A2A20436F6E7472696275746F72732077696C6C2062652061626C6520746F20636F6C6C65637420746865207265776172647320746865790A6861766520616363756D756C617465642066726F6D20646966666572656E7420636F6E747269627574696F6E7320756E74696C2074686973207068617365206F6620746865206E6574776F726B2E0A2D202A2A506572666F726D616E636520456E68616E63656D656E74733A2A2A20546865204D61696E6E6574204C61756E63682077696C6C20616C736F20696E74726F64756365207369676E69666963616E740A706572666F726D616E63652075706772616465732C20696E636C7564696E67207368617264696E6720616E6420696E63726561736564205450532C20746F20737570706F7274206D6F7265200A636F6D706C6578206170706C69636174696F6E732E0A2D202A2A5472616E736665727320656E61626C65643A2A2A20447572696E672074686973207068617365206F6620746865206C61756E63682C20474E4F5420746F6B656E73206265636F6D65200A7472616E7366657261626C652E2054686973207472616E736974696F6E2077696C6C206D61726B2061207369676E69666963616E74206D696C6573746F6E652C20616C6C6F77696E67207573657273200A746F20656E6761676520696E20746F6B656E207472616E73616374696F6E732C20696E746572616374207769746820746865206E6574776F726B20616E6420697473206170706C69636174696F6E732C200A616E6420636F6E7472696275746520746F207468652062726F616465722065636F6E6F6D696320616374697669746965732077697468696E2074686520676E6F2E6C616E642065636F73797374656D2E0A2D202A2A426F617264732A2A3A20412066756C6C20736F6369616C20696E746572616374696F6E20644170702077696C6C20626520617661696C61626C652E2055736572732077696C6C20636F6E74696E75650A746F2063726561746520616E6420706172746963697061746520696E20666F72756D7320616E64206D65737361676520626F617264732C207769746820746865206164646564206162696C6974790A746F206275696C64207468656972206F776E20646563656E7472616C697A656420736F6369616C206D6564696120706C6174666F726D73207573696E67206120637573746F6D697A61626C65200A6672616D65776F726B2E20466F726B6162696C69747920616E642044414F2D64726976656E20676F7665726E616E63652077696C6C20656E61626C65207363616C61626C652C20757365722D64726976656E0A636F6D6D756E69746965732E0A0A23232043616C6C20746F20436F6E747269627574650A0A676E6F2E6C616E642070757473206174207468652063656E746572206F6620697473206964656E746974792074686520636F6E7472696275746F72732074686174206172652068656C70696E6720746F0A63726561746520616E64207368617065207468652070726F6A6563742E20436F6E747269627574696E6720746F20676E6F2E6C616E64E280997320646576656C6F706D656E7420746F646179206D65616E73200A796F75206861766520746865206F70706F7274756E69747920746F206D616B652061206E6F7461626C6520696D706163742061742073756368206120637269746963616C20737461676520696E207468650A70726F6A656374E280997320726F61646D61702E0A0A466F72206E6F772C20776520617265206C6F6F6B696E6720666F7220746865206561726C696573742061646F70746572733B2074686F736520637572696F757320746F206578706C6F72652061200A6E65772077617920746F206275696C6420736D61727420636F6E74726163747320616E6420656167657220746F20626520612070617274206F6620746865206E6578742067656E65726174696F6E206F660A626C6F636B636861696E2070726F6772616D6D696E672E204A6F696E20757320616E64205B6265636F6D65206120636F6E7472696275746F7220746F6461795D2868747470733A2F2F676E6F2E6C616E642F636F6E7472696275746529210A0A232320436F6E636C7573696F6E0A0A57697468206D6F7265207468616E20746872656520796561727320696E20746865206D616B696E672C20676E6F2E6C616E64206973206E6F7720636C6F736572207468616E206576657220746F0A6C61756E6368696E672E20546865202A2A42657461204C61756E63682A2A2C207768696C6520726570726573656E74696E6720616E20696D706F7274616E74207374657020696E20676E6F2E6C616E64E28099730A6A6F75726E65792C2073686F756C64206265207365656E206173206F6E6C792074686520626567696E6E696E672E0A0A467574757265206D696C6573746F6E65732061726520656E766973696F6E656420746F206272696E6720696D70726F76656420706572666F726D616E63652C200A696E7465726F7065726162696C6974792077697468206F7468657220626C6F636B636861696E206E6574776F726B73207468726F756768204942437820616E6420494353782C20746865200A6162696C69747920666F72206275696C6465727320746F20696E746567726174652074686569722070726F647563747320616E64207365727669636573207769746820676E6F2E6C616E642C200A6F6E626F617264696E6720746F6F6C7320666F7220646966666572656E742075736572207365676D656E74732C20656E68616E63656420737570706F727420666F72206275696C6465727320616E64200A6D756368206D6F72652E0A0A57652077696C6C20686F7374206120512641206F6E205B446973636F72645D2868747470733A2F2F646973636F72642E636F6D2F696E766974652F676E6F6C616E64292C2054687572736461792C200A446563656D626572203139746820617420363A333020706D204345542F20393A333020616D205053542C20666F722074686520636F6D6D756E69747920746F206A6F696E20616E64206C6561726E206D6F72652061626F7574200A676E6F2E6C616E6420616E64207570636F6D696E67206D696C6573746F6E65732E20506C6561736520616464207175657374696F6E73206168656164206F662074696D6520746F2074686973200A5B666F726D5D2868747470733A2F2F646F63732E676F6F676C652E636F6D2F666F726D732F642F31444E38596E654A322D71767A73646E47736B5F5A564134436E427468556F703374677758436F646C46334D2F6564697429200A736F2077652063616E206D616B65207375726520746F2061646472657373207468656D2E0A3214323032342D31322D31365430303A30303A30305A323A61647269616E616B616C70612C6D696368656C6C65656C6C656E2C746865686F776C2C73616C6D6164332C4B6F7574656B692C6C656F6868686E322A676E6F6C616E642C676E6F766D2C626574616C61756E63682C626C6F636B636861696E2C676F6C616E670AC36F0A0A2F766D2E6D5F63616C6C12B46F0A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F737432077768792D676E6F322057687920646F207765206E65656420476E6F20616E6420676E6F2E6C616E643F32866E0A0A676E6F2E6C616E64206973206120646563656E7472616C697A6564206F7065726174696E672073797374656D20746F2063726561746520646563656E7472616C697A656420706C6174666F726D732E0A497420697320706F776572656420627920476E6F2C20612064657465726D696E697374696320696D706C656D656E746174696F6E206F662074686520476F2070726F6772616D6D696E670A6C616E67756167652C206173206120706F77657266756C20746F6F6C20746F206275696C6420636F6D706F7361626C65207061636B6167657320616E6420736D61727420636F6E747261637473206F6E0A6120626C6F636B636861696E2E20416C74686F75676820676E6F2E6C616E642063616E20737570706F727420612076617269657479206F66206170706C69636174696F6E7320616E640A696D706C656D656E746174696F6E732C20616D6F6E67206F757220636F7265207573652D63617365732C20776520696E74656E6420676E6F2E6C616E6420746F206265207573656420617320610A6261736520666F722068756D616E2D63656E7472696320616E64207472616E73706172656E7420736F6369616C20706C6174666F726D732E20496E207468697320626C6F6720706F73742C2077650A6F75746C696E65207468652070726F626C656D73207468617420676E6F2E6C616E64206164647265737365732C20616E64207768617420736F6C7574696F6E7320776520617265206275696C64696E670A746F20736F6C7665207468656D2E205768696C6520746869732073756D6D617279206973206E6F6E2D6578686175737469766520616E64207265666C65637473207468652065766F6C76696E670A666F637573206F66207468652070726F6A6563742C206974206F666665727320616E206F76657276696577206F66206F7572206B6579206F626A6563746976657320616E64206F6E676F696E670A696E6974696174697665732E0A0A23232054686520536F6369616C2050726F626C656D0A0A3E20416368696576696E6720556E73746F707061626C652054727574682E0A0A5765206E656564206120736F6369616C20706C6174666F726D20746861742063616E206265206120636F6D6D6F6E2067726F756E6420666F72206120706C7572616C697479206F6620636F6E7472617374696E6720766F696365732C207768696C65206265696E67207472616E73706172656E7420696E20697473206D6F6465726174696F6E20616E6420676F7665726E616E63652C2077697468206275696C742D696E20666561747572657320746F206372656174652073636869736D73207768656E2074686174206973206E6F7420757068656C642E0A0A2D205468652063757272656E742063656E7472616C697A656420736F6369616C206E6574776F726B696E6720706C6174666F726D732061726520706C616775656420776974682070726F626C656D7320666F722075736572732C20636F6E74656E742063726561746F72732C20616E6420627573696E65737365733A0A092D20557365727320617265206F6674656E20636F6E73747261696E6564206279207468652063656E7472616C697A6564206F776E65727368697020616E6420636F6E74726F6C206F6620706C6174666F726D732E2044756520746F20746865206E6574776F726B206566666563742C20697427732076657279206861726420746F206D6F766520617761792066726F6D20616E2065737461626C697368656420706C6174666F726D2C206F7220746F206372656174652061202273636869736D222C206772616E74696E672075736572732074686520706F73736962696C697479206F6620747275652063686F69636520616E6420726571756972696E672074686520706C6174666F726D20746F20616C69676E20776974682074686520696E74657265737473206F66207468652075736572732E0A092D20436F6E74656E742063726561746F7273206672657175656E746C79206E65656420746F2061646865726520746F20756E7772697474656E2022636F6D6D756E6974792067756964656C696E65732220746F207072657365727665206D6F6E6574697A6174696F6E206F722C20776F7273652C20746F2061766F696420736861646F7762616E732074686174206869646520746865697220636F6E74656E742066726F6D20746865697220666F6C6C6F776572732E20536861646F7762616E7320617265206F6674656E206174747269627574656420746F206F706171756520E2809C616C676F726974686D73E2809D2C206D616B696E6720697420646966666963756C7420746F206368616C6C656E6765206465636973696F6E73206F722070726F766520696E7374616E636573206F66206469736372696D696E6174696F6E2C20626961732C206F722063656E736F72736869702E0A092D2043656E7472616C697A65642C20756E2D666F726B61626C6520706C6174666F726D732063616E2068617665206167656E6461732C20616E64207468656972206167656E6461732061726520636F6E74726F6C6C656420627920706F77657266756C20656E7469746965732E2055736572732068617665206C6974746C652063686F69636520746F202274616B6520746865697220627573696E65737320656C73657768657265222C20617320666F72206D616E792075736572732074686520706C6174666F726D73207468656D73656C766573206265636F6D6520616E20696D706F7274616E74206D656469756D20666F7220746865697220627573696E6573732C206F722073696D706C7920612077617920746F20636F6E6E65637420746F207468652070656F706C65207468657920636172652061626F75742E2041732069742773206265656E207365656E2074696D6520616E642074696D6520616761696E2C20636F6E74726F6C2063616E20626520696E737472756D656E74616C697A656420746F20747261636B20616E642070726F66696C652070656F706C652C2073656C6C207468656D2070726F6475637473207468657920646F6E2774206E656564206F72206D6973696E666F726D207468656D20746F20766F746520666F722063616E64696461746573207468617420646F6E277420616C69676E2077697468207468656972206265737420696E746572657374732E0A092D205468652064617461206F6620746865207573657273206973206120636F6D6D65726369616C20746F6F6C2077686963682063616E206265207573656420666F72206164766572746973696E6720616E6420696D70726F76696E67206D617373697665204149206D6F64656C732E20496E207475726E2C20746865204149207265766F6C7574696F6E2070726F6D6973657320746F206D616B652074686520696E7465726E657420616E20756E6C697661626C652068656C6C7363617065206F6620626F74732074616C6B696E6720746F2065616368206F746865722077686F2073707265616420706F6C69746963616C2070726F706167616E646120616E6420726567757267697461746520696E636F727265637420696E666F726D6174696F6E2E20506C6174666F726D73206D75737420626520726573696C69656E7420746F20626F747320616E64207370616D2C20666F73746572696E672061757468656E74696320636F6D6D756E69636174696F6E20616E642067656E75696E6520636F6E74656E742070726F64756374696F6E20616D6F6E67207265616C2075736572732E0A2D205768617420676E6F2E6C616E642077616E747320746F20616368696576653A0A092D20466F726B6162696C6974792E20426C6F636B636861696E7320617265206469737472696275746564206461746162617365732C207768696368207468656D73656C7665732063616E20626520636F6E7374727563746564206173204D65726B6C65207472656573202D20616C6C6F77696E6720746F20636865636B206F757420646966666572656E7420706F696E747320696E2074696D652C20616E6420746F2063686561706C7920616C6C6F7720666F726B696E67206F6620636F6E74656E742C2073696D696C61726C7920746F20686F772067697420616C6C6F7773206272616E6368696E672E0A09092D20676E6F2E6C616E642C206C696B6520616C6C20626C6F636B636861696E732C20697320666F726B61626C652C20627574206576656E2077697468696E20676E6F2E6C616E642077652063616E206D616B6520616C6C207374617465732C20696E636C7564696E672074686F7365206F6620736F6369616C20706C6174666F726D732C20666F726B61626C652C20746F6F2E0A09092D2057652073656520666F726B696E672061732061206665617475726520746861742073686F756C64206E6F74206F6E6C79206265206120706F73736962696C69747920666F7220746865206D6F737420657870657274206F662075736572732C20627574206120636F6D6D6F6E20736F6C7574696F6E20666F722065766572796F6E653B2069742073686F756C6420626520616C6C6F776564206576656E206F6E2074686520636F6E747261637473207468656D73656C7665732E0A09092D2049742773206E6F7420616E206F7074696F6E206F66206C617374207265736F72743B20666F726B696E6720696E20736F66747761726520697320736F6D657468696E6720746861742068617070656E7320636F6E74696E756F75736C792E2054686520746F6F6C73207765207573652C2073756368206173206769742C20616C6C6F7720757320746F206275696C6420666F726B7320746861742066656564206261636B20776F726B20696E746F2074686520757073747265616D2E2053696D696C61726C792C20636F6E737472756374696E6720636F6D6D6F6E206B6E6F776C6564676520616E6420696E666F726D6174696F6E206461746162617365732063616E20616C736F2068617070656E20696E2061206D6F64656C207468617420616363657074732073636869736D7320616E6420646966666572656E74206964656173206F6E20686F7720746F206163686965766520746865206F626A6563746976652E0A092D20446563656E7472616C697A6174696F6E206F6620686F7374696E6720616E6420676F7665726E616E63652C206275742063656E7472616C697A6174696F6E206F662074686520636F6D6D756E69636174696F6E20706C6174666F726D2E205468616E6B7320746F20746865206E6174757265206F6620626C6F636B636861696E732C2077652063616E2063726561746520736F6369616C20706C6174666F726D732077686963682061726520686F73746564206279206D616E7920646966666572656E742076616C696461746F72732C20616C6C2077697468207468652073616D652065786163742073746174652E20476F7665726E616E6365206973206465636F75706C65642066726F6D2076616C69646174696F6E2070726F6365737365732C20616C6C6F77696E6720697420746F206265206775696465642062792064697374696E6374207072696E6369706C657320616E6420696E63656E74697665732E0A09092D205769746820746865204665646976657273652C2077652061766F69642073686172696E672073696E676C6520706F696E7473206F66206661696C75726520616E642063656E7472616C697A6174696F6E206F6620676F7665726E616E636520696E746F20612073696E676C6520656E746974792028706572736F6E206F7220636F6D70616E79292E0A09092D204173206F70706F73656420746F20746865204665646976657273652C20676E6F2E6C616E6420706C6174666F726D732063616E206265206D6F72652072656C6961626C6520616E642062652063656E7472616C697A656420696E207465726D73206F6620646973636F766572696E6720616E6420696E746572616374696E672077697468206F746865722075736572732E0A092D2046756E64696E67206279207468652075736572732E205072696F726974697A6520757365722D616C69676E656420706C6174666F726D73206F76657220616476657274697365722D63656E74726963206D6F64656C732E0A09092D20546869732068617070656E732070726163746963616C6C7920627920656E737572696E6720746865207472616E73616374696F6E20666565732C206F7220726576656E7565206D6F64656C73206275696C74206F6E20746F70206F66207468656D2C2063616E2061646571756174656C792066756E6420626F74682074686520686F7374696E6720616E642074686520676F7665726E616E63652F6D6F6465726174696F6E2E0A092D2046726565646F6D206F66207370656563682E20456E73757265206120626173656C696E65206F66206D6F6465726174696F6E20746F2061646472657373206861726D66756C20616E6420696C6C6567616C20636F6E74656E742C207768696C6520656E61626C696E6720736D616C6C657220636F6D6D756E697469657320746F20676F7665726E20636F6E74656E74206D616E6167656D656E74206163636F7264696E6720746F20746865697220707265666572656E6365732C20616C736F207573696E6720616C676F726974686D7320616E64206D6F6465726174696E672073797374656D732E0A09092D2054686520636861696E2073686F756C6420696E63656E746976697A652074686F7567687466756C20636F6E74656E74206372656174696F6E2C206D6F6465726174696F6E2C20616E64206163746976652070617274696369706174696F6E20696E2074686520636F6D6D756E6974793B20627574206E6F7420626C6F636B206F757420636F6E74656E742C20736F20746861742074686520706C6174666F726D2063616E206265207472756C79206E65757472616C2E0A0909092D2054686572652063616E20616E642073686F756C6420626520616C676F726974686D7320746861742073686F7720757365727320696E746572657374696E6720636F6E74656E74207768696C6520626C6F636B696E67206F75742077686174207468657920646F6E27742077616E7420746F207365652E20427574207573657273206E65656420746F2062652061626C6520746F2063686F6F7365206265747765656E20646966666572656E7420616C676F726974686D7320616E6420756E6465727374616E6420776861742065616368206F6E6520697320746172676574696E673B20726174686572207468616E20736F6C656C79207369676E696E6720757020666F7220746865206F6E652074686174206D6178696D697365732022656E676167656D656E7422206F72202273637265656E2D74696D65222E0A2D2057687920676E6F2E6C616E642063616E20616368696576652069743A0A092D20427920736F6C76696E672074686520696E63656E746976652070726F626C656D2C20776520656E7375726520746861742074686520636861696E2063616E20636F6E74696E756520746F20776F726B2077697468206120737065636966696320766973696F6E207768696C65206265696E67206861726420746F20737562766572742E2054686520676F7665726E616E63652061696D7320746F20657870616E642074686520626C6F636B636861696E277320706F74656E7469616C20616E642075736167657320696E207265616C206170706C69636174696F6E732C20726174686572207468616E20746865206361706974616C206F662069747320696E766573746F72732E0A092D20427920736F6C76696E672074686520746563686E6963616C2070726F626C656D2C2077652063616E2061637475616C6C7920637265617465206120706C6174666F726D2077697468207468652070726F70657274696573206465736372696265642061626F76652E0A092D20676E6F2E6C616E64207061797320617474656E74696F6E20746F206372656174696E67207363616C61626C652064617461207374727563747572657320746861742063616E20686F73742074686520636F6E74656E74206F662074686520706C6174666F726D20616E6420656E61626C65206672656520616E6420756E6976657273616C2061636365737320746F2069742E0A0A0A23232054686520496E63656E746976652050726F626C656D0A0A3E2045737461626C697368696E6720416E74692D53756276657273696F6E20476F7665726E616E63652E0A0A4D6F737420626C6F636B636861696E20696E63656E7469766520736368656D657320666F637573207072696D6172696C79206F6E20726577617264696E672076616C696461746F727320666F72207365637572696E6720636F6E73656E73757320616E64206D61696E7461696E696E67206E6574776F726B20696E746567726974792E20496E206F7264657220746F206275696C64206C61726765722073797374656D7320776869636820617265206E6F74206A7573742066696E616E6369616C6C7920666F63757365642C207765206E65656420746F20696E63656E746976697A65206E6F6E2D76616C696461746F72732077686F206E6F6E657468656C65737320636F6E7472696275746520746F2074686520616476616E63656D656E74206F66207468652070726F6A6563742C20616E64206D616B6520737572652074686520636861696E20676F7665726E616E6365206973207068696C6F736F70686963616C6C7920616C69676E65642C20726174686572207468616E206A757374206C6F6F6B696E67206F757420666F7220696E646976696475616C206761696E732E0A0A2D204578636C75736976656C7920726577617264696E67206120636861696E27732076616C696461746F7273206973206120676F6F642077617920746F207365637572652074686520636861696E3B20627574206E6F74206120676F6F6420626173697320746F20637265617465206C61726765722065636F73797374656D73206F757473696465206F662066696E616E6369616C207472616E73616374696F6E732E0A092D205468652050726F6F66206F66205374616B65206D6F64656C20686173206265656E207375636365737366756C20696E207365637572696E6720626C6F636B636861696E733B2062757420697420686173206E6F74206265656E207375636365737366756C20696E206372656174696E6720696E63656E746976657320666F72207573696E6720616E6420616476616E63696E67206120626C6F636B636861696E2C206F6E6C7920666F722070726F766964696E672076616C69646174696F6E2073657276696365732E0A092D204164646974696F6E616C6C792C20617320676F7665726E616E6365206973206D6F7374206F6674656E207469656420746F20746865207374616B65206F66206561636820757365722C20636F6E74726F6C206F662074686520636861696E2063616E20656173696C792062652073756276657274656420627920706F77657266756C20616E642072696368206163746F72732077686F2077616E7420746F20616371756972652073697A61626C6520706F7274696F6E73206F662074686520626C6F636B636861696E2E0A092D2053696D696C61726C792C2050726F6F66206F6620576F726B20707574732074686520696E63656E746976657320696E207468652068616E6473206F662074686F73652077686F206861766520746865207265736F757263657320616E6420746865206D65616E7320746F206861766520636F73742D656666656374697665206D616368696E65732C20696E63656E746976697A696E672074686F73652077686F206861766520746865206D6F7374207265736F7572636573206F722074686F73652077686F206861766520676F6F642C20696E73696465722061636365737320746F207072696D617279207265736F75726365732028636869707320616E6420656C656374726963697479292E0A2D20426C6F636B636861696E7320616C6C6F7720757320746F20637265617465206566666563746976652065636F6E6F6D6963206D6F64656C7320666F72206275696C64696E672074686520696E7465726E657420776869636820617265206661697220746F20746865207061727469636970616E747320696E766F6C76656420696E206D616B696E672069742E0A092D2057652073686F756C64207061792063726561746F727320666F72206D616B696E6720677265617420636F6E74656E742E0A092D2057652073686F756C6420706179206D6F64657261746F72732077686F206B65657020636F6D6D756E697469657320666F637573656420616E64207472756520746F207468656972207370697269742E0A092D2057652073686F756C64207061792074686F736520636F6E747269627574696E6720746F20636F6C6C6563746976652073696C6F73206F66206B6E6F776C65646765206C696B652077696B69732C20616E6420766572696679696E672069747320696E666F726D6174696F6E20616E642061636375726163792E0A092D2057652073686F756C642070617920736F66747761726520646576656C6F706572732C20617320746865792063726561746520746865206170706C69636174696F6E7320616E6420696E6672617374727563747572652E0A092D2057652073686F756C64207061792061756469746F72732C2077686F2076657269667920746865207365637572697479206F6620736D61727420636F6E74726163747320616E64207061636B616765732E0A092D2046696E616C6C792C2077652073686F756C64207061792076616C696461746F72732C206173207468657920706879736963616C6C7920686F73742074686520626C6F636B636861696E20616E64206D616B6520697420706F737369626C652E0A092D2054686520696E7465726E65742063616E206E6F206C6F6E676572206166666F726420746F206F6E6C79207061792074686520636F6D70616E6965732077686F20617265206D616B696E6720636F6E74656E7420686F7374696E6720706F737369626C653B207765206E65656420746F207265636F676E697A652074686520686F757273206F6620776F726B207468617420676F20696E746F20636F6C6C656374696E672C206372656174696E672C206F7267616E697A696E6720616E6420646973747269627574696E6720696E666F726D6174696F6E2E0A2D2054686520676F7665726E616E6365206F662074686520636861696E2063616E6E6F74206265207469656420746F20686F77206D756368206361706974616C2065616368207061727469636970616E74206861732E0A092D2049742073686F756C6420696E737465616420776F726B20746F206D616B652069747320676F7665726E6D656E7420616C69676E6564206F6E20636F6D6D6F6E20676F616C7320616E6420612067656E6572616C207068696C6F736F706879206F6620616476616E63696E6720746865207374617465206F66207468652070726F6A6563742E0A092D2049747320676F7665726E6D656E742068617320746F206265206469726563746C7920726573706F6E7369626C6520666F7220686F7374696E672074686520636861696E2C20656E737572696E67207468617420616C6C207468652077617920646F776E20746F207468652076616C696461746F7220636F6E74726F6C206973206E6576657220676976656E20757020746F2061206E6F6E2D616C69676E656420227468697264207061727479222E0A2D2054686520636861696E2063616E20616E642077696C6C20686176652065636F6E6F6D696320616374697669747920616E642070726573656E7420697473656C66206173206120676F6F6420706C61636520746F206275696C6420627573696E65737365733B206275742074686520666F637573206F662074686520636861696E2077696C6C20676F20746F776172647320697473206170706C69636174696F6E7320726174686572207468616E206D6572656C792022646563656E7472616C697A696E672066696E616E6365222E0A2D2054686520636861696E2073686F756C64207374696C6C2077656C636F6D652022696E766573746F7273223B20627574206E6F742061732061206D61696E20666F6375732E20496E766573746F72732063616E207368696E6520696E206372656174696E6720696E746572616374696F6E732077697468206F746865722065636F73797374656D732C20616E64206372656174696E67207761797320746F2065786368616E676520746F6B656E732C206D616B696E672069742065617369657220746F2062757920474E4F5420616E6420696E6372656173696E672064656D616E642E204275742074686520747275652076616C7565206F662074686520706C6174666F726D20697320637265617465642062792074686F73652077686F20646576656C6F7020616E6420637265617465206F6E20746F70206F662069742E0A2D20436F6E747269627574696F6E2D64726976656E20676F7665726E616E63652E0A092D2054686520636F7265206F662074686520636861696E2073686F756C6420636F6E73697374206F6620697473206D6F737420657870657269656E636564206D656D626572732077686F20686176652073686170656420697420696E746F20776861742069742069732E0A092D2054686520676F7665726E616E636520616C736F207069636B73207468652076616C696461746F7273206F662074686520636861696E2C2077686F2077696C6C2062652063686F73656E206F6E20616C69676E6D656E7420616E6420746563686E6963616C206361706162696C69747920726174686572207468616E20746865206361706974616C20746865792063616E207374616B652E0A092D20476F7665726E616E6365206D656368616E69736D7320617265207374727563747572656420746F2072657761726420636F6E7472696275746F7273206261736564206F6E20746865697220766572696669656420636F6E747269627574696F6E732C207769746820616E20656D706861736973206F6E206D61696E7461696E696E6720616C69676E6D656E74207769746820746865206E6574776F726BE280997320666F756E646174696F6E616C207072696E6369706C65732E0A0A23232054686520546563686E6963616C2050726F626C656D0A0A3E204372656174696E672054696D656C65737320436F64652E0A0A54686520746563686E6963616C20696E6E6F766174696F6E2062726F7567687420627920476E6F206D616B657320736F6C76696E67207468652061626F76652070726F626C656D7320706F737369626C652E0A0A2D2057652772652061742074686520417373656D626C7920616765206F6620776562332E0A092D20446576656C6F70696E6720736F66747761726520697320636F73746C793A0A09092D204974277320657870656E7369766520746F206275696C64206261736963207468696E67732C20626F746820696E207465726D73206F662065787065727469736520696E20646576656C6F706D656E742C2062757420616C736F206175646974696E6720616E642066696E64696E672070656F706C652074686174207472756C7920756E6465727374616E6420616E642063616E2074616B6520616476616E74616765206F662074686520746563686E6F6C6F67792E0A09092D204D616E792065636F73797374656D7320656D706C6F7920646F6D61696E2D7370656369666963206C616E677561676573206F72207265737472696374696F6E73206F6E20746F70206F66206F7468657273202869652E205741534D292C207768696368207374696C6C20726571756972657320737065636966696320747261696E696E672E0A092D2054686520646576656C6F706D656E7420776869636820697320706F737369626C6520697320766572792062617369632C2073696D696C617220746F2022696E746572636F6E6E656374656420737072656164736865657473222E0A092D204D6F6E6F6C697468696320626C6F636B636861696E7320637265617465206C696D69746174696F6E732077686963682064652D666163746F206C696D6974207468652067726F777468206F662074686520636861696E2C206F6E6C7920616C6C6F77696E6720666F722074686520656E746972652073797374656D20612076657279206C696D6974656420616D6F756E74206F6620636F6D7075746174696F6E20696E206561636820626C6F636B2E0A2D205768617420536F6C6964697479206D69737365733A0A092D20536F6C6964697479206973206120446F6D61696E205370656369666963204C616E67756167652C206675727468657220696E6372656173696E672074686520636F7374206F662061646F7074696F6E206279206E65772075736572732C20657370656369616C6C792074686F73652077686F20617265207374696C6C20637572696F757320616E6420756E636F6D6D697474656420746F20776F726B696E67206F6E206120626C6F636B636861696E2E0A092D2046696E616E6369616C6C7920666F63757365642E20536F6C696469747920636F6E7461696E73206D616E79206E617469766520636F6E73747275637473207065727461696E696E67207370656369666963616C6C7920746F20736D61727420636F6E7472616374733B206C696B652074686520676C6F62616C20606574686572602C207468652074797065206061646472657373602C2074686520676C6F62616C7320606D7367602C206074786020616E642060626C6F636B602E204F6E20746865206F746865722068616E642C206974732064657369676E206C61636B732073696D706C65207761797320746F20726570726573656E7420616E642068616E646C6520666C6F6174732C20646174657320616E642074696D65732C20616E64206D6973736573206F746865722067656E6572616C2D707572706F73652066656174757265732070726F6772616D6D657273206578706563742066726F6D206D6F73742070726F6772616D6D696E67206C616E6775616765732E0A092D2048696464656E20636F6E74726F6C20666C6F773A205B66616C6C6261636B2066756E6374696F6E735D2868747470733A2F2F646F63732E736F6C69646974796C616E672E6F72672F656E2F6C61746573742F636F6E7472616374732E68746D6C2366616C6C6261636B2D66756E6374696F6E29206372656174652068696464656E20636F6E74726F6C20666C6F77207768656E2073656E64696E6720746F6B656E732C2063617573696E672070726F626C656D73206C696B65205B72652D656E7472616E63792061747461636B735D2868747470733A2F2F646F63732E736F6C69646974796C616E672E6F72672F656E2F6C61746573742F73656375726974792D636F6E73696465726174696F6E732E68746D6C237265656E7472616E6379292E0A2D20486F7720476E6F20736F6C7665732069743A0A092D20436F6D706F736162696C6974793A0A09092D20496E746572666163657320616E6420636C6F737572657320616C6C6F7720746F20706C756720646966666572656E7420636F646520616E642064617461207374727563747572657320696E746F2065616368206F746865722E0A09092D205265616C6D732063616E20626520636F6D706F7365642062792072652D7573696E672066756E6374696F6E616C697479206F66206F74686572207265616C6D73206F72206578697374696E672066756E6374696F6E616C697479207075626C6973686564206173207061636B616765732E0A09092D2049424320656E61626C65732074686520626C6F636B636861696E73207573696E6720476E6F20746F20636F6D6D756E69636174652077697468206F6E6520616E6F74686572207365616D6C6573736C792C20616E64206275696C64206F6E2074686520776F726B2068617070656E696E6720656C736577686572652E0A092D204C6F7720636F7374206F662061646F7074696F6E3A20476E6F206973206120737562736574206F6620476F207769746820736F6D6520646966666572656E74207374616E64617264206C69627261726965732E204C6561726E696E6720476E6F206861732061206C6F7765722061646F7074696F6E20626172726965722C206173206974206973206261736564206F6E2074686520776964656C792D7573656420476F2070726F6772616D6D696E67206C616E67756167652C2066616D696C69617220746F20617070726F78696D6174656C79205B74776F206D696C6C696F6E20646576656C6F7065727320776F726C64776964655D2868747470733A2F2F72657365617263682E73777463682E636F6D2F676F70686572636F756E74292E0A092D204C6F7720636F7374206F66206275696C64696E673A20717569636B657220616E642073696D706C657220746F207772697465206441707073202873696D706C65206C616E67756167652C20676F6F6420616C72656164792D6175646974656420702F206C6962726172696573293B20717569636B657220616E64206368656170657220746F206175646974207468656D2028616C6C2074686520736F7572636520636F646520697320746F206265207075626C6973686564206F6E2D636861696E292E0A092D204170702D666F63757365643A2077652061726520696E746572657374656420696E20736F6369616C20706C6174666F726D732C20766964656F2067616D6520736572766572732C20616E64207761797320746F207368617265206B6E6F776C6564676520696E206120646563656E7472616C697A6564206D616E6E65722E205765207365652064417070732061732073797374656D7320746861742063616E206D616B65207468652077656220646563656E7472616C697A656420616761696E20616E64206372656174652061207472756C79206F70656E20696E7465726E657420666F72207468652074696D6520746F20636F6D652E2044654669206973206772656174202D20616E6420616E206F6276696F757320757365206361736520666F7220626C6F636B636861696E73202D20476E6F20657870616E6473206F6E207768617420446546692063616E20646F20616E6420656E61626C65206D616E79206D6F726520617070732C20616E64207761797320746F20636F6D6D756E69636174652077697468206F74686572732E0A092D20436C65617220636F6E74726F6C20666C6F773A2073696D696C61726C7920746F20476F2C20746865726520617265206E6F20696D706C6963697420676574746572732C20736574746572732C20616E64206E6F206D6574686F64206F7665726C6F6164696E673B20636C65617220697320626574746572207468616E20636C657665722E0A092D204F70656E20736F757263652062792064656661756C743A20616C6C20636F6465206F6E20676E6F2E6C616E64206973207075626C6973686564206469726563746C7920617320736F7572636520636F64652C20616E64207075626C697368656420756E64657220746865207465726D73206F6620746865205B476E6F204E6574776F726B2047656E6572616C205075626C6963204C6963656E73655D2868747470733A2F2F676E6F2E6C616E642F6C6963656E73652920286F6E20746F70206F6620616E79206C6963656E736520746861742074686520617574686F72206D61792064656369646520746F20757365292E20546865206F6E2D636861696E20636F64652063616E2062652070657270657475616C6C7920696E737065637465642C206D6F64696669656420616E6420696D70726F7665643B206265636F6D696E6720776861742077652063616C6C202274696D656C65737320636F6465222E0A2D205768617420646F657320476E6F20656E61626C653F0A092D2052652D757361626C652022636F72652220636F6E7472616374732C206C696B652075736572206D616E6167656D656E742C2067726F7570732C207065726D697373696F6E732E0A092D204F70656E205765623A20616C6C2064617461206973207075626C696320616E6420636C6F6E61626C65206279206F74686572733B2061732077656C6C2061732074686520746F6F6C7320746F206F7267616E697A6520697420616E642070726573656E742069742E0A092D20436F6F7264696E6174696F6E2028636976696C20736572766963657320776974686F757420676F7665726E6D656E74206261636B696E67292C2057696B6970656469612C20706C6174666F726D7320746861742063616E6E6F7420626520737562766572746564206F7220736F6C642E0A2D20676E6F2E6C616E642063616E20626520612047697448756220666F7220612077696465722065636F73797374656D2E0A092D204F757220686F706520697320746F2073686F77207769746820676E6F2E6C616E642061206D756368206265747465722077617920746F20646576656C6F7020646563656E7472616C697A6564206170706C69636174696F6E732E0A092D205468726F756768204942432B4943532C206F7468657220626C6F636B636861696E732063616E206C6F6F6B20746F20636F6E6E65637420776974682074686520676E6F2E6C616E6420636861696E20616E642072652D7573652069747320666F756E646174696F6E616C20636F64653B2061732077656C6C20617320696E74657261637420776974682069747320636F6E7472616374732E0A092D20676E6F2E6C616E642C20696E20746865207068696C6F736F706879206F66205B436F736D6F735D2868747470733A2F2F636F736D6F732E6E6574776F726B2F292C206973206E6F742061206D6F6E6F6C69746869632C206F6E652D73697A652D666974732D616C6C20626C6F636B636861696E2E2054686520696D706C656D656E746174696F6E206F66207468652070726F6772616D6D696E67206C616E677561676520697473656C66206973206E6F74206D65616E7420746F20626520646566696E69746976652C206275742072617468657220746F2062652061207265666572656E636520666F72206372656174696E67206F74686572206265747465722C2066617374657220696D706C656D656E746174696F6E7320746861742073756974206F74686572207573652063617365732E0A0A4C6561726E206D6F72652061626F75742074686520766973696F6E20616E64206D697373696F6E2064726976696E6720676E6F2E6C616E64277320646576656C6F706D656E74206279207761746368696E67206F7572205B766964656F5D2868747470733A2F2F796F7574752E62652F4D393230504F337972486B292E0A3214323032352D30312D30385430303A30303A30305A320C746865686F776C2C6D6F756C320B676E6F6C616E642C676E6F0AAB1C0A0A2F766D2E6D5F63616C6C129C1C0A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F73743205676E6F70733231496E74726F647563696E6720676E6F70732E696F3A20546865204465764F70732048756220666F7220676E6F2E6C616E6432D71A0A0A5765E280997665206C61756E6368656420746865206669727374207068617365206F66205B676E6F70732E696F5D28687474703A2F2F676E6F70732E696F2F292C206120646564696361746564204465764F7073207265736F757263652068756220666F7220676E6F2E6C616E6420646576656C6F706572732E2054686520696E74656E7420626568696E6420676E6F707320697320746F2070726F766964652076616C7561626C65207265736F7572636573207772697474656E20627920757320616E64207468652062726F6164657220636F6D6D756E69747920746F20656D706F7765722061207374726F6E6720616E642073656375726974792D6D696E646564204465764F70732063756C7475726520616E64207465616D2077697468696E207468652065636F73797374656D2E204279206275696C64696E67206120636F6D70726568656E73697665206B6E6F776C6564676520626173652C2074686520636F6E74656E742069732064657369676E656420746F20737570706F727420626F7468206E6577636F6D65727320616E6420657870657269656E63656420646576656C6F7065727320696E206D616E6167696E672073656375726520616E6420726573696C69656E74204465764F707320656E7669726F6E6D656E74732E0A0A232323205768617420697320676E6F70732E696F3F0A0A676E6F70732E696F206973206120636F6C6C656374696F6E206F662065666665637469766520657373656E7469616C73202845666665637469766520676E6F7073292C206578706C61696E6572732C20616E642062657374207072616374696365732064657369676E656420746F2068656C7020626C6F636B636861696E20646576656C6F706572732065737461626C69736820616E64206D61696E7461696E20656666696369656E74204465764F707320776F726B666C6F777320696E20676E6F2E6C616E642E20546865206B657920666F637573206973206F6E2073656375726974792C20726573696C69656E63652C20616E64206175746F6D6174696F6E2C20656E737572696E672074686174207465616D732063616E206275696C6420616E64206465706C6F79207769746820636F6E666964656E63652E204F7665722074696D652C20676E6F70732E696F2077696C6C2065766F6C766520696E746F20616E2065636F73797374656D206F6620746F6F6C696E6720666F72206175746F6D6174696E672C206D6F6E69746F72696E672C20616E64207365637572696E6720676E6F2E6C616E6420636861696E732E0A0A23232320436F6D6D756E6974792D44726976656E204B6E6F776C6564676520426173650A0A4120636F726520617370656374206F6620676E6F70732069732074686520676E6F7073205B4769744875625D2868747470733A2F2F6769746875622E636F6D2F676E6F76657273652F676E6F707329207265706F7369746F72792C20776869636820736572766573206173206120636F6D6D756E6974792D6C6564206B6E6F776C6564676520626173652E20676E6F2E6C616E64E280997320746563686E6F6C6F677920616E6420646576656C6F706D656E7420697320686967686C792064796E616D69632C20616E64207468657265206973206E6F206F6E652D73697A652D666974732D616C6C20617070726F61636820746F2073657474696E67207570204465764F707320656E7669726F6E6D656E74732E205765E280997265206372656174696E67206120636F6C6C61626F72617469766520616E6420697465726174697665206C6561726E696E6720656E7669726F6E6D656E7420776865726520646576656C6F7065727320736861726520696E7369676874732C20726566696E652062657374207072616374696365732C20616E6420636F6E7472696275746520746F207468652065766F6C7574696F6E206F66204465764F707320696E20676E6F2E6C616E642E0A0A23232320576879204465764F7073204D61747465727320696E20676E6F2E6C616E640A0A4465764F70732070726163746963657320656E61626C6520736F66747761726520646576656C6F706D656E7420286465762920616E64206F7065726174696F6E7320286F707329207465616D7320746F20616363656C6572617465206465706C6F796D656E7473207468726F75676820636F6C6C61626F726174696F6E2C20666565646261636B2C20616E6420697465726174696F6E2E20427920696E746567726174696E67207468657365207072696E6369706C657320696E746F20626C6F636B636861696E20646576656C6F706D656E742C20676E6F70732E696F20616E642069747320737570706F7274206368616E6E656C732077696C6C2068656C70207465616D73206F7074696D697A6520746865697220776F726B666C6F77732C206D69746967617465207365637572697479207269736B732C20616E6420656E73757265206869676820617661696C6162696C69747920666F72207468656972206170706C69636174696F6E732E0A0A5765207365652074686520476E6F204465764F70732066616D696C792C20746865206F726967696E61746F7273206F6620676E6F70732C206173206120636F6D6D756E6974792074686174206C6561726E7320746F6765746865722C20737570706F7274732065616368206F746865722C20616E642063756C7469766174657320612073656375726974792D66697273742063756C7475726520696E20626C6F636B636861696E20646576656C6F706D656E742E205768657468657220796F75206172652072756E6E696E67206120636F6D706C657820636861696E206F6E20676E6F2E6C616E64206F72206F7065726174696E6720617320612076616C696461746F722C20676E6F70732E696F2070726F76696465732067756964616E636520616E6420746F6F6C7320746F206F6E626F61726420646576656C6F7065727320717569636B6C792E0A0A23232320436F6E747269627574696F6E7320262046757475726520436F6E74656E740A0A417320676E6F70732E696F2065766F6C7665732C20776520656E636F757261676520746865204465764F707320636F6D6D756E69747920746F20636F6E7472696275746520636F6E74656E7420746861742062656E656669747320646576656C6F70657273206163726F737320616C6C20736B696C6C206C6576656C732E20536F6D6520737567676573746564206172656173206F6620636F6E747269627574696F6E20696E636C7564653A0A0A2D204175746F6D6174696F6E207363726970747320666F72206D616E6167696E6720676E6F2E6C616E64206E6F64657320616E6420636861696E730A2D2047756964657320666F722043492F434420626573742070726163746963657320696E20676E6F2E6C616E6420646576656C6F706D656E740A2D2053656375726974792061756469747320616E6420696E636964656E7420726573706F6E736520706C616E7320666F7220626C6F636B636861696E206F7065726174696F6E730A2D205363616C696E6720616E6420706572666F726D616E63652074756E696E67207374726174656769657320666F722076616C696461746F727320616E6420696E6672617374727563747572652070726F7669646572730A2D2043617365207374756469657320616E64207761722073746F726965732061626F7574204465764F7073206368616C6C656E67657320696E20626C6F636B636861696E0A0A496620796F75E280997265206275696C64696E6720676E6F2E6C616E64204465764F707320746F6F6C732C2064617368626F6172647320616E64206D6174657269616C20666F722074686520636F6D6D756E6974792077697468207468652072656C6576616E7420646F63756D656E746174696F6E2C20616464207468656D20746F20676E6F707320476974487562207265706F7369746F72792E20496E20746865206E657874207068617365206F6620676E6F70732E696F2C207765E280996C6C20626520726577617264696E672068696768207175616C69747920646F63756D656E746174696F6E2C20636F6E74656E7420616E6420746F6F6C696E67207375626D697373696F6E73207468617420616476616E636520746865206F766572616C6C2073656375726974792C20696E6672617374727563747572652C20616E64206F7065726174696F6E7320666F7220646576656C6F70696E67206F6E20676E6F2E6C616E642E200A0A232323204A6F696E2074686520476E6F204465764F707320436F6D6D756E6974790A0A676E6F70732E696F206973206120636F6D6D756E6974792D64726976656E20696E69746961746976652061696D6564206174206275696C64696E672074686520667574757265206F66204465764F707320696E20676E6F2E6C616E642E20596F757220636F6E747269627574696F6E7320746F6461792068656C702065737461626C69736820746865207374616E646172647320616E642062657374207072616374696365732074686174206E6577206275696C646572732077696C6C20666F6C6C6F772E205669736974205B676E6F70732E696F5D2868747470733A2F2F676E6F70732E696F2F2920746F64617920616E64206265636F6D652070617274206F662074686520476E6F204465764F707320636F6D6D756E697479210A3214323032352D30312D33305430303A30303A30305A320D6D696368656C6C65656C6C656E3212676E6F6C616E642C676E6F2C6465766F70730A95130A0A2F766D2E6D5F63616C6C1286130A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374320B666F7364656D2D32303235321B464F5344454D20323032353A20476E6F6D65732053706F7474656432C1110A0A5B215B6D6F756C5D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032352D30322D30365F666F7364656D2D323032352F7372632F7468756D62732F6D6F756C2E6A7067295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032352D30322D30365F666F7364656D2D323032352F7372632F6D6F756C2E6A7067290A0A546869732070617374207765656B656E642C206D656D62657273206F662074686520676E6F2E6C616E64207465616D2074726176656C656420746F204272757373656C7320666F7220464F5344454D0A323032352C206F6E65206F662074686520776F726C64E2809973206C61726765737420616E64206D6F737420696E666C75656E7469616C206F70656E2D736F7572636520676174686572696E67732E200A546869732079656172206D61726B656420464F5344454DE2809973203235746820616E6E69766572736172792C2064726177696E67206F76657220352C30303020646576656C6F706572732C200A656E67696E656572732C20616E6420656E7468757369617374732066726F6D206163726F73732074686520676C6F62652E0A0A417474656E64696E6720464F5344454D2077617320696E73706972696E672C206120706F77657266756C2072656D696E646572206F6620776861742063616E206265206163686965766564207768656E200A70656F706C6520636F6C6C61626F7261746520696E206120667265652C207472616E73706172656E742C20616E64206F70656E207761792E20546865206465707468206F66206B6E6F776C65646765200A7368617265642C2074686520656E676167696E672064697363757373696F6E732C20616E642074686520736865657220646976657273697479206F6620746F706963732C2066726F6D20726F626F746963730A616E642073696D756C6174696F6E7320746F2074686520476F2065636F73797374656D2C20686967686C696768742074686520696E6372656469626C652062726561647468206F66200A6F70656E2D736F7572636520696E6E6F766174696F6E2C20616E642077686174E280997320706F737369626C65207768656E2070656F706C65206275696C6420746F6765746865722E2049742077656E740A6265796F6E6420636F64652C20464F5344454D2077617320612066697273742D68616E6420657870657269656E636520746F207769746E6573732074686520676C6F62616C20636F6D6D756E6974790A64726976656E206279206120736861726564206574686F732E0A0A232320464F5344454D206D6565747320476E6F0A0A5468697320796561722077617320706172746963756C61726C79207370656369616C20666F722075732C20617320776520696E74726F647563656420676E6F2E6C616E6420746F20746865200A464F5344454D20636F6D6D756E69747920666F72207468652066697273742074696D652E20447572696E672074686520476F206C696768746E696E672074616C6B732C204D616E66726564200A546F75726F6E2064697374696C6C65642074686520657373656E6365206F6620476E6F20696E206A757374206120666577206D696E757465732C206578706C61696E696E672077687920476E6F2C0A74686520476E6F20706172616469676D2C20616E6420686F7720476F20646576656C6F706572732063616E20656173696C79207374617274206275696C64696E6720776974682069742E20416E64200A73696D706C79207075742C2077686174207765E280997265206275696C64696E672E2E2E0A0A6060600A7765277265206275696C64696E67206120757365722D6F776E656420696E7465726E65740A776865726520676F7665726E616E636520697320666169722C0A646576656C6F706D656E74206973206F70656E2C0A616E6420696E6E6F766174696F6E2069732072657761726465642E0A6060600A0A536565207468652066756C6C2070726573656E746174696F6E205B686572655D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F776F726B73686F70732F70726573656E746174696F6E732F323032352D30322D30312D2D666F7364656D2D2D6D616E667265642F70726573656E746174696F6E2E736C6964652E68746D6C292E0A0A2323204272696467696E67204F70656E20536F7572636520616E6420576562330A0A57656233206F6674656E206D6565747320736B657074696369736D20696E20747261646974696F6E616C206F70656E2D736F7572636520636972636C65732C2062757420676E6F2E6C616E64E2809973200A31303025206F70656E2D736F7572636520656E67696E656572696E6720627269646765732074686174206761702E205468726F7567686F757420746865207765656B656E642C207765207361770A64697265637420636F6E6E656374696F6E73206265747765656E206F757220776F726B20616E64206B657920746F7069637320617420464F5344454D2C2066726F6D20676F7665726E616E6365200A6D6F64656C7320616E642042797A616E74696E65204661756C7420546F6C6572616E636520746F20636F6E73656E73757320616C676F726974686D7320616E6420746865206368616C6C656E676573200A6F66207375737461696E696E67206F70656E2D736F757263652070726F6A656374732E2054686573652061726520697373756573207468617420657874656E64206265796F6E6420776562330A616E64207265736F6E6174652077697468207468652062726F61646572206F70656E2D736F7572636520636F6D6D756E6974792E0A0A41207370656369616C207468616E6B7320746F20616C6C20746865206F7267616E697A6572732C2070726573656E746572732C20616E6420766F6C756E74656572732074686174206D616465200A464F5344454D203230323520706F737369626C652C20616E6420746865206F70706F7274756E69747920746F2061636365737320696E666F726D6174696F6E20667265656C792E20536565200A796F75206E6578742079656172210A3214323032352D30322D30365430303A30303A30305A320D6D696368656C6C65656C6C656E3222676E6F6C616E642C676E6F2C666F7364656D2C6F70656E2D736F757263652C6F73730AE4200A0A2F766D2E6D5F63616C6C12D5200A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374320E6D6F6E74686C792D6465762D3134322C546865204D6F726520596F7520476E6F2031343A204D61696E6E6574204265746120436865636B706F696E7432851F0A0A5765277265206E656172696E67207468652066696E616C20737461676573206F662074686520676E6F2E6C616E64206D61696E6E657420626574612C20736F206C6574277320676F206F76657220776861742773206C6566742E20576527766520616C736F206C61756E636865642061204465764F70732068756220616E642061726520707265706172696E6720666F7220746865205465737436206C61756E63682E204974277320676F696E6720746F206265206120627573792071756172746572210A0A2323204D61696E6E657420426574612050726F67726573730A0A546865726520617265207365766572616C206B657920636F6D706F6E656E74732074686174207765206E65656420746F20636F6D706C657465206265666F7265207765206C61756E636820746865206D61696E6E657420626574613A0A2A205B436F6E737469747574696F6E5D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F67656E6573697329206973206265696E67207772697474656E2C20616E64207765277265206C6F6F6B696E6720666F7220666565646261636B2E20496620796F752077616E7420746F2062652070617274206F662074686520686973746F72792C206F70656E20616E206973737565206F7220612050522C206C6561766520636F6D6D656E747320616E642070726573656E7420796F757220636173652E0A2A205B5265616C6D206F776E65727368697020737065635D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F3237343329206973206120637269746963616C20706965636520746861742077696C6C206469637461746520686F77207265616C6D7320696E7465726163742077697468206F6E6520616E6F746865722E0A2A205B476F7644414F2076335D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F3330373829206973206120756E69717565207265616C6D207461736B6564207769746820676F7665726E696E672074686520636861696E3B20697420636F6E7369737473206F6620636F6E7472696275746F7273206F7267616E697A656420696E746F206D756C7469706C652074696572732E0A2A205B546F6B656E206C6F636B202620706172616D73206B65657065725D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F333137362920616C6C6F777320757320746F206C6F636B20746F6B656E207472616E73666572732C2065786365707420666F7220706179696E6720676173206665657320746F206164642061207061636B616765206F722063616C6C206120636F6E74726163742E20546865207265737472696374696F6E2077696C6C206576656E7475616C6C7920626520756E6C6F636B6564207468726F756768206120476F7644414F20766F74652E0A2A205B4761726261676520636F6C6C6563746F725D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F323636292069732063617061626C65206F662073796E6368726F6E6F7573206761726261676520636F6C6C656374696F6E2C2067726561746C79207265647563696E67206D656D6F727920616C6C6F636174696F6E20616E6420636F7374732E0A2A20546F6B656E6F6D69637320776F726B2077696C6C2066696E616C697A652074686520746F6B656E20616C6C6F636174696F6E2C20696E636C7564696E67207468652061697264726F7020646973747269627574696F6E2E204F6E63652074686520776F726B20697320646F6E652C20796F752077696C6C2062652061626C6520746F20636865636B207768657468657220796F7527726520656C696769626C6520666F72207468652061697264726F702E0A0A232320496E74726F647563696E672074686520676E6F2E6C616E64204465764F7073204875620A0A5B676E6F70732E696F5D2868747470733A2F2F676E6F70732E696F2F29206973206120646564696361746564207265736F7572636520666F7220646576656C6F7065727320746F206275696C64207365637572652C20726573696C69656E7420776F726B666C6F777320616E642064657369676E656420746F20737570706F7274206E6577636F6D6572732026206578706572747320616C696B6520696E206D616E6167696E67204465764F707320666F7220676E6F2E6C616E642E0A0A4974206973206120636F6C6C656374696F6E206F662065666665637469766520657373656E7469616C732C206578706C61696E657273202620626573742070726163746963657320666F72204465764F707320696E20676E6F2E6C616E642E2053656375726974792C20726573696C69656E63652026206175746F6D6174696F6E20617265206B65792E204F7665722074696D652C206974E280996C6C20657870616E6420696E746F2061207265706F7369746F7279206F6620746F6F6C7320666F72206D6F6E69746F72696E672C206175746F6D6174696F6E20262073656375726974792E2049747320676F616C20697320746F20616363656C657261746520626C6F636B636861696E20646576656C6F706D656E7420627920696D70726F76696E6720636F6C6C61626F726174696F6E20262073656375726974792E20676E6F70732E696F2068656C7073206F7074696D697A6520776F726B666C6F77732C206D69746967617465207269736B73202620737570706F7274206869676820617661696C6162696C6974792E205768657468657220796F752072756E206120636861696E206F722076616C69646174652C206974E280997320796F757220676F2D746F204465764F7073207265736F757263652E0A0A57616E7420746F20636F6E747269627574653F20676E6F70732E696F20697320636F6D6D756E6974792D64726976656E21205368617265206175746F6D6174696F6E20736372697074732C2043492F4344206775696465732C207365637572697479206175646974732026206D6F72652E2046757475726520757064617465732077696C6C2072657761726420746F7020636F6E747269627574696F6E732E20436865636B206F757420746865205B476E6F707320476974487562207265706F5D2868747470733A2F2F6769746875622E636F6D2F676E6F76657273652F676E6F70732920666F72206D6F726520696E666F726D6174696F6E2E0A0A2323204F6E626C6F632053706F746C696768740A0A4F6E626C6F6320697320612053656F756C2D626173656420636F6D70616E792074686174277320616E2061637469766520636F6E7472696275746F72206F6E2074686520676E6F2E6C616E642070726F6A6563742E2054686579277265206275696C64696E6720476E6F537761702C204164656E612057616C6C657420616E6420476E6F5363616E2C2061732077656C6C20617320636F6E747269627574696E6720746F2074686520636F72652E20546861742773207768792077652066696C6D6564206F7572206C61737420766973697420746F20746865204F6E626C6F63206F66666963652C20616E642073686F77636173656420746865736520616D617A696E672070656F706C652E0A0A5B496E73696465204F6E626C6F63202D20596F75547562655D2868747470733A2F2F7777772E796F75747562652E636F6D2F77617463683F763D37756D784859444A34426B290A0A2323204576656E747320616E64204D6565747570730A0A23232320464F5344454D20323032350A0A57652074726176656C656420746F204272757373656C7320666F7220464F5344454D20323032352C206F6E65206F662074686520776F726C64E2809973206C61726765737420616E64206D6F737420696E666C75656E7469616C206F70656E2D736F7572636520676174686572696E67732E20546869732079656172206D61726B656420464F5344454DE2809973203235746820616E6E69766572736172792C2064726177696E67206F76657220352C30303020646576656C6F706572732C20656E67696E656572732C20616E6420656E7468757369617374732066726F6D206163726F73732074686520676C6F62652E0A0A417474656E64696E6720464F5344454D2077617320696E73706972696E672C20616E64206120706F77657266756C2072656D696E646572206F6620776861742063616E206265206163686965766564207768656E2070656F706C6520636F6C6C61626F7261746520696E206120667265652C207472616E73706172656E742C20616E64206F70656E207761792E20546865206465707468206F66206B6E6F776C65646765207368617265642C2074686520656E676167696E672064697363757373696F6E732C20616E642074686520736865657220646976657273697479206F6620746F706963732C2066726F6D20726F626F7469637320616E642073696D756C6174696F6E7320746F2074686520476F2065636F73797374656D2C20686967686C696768742074686520696E6372656469626C652062726561647468206F66206F70656E2D736F7572636520696E6E6F766174696F6E2C20616E642077686174E280997320706F737369626C65207768656E2070656F706C65206275696C6420746F6765746865722E2049742077656E74206265796F6E6420636F64652C20464F5344454D2077617320612066697273742D68616E6420657870657269656E636520746F207769746E6573732074686520676C6F62616C20636F6D6D756E6974792064726976656E206279206120736861726564206574686F732E0A436865636B206F75742074686520726563617020626C6F6720706F7374205B686572655D282F722F676E6F6C616E642F626C6F673A702F666F7364656D2D32303235292E0A0A232323204570697465636820436172656572204461790A0A4C61737420796561722C207765206861642061207374726F6E67204570697465636820556E69766572736974792053435020636F686F72742074686174207765206F6E626F617264656420746F20676E6F2E6C616E642C20616E64206173206120666F6C6C6F77207570207765726520696E766974656420746F20746865697220616E6E75616C2073747564656E7420636172656572206461792E2054686973207765656B2C20776520686F7374656420612074616C6B207469746C656420225B4275696C64696E6720644170707320696E20676E6F2E6C616E645D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F776F726B73686F70732F626C6F622F6D61696E2F70726573656E746174696F6E732F323032352D30322D30352D2D657069746563682D2D6C656F6E2F6275696C64696E672D64617070732E706466292220746F20616E2061756469656E6365206F662034302073747564656E74732E3214323032352D30322D31325430303A30303A30305A32074B6F7574656B69321F676E6F6C616E642C65636F73797374656D2C757064617465732C676E6F766D0AFA2E0A0A2F766D2E6D5F63616C6C12EB2E0A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374320D757365722D7265676973747279322A496E74726F647563696E6720746865204E657720676E6F2E6C616E642055736572205265676973747279329B2D0A0A546865207573657220726567697374726174696F6E2073797374656D20686173206265656E2061726F756E642073696E636520746865206561726C792064617973206F6620676E6F2E6C616E642C200A73657276696E67206173206F6E65206F662074686520666F756E646174696F6E616C20636F6D706F6E656E7473206F662074686520636861696E2E20497420616C6C6F777320757365727320746F200A726567697374657220637573746F6D206E616D6573206C696E6B656420746F20746865697220476E6F2061646472657373657320616E6420636C61696D206D61746368696E67206E616D65737061636573200A666F7220746865697220476E6F207061636B616765206465706C6F796D656E74732E0A0A5768696C652074686520757365726E616D6520726567697374726174696F6E2073797374656D206578697374656420617320666172206261636B20617320417072696C203230323220285B60722F64656D6F2F7573657273605D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F636F6D6D69742F3931346632363764643331633033383261343732623566636639386663666335333132396133326429290A746865206E616D657370616365207065726D697373696F6E206465706C6F796D656E742073797374656D2077656E7420696E746F20656666656374207769746820546573743420666F7220746865200A66697273742074696D6520696E204A756C7920323032342E0A0A57697468206368616E67657320746F2074686520476E6F206C616E67756167652C20636861696E20696E6672617374727563747572652C2061732077656C6C20617320746865206164646974696F6E0A6F6620676F7665726E616E636520616E64206F74686572206E65772066756E6374696F6E616C6974792C207468652075736572207265676973747279207761732064756520666F722061206D616A6F720A7265666163746F722E2054686973206E65772076657273696F6E20696E74726F6475636573206120736574206F66207265616C6D73207468617420696E74656772617465206469726563746C79200A776974682074686520636F7265206F662074686520676E6F2E6C616E6420626C6F636B636861696E2C2070726F766964696E672073696D696C617220627574206D6F726520666C657869626C650A66756E6374696F6E616C69747920616E6420757067726164656162696C697479207468726F75676820476F7644414F2070726F706F73616C732E0A0A232320526567697374657220796F757220676E6F2E6C616E6420757365726E616D65206E6F77210A0A576520696E7669746520796F7520746F20726567697374657220796F757220676E6F2E6C616E6420757365726E616D65207769746820746865206E65772055736572205265676973747279206F6E0A74686520506F7274616C204C6F6F70206E6574776F726B2E0A0A48657265277320686F7720746F20726567697374657220696E2061206665772073746570733A0A2D20437265617465206120476E6F206164647265737320776974682060676E6F6B657960206F7220612074686972642D70617274792077616C6C65742073756368206173204164656E610A2D20466574636820506F7274616C204C6F6F7020474E4F542066726F6D20746865205B466175636574204875625D2868747470733A2F2F6661756365742E676E6F2E6C616E64290A2D20566973697420746865205B55736572205265676973747279207265616C6D5D282F722F676E6F6C616E642F75736572732F763129200A2D20496620796F75277265207573696E67204164656E612C20796F752063616E20757365205B476E6F53747564696F20436F6E6E6563745D2868747470733A2F2F676E6F2E73747564696F2F636F6E6E6563742F766965772F676E6F2E6C616E642F722F676E6F6C616E642F75736572732F76313F6E6574776F726B3D706F7274616C2D6C6F6F70235265676973746572290A746F2073656E642061207472616E73616374696F6E2076696120746865207765622E200A20202D20556E64657220616476616E636564206F7074696F6E732C206D616B65207375726520746F2073657420746865202273656E642220616D6F756E7420746F20603130303030303075676E6F7460200A2020746F2070617920666F722074686520726567697374726174696F6E206665652E0A2D20496620796F75277265207573696E672060676E6F6B6579602C20636C69636B206F6E202252656769737465722220746F206765742061207072652D6275696C742060676E6F6B65796020636F6D6D616E640A20202D204D616B65207375726520746F20616C736F2073657420602D73656E6420223130303030303075676E6F74226020746F2070617920666F722074686520726567697374726174696F6E206665650A2D20456E74657220796F7572206465736972656420757365726E616D6520776869636820666F6C6C6F777320746865206E616D696E672072756C6573206F75746C696E656420696E20746865200A55736572205265676973747279207265616C6D2E0A2D2043616C6C207468652066756E6374696F6E20616E642073656520796F7572206E616D652073686F7720757020696E2074686520224C617465737420726567697374726174696F6E73222073656374696F6E210A0A3E204D616B65207375726520746F20737065636966792074686520657861637420616D6F756E74206F6620474E4F5420666F722074686520726567697374726174696F6E2066656520283120474E4F54292E0A0A23232053797374656D204172636869746563747572650A0A466F7220646576656C6F70657273207468617420617265206C6F6F6B696E6720746F2075736520746865206E657720557365722052656769737472792073797374656D20696E207468656972200A7265616C6D732C2062656C6F7720697320616E206F75746C696E65206F6620746865206D61696E20636F6D706F6E656E7473206F66207468652073797374656D20696E636C7564696E672061200A70726163746963616C206578616D706C6520666F756E6420756E6465722060722F646F6373602E200A0A546865206E6577207573657220726567697374726174696F6E2073797374656D2C20706169726564207769746820746865206E616D6573706163652073797374656D2C20656E61626C65730A637573746F6D20757365726E616D657320616E64206E616D657370616365207065726D697373696F6E20636865636B696E672075706F6E207061636B616765206465706C6F796D656E742E2049740A636F6E7369737473206F66207468726565206B6579207265616C6D733A0A0A2D205B60722F7379732F7573657273605D282F722F7379732F757365727329202D20436F7265206C6F676963206F66207468652073797374656D2C2068616E646C696E672073746F7261676520616E64207265736F6C7574696F6E2E0A2D205B60722F676E6F6C616E672F75736572732F7631605D282F722F676E6F6C616E642F75736572732F763129202D2054686520757365722D666163696E67206170706C69636174696F6E207768657265207573657273207265676973746572206E616D65732E0A2D205B60722F7379732F6E616D6573605D282F722F7379732F6E616D657329202D20546865206465706C6F796D656E74207065726D697373696F6E2073797374656D20666F72206E616D657370616365732E0A0A4C65742773206469766520696E746F207768617420656163682070617274206F66207468652073797374656D20646F65732E0A0A23232320722F7379732F75736572730A0A5468697320697320612073797374656D207265616C6D207468617420646566696E65732074686520636F7265206C6F676963206F662074686520757365722072656769737472792E2049742069730A6E6F74207570677261646561626C6520616E64207365727665732061732074686520666F756E646174696F6E616C206C61796572207468617420696E636C75646573206B65792064617461200A737472756374757265732C2073746F72616765207661726961626C65732C20616E642066756E6374696F6E7320666F72206D616E6167696E6720757365726E616D65732E0A0A4F6E6C792077686974656C6973746564207265616C6D732028617070726F7665642076696120476F7644414F2070726F706F73616C73292063616E20777269746520746F20746869732073746F726167652C0A656E737572696E6720676F7665726E616E6365206F7665727369676874206F76657220616E7920656E74697479206D6F64696679696E67207468652072656769737472792E0A0A54686520605573657244617461602073747275637475726520646566696E657320686F77207573657220696E666F726D6174696F6E2069732073746F7265643A0A0A606060676F0A7479706520557365724461746120737472756374207B0A202020206164647220202020207374642E4164647265737320202F2F2055736572277320626C6F636B636861696E20616464726573730A20202020757365726E616D6520737472696E67202020202020202F2F204C6174657374207265676973746572656420757365726E616D650A2020202064656C657465642020626F6F6C2020202020202020202F2F20466C616720666F7220736F66742064656C6574696F6E0A7D0A6060600A0A54686973207265616C6D20616C736F2070726F766964657320757365722D666163696E672066756E6374696F6E7320666F72207265736F6C76696E67206E616D657320616E64206164647265737365732E0A0A23232323205265736F6C76696E6720557365726E616D65732026204164647265737365730A0A546F20656E61626C65206170706C69636174696F6E7320616E6420736D61727420636F6E74726163747320746F206C6F6F6B207570207573657220696E666F726D6174696F6E2C200A60722F7379732F7573657273602070726F76696465732066756E6374696F6E7320746F207265736F6C766520626F746820757365726E616D657320616E64206164647265737365733A0A0A606060676F0A2F2F205265736F6C76654E616D652072657475726E7320746865206C6174657374205573657244617461206F6620612073706563696669632075736572206279206E616D65206F7220616C6961730A66756E63205265736F6C76654E616D65286E616D6520737472696E6729202864617461202A55736572446174612C20697343757272656E7420626F6F6C29207B2E2E2E7D0A0A2F2F205265736F6C7665416464726573732072657475726E7320746865206C6174657374205573657244617461206F662061207370656369666963207573657220627920616464726573730A66756E63205265736F6C7665416464726573732861646472207374642E4164647265737329202A5573657244617461207B2E2E2E7D0A6060600A0A53656520686F7720746F207573652074686573652066756E6374696F6E7320696E20612070726163746963616C206578616D706C65205B686572655D282F722F646F63732F7573657273292C20616E64200A636865636B206F75742074686520736F7572636520636F6465205B686572655D282F722F7379732F757365727324736F757263652666696C653D75736572732E676E6F292E0A0A23232320722F676E6F6C616E642F75736572732F76310A0A54686520666972737420697465726174696F6E206F662074686520676E6F2E6C616E64207573657220726567697374727920616C6C6F777320757365727320746F20726567697374657220610A6E616D6520666F6C6C6F77696E672061207370656369666963207061747465726E202D207374617274732077697468207468726565206C6574746572732C20656E647320776974682074687265650A6E756D626572732C20616E64206973206E6F74206C6F6E676572207468616E20323020636861726163746572732E2054686520726567697374726174696F6E20636F737473203120474E4F540A616E642074686520666565206973206D6F6469666961626C6520766961206120476F7644414F2070726F706F73616C2E0A0A546869732069732074686520757365722D666163696E67207265616C6D20776865726520757365727320696E7465726163742077697468207468652072656769737472792E204974200A70726F766964657320616E20696E7465726661636520666F72207265676973746572696E6720757365726E616D6573207768696C6520656E666F7263696E67206365727461696E20636F6E73747261696E74733A0A0A2D20557365726E616D6573206D7573742073746172742077697468207468726565206C6574746572732E0A2D2054686579206D75737420656E642077697468207468726565206E756D626572732E0A2D2054686520746F74616C206C656E677468206D757374206E6F742065786365656420323020636861726163746572732E0A2D204F6E6C7920605F6020697320616C6C6F7765642061732061207370656369616C206368617261637465722E0A2D2054686520726567697374726174696F6E20666565206973203120474E4F5420286D6F6469666961626C652076696120476F7644414F2070726F706F73616C73292E0A0A54686973207265616C6D20636F6D6D756E69636174657320776974682060722F7379732F75736572736020746F20656E73757265206E657720726567697374726174696F6E7320666F6C6C6F7720746865200A73797374656D2D776964652072756C657320616E642074686174206F6E6C792076616C696420757365726E616D6573206172652073746F7265642E204675747572652076657273696F6E73200A2876322C2076332C206574632E292077696C6C20666F6C6C6F7720646966666572656E74207061747465726E732C20737563682061732076616E69747920757365726E616D65732C20757365726E616D650A61756374696F6E732C20616E64206D6F72652063616E20626520696E74726F647563656420776974686F7574206D6F64696679696E672074686520636F72652073746F72616765206C6F6769632E0A0A46696E6420616C6C2072656C656173657320666F722060722F676E6F6C616E642F757365727360205B686572655D282F722F676E6F6C616E642F7573657273292E0A0A23232320722F7379732F6E616D65730A0A546865206465706C6F796D656E74207065726D697373696F6E2073797374656D20656E73757265732074686174206F6E6C792074686520726967687466756C206F776E6572206F662061200A6E616D6573706163652063616E206465706C6F7920476E6F207061636B6167657320756E6465722069742E0A0A5468697320636865636B20697320706572666F726D65642061742074686520476E6F564D204B6565706572206C6576656C2C20776869636820636F6D6D756E6963617465732077697468200A60722F7379732F6E616D657360207265616C6D206265666F726520616C6C6F77696E672061206465706C6F796D656E7420746F2061206365727461696E207061636B6167652070617463682E0A546869732066756E6374696F6E616C69747920697320656E61626C656420696E207468652067656E6573697320626C6F636B2C207769746820616E206F776E6572736869702D64726F7070696E67200A6D656368616E69736D20656E737572696E67206E6F2073696E676C6520656E746974792072657461696E7320636F6E74726F6C206F766572207468652073797374656D2E0A0A436865636B206F75742074686520736F7572636520636F6465205B686572655D282F722F7379732F6E616D657324736F757263652666696C653D76657269666965722E676E6F292E3214323032352D30332D31325430303A30303A30305A32076C656F6868686E3222676E6F6C616E642C757365726E616D65732C6E616D657370616365732C64617070730ADC180A0A2F766D2E6D5F63616C6C12CD180A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374320E6D6F6E74686C792D6465762D31353237546865204D6F726520596F7520476E6F2031353A2047657474696E6720526561647920666F7220746865204D61696E6E6574204265746132F2160A0A4173207765206765617220757020666F7220746865206C61756E6368206F6620746865204D61696E6E657420426574612C20746869732065646974696F6E206F66205F546865204D6F726520596F7520476E6F5F2074616B65732061206C6F6F6B206174207468652070726F6772657373207765E280997665206D6164652C2077686174E28099732063757272656E746C7920696E2074686520776F726B732C20616E642077686174E280997320636F6D696E67206E6578742E2046726F6D20637269746963616C20676F7665726E616E6365207570646174657320746F20696D70726F76656D656E747320696E2073746F7261676520616E6420676173206D656368616E69736D732C207765E280997265206C6179696E67207468652067726F756E64776F726B20666F72206120737461626C6520616E6420666561747572652D72696368206D61696E6E65742E204C6574E2809973206469766520696E2E0A0A2323204D61696E6E657420426574612050726F67726573730A0A546865726520617265207365766572616C206B657920636F6D706F6E656E74732074686174207765206E65656420746F20636F6D706C657465206265666F7265207765206C61756E636820746865206D61696E6E657420626574612E0A0A446F6E653A0A2A205B546F6B656E206C6F636B202620706172616D73206B65657065725D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F333137362920616C6C6F777320757320746F206C6F636B20746F6B656E207472616E73666572732C2065786365707420666F7220706179696E6720676173206665657320746F206164642061207061636B616765206F722063616C6C206120636F6E74726163742E20546865207265737472696374696F6E2077696C6C206576656E7475616C6C7920626520756E6C6F636B6564207468726F756768206120476F7644414F20766F74652E0A2A205B476F7644414F2076335D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F33303738293A206E657720697465726174696F6E206F662074686520676F7665726E616E6365207265616C6D73207468617420696E74726F647563657320746865206D756C74692D746965726564206D656D626572736869702E0A0A496E207265766965773A0A2A205B4761726261676520636F6C6C6563746F725D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F33373839293A2063617061626C65206F662073796E6368726F6E6F7573206761726261676520636F6C6C656374696F6E2C2067726561746C79207265647563696E67206D656D6F727920616C6C6F636174696F6E20616E6420636F7374732E0A2A205B5265616C6D206F776E65727368697020737065635D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F34303238293A206120637269746963616C20706965636520746861742077696C6C206469637461746520686F77207265616C6D7320696E7465726163742077697468206F6E6520616E6F746865722E0A2A205B4761732073746F7261676520666565206D656368616E69736D5D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F33343138293A20612073797374656D20746F206D616E6167652073746F72616765206665657320666F72207472616E73616374696F6E73206279206C6F636B696E6720474E4F542070726F706F7274696F6E616C20746F206164646974696F6E616C2073746F726167652075736167652E205468697320656E73757265732066616972206163636F756E74696E6720666F722073746F7261676520636F73747320616E642070726F766964657320696E63656E746976657320666F7220656666696369656E742073746F72616765207573652E0A2A205B42616C616E636520636865636B657220616E642067656E6573697320646973747269627574696F6E5D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F33383939293A2061207265616C6D20616E6420696E7465726661636520656E61626C696E6720796F7520746F20717569636B6C7920636865636B20616E79206163636F756E742062616C616E63652E0A2A205B44726970206661756365745D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F33383038293A2073696E636520746F6B656E7320696E697469616C6C792063616E277420626520707572636861736564206F72207472616465642C20746865206661756365742077696C6C20656E61626C6520796F7520746F20636F766572206761732066656573207768696C65207573696E6720676E6F2E6C616E642E0A2A205B4761732066656520646973747269627574696F6E5D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F33393536293A2074686520636F726E657273746F6E65206F6620746865207472616E73616374696F6E20666565206C6F6769632C20726F7574696E67206665657320746F2074686520636F6C6C6563746F72206164647265737365732E0A0A496E20646576656C6F706D656E743A0A2A205B737464207265666163746F725D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F33383734293A20746865206469766973696F6E20696E746F207061636B616765732073686F756C642068656C7020746F20726564756365207468652073636F7065206F662065616368207061636B6167652C2068656C70696E6720757320637265617465206D6F64756C6172207061636B616765732E0A0A232320546573743620507265766965770A0A546573743620686173206265656E2064656C6179656420626563617573652077652077616E74656420746F206C61756E6368206974207769746820626F74682074686520746F6B656E206C6F636B20616E6420476F7644414F20763320636F6D706F6E656E74732C20736F20776520636F756C642074657374207468656D20746F67657468657220616E6420666967757265206F757420686F77207468657920636F756C6420627265616B2E20546865206E657720746573746E65742077696C6C20616C736F20696E74726F6475636520736F6D65206E657720636F6D706F6E656E74732C206C696B652074686520757365726E616D6520726567697374727920616E64207468652076616C6F706572202876616C696461746F72206F70657261746F72292072656769737472793B2070726F73706563746976652076616C696461746F72732077696C6C2062652061626C6520746F2072656769737465722061207075626C69632070726F66696C65206265666F72652067657474696E67206E6F6D696E6174656420746F206265636F6D652061206E6574776F726B2076616C696461746F722E0A0A57652061696D20746F206C61756E6368205465737436206E657874207765656B2C20736F20737461792074756E6564210A0A2323204576656E747320616E64204D6565747570730A0A23232320496E74726F64756374696F6E20746F20676E6F2E6C616E6420402042656C67726164650A0A496620796F7527726520696E207468652042656C677261646520617265612C206A6F696E20757320666F7220616E205B696E2D706572736F6E20776F726B73686F705D2868747470733A2F2F6C752E6D612F677965737073353629206F6E20417072696C2031302C207768657265207765E280996C6C206578706C6F726520476E6F2C20616E64206769766520796F75206120736F6C696420756E6465727374616E64696E67206F6620676E6F2E6C616E6420616E6420686F7720697420646966666572732066726F6D206F7468657220736D61727420636F6E747261637420706C6174666F726D732E3214323032352D30342D31305430303A30303A30305A32074B6F7574656B69321F676E6F6C616E642C65636F73797374656D2C757064617465732C676E6F766D0AEF750A0A2F766D2E6D5F63616C6C12E0750A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374321B676E6F6C616E642D7468652D66697273742D6C6F676F76657273653247476E6F2E6C616E64202D20546865204669727374204C6F676F76657273652C206F7220416C7465726E617465205265616C697479206F66204C6F676963616C204F626A656374733280740A0A54656E6465726D696E74206368616E676564207468652077617920626C6F636B636861696E20646576656C6F70657273207468696E6B2061626F757420626C6F636B636861696E0A636F6E73656E73757320616C676F726974686D732E20476E6F2E6C616E642077696C6C206368616E6765207468652077617920646576656C6F70657273207468696E6B2061626F75740A70726F6772616D6D696E672E0A0A476E6F2E6C616E6420726570726573656E7473206120706172616469676D20736869667420696E206D756C74692D757365722070726F6772616D6D696E672074686174206E6F206F746865720A736F6C7574696F6E206F66666572732E204974206973206E6F74206A757374206120736D61727420636F6E747261637420706C6174666F726D20616E6420626C6F636B636861696E3B2069742069730A74686520776F726C64277320666972737420766961626C65206C616E67756167652D6261736564206D756C74692D75736572206F7065726174696E672073797374656D2E204974730A756C74696D61746520676F616C20697320746F20686F73742074686520776F726C642773206B6E6F776C65646765206261736520666F7220746865206E6577206D696C6C656E6E69756D2E0A0A23232057687920476E6F2E6C616E643F0A0A436F6D70617265207075626C697368696E67206120626C6F67207369746520696E20476E6F2E6C616E6420746F20616C6C207072696F7220736D61727420636F6E74726163742073797374656D732E0A0A606060676F0A2F2F205265616C6D3A20676E6F2E6C616E642F722F6D652F6D79626C6F670A0A7061636B61676520676E6F626C6F670A0A696D706F727420280A0922737464220A0A0922676E6F2E6C616E642F702F64656D6F2F626C6F67220A290A0A7661722062203D2026626C6F672E426C6F677B0A095469746C653A202022676E6F2E6C616E64277320626C6F67222C0A095072656669783A20222F722F676E6F6C616E642F626C6F673A222C0A7D0A0A66756E6320416464436F6D6D656E7428706F7374536C75672C20636F6D6D656E7420737472696E6729207B0A2020202063726F7373696E6728290A096173736572744973436F6D6D656E74657228290A096173736572744E6F74496E506175736528290A0A0963616C6C6572203A3D207374642E4F726967696E43616C6C657228290A09657272203A3D20622E476574506F737428706F7374536C7567292E416464436F6D6D656E742863616C6C65722C20636F6D6D656E74290A09636865636B45727228657272290A7D0A0A66756E632052656E646572287061746820737472696E672920737472696E67207B0A0972657475726E20622E52656E6465722870617468290A7D0A6060600A0A596F752063616E207365652074686520476E6F20736F7572636520636F646520746861742072656E64657265642074686973207765627061676520627920636C69636B696E670A6F6E20225C3C5C2F5C3E536F7572636522206F6E2074686520746F70207269676874206F662074686520776562706167652E0A0A513A205768792069732065766572797468696E6720656C736520736F20636F6D706C6963617465643F0A0A413A20537472616E67656C7920646966666963756C7420746F20616E737765722C2062757420756C74696D6174656C792062656361757365206F7572206C616E6775616765732C0A636F6D70696C6572732C20696E746572707265746572732C20616E642070726F6772616D6D696E6720706172616469676D7320617265207374696C6C2065766F6C76696E672E0A0A23232042726965662045766F6C7574696F6E206F66204C616E67756167650A0A5772697474656E2068756D616E206C616E677561676520686173206F6E6C79206265656E2061726F756E6420666F722061206D65726520363030302079656172732C206120626C697020696E0A6F75722065766F6C7574696F6E61727920686973746F72792E204C696B65206C6976696E6720737065636965732C206F7572206C616E677561676520616E642077726974696E6720686176650A65766F6C76656420616C6F6E677369646520757320616E642077697468696E2075732E204164616D20776173206E6F742074686520666972737420486F6D6F2073617069656E73206F6E0A65617274682C20627574206865206D61792068617665206265656E207468652066697273742077697468207772697474656E206C616E67756167652C20616E6420746865726562792061206E65770A6B696E64206F66206D616E2E200A0A50726F6772616D6D696E67206C616E677561676573206C696B65776973652068617665206265656E2065766F6C76696E672072617069646C792C20627574206F6E6C7920666F7220610A68616E6466756C206F6620646563616465733B2069742077617320696E20746865203139373073207768656E20416C616E204B617920646576656C6F70656420536D616C6C74616C6B2C207468650A6669727374206F626A6563742D6F7269656E7465642070726F6772616D6D696E67206C616E67756167652E20496E207468652031393930E2809973204272656E64616E2045696368206F660A4E6574736361706520696E76656E746564204A61766153637269707420776869636820666F7265766572207472616E73666F726D65642074686520576F726C642057696465205765623B2053756E0A4D6963726F73797374656D206D616465204A6176612C20616E6420696E64757374726965732070726F7370657265642067726561746C7920627920746865736520616E642073696D696C61720A6C616E677561676520746563686E6F6C6F676965732E200A0A232320476E6F2076732050726576696F75730A0A4F7572206C616E6775616765732C20636F6D70696C657273202620696E746572707265746572732C20616E642070726F6772616D732061726520746F6461793A0A202D204E6F6E64657465726D696E6973746963202D2072616E646F6D6E65737320697320746865206E6F726D20696E20636F6E63757272656E742070726F6772616D6D696E672C206275740A2020206576656E20476F2072616E646F6D697A6573206D617020697465726174696F6E2E200A202D204469736B20426F756E64202D2070726F6772616D73206E65656420746F2062652064657369676E656420746F207361766520746F206469736B20E280943E2053514C20736F6C7574696F6E733B0A2020204E4F54206E6174697665206C616E67756167650A202D20446570656E64656E74202D2072756E6E696E672070726F6772616D7320617265206F776E656420627920616E206F776E65723B20646570656E64656E74206F6E0A202020696E646976696475616C732C206E6F742073656C662D7375737461696E696E670A202D20457068656D6572616C202D2072756E6E696E672070726F6772616D732061726520657870656374656420746F206661696C3B206E6F2067756172616E746565206F660A20202070726573656E63652E0A202D2053696E676C652055736572205265616C6D202D20696D706F7274206F6620696E7465726E616C206C696272617269657320617265206E61746976652C206275740A202020696E746572616374696F6E7320776974682065787465726E616C2070726F6772616D7320617265204E4F54206E61746976653B2067656E6572616C6C79206E6F2060696D706F72740A202020E2809C676E6F2E6C616E642F722F65787465726E616C2F7265616C6DE2809D602C20627574206C65616B79206162737472616374696F6E732073796E74686573697A656420696520475250430A0A476E6F2C20476E6F564D2C20616E6420476E6F2E6C616E6420697320696E20636F6E74726173743A0A202D2044657465726D696E6973746963202D20676E6F20726F7574696E6573206E6F742079657420737570706F727465642C20627574206576656E2074686573652077696C6C2062650A20202064657465726D696E69737469632E0A202D204175746F2050657273697374656E74202D20616C6C206368616E67657320746F20696E7374616E74696174656420476E6F206F626A6563747320696E20746865207472616E73616374696F6E0A20202061726520706572736973746564207472616E73706172656E746C792E0A202D2053656C662D5375737461696E696E67202D206576657279207472616E73616374696F6E206C6F636B732024474E4F5420757020666F72206E65772073746F7261676520616C6C6F63617465643B0A202020435055206761732066656573207061696420696E20616E79206C616E67756167652E0A202D2054696D656C657373202D20657665727920476E6F206F626A6563742074686174206973207265666572656E63656420286E6F74204743E2809964292072656D61696E7320666F72657665722E0A202D204D756C74692055736572205265616C6D202D20616C6C206F626A65637473206172652073746F72656420696E207265616C6D207061636B6167657320286E616D65737061636573292E200A0A232320476E6F204C616E677561676520496E6E6F766174696F6E0A0A416C6C206D6F6465726E20706F70756C61722070726F6772616D6D696E67206C616E677561676573206172652064657369676E656420666F7220612073696E676C652070726F6772616D6D65720A757365722E2050726F6772616D6D696E67206C616E67756167657320737570706F72742074686520696D706F7274696E67206F662070726F6772616D206C6962726172696573206E61746976656C790A666F7220636F6D706F6E656E7473206F66207468652073696E676C65207573657227732070726F6772616D2C20627574207468697320646F6573206E6F7420686F6C64207472756520666F720A696E746572616374696E67207769746820636F6D706F6E656E7473206F6620616E6F746865722075736572277320286F74686572292070726F6772616D2E20476E6F20697320616E0A657874656E73696F6E206F662074686520476F206C616E677561676520666F72206D756C74692D757365722070726F6772616D6D696E672E20476E6F20616C6C6F77732061206D6173736976650A6E756D626572206F662070726F6772616D6D65727320746F206974657261746976656C7920616E6420696E7465726163746976656C7920646576656C6F7020612073696E676C65207368617265640A70726F6772616D207375636820617320476E6F2E6C616E642E0A0A5468652061646465642064696D656E73696F6E206F66207468652070726F6772616D20646F6D61696E206D65616E7320746865206C616E67756167652073686F756C6420626520657874656E6465640A746F206265737420657870726573732074686520636F6D706C65786974696573206F662070726F6772616D6D696E6720696E2074686520696E7465722D7265616C6D2028696E7465722D75736572290A646F6D61696E2E20496E206F7468657220776F7264732C20476F2069732061207265737472696374656420737562736574206F662074686520476E6F206C616E677561676520696E207468650A73696E676C652D7573657220636F6E746578742E2028496E207468697320616E616C6F677920636C69656E7420726571756573747320666F7220476F20776562207365727665727320646F6E27740A636F756E7420617320746865792072756E206F75747369646520746865207365727665722070726F6772616D292E0A0A476E6F20697320476F20706C75733A0A202D205B6063726F737328666E2928E280A629605D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F626C6F622F6D61737465722F646F63732F7265736F75726365732F676E6F2D696E7465727265616C6D2E6D642363726F7373666E2D616E642D63726F7373696E672D73706563696669636174696F6E290A20202063616C6C732060666E28E280A6296020776865726520666E20697320616E6F74686572207265616C6D2E0A202D20607374642E43757272656E745265616C6D28296020616E6420607374642E50726576696F75735265616C6D282960206368616E6765732075706F6E2063726F73732D63616C6C732E0A202D206066756E6320666E2829207B2063726F7373696E6728293B20E280A6207D60207369676E6966696573207468617420666E20697320612063726F7373696E672D66756E6374696F6E2077686572650A2020207374642E43757272656E745265616C6D28292072657475726E7320746865207265616C6D20696E207768696368207468652066756E6374696F6E206973206465636C617265642E0A2020205B476E6F322070726F706F7365642073796E7461785D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6973737565732F34323233293A0A2020206040666E28E280A629602C20604066756E632040666E2829207B20E280A6207D602E20546865736520617265206C696B652076657262202866756E6374696F6E29206D6F6469666965727320696E0A2020205B686F6E6F72696669637320696E204B6F7265616E20616E64204A6170616E6573655D2868747470733A2F2F656E2E77696B6970656469612E6F72672F77696B692F486F6E6F7269666963735F2532386C696E6775697374696373253239290A202D205768696C6520616C6C2064617461206973207265616461626C65206279206F74686572207265616C6D732C20646F742E73656C6563746F72206163636573730A2020206163726F7373207265616C6D7320676574205B7461696E74656420776974682027726561646F6E6C7927206174747269627574655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F626C6F622F6D61737465722F646F63732F7265736F75726365732F676E6F2D696E7465727265616C6D2E6D6423726561646F6E6C792D7461696E742D73706563696669636174696F6E292E0A202D205B6072657669766528666E29605D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F626C6F622F6D61737465722F646F63732F7265736F75726365732F676E6F2D696E7465727265616C6D2E6D642370616E69632D616E642D726576697665666E290A202020666F7220536F667477617265205472616E73616374696F6E616C204D656D6F7279202853544D292E200A202D2046756E6374696F6E2F6D6574686F642072657475726E20696D706C6965732061636365737320776974686F757420726561646F6E6C79207461696E742E0A202D20496E7465722D7265616C6D207479706520636F6E76657273696F6E206C696D69746174696F6E7320746F2070726576656E74206578706C6F6974732E0A202D204D6F726520616E6420726566696E656D656E747320746F20636F6D6520696E20476E6F322E0A0A5468657365206C616E677561676520696E6E6F766174696F6E732F657874656E73696F6E7320616C6C6F7720666F72207361666572206D756C74692D75736572206170706C69636174696F6E0A646576656C6F706D656E74207768657265206D616E792075736572732061726520636F6C6C61626F7261746976656C792070726F6772616D6D696E6720612073696E676C652074696D656C6573730A28696D6D6F7274616C2920636F6D6D756E616C2070726F6772616D2E0A0A232320546865204C6F676F76657273650A0AE1BC98CEBDC2A0E1BC80CF81CF87E1BF87C2A0E1BCA6CEBDC2A0E1BD81C2A0CE9BCF8CCEB3CEBFCF82C2A0CEBACEB1E1BDB6C2A0E1BD81C2A0CE9BCF8CCEB3CEBFCF82C2A0E1BCA6CEBDC2A0CF80CF81E1BDB8CF82C2A0CF84E1BDB8CEBDC2A0CE98CEB5CF8CCEBDC2A0CEBACEB1E1BDB6C2A0CE98CEB5E1BDB8CF82C2A0E1BCA6CEBDC2A0E1BD81C2A0CE9BCF8CCEB3CEBFCF822E2020496E207468650A626567696E6E696E67207761732074686520576F726420284C6F676F73292C20616E642074686520576F726420776173207769746820476F642C20616E642074686520576F7264207761730A476F642E202D204A6F686E20313A310A0A4C6F676F73206D65616E7320E2809C776F72642C20646973636F757273653B20726561736F6EE2809D2C20616E64207368617265732069747320726F6F7420776974682074686520776F72640AE2809C6C6F676963E2809D2E200A0A5769746820746865736520656C656D656E747320616C746F67657468657220796F752063616E206465726976652061206E65772070726F70657274793A0A202D20476E6F2065787072657373696F6E73206265636F6D6520227265616C22206F6E20476E6F2E6C616E642E0A202D20457468657265756D20636F6D657320636C6F7365206275742069736E2774206F626A6563742D6F7269656E74656420616E6420536F6C696469747920686173206E6F2070726F6E6F756E732E0A202D2054424C2773205757572C20444F4D206D6F64656C2C20485454502076657262732C20506C616E20392C20457468657265756D2C20616E64204642204D6574612061726520616C6C0A202020617474656D70747320746F2061727269766520617420746865206C6F676F76657273652E0A202D20476E6F2E6C616E642069732074686520666972737420636F6D706C657465206C6F676F76657273652E0A0A23232041646F7074696F6E2053747261746567790A0A546865726520617265206F7665722061206D696C6C696F6E20476F20646576656C6F7065727320616E642067726F77696E672E20476F2061732061206C616E67756167652072656D61696E7320610A706F70756C6172206C616E677561676520666F7220646576656C6F706572732C20616E206F72646572206F66206D61676E6974756465206D6F7265207468616E20527573740A646576656C6F706572732C206F6E207061722077697468204A61766153637269707420646576656C6F70657273206275742067726F77696E6720666173746572207468616E0A4A6176615363726970742E0A0A5B215B54494F424520323032355D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032352D30352D30355F676E6F6C616E642D7468652D66697273742D6C6F676F76657273652F7372632F7468756D62732F74696F62655F323032352E706E67295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032352D30352D30355F676E6F6C616E642D7468652D66697273742D6C6F676F76657273652F7372632F74696F62655F323032352E706E67290A5B215B4769744875743220323032345D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032352D30352D30355F676E6F6C616E642D7468652D66697273742D6C6F676F76657273652F7372632F7468756D62732F676974687574325F323032342E706E67295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032352D30352D30355F676E6F6C616E642D7468652D66697273742D6C6F676F76657273652F7372632F676974687574325F323032342E706E67290A0A476E6F2E6C616E6420616E6420697473206173736F636961746564206E6574776F726B206F6620476E6F20564D20636861696E732C20616E642041746F6D4F6E6520696620697420686F7374730A69742C2077696C6C206265636F6D6520746865206E65787573206F662068756D616E20746F2068756D616E2C2068756D616E20746F206D616368696E652C20616E64206D616368696E6520746F0A6D616368696E6520636F6F7264696E6174696F6E3B20627574206F6E6C792061667465722069742066696E647320612073656C662D7375737461696E696E67206F7267616E69632067726F7774680A6379636C652E0A0A54686520626573742077617920746F20656E73757265207375636365737320616E6420746F20616363656C65726174652061646F7074696F6E20697320746F2073656564207468650A696E697469616C20636F6D6D756E69747920776974682074686520726967687420636F6D6D756E6974792E20546865726520617265206D616E79207479706573206F660A636F6D6D756E69746965732C2073756368206173207468652063727970746F20636F6D6D756E6974792C20657468657265756D20636F6D6D756E6974792C2073747564656E7420636F6D6D756E6974792C0A6275742073696E636520426974636F696E2068617320676F6E65206D61696E73747265616D2C20746865736520636F6D6D756E6974696573206172656E277420616C7761797320696E0A61677265656D656E742061626F75742074686520707572706F7365206F6620626C6F636B636861696E20746563686E6F6C6F67793B20626563617573652074686579206172656E27742061776172650A6F662074686520686973746F727920616E6420666162726963206F66207468652068696464656E20706F776572207374727563747572657320746861742072756E207468650A6E61727261746976652D2D626F7468206D61696E73747265616D20414E4420636F6E74726F6C6C6564206F70706F736974696F6E732E205468657920646F206E6F74206665656C20746861740A74686579206E65656420736F6D657468696E672C20736F2074686569722068616269747320617265206E6F74206173206F6276696F757320746F206368616E67652E0A0A427574207468652022667265652D7468696E6B696E672220616E642022636F6E737069726163792220616E642022616E74692D7761722220616E642022616E74692D436F76696431392D766178220A616E64206576656E207468652022747275652043687269737469616E2220636F6D6D756E6974696573206665656C20616E20757267656E74206E65656420666F720A63656E736F72736869702D70726F6F6620636F6F7264696E6174696F6E20616E6420636F6D6D756E69636174696F6E20746F6F6C732E20546865736520636F6D6D756E697469657320686176650A696E666C75656E636572732077686F20617265206B6570742068696464656E2066726F6D207468652062726F61646572207075626C69633B207468657920686176652073756666657265640A6465706C6174666F726D696E672C20646566616D6174696F6E2C20616E64206576656E2064656174682E0A0A4275696C6420746F6F6C732C20636F6E6E656374696F6E732C20616E642072656C6174696F6E73207769746820746865736520706172746963756C617220636F6D6D756E697469657320616E640A657370656369616C6C792074686F736520696E666C75656E636572732077686F20617265206E75616E63656420696E20746865697220726573656172636820616E64207370656563682E0A4576656E2074686F7365207468617420646F6E27742070726F6D6F74652063727970746F2077696C6C20736565207468652062656E656669747320756E697175656C79206F6666657265642062790A476E6F2E6C616E642E0A0A232320476E6F2E6C616E64204C6963656E73650A0A416E796F6E652063616E206D616B6520476E6F20564D20706F776572656420636861696E7320646572697665642066726F6D20476E6F2E6C616E64206163636F7264696E6720746F207468650A766972616C20636F70796C656674206C6963656E7365207465726D7320616E64207374726F6E67206174747269627574696F6E20726571756972656D656E742E20546865205374726F6E670A4174747269627574696F6E20636C61757365206F662074686520476E6F204E6574776F726B2047504C206C6963656E7365207072657365727665732074686520737069726974206F66207468650A474E55204147504C206C6963656E736520666F722074686520626C6F636B636861696E20776F726C642E0A0A232320546F6B656E6F6D6963730A0A24474E4F54206973207468652073746F72616765206C6F636B2D7570207574696C69747920746F6B656E2C20736F20476E6F2E6C616E6420697320746F20476E6F20456E676C616E64206C696B650A24474E4F5420697320746F2070726573656E636520696E20476E6F20456E676C616E642C20776865726520746F74616C2073746F72616765206973206B6570742066696E69746520666F720A766572792D6C6F6E672D7465726D206578697374656E7469616C20707572706F7365732C20616E642076616C756520697320646572697665642066726F6D2074686520476E6F0A6172746966616374732063726561746564206279206974732075736572732C20616E6420736F6D65206E657720757365727320636F6D706574696E6720666F7220617474656E74696F6E2066726F6D0A6D616E79206578697374696E672075736572732E0A0A476E6F2E6C616E64206D6179206D69677261746520746F2041746F6D4F6E6520494353206F6E636520697420697320737570706F727420686172642D666F726B2075706772616465732E0A546865726520476E6F2E6C616E6420776F756C64206265206F6E65204943532073686172642C20616E64206D616E7920476E6F20564D20736861726473206D617920616C736F2065786973742C0A656163682077697468207468656972206F776E206E616D65737061636520616E642070726F6261626C792065616368207468656972206F776E2073746F7261676520746F6B656E20756E6C6573730A736570617261746520747265617469657320617265206D616465206265747765656E20746865206D61696E20476E6F2E6C616E6420636861696E20284943532073686172642920616E640A6F7468657220476E6F20564D207368617264732E205472616E73616374696F6E206665657320666F7220435055207573616765206D6179206265207061696420696E206569746865722024474E4F540A6F72202450484F544F4E2E0A0A2323205465616D0A0A232323204E65772054656E6465726D696E742C204C4C430A0A4E657754656E6465726D696E742C204C4C432069732074686520636F7265206D61696E7461696E6572206F662074686520476E6F564D2C2054656E6465726D696E74322C20616E64200A61742070726573656E7420476E6F2E6C616E642E0A0A2323232320476E6F564D202620476E6F2E6C616E6420436F7265205465616D0A0A202A204A6165204B776F6E206265666F726520616E64206166746572206372656174696E672054656E6465726D696E7420616E6420436F736D6F7320616C776179732068616420610A20202070617373696F6E20666F722070726F6772616D6D696E67206C616E67756167657320616E642077726F7465206D756C7469706C65207061727365727320616E640A202020696E746572707265746572732C20616E6420696E697469616C6C7920616C736F2077726F746520616E2045564D206F6E20746F70206F6620746865206672616D65776F726B2077686963680A202020626563616D652074686520436F736D6F732053444B2E20476E6F2E6C616E642069732074686520726573756C74206F662074776F2064656361646573206F662073656172636820666F720A202020746865206C6F676F76657273652E0A0A202A204D616E6672656420546F75726F6E2C206275696C64657220666F6375736564206F6E206F70656E2D736F7572636520616E6420726573696C69656E7420746563686E6F6C6F676965733B0A202020636F2D666F756E646564207363616C657761792028636C6F75642920616E642062657274792028703270206D6573736167696E67292C207769746820636F6E747269627574696F6E7320746F0A2020203930302B206F70656E2D736F757263652070726F6A656374732E0A0A202A204D696C6FC5A120C5BD69766B6F7669C487202D2053656E696F722064697374726962757465642073797374656D7320656E67696E6565723B2070617373696F6E20666F7220736F6C76696E670A20202070726F746F636F6C2D6C6576656C2070726F626C656D7320696E2074686520626C6F636B636861696E2073706163652E0A0A202A204D6F7267616E2042617A616C6765747465202D2053656E696F7220476F20656E67696E6565723B206272696E67696E6720746865206A6F79206F6620646576656C6F70696E6720476F20746F0A202020476E6F2E0A0A202A205261792051696E202D2057697468206F766572203135207965617273206F6620657870657269656E636520696E20736F66747761726520646576656C6F706D656E7420616E640A2020206275696C64696E67206C617267652D7363616C65206E6574776F726B732C20492068617665206120646565702070617373696F6E20666F7220476F2070726F6772616D6D696E670A2020206C616E677561676520616E6420626C6F636B636861696E20746563686E6F6C6F67792E0A0A202A204D61726320566572746573202D2053656E696F7220564D20616E6420686172647761726520646576656C6F7065723B206D6F7265207468616E20332064656361646573206F660A202020657870657269656E63652C20436F2D666F756E646572206F66203320636F6D70616E6965732028312061637175697265642062792049424D292C20617574686F72206F662033340A202020706174656E74732C20617574686F72206F662074686520596165676920476F20696E7465727072657465722E0A0A202A20416C6578697320436F6C696E202D2053656E696F722046726F6E74656E6420456E67696E65657220776974682031302B207965617273206F6620657870657269656E63650A2020206275696C64696E6720757365722D666F637573656420696E746572666163657320616E64206578706C6F72696E67206D6F6465726E207465636820737461636B732E2044726976656E20746F0A2020207075736820666F727761726420656666696369656E7420555820696E2074686520626C6F636B636861696E207370616365207468726F75676820636C65616E20636F646520616E640A202020746563686E6963616C20707265636973696F6E2E2043757272656E746C7920776F726B696E67206F6E20676E6F7765622E0A0A2323232320476E6F2053747564696F205465616D0A0A202A20C38C6C6B657220C3967A74C3BC726B202D2053656E696F7220736F667477617265206172636869746563743B20313720796561727320696E206275696C64696E6720616E642064657369676E696E670A20202070726F64756374732C206469737472696275746564207032702073797374656D732C206C65616465727368697020616E642073747261746567696320766973696F6E2E0A0A202A204A6572C3B36E696D6F20416C6269202D20457870657269656E6365642066756C6C2D737461636B2073797374656D7320656E67696E656572207769746820617474656E74696F6E206F6E0A20202073696D706C696369747920616E64206D696E696D616C69736D2C20666F6375736564206F6E20426C6F636B636861696E20616E6420476F6C616E6720646576656C6F706D656E740A0A202A2053616C7661746F7265204D617A7A6172696E6F202D20536974652052656C696162696C69747920456E67696E6565722077697468206F766572203130207965617273206F660A202020657870657269656E636520696E206275696C64696E6720616E64206D616E7461696E696E67206869676820616E64207363616C61626C6520646973747269627574652073797374656D730A2020206163726F737320646966666572656E742072616E6765206F6620706C6174666F726D732E20224966206974206973206E6F74206D6F6E69746F7265642C20697420646F6573206E6F740A2020206578697374220A0A202A2044616E6E792053616C6D616E202D205661737420657870657269656E636520696E20626C6F636B636861696E20646576656C6F7065722072656C6174696F6E732C20746563686E6963616C0A20202077726974696E6720616E6420656475636174696F6E2C20616E642070726F647563742C20776974682061206261636B67726F756E6420696E2066756C6C2D737461636B0A202020646576656C6F706D656E742C20656E67696E656572696E672C20616E6420706F6C6963792E0A0A202A20416C616E20536F61726573202D2041204272617A696C69616E206C6F737420696E206D6964646C652065617274682E202050617373696F6E61746520636F6465722077697468206C6F76650A202020666F72206F70656E2D736F7572636520616E6420736F667477617265206372616674736D616E736869702E2054616B696E67207468652077656220666F727761726420666F72206F7665720A20202031362079656172732E0A0A202A204C7563696F2043616574616E6F202D2053656E696F722046726F6E74656E6420456E67696E65657220776974682031302B207965617273206F6620657870657269656E63650A2020206275696C64696E6720776562206170706C69636174696F6E732C207370656369616C697A696E6720696E207765623320616E6420626C6F636B636861696E20746563686E6F6C6F676965732E0A202020576974682061206261636B67726F756E6420696E206461746120616E616C797369732C2070726F766964696E6720646174612D64726976656E206465636973696F6E7320616E640A2020207265706F7274696E672077697468206C617267652064617461736574732E0A0A23232320416C6C20696E20426974732C20496E63200A0A4D656D62657273206F6620416C6C20696E20426974732C20496E6320616C736F206275696C64206170706C69636174696F6E7320616E6420636F6D6D756E697479206F6E20746F70206F660A476E6F2E6C616E642E0A0A202A204B726973746F762041746C6173202D2053696E636520323031322C2049E280997665206265656E20612063727970746F20736563757269747920656E67696E65657220616E640A2020207265736561726368657220666F637573696E67206F6E206E6F6E2D637573746F6469616C2077616C6C6574732C20436546692065786368616E6765732C20426974636F696E2C0A202020457468657265756D2C20616E642074686520436F736D6F732065636F73797374656D2E0A0A202A204D696368656C6C65204C65656368202D20457870657269656E636564206D61726B6574696E6720616E642065636F73797374656D206275696C64657220736B696C6C65642061740A2020206372656174696E6720616E642064726976696E672073747261746567696320696E697469617469766573207468617420666F737465722072656C6174696F6E73686970206275696C64696E670A202020616E6420626F6F737420646576656C6F706572206164766F636163792C20656E676167656D656E742C20656475636174696F6E2C20616E642070726F647563740A2020207574696C697A6174696F6E2E0A0A202A204C6176204C656F6E20487564616B202D2044657652656C20456E67696E65657220776974682061207374726F6E67206261636B67726F756E6420696E20626C6F636B636861696E0A202020646576656C6F706D656E742C20646F63756D656E746174696F6E2C20616E6420656475636174696F6E2E0A0A202A205365616E204361736579202D2043464F202843686965662046696E616E6369616C20476E6F6D6529202D2031302B207965617273E2809920657870657269656E636520696E2066696E616E63652C0A2020206169726372616674206C656173696E672C20616E6420626C6F636B636861696E2E204C656164732066696E616E6369616C2073747261746567792C20616E642074726561737572790A2020206F7065726174696F6E732C20656E737572696E67206361706974616C206469736369706C696E652C20726567756C61746F727920636F6D706C69616E63652C20616E640A2020206C6F6E672D7465726D2076616C7565206372656174696F6E2E0A0A202A204A6F7264616E204D6167617A696E65202D20457870657269656E6365642047656E6572616C20436F756E73656C2077697468206F766572206120646563616465206F660A20202070726163746963652C207370656369616C697A696E6720696E2064657369676E696E67206672616D65776F726B73207468617420656E61626C6520626C6F636B636861696E0A20202065636F73797374656D7320746F206F706572617465207769746820636C617269747920616E6420636F6D706C69616E63652C20656D706F776572696E672070726F6A6563747320746F0A2020207363616C6520636F6E666964656E746C7920616E64207769746820696E746567726974792E0A0A202A204361726F6C796E2050656872736F6E202D20506172616C6567616C206B656570696E67204149422C496E6320616E64204E542C4C4C4320616C6976652E205468696E6B7320796F750A20202073686F756C6420676574206120706574206D696E69207069672E0A0A232323204F6E626C6F6320436F2E2C204C74642E0A0A4F6E626C6F63E280AF436F2E2CE280AF4C74642E206973206120636F726520636F6E7472696275746F7220746F20476E6F2C2064656C69766572696E6720657373656E7469616C20746F6F6C7320746F200A74686520476E6F2E6C616E642065636F73797374656DE28094696E636C7564696E6720746865204164656E61E280AF57616C6C65742C20476E6F5363616EE280AF4578706C6F7265722C20616E6420476E6F53776170E280AF0A414D4DE280AF444558E28094666F7220626F746820646576656C6F7065727320616E642065766572796461792075736572732E0A0A202A20446F6E67776F6E205368696E202D20426C6F636B636861696E206576616E67656C69737420616E642070726F64756374E2809164726976656E206275696C6465722C206F6273657373656420776974680A2020207573657220657870657269656E636520616E642065636F73797374656D2067726F7774682E204265666F726520666F756E64696E67204F6E626C6F632C20686520776F726B6564206F6E207365766572616C0A20202063727970746F20696E6974696174697665732C20696E636C7564696E672061207265736561726368206669726D2C20612063727970746F2065786368616E67652C20616E64206120636F6E73756C74696E67206669726D2E0A0A202A20506574657220596F6F6E202D20426C6F636B636861696E206164766F6361746520616E6420737472617465676963207370656369616C6973742E2041206C6F6E672D74696D6520737570706F727465720A2020206F6620436F736D6F732073696E63652069747320696E63657074696F6E2C2068652077617320616E206561726C79206D656D626572206F6620436F736D6F73204B6F72656120616E6420666F756E6465640A2020204C756E616D696E742C207468652066697273742063727970746F2077616C6C657420696E746567726174656420776974682054656C656772616D2E0A0A202A204A696E776F6F2043686F69202D2046756C6C2D737461636B20656E67696E65657220626568696E6420746865204164656E612057616C6C657420616E6420476E6F5363616E2C20776974680A202020657874656E7369766520657870657269656E6365206275696C64696E6720737461626C6520616E64207363616C61626C6520736F6674776172652073797374656D732E2050617373696F6E6174650A20202061626F75742064657369676E696E6720726F627573742061726368697465637475726573207468617420656E64757265207363616C6520616E6420636F6D706C65786974792E0A0A202A204279656F6E676A756E204C6565202D20436F726520656E67696E65657220666F7220476E6F2E6C616E6420616E642074686520476E6F537761702070726F6A6563742C2070617373696F6E6174652061626F75740A202020636F6D70696C65727320616E642070726F6772616D6D696E67206C616E6775616765732E20486527732064656469636174656420746F206D616B696E6720646576656C6F70657273E28099206C69766573206561736965722E0A0A202A20416E64726577204B616E67202D20457870657269656E6365642070726F64756374206D616E6167657220616E6420726573656172636865722C20736B696C6C6564206174206964656E74696679696E670A2020207472656E647320616E642064726976696E672073747261746567696320696E697469617469766573207468617420616476616E6365207468652063727970746F2065636F73797374656D2E0A3214323032352D30352D30355430303A30303A30305A32076A61656B776F6E3207676E6F6C616E640A99250A0A2F766D2E6D5F63616C6C128A250A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374320C6B65726E656C2D7265616C6D321C476E6F207265616C6D732076732073797374656D206B65726E656C7332D7230A0A4C65742773206578706C6F72652074686520616E616C6F6779206265747765656E20476E6F20616E64206578697374696E67206F7065726174696E672073797374656D732E0A0A496E20636F6D7075746572732C2074686520726F6C65206F6620746865206F7065726174696E672073797374656D20697320746F2069736F6C61746520656163682070726F636573732066726F6D0A746865206F74686572732C20666F72206D656D6F727920696E7465677269747920616E642073656375726974792C20616E6420746F20636F6E74726F6C2061636365737320746F2073797374656D0A7265736F75726365732C20696E636C7564696E672074696D652073686172696E672061636365737320746F20746865204350552E20497420616C736F206C6574732070726F6365737365730A636F6D6D756E69636174652077697468206F74686572732C206F722065787465726E616C6C79207468726F75676820746865206E6574776F726B2E0A0A546865206F7065726174696E672073797374656D2070726F76696465732074686F7365206361706162696C6974696573207468726F75676820746865206B65726E656C2C2077686963680A65786563757465732073797374656D2063616C6C732E20205768656E20696E766F6B6564206279206120757365722070726F636573732C2020746865206B65726E656C2073776974636865730A7468652043505520696E746F20612070726976696C65676564206D6F64652C20746F20706572666F726D20746865207365727669636573206F75747369646520757365722072656163682E0A45616368207265736F75726365206C6F6361746564206F757473696465207468652070726F63657373206D65616E732074686520707269766174652075736572206D656D6F7279206D7573740A6265206D616E6970756C61746564207468726F7567682073797374656D2063616C6C732E205468697320697320646F6E6520756E6465722074686520737472696374207375706572766973696F6E0A6F6620746865206B65726E656C2C20776869636820616374732061732061206E65757472616C207472757374656420666163696C697461746F72206265747765656E20756E747275737465640A70726F6365737365732E204F6E2062617265206D6574616C2073797374656D732C207468697320697320656E666F726365642062792074686520686172647761726520697473656C662E0A0A476E6F2069732061206469737472696275746564206D756C74692D75736572207669727475616C20636F6D707574657220696D706C656D656E746564206F6E20746F70206F66207468650A626C6F636B636861696E2C20656E737572696E6720616C6C206F7065726174696F6E7320657865637574652064657465726D696E6973746963616C6C792E205468652064697374726962757465640A73746F72616765206C61796572206F662074686520626C6F636B636861696E2070726F7669646573204D65726B6C6520747265657320616E6420636F6E73656E7375732D62617365640A766572696669636174696F6E2074686174206D616B65732070726F6772616D20636F646520616E64206D656D6F72792074616D7065722D70726F6F662E200A0A496E20476E6F2C20746865206571756976616C656E74206F6620636F6D70757465722070726F63657373657320617265202A7265616C6D732A2E2045616368207265616C6D206973206C696B650A616E20616C776179732D6163746976652070726F636573732C2072756E6E696E6720666F72657665722C2073696D696C617220746F206120776562207365727665722E20496E20610A726567756C61722073797374656D2C2061206C6976652070726F6365737320697320646566696E6564206279206974732050726F63657373204964656E74696669657220285049442C20610A6E756D62657220736574206279207468652073797374656D20666F7220746865206C696665206F66207468652070726F63657373292C20697473206D656D6F72792C20616E6420746865207365740A6F662073797374656D207265736F75726365732069742075736573206174206120676976656E2074696D65202866696C65732C20636F6E6E656374696F6E732C20657463292E0A53696D696C61726C7920696E20476E6F2C2061207265616C6D20697320646566696E656420627920697473206964656E7469747920286120756E69717565207061636B6167652070617468292C0A69747320676C6F62616C206D656D6F7279207374617465202874686520636F6E74656E74206F66206D656D6F7279207768656E20746865207265616C6D2069732061742072657374292C0A7768696368206D617920636F6E7461696E20666F72206578616D706C652074686520616D6F756E74206F6620636F696E732069742072657461696E732E0A0A41207265616C6D206D61792070726F7669646520736572766963657320746F206F74686572207265616C6D73207468726F75676820746865206578706F727465640A66756E6374696F6E73206974206465636C617265732C20616E64206974206D6179207573652073657276696365732070726F7669646564206279206F74686572207265616C6D732062790A696D706F7274696E6720746865207265616C6D207573696E6720616E2060696D706F727460202073746174656D656E742C20616E64206469726563746C792063616C6C696E67206974730A66756E6374696F6E7320696E20636F64652E2054686520776179206F66206465636C6172696E67206578706F727465642066756E6374696F6E7320616E6420696D706F7274696E67207468656D0A69732065786163746C79206964656E746963616C20746F20686F77207061636B616765732061726520646566696E656420696E2074686520476F206C616E67756167652E2041207265616C6D2069730A6120476E6F2070726F636573732C2062757420697320616C736F2061207061636B6167652028696E2074686520476F2073656E7365292E0A0A46756E6374696F6E7320696E207061636B616765732063616E20626520707572652028696E207468652066756E6374696F6E616C2070726F6772616D6D696E672073656E73653A207468650A66756E6374696F6E20686173206E6F2073696465206566666563747320616E64206F70657261746573206F6E6C79206F6E2074656D706F72617279206C6F63616C207661726961626C65730A776869636820617265206469736361726465642061742072657475726E292C206F72206E6F743A20736F6D65207661726961626C65206F757473696465207468652066756E6374696F6E0A73636F7065206973206D6F6469666965642E20496E207468617420636173652C20746865206D6F646966696564207661726961626C65206D75737420626520646566696E656420696E207468650A73616D65207061636B616765206173207468652066756E6374696F6E2E2046756E6374696F6E732063616E206F6E6C7920777269746520746F20676C6F62616C207661726961626C65730A6465636C617265642077697468696E207468656972206F776E207061636B6167652073706163652028617373756D696E67207661726961626C65732061726520756E6578706F72746564292C0A616E642073746174696320636F646520616E616C797369732C20617320696E20476F2C20656E666F7263657320746869732072756C652E0A0A486F77657665722C2073696E6365207265616C6D732061726520616C736F20737461746566756C2070726F6365737365732077697468207468656972206F776E206964656E7469747920616E640A70726F7465637465642073706163652C20616E64206265636175736520612070726F636573732063616E207772697465206F6E6C7920696E20697473206F776E2073706163652C2063616C6C696E670A61206E6F6E2D707572652066756E6374696F6E20696D706F727465642066726F6D20616E6F74686572207265616C6D206D65616E732074686174207468652063616C6C6572207265616C6D0A776F756C6420617474656D707420746F20777269746520696E207468652063616C6C6565207265616C6D2073706163652C20776869636820697320666F7262696464656E210A0A546F207265736F6C766520746869732C207468652063757272656E74207265616C6D206964656E746974792069732073776974636865642066726F6D207468652063616C6C657220746F207468650A63616C6C656520756E74696C207468652066756E6374696F6E2072657475726E732C206C696B65207768656E2063726F7373696E672074686520757365722D6B65726E656C20626F756E646172790A696E206120726567756C61722073797374656D2063616C6C2E2046726F6D207468652073797374656D277320706F696E74206F6620766965772C207468652063757272656E74207265616C6D2069730A73657420746F207468652063616C6C65652C207468652070726576696F7573207265616C6D20746F207468652063616C6C65722E2041742066756E6374696F6E2072657475726E2C207468650A63757272656E74207265616C6D20616E642070726576696F7573207265616C6D2061726520726573746F72656420746F207468656972206F726967696E616C2076616C75652E0A0A536F206E6F6E2D70757265206578706F727465642066756E6374696F6E73206163742065786163746C79206C696B6520612073797374656D2063616C6C3A20746865792070726F76696465207468650A6162696C69747920746F207772697465206F757473696465207468652063616C6C696E67207265616C6D2073706163652C2062792063726F7373696E6720746865207265616C6D0A626F756E646172792E2041207265616C6D20646F65736E2774206E65656420746F207472757374207468652063616C6C696E67207265616C6D3A206F6E6C7920697473656C662063616E0A777269746520696E20697473206F776E2073706163652E2041207265616C6D20646F65736E2774206E65656420746F20747275737420616E2065787465726E616C206B65726E656C3A2069742069730A697473206F776E206B65726E656C2C20697420646563696465732065786163746C7920686F772069747320646174612063616E20626520616363657373656420616E642F6F72206D6F6469666965640A62792063616C6C6572207265616C6D732E0A0A476E6F20756E69666965732074686520636F6E6365707473206F6620476F207061636B6167657320616E6420556E69782070726F63657373657320696E20612073696E676C652C2073696D706C650A636F6E636570743A20746865207265616C6D2E20546865206B65726E656C20697320646563656E7472616C697A656420616E6420707574206261636B20696E20636F6E74726F6C206F660A7061636B61676520646576656C6F706572732E20546865206F7065726174696E672073797374656D20697473656C66206265636F6D6573207472616E73706172656E743A207265616C6D0A70726F6365737365732061726520626F7468207265736F7572636520757365727320616E642070726F7669646572732C20776974682066756C6C20636F6E74726F6C20616E640A6163636F756E746162696C6974792E0A0A496E20476E6F2C2070726F6772616D73206172652070726F63657373657320617265207061636B6167657320617265207265616C6D732E20476E6F2072657468696E6B73207468650A747261646974696F6E616C20626F756E646172696573206265747765656E2070726F6365737365732C207061636B616765732C20616E642073797374656D2063616C6C732E204279206D616B696E670A65616368207265616C6D2073656C662D636F6E7461696E656420616E6420696E20636F6E74726F6C206F6620697473206F776E2073746174652C206974207265706C6163657320746865206E6565640A666F7220612063656E7472616C206B65726E656C2077697468206120646563656E7472616C697A6564206D6F64656C2077686572652070726F6772616D7320646566696E65207468656972206F776E0A6163636573732072756C65732E204974E280997320612070726163746963616C20616E64206D696E696D616C20617070726F61636820746F206275696C64696E67207365637572652C0A636F6D706F7361626C6520736F667477617265206F6E2D636861696E2E0A3214323032352D30362D30395431333A31373A32325A32076D76657274657332146B65726E656C2C70726F636573732C7265616C6D0AE52E0A0A2F766D2E6D5F63616C6C12D62E0A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374321274657374362D616E6E6F756E63656D656E74322D416E6E6F756E63696E672054657374363A20546865204C617465737420476E6F2E6C616E6420546573746E657432EB2C0A0A5B215B62616E6E65725D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032352D30362D32335F74657374362D616E6E6F756E63656D656E742F7372632F7468756D62732F62616E6E65722E6A7067295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032352D30362D32335F74657374362D616E6E6F756E63656D656E742F7372632F62616E6E65722E6A7067290A0A546865206E657765737420476E6F2E6C616E6420746573746E65742C205B54657374365D2868747470733A2F2F74657374362E746573746E6574732E676E6F2E6C616E642F292C206973206E6F77206C697665212054686973206D616A6F72206D696C6573746F6E65206272696E677320757320636C6F73657220746F2074686520616E7469636970617465642062657461206D61696E6E6574206C61756E63682E20546573743620696E74726F647563657320657373656E7469616C20666561747572657320616E6420696E66726173747275637475726520696D70726F76656D656E74732064657369676E656420746F20656E68616E6365206E6574776F726B2073746162696C6974792C20616E6420696E74726F6475636520637269746963616C20706965636573206C696B6520676F7665726E616E63652C206120746F6B656E206C6F636B696E67206D656368616E69736D2C20616E6420746865206E65772076616C696461746F72206F70657261746F72202876616C6F70657229207265616C6D206168656164206F66207468652042657461204D61696E6E657420726F6C6C6F75742E0A0A4B657920456E68616E63656D656E747320696E20546573743620696E636C7564653A200A0A2D20476F7644414F2056333A20546865206C617465737420697465726174696F6E206F6620476E6F2E6C616E64E2809973207072696D61727920646563656E7472616C697A656420676F7665726E616E6365206D6F64656C2E0A2D20546F6B656E205472616E73666572204C6F636B696E67204D656368616E69736D3A204120636F6E74726F6C6C656420617070726F61636820746F20746F6B656E20646973747269627574696F6E206265666F72652066756C6C207472616E736665726162696C697479206174207468652074696D65206F6620746865206665617475726520636F6D706C657465206D61696E6E6574206C61756E63682E0A2D2056616C6F7065722052656769737472793A20416E206F6E2D636861696E2C207065726D697373696F6E6C65737320726567697374727920666F722076616C6F70657273202876616C696461746F72206F70657261746F72732920746F207265676973746572207468656972207075626C69632070726F66696C6520746F206265206C697374656420696E2074686520476E6F2E6C616E642076616C696461746F722072656769737472792E0A2D20476E6F564D20456E68616E63656D656E74733A20506572666F726D616E636520696D70726F76656D656E747320746F2074686520476E6F205669727475616C204D616368696E652028476E6F564D2920666F72206772656174657220656666696369656E63792C20736563757269747920616E64207363616C6162696C6974792E0A2D20496E7465727265616C6D2053706563696669636174696F6E3A204D6178696D697A696E672074686520736166657479206F66207265616C6D732077697468206578706C6963697420636F6E7465787420737769746368696E6720647572696E672063726F73732D7265616C6D20657865637574696F6E2E0A0A232320476F7644414F2056333A20416476616E63696E6720476E6F2E6C616E64E280997320476F7665726E616E6365204D6F64656C0A0A54686520546573743620476F7644414F2077696C6C206C61756E6368207769746820616C6C203320546965727320776974682074686520696E74656E7420746F2074657374207468656D206F757420666F722042657461204D61696E6E65742E0A54686573652074696572206D656D6265727320617265207461736B6564207769746820676F7665726E616E6365206F766572736967687420616E6420616476616E63696E67207468652070726F677265737369766520646563656E7472616C697A6174696F6E200A6F6620676F7665726E616E636520616E642077696C6C206D6F64656C207768617420636F756C64206F6363757220696E207468652042657461204D61696E6E65742E0A0A476F7644414F205633206F7665726861756C7320476E6F2E6C616E64E28099732070726576696F757320676F7665726E616E636520697465726174696F6E7320746F20737570706F7274207468652066696E616C697A656420676F7665726E616E6365205B73706563696669636174696F6E735D2868747470733A2F2F676973742E6769746875622E636F6D2F6A61656B776F6E2F39313861643332356334633866376662356436653032326533336362376562332920627920696D706C656D656E74696E673A0A0A2D204D656D62657273686970205469657273202854312C2054322C2054332920776974682064697374696E637420726571756972656D656E74732E0A2D20566F74696E6720706F7765722061737369676E6D656E7473206261736564206F6E2074696572206D656D626572736869702E0A2D204D6F64756C617220676F7665726E616E6365206C6F6769632C20656E737572696E672061646170746162696C69747920616E64207374727563747572656420646563656E7472616C697A6174696F6E2E0A0A5B476F7644414F2056335D2868747470733A2F2F74657374362E746573746E6574732E676E6F2E6C616E642F722F676F762F64616F2F2920636F6E7369737473206F66207365766572616C206B657920636F6D706F6E656E7473207468617420656E737572652061200A7374727563747572656420616E6420646563656E7472616C697A656420676F7665726E616E63652073797374656D20746F206D616E61676520476E6F2E6C616E642E2054686520476F7644414F20697320666974746564207769746820616E20696D706C656D656E7465640A75706772616465206D656368616E69736D2C20656E61626C696E6720676F7665726E616E63652D6C6564207570677261646573207468726F7567682070726F706F73616C732E2054686520476F7644414F0A5B6D656D6265722073746F72655D2868747470733A2F2F74657374362E746573746E6574732E676E6F2E6C616E642F722F676F762F64616F2F76332F6D656D62657273746F7265292061637473206173206120726567697374727920666F7220476F7644414F0A6D656D6265727320746F206D616E616765206D656D626572206461746120616E6420746965722061737369676E6D656E747320746F64617920616E6420696E2066757475726520476F7644414F2076657273696F6E732E204C6173746C792C20746865200A476F7644414F205633205B696D706C656D656E746174696F6E207265616C6D5D2868747470733A2F2F74657374362E746573746E6574732E676E6F2E6C616E642F722F676F762F64616F2920686F6C64732074686520676F7665726E616E6365206F7065726174696F6E616C200A6C6F6769632C20616E642070726F706F73616C20737461747573657320746861742063616E206265206D6967726174656420746F206E657720476F7644414F20696E7374616E6365732E0A0A232320546F6B656E205472616E73666572204C6F636B696E67204D656368616E69736D0A0A447572696E67207468652042657461204D61696E6E65742070686173652C20474E4F5420746F6B656E20646973747269627574696F6E2077696C6C206F636375722C206275742064697265637420746F6B656E200A7472616E73666572732077696C6C2072656D61696E2064697361626C65642E20546F20666163696C697461746520746869732C206120746F6B656E206C6F636B696E67206D656368616E69736D20686173206265656E200A696D706C656D656E7465642C20656E737572696E67207468617420746F6B656E732063616E206265206469737472696275746564207768696C6520646973616C6C6F77696E67207472616E736665727320756E74696C20746865200A42657461204D61696E6E657420476F7644414F207075747320757020612070726F706F73616C20616E6420766F74657320706F7369746976656C7920746F20696E646963617465207468617420746865206E6574776F726B2069732072656164792E0A0A4F6E636520746F6B656E73206172652064697374726962757465642061742062657461206D61696E6E65742C20746F6B656E20686F6C646572732077696C6C2062652061626C6520746F207573652074686569720A474E4F54206F6E20476E6F2E6C616E6420746F20696E74657261637420776974682074686520636861696E2C20616E64206D616B65207265616C6D20616E64207061636B616765206465706C6F796D656E74732E0A0A466F722054657374362C20796F752063616E2075736520746865205B466175636574204875625D2868747470733A2F2F6661756365742E676E6F2E6C616E642F2920746F207265717565737420746F6B656E73200A616E64207374617274207573696E6720746865206E6574776F726B2E0A0A23232056616C6F706572205265676973747279205265616C6D0A0A5468652056616C6F706572205265676973747279205265616C6D2069732061207075626C6963206469726563746F7279206F662076616C696461746F722070726F66696C65732C2070726F766964696E67200A7472616E73706172656E637920616E6420657373656E7469616C20696E666F726D6174696F6E20666F7220476F7644414F206D656D6265727320746F206576616C75617465206E65772076616C696461746F72200A63616E6469646174657320746F2061646420746F2074686520476E6F2E6C616E642076616C7365742E0A0A49662076616C696461746F72732061726520696E746572657374656420696E2070617274696369706174696E67206F6E20746865205465737436206E6574776F726B2C20796F752063616E2072656769737465720A796F7572207075626C69632076616C696461746F722070726F66696C6520746F20746865205B72656769737472795D2868747470733A2F2F74657374362E746573746E6574732E676E6F2E6C616E642F722F676E6F6C616E642F76616C6F70657273292E200A54776F20696E666F726D6174696F6E616C206775696465732061726520617661696C61626C6520746F2068656C7020796F752073746172746564206F6E20796F75722077617920746F206265636F6D696E6720610A5B746573746E65742076616C696461746F725D2868747470733A2F2F676E6F70732E696F2F61727469636C65732F6775696465732F6265636F6D652D746573746E65742D76616C696461746F722F2920616E64200A70726F766964652064657461696C73206F6E20746865205B68617264776172652073706563696669636174696F6E735D2868747470733A2F2F676E6F70732E696F2F61727469636C65732F6566666563746976652D676E6F70732F76616C696461746F722D73706563732F2920666F7220476E6F2E6C616E642E0A0A596F752077696C6C206E65656420746F20696E636C75646520796F757220446973636F72642068616E646C6520696E2074686520726567697374727920696E206F7264657220746F2072656365697665200A616E20696E7669746520746F207468652076616C6F70657220446973636F7264206368616E6E656C2E205468697320697320776865726520796F752077696C6C207369676E616C20796F757220696E7465726573740A696E206A6F696E696E672054657374362C20616E64206120476F7644414F206D656D6265722873292077696C6C20626520726573706F6E7369626C6520666F72206D616B696E6720616E6420766F74696E67200A6F6E207468652070726F706F73616C7320746F20616464206E65772076616C696461746F727320746F20746865205465737436206E6574776F726B2E20546869732070726F6365737320697320612073746570200A696E2074657374696E672076616C696461746F72206F6E626F617264696E6720616E642074686520676F7665726E616E63652073797374656D206C656164696E6720757020746F2062657461206D61696E6E65742E0A0A506C65617365206E6F74653A207265676973746572696E6720796F75722076616C696461746F722070726F66696C6520616E642076616C69646174696E67206F6E20546573743620646F6573206E6F742067756172616E746565200A612076616C696461746F7220736C6F74206F6E207468652062657461206D61696E6E65742C206F7220616E792066757475726520476E6F2E6C616E64206E6574776F726B732E20486F77657665722C206163746976650A70617274696369706174696F6E20616E6420636F6E747269627574696F6E7320746F20746573746E6574732077696C6C2068656C702065737461626C69736820637265646962696C69747920616E64206D6179200A696D70726F7665206368616E63657320666F72206675747572652076616C696461746F7220616363657074616E63652E2054686520696E697469616C2076616C696461746F7220616D6F756E7420616E64200A76616C7365742077696C6C20756C74696D6174656C792062652073656C6563746564207468726F75676820476F7644414F20543120676F7665726E616E63652070726F706F73616C7320616E6420616363657074616E63652E0A0A546865206C61756E6368206F66205465737436207369676E616C73207468652066696E616C2067726F756E64776F726B206E656564656420746F2061636869657665207468652042657461204D61696E6E65740A64656C6976657261626C6573206F75746C696E656420696E2074686520526F616420746F204D61696E6E657420616E64204265796F6E64205B706F73745D2868747470733A2F2F676E6F2E6C616E642F722F676E6F6C616E642F626C6F673A702F726F61642D746F2D6D61696E6E6574292E0A0A232320496E7465727265616C6D2053706563696669636174696F6E0A0A546573743620737570706F7274732074686520496E7465727265616C6D2053706563696669636174696F6E2C20696E74726F647563696E67206E6577206275696C74696E73206C696B65206063726F7373600A616E6420612077617920746F206578706C696369746C79207370656369667920776865746865722061207075626C6963207265616C6D2066756E6374696F6E2069732063726F7373696E672E0A0A4279206578706C696369746C792073706563696679696E6720696620612066756E6374696F6E2063726F7373657320746865207265616C6D20626F756E646172792C20646576656C6F70657273200A77696C6C206265206372656174696E67206120736166657220657865637574696F6E20656E7669726F6E6D656E7420647572696E6720696E7465727265616C6D20657865637574696F6E2E20436865636B200A6F757420746865205B496E7465727265616C6D2053706563696669636174696F6E20446F63735D2868747470733A2F2F646F63732E676E6F2E6C616E642F7265736F75726365732F676E6F2D696E7465727265616C6D292C0A61732077656C6C20617320746865205B6578616D706C65207061636B616765735D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F747265652F6D61737465722F6578616D706C657329200A666F72206D6F726520696E666F2E3214323032352D30362D32335430303A30303A30305A32156C656F6868686E2C6D696368656C6C65656C6C656E3227676E6F6C616E642C65636F73797374656D2C757064617465732C746573746E65742C74657374360AD5160A0A2F766D2E6D5F63616C6C12C6160A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F737432096574686363323032353215476E6F6D657320617420457468434320E280983235328B150A0A4561726C6965722074686973206D6F6E74682C206120636F75706C65206F66206D656D62657273206F662074686520476E6F2073717561642068656164656420746F20457468434320696E2043616E6E65732C204672616E63652C20746F20696E74726F647563652074686520457468657265756D20636F6D6D756E69747920746F20476E6F2E6C616E6420616E64207368617265206F75722074616B65206F6E2057656237E2809461206D756C74692D757365722C206C616E67756167652D6261736564206F7065726174696E672073797374656D20666F72207468652070726F6772616D6D61626C65207765622E0A0A232320476E6F2E6C616E6420696E20416374696F6E0A0A4F766572206120666577207061636B656420646179732C2077652062726F7567687420476E6F2E6C616E6420746F206C69666520776974682068616E64732D6F6E2064656D6F732C206C69766520636F64696E672C20616E64207265616C20636F6E766572736174696F6E73207769746820646576732061742074686520626F6F74682E2050656F706C6520676F7420612073656E7365206F6620686F7720476E6F2E6C616E64206D616B6573206F6E2D636861696E20646576656C6F706D656E74206665656C206E61747572616C2E0A0A4F6E652064656D6F20746861742063617567687420617474656E74696F6E2073686F77656420686F7720476E6F20636F6E74726163747320617265207772697474656E20696E20612064657465726D696E69737469632076657273696F6E206F6620476F20616E64207075626C697368656420617320636C65616E2C2068756D616E2D7265616461626C6520636F64652C207269676874206F6E2D636861696E2E0A0A4F6E65206F6620746865207374616E646F757420696D7072657373696F6E73207761732073686F77696E6720746861742074686520476E6F2E6C616E6420686F6D657061676520697320697473656C66206120736D61727420636F6E74726163742E204974E28099732062726F777361626C652C20696E7465726163746976652C20616E642066756C6C792072656E6465726564207468726F75676820476E6F7765622C20476E6F2E6C616E64E280997320756E6976657273616C2062726F77736572206C617965722E20576974682074686520E28098536F75726365E2809920616E6420E28098416374696F6EE28099207461627320616374696E6720617320626F746820646F63756D656E746174696F6E20616E642065786563757461626C652066756E6374696F6E732C207468652064656D6F206761766520646576656C6F706572732061207265616C206665656C20666F722074686520746563683A206261636B656E64206C6F6769632C2066726F6E74656E6420696E746572666163652C20616E642070726F6772616D2073746174652C20616C6C20756E6966696564206F6E2D636861696E2C207265616461626C652C20616E6420696E7465726163746976652E0A0A232320466565646261636B2066726F6D2074686520436F6D6D756E6974790A0A54686520457468657265756D2063726F77642063616D65207769746820736F6C696420666565646261636B20616E64206F6E2D706F696E74207175657374696F6E732C2077686963682069732065786163746C792077686174207765207765726520746865726520666F722E0A0A446576656C6F706572732077656C636F6D6564207468652066616374207468617420476E6F20697320476F2D62617365642C206F66666572696E6720612067656E746C6572206C6561726E696E672063757276652C206D6F7265207265616461626C652073796E7461782C20616E64206120736D6F6F74686572206F6E626F617264696E6720657870657269656E636520636F6D706172656420746F20536F6C6964697479206F7220527573742E20506C656E7479206F66206465767320616C72656164792075736520476F20666F72207265616C2D776F726C642073797374656D732C20616E6420736565696E672069742072756E20736D61727420636F6E747261637473206A757374206D6164652073656E73653B20697420636C69636B656420717569636B6C792E0A0A476E6F2E6C616E64E280997320736F757263652D6C6576656C207075626C697368696E67206D6F64656C20616C736F2073746F6F64206F75742E20546865206162696C69747920746F20777269746520616E64207075626C6973682068756D616E2D7265616461626C6520636F6E7472616374732C20726174686572207468616E206A7573742062797465636F64652C207265736F6E61746564207769746820746865206F70656E2D736F7572636520636F6D6D756E6974792E20497420656E61626C6573207472616E73706172656E63792C20636F6D706F736162696C6974792C20616E6420617574686F722D6C6576656C206163636F756E746162696C6974792E20446576656C6F7065727320636F756C6420617564697420636F6E747261637473206F6E207468652073706F742061742074686520626F6F746820616E64207365652074686520617574686F72206174747269627574696F6E206469726563746C79206F6E2D636861696E2E0A0A56697369746F7273207765726520616C736F20737572707269736564206279207468652062726561647468206F662074686520476E6F2E6C616E6420706C6174666F726D2E204974E2809973206E6F74206A75737420616E6F74686572204C6179657220312C206974277320612066756C6C2D737461636B206170706C69636174696F6E20656E7669726F6E6D656E74207769746820697473206F776E206C616E67756167652C207669727475616C206D616368696E652C2072756E74696D652C20616E642062726F777365722E20546865206D6F766520746F7761726420612066756C6C206F7065726174696E672073797374656D206F70656E732074686520646F6F7220746F206120776964652072616E6765206F6620757365206361736573206265796F6E6420446546693A20636F6F7264696E6174696F6E20746F6F6C732C207075626C697368696E6720706C6174666F726D732C20736F6369616C206E6574776F726B732C20616E642067656E6572616C2D707572706F736520736F6674776172652C20616C6C2077697468206C6F6769632074686174E2809973206F6E2D636861696E2C20696E737065637461626C652C20616E6420636F6D706F7361626C652062792064656661756C742E0A0A23232054686174E2809973206120577261700A0A457468434320676176652070656F706C65206120676C696D707365206F6620776861742070726F6772616D6D61626C6520696E66726173747275637475726520636F756C64206665656C206C696B652C20616E6420686F7720476E6F2E6C616E64206973206275696C64696E6720746F77617264732061206E6577205765622E20426967207468616E6B7320746F2065766572796F6E652077686F2073746F707065642062792074686520626F6F74682C2061736B6564207175657374696F6E732C20706F6B65642061742074686520636F64652C206F72206A7573742063616D6520666F722074686520737761672E2045787472612070726F707320746F2074686520636F6D6D756E69747920676E6F6D65732077686F206A6F696E656420757320696E2043616E6E6573210A3214323032352D30372D32315431373A31333A30305A320D6D696368656C6C65656C6C656E3220676E6F6C616E642C6576656E74732C65746863632C636F6E666572656E6365730AC63D0A0A2F766D2E6D5F63616C6C12B73D0A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374320C7363702D636F686F72742D34322D53747564656E7420436F6E7472696275746F722050726F6772616D3A20436F686F7274203420577261702D757032D83B0A0A5765E28099766520726563656E746C7920636F6E636C756465642074686520666F7572746820636F686F7274206F66206F75722053747564656E7420436F6E7472696275746F722050726F6772616D20776974682074686972642D79656172204570697465636820504F4320496E6E6F766174696F6E2073747564656E74732E204F7665722074686520636F75727365206F662066697665206D6F6E7468732C207369782073747564656E747320646F7665206465657020696E746F20476E6F2E6C616E642C206C6561726E696E672C20636F6E747269627574696E672C20616E64206275696C64696E672070726F6A656374732E0A0A5468652070726F6772616D206B69636B6564206F66662077697468206120666577207765656B73206F66206F6E626F617264696E6720616E6420646973636F766572792C20616C6C6F77696E67207468652073747564656E747320746F206578706C6F726520476E6F2E6C616E64E2809973206172636869746563747572652C20746F6F6C696E672C20616E6420636F6D6D756E6974792E2046726F6D2074686572652C207468657920717569636B6C79207374617274656420646576656C6F70696E6720616E6420636F6E747269627574696E672069646561732C2066697865732C20616E642066656174757265732E0A0A41732070617274206F6620746865697220657870657269656E63652C207468652073747564656E74732070617274696369706174656420696E2068616E64732D6F6E20776F726B73686F70732077697468206F757220636F7265207465616D20696E2050617269732E20536F6D6520616C736F206A6F696E65642075732061742045746843432C206761696E696E67206578706F7375726520746F207468652062726F6164657220626C6F636B636861696E2065636F73797374656D2E0A0A456163682073747564656E7420626567616E206279206372656174696E6720746865697220686F6D65207265616C6D20616E6420646F63756D656E74696E67207468656972206A6F75726E657920696E20746865204861636B65727370616365207265706F2E2041742074686520656E64206F662074686520636F686F72742C20656163682073747564656E742077726F74652061207265706F727420746F2064657461696C2074686520696E7465726E7368697020657870657269656E63652C20746865206C6561726E696E67732C20656E67696E656572696E672070726F6A6563747320616E642074616B6561776179732E20466F722074686520476E6F20656E67696E656572696E67207465616D20616E642044657652656C73207468657365207265706F7274732061726520637269746963616C20746F206761696E696E6720696E73696768747320696E746F20686F7720646F63756D656E746174696F6E206973206170706C6965642C206368616C6C656E6765732C20766F69647320616E642067656E6572616C20617265617320746F20696D70726F7665206F6E626F617264696E672E0A0A23232053747564656E742061647669636520746F2067657474696E6720737461727465640A0A2D20416C77617973207573652060676E6F646576603A20446576656C6F702077697468207468652073616D6520696E7465726661636520656E642D75736572732077696C6C2073656520746F20636174636820697373756573206561726C7920616E64207361766520626F74682067617320616E642074696D652E0A2D20537461727420736D616C6C3A204275696C6420612073696D706C6520686F6D65207265616C6D2C20626C6F672C2067616D652C206F7220766F74696E67206170702E20412068616E64732D6F6E20617070726F6163682074656163686573206D6F7265207468616E206A75737420646F63756D656E746174696F6E2072656164696E672E0A2D204B6565702061204861636B657253706163652064696172793A2057726974652073686F7274207765656B6C79206E6F7465732061626F7574207768617420796F75206275696C642C206C6561726E2C206F72206669782E204974206D616B65732070726F677265737320747261636B696E67206561737920616E642068656C7073206D656E746F727320677569646520796F752E20416C6C20617265206C696E6B656420776974682074686520276A6F75726E657927205B6C6162656C5D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F6861636B657273706163652F6973737565733F713D6973253341697373756525323073746174652533416F70656E2532306C6162656C253341253232F09F8C842532306A6F75726E6579253232290A2D2052656164206F74686572277320476E6F20636F64653A20546865206D6F6E6F7265706F2069732066756C6C206F6620736F6C69642C207265616C2D776F726C64206578616D706C657320746861742063616E20616363656C657261746520796F7572206C6561726E696E672E200A2D2041736B207175657374696F6E73206561726C7920616E64206F6674656E3A20557365204F666669636520486F7572732C20505220636F6D6D656E74732C206F72205369676E616C2E20536D616C6C20636C6172696669636174696F6E73206E6F772070726576656E742062696720726F6164626C6F636B73206C617465722E0A2D2045787065637420726F7567682065646765733A20476E6F206973207374696C6C2065766F6C76696E672C20736F20736F6D6520697373756573206D6179206265206C616E67756167652D6C6576656C206C696D69746174696F6E732C20627574206120676F6F6420657870657269656E636520696E206578706572696D656E746174696F6E2E0A2D20537469636B20746F2064657465726D696E69736D3A2041766F69642072656C79696E67206F6E2074696D652C2072616E646F6D6E6573732C206F7220616E797468696E67206E6F6E2D64657465726D696E69737469633B20746865736520617265206E6F742070726163746963616C206F6E2D636861696E2E0A2D204578706572696D656E7420736166656C793A20507573682074686520564D20746F20697473206C696D6974732C207465737420656467652063617365732C20616E64206C6561726E2066726F6D20627265616B6167652E204275677320796F752066696E642063616E206265636F6D6520796F757220666972737420476974487562206973737565732E0A0A23232053747564656E7420436F6E747269627574696F6E20486967686C69676874730A0A54686520636F686F7274207461636B6C6564206120776964652072616E6765206F6620746563686E6963616C20616E642063726561746976652070726F6A656374732C20696E636C7564696E67206170706C69636174696F6E732C20746F6F6C732C20616E642065636F73797374656D20656E68616E63656D656E74732E20486572652773206120686967686C69676874206F6620776861742074686579206163636F6D706C69736865643A0A0A23232323204170706C69636174696F6E7320262044656D6F730A0A2D205265646469742D7374796C6520722F706C616365206F6E20476E6F2E6C616E640A2D20506F6BC3A96D6F6E2046696768742053696D756C61746F720A2D2043616C63756C61746F72205265616C6D0A2D204368616E67652E6F72672D7374796C65207065746974696F6E207265616C6D0A2D20467269656E646C79204F7267616E697A657220617070207573696E672074686520436F6D6D6F6E44414F20696D706C656D656E746174696F6E0A0A2323232320436F726520456E68616E63656D656E74732026205574696C69746965730A0A2D204C6576656E73687465696E2044697374616E6365207061636B616765202D206C696E6B2F706B67706174680A2D2050726F66696C696E6720537570706F727420666F7220476E6F564D20283730697070726F66202B20466C616D656772617068290A2D2053564720457874656E73696F6E0A2D20496D70726F76656D656E747320746F2074686520626C6F67207265616C6D0A0A2323232320446F63756D656E746174696F6E0A0A2D20436F6D6D6F6E44414F205475746F7269616C0A2D20536F6C69646974792046616D6F7573205061747465726E730A0A23232053747564656E74205265666C656374696F6E730A0A5B406C6F756F6E657A696D655D2868747470733A2F2F6769746875622E636F6D2F6C6F756F6E657A696D652920E280984F7665722074686520636F75727365206F66207468697320636F686F72742C20492068616420746865206F70706F7274756E69747920746F206578706C6F726520616E64206275696C642077697468696E2074686520476E6F2E6C616E642065636F73797374656D2E204920657370656369616C6C7920656E6A6F79656420776F726B696E67206F6E2072656275696C64696E672074686520626C6F67207061636B6167652C2077686963682067617665206D6520746865206368616E636520746F206265206372656174697665207768696C65206C6561726E696E6720476E6F2E20546865206F70656E2D736F7572636520656E7669726F6E6D656E74206D6164652074686520657870657269656E636520736D6F6F746820616E6420636F6C6C61626F7261746976652E20416C6C20696E20616C6C2C2069742077617320612067726561742077617920746F20636F6E7472696275746520746F20736F6D657468696E67206D65616E696E6766756C20696E2074686520626C6F636B636861696E2073706163652C20657370656369616C6C792073696E636520697420776173206D792066697273742074696D652067657474696E6720696E746F2069742EE280990A0A5B406D6F756E69615D2868747470733A2F2F6769746875622E636F6D2F6D6F6F6E69612920E28098447572696E67207468697320636F686F72742C20492068616420746865206F70706F7274756E69747920746F206765742068616E64732D6F6E20776974682074686520476E6F2E6C616E642065636F73797374656D20627920776F726B696E67206F6E2074776F20746563686E6963616C2070726F6A656374732E2049206578706C6F726564207468652069646561206F66206120476E6F2D62617365642045564D20696E7465727072657465722C20616C6C6F77696E6720536F6C69646974792062797465636F646520746F2072756E20696E206120476E6F2D6E617469766520656E7669726F6E6D656E742E204920616C736F206C6564207468652070726F66696C696E672070726F6A65637420666F7220476E6F564D2C20656E61626C696E6720736F757263652D6C6576656C20696E73696768747320766961207070726F6620616E6420666C616D65677261706820746F6F6C732E204974207761732061206772656174206F70706F7274756E69747920746F20636F6E74726962757465206D65616E696E6766756C20746F6F6C73207768696C65206C6561726E696E672074686520696E7465726E616C73206F6620476E6F20616E642049207265616C6C7920617070726563696174656420686F7720636C6F736520476E6F206665656C7320746F20476F2E204F766572616C6C2C20697420776173206120677265617420657870657269656E636520746861742064656570656E6564206D7920696E74657265737420696E2074686520626C6F636B636861696E20737061636520616E64206D616465206D6520656167657220746F206B65657020636F6E747269627574696E672EE280990A0A5B4054636869707334365D2868747470733A2F2F6769746875622E636F6D2F54636869707334362920E28098447572696E67207468697320636F686F72742C204920666F6375736564206F6E206578706C6F72696E67207468652045564D206F6E20476E6F2E6C616E642C2077686963682068656C706564206D6520756E6465727374616E6420636F6D706C657820626C6F636B636861696E20636F6E636570747320616E642074686520696E6E657220776F726B696E6773206F66207669727475616C206D616368696E65732E2049206C6561726E656420686F7720746F206275696C64206D6F726520616476616E63656420644170707320616E6420676F7420696E74726F647563656420746F20536F6C69646974792E205468697320616C6C6F776564206D6520746F20777269746520646F63756D656E746174696F6E2061626F75742077656C6C2D6B6E6F776E20536F6C69646974792064657369676E207061747465726E732C207573696E67206578616D706C657320746F206D616B65207468656D2065617369657220746F20756E6465727374616E642E204F766572616C6C2C2069742077617320612076616C7561626C6520657870657269656E636520746861742067726577206D7920746563686E6963616C20736B696C6C7320616E642064656570656E6564206D7920756E6465727374616E64696E67206F6620626C6F636B636861696E20646576656C6F706D656E742EE280990A0A5B404E69636F6C61734D656C65745D2868747470733A2F2F6769746875622E636F6D2F4E69636F6C61734D656C65742920E28098576F726B696E67206F6E20476E6F2E6C616E642077617320616E20616D617A696E67206F70706F7274756E69747920746F20646973636F766572206E657720746563686E6F6C6F6769657320616E6420776F726B206F6E206120626C6F636B636861696E20737061636520666F72207468652066697273742074696D652E204D79206D61696E2061726561206F6620696E7465726573742077617320646576656C6F70696E67206E657720644170707320696E20476E6F207768696C6520747279696E6720746F20686967686C6967687420646966666572656E7420666561747572657320657665727974696D652E204173207375636820492073746172746564206279206372656174696E67207468652043616C63756C61746F72207265616C6D2C2073686F77636173696E672074686520757365206F662055524C20666F7220736F6D65207461736B733B20616E64204920776F726B6564206F6E2074686520722F706C616365207265616C6D2E2053564773206265696E67206120636F72652070617274206F662069742C20776F726B696E67206F6E2074686520706C616365207265616C6D206C6564206D6520746F20636F6E7472696275746520746F2074686520535647204D61726B646F776E20657874656E73696F6E2C20616C6C6F77696E67206D6520746F20646973636F76657220616E6F746865722073696465206F6620476E6F2E6C616E6420616E6420746F20776F726B20776974682061206D656D626572206F6620746865206D61696E207465616D2E2049207265616C6C7920656E6A6F796564206265696E672070617274206F66207468652053747564656E7420436F6E7472696275746F722050726F6772616D20616E64206265696E672070617274206F662074686973206772656174207465616D21E280990A0A5B407061756C6F6761726974686D5D28687474703A2F2F7061756C6F6761726974686D2F2920E280985468697320636F686F7274207761732C20696E206D79206F70696E696F6E2C20612066616E74617374696320657870657269656E63652074686174207369676E69666963616E746C7920656E68616E636564206D7920736B696C6C73206163726F7373206D756C7469706C652061726561732E205768656E2049206669727374206A6F696E656420476E6F2C204920686164206C6974746C6520746F206E6F206B6E6F776C65646765206F6620626C6F636B636861696E20696E2067656E6572616C20286D792065787065727469736520776173206D61696E6C79206C696D6974656420746F20636F64696E6720696E20476F292E2042792074686520656E64206F662074686520636F686F72742C2049206E6F74206F6E6C79206761696E6564206120736F6C696420756E6465727374616E64696E67206F6620686F7720476E6F206F706572617465732C20627574204920616C736F206578706C6F72656420626C6F636B636861696E20746563686E6F6C6F6779206D6F72652062726F61646C79206279207374756479696E672069747320756E6465726C79696E67207072696E6369706C657320616E6420776F726B696E67206F6E2070726F6A656374732073756368206173207468652045564D2C20657373656E7469616C6C792074686520457468657265756D205669727475616C204D616368696E652062797465636F6465206265696E6720696E7465727072657465642077697468696E20476E6F2E6C616E642E204164646974696F6E616C6C792C204920696D70726F766564206D79206162696C69747920746F20776F726B207769746820646563656E7472616C697A6564206170706C69636174696F6E73202864417070732920616E642064656570656E6564206D7920756E6465727374616E64696E67206F66206C6F772D6C6576656C20636F6E63657074732072656C6174656420746F207669727475616C206D616368696E65732EE280990A0A5B4043686165676E616C5D2868747470733A2F2F6769746875622E636F6D2F43686165676E616C2920E28098447572696E67206D792074696D6520696E207468652045706974656368207820476E6F2E6C616E6420636F686F72742049207761732061626C6520746F2064656570656E206D7920756E6465727374616E64696E6720616E6420696D70726F7665206D7920736B696C6C206F6E20626C6F636B636861696E732E205573696E6720476E6F20616C6C6F776564206D6520746F20757365206D792070726576696F757320476F20636F64696E6720657870657269656E636520696E206120646966666572656E742073657474696E672E204D7920776F726B20776173206D61696E6C7920666F6375736564206F6E2064417070732C204920666972737420666F6375736564206F6E206275696C64696E6720616E2061707020746F2068656C702067726F757073206F7267616E697A65207468656D73656C7665732E20546869732064417070207573656420636F726520626C6F636B636861696E207072696E6369706C6573206C696B652044414F2C207768696368204920696E7465677261746564206279207573696E672061206E6577207061636B6167652074686174206163747320617320612044414F20666163746F72792E204279207573696E672074686973206E6577207061636B6167652C2049206761696E656420657870657269656E636520746861742049207761732061626C6520746F20736861726520627920646F63756D656E74696E672069742E205468697320666F6375736564206F6E20746865206F70656E20736F7572636520617370656374206F66207468652070726F6A6563742C2061732074686520646F63756D656E746174696F6E2069732061696D656420746F2068656C70206E657720476E6F206275696C646572732E204F766572616C6C2C20492077616E7420746F207468616E6B206576657279206D656D626572206F662074686520476E6F2065636F73797374656D2C20666F72206D616B696E67207468697320657870657269656E63652066756C66696C6C696E6720616E642061206772656174206C6561726E696E6720657870657269656E636520666F7220616C6C206F662075732E204920656E6A6F796564206265696E672070617274206F66207468697320616D617A696E672070726F6A6563742C2063617272696564206F75742062792070617373696F6E6174652070656F706C6521E280990A0A23232054686174E2809973206120777261700A0A5468697320636F686F72742062726F7567687420656E657267792C20637265617469766974792C20616E642066726573682070657273706563746976657320746F20476E6F2E6C616E642E20546865697220636F6E747269627574696F6E732072616E67696E672066726F6D2064417070206578706572696D656E747320746F20696E6672617374727563747572652D6C6576656C20696D70726F76656D656E74732C20616E642074657374696E672064656D6F6E737472617465642074686520706F74656E7469616C20616E64206561736520476E6F20656E61626C65732E205468616E6B20796F7520666F7220796F757220636F6E747269627574696F6E7320616E64206265636F6D696E672070617274206F662074686520476E6F2E6C616E6420636F6D6D756E6974792E0A0A496620796F752061726520696E746572657374656420696E206A6F696E696E672061205B476E6F2E6C616E645D28687474703A2F2F476E6F2E6C616E64292073747564656E7420636F686F72742C2066696E64206F7574206D6F72652064657461696C73205B686572655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F73747564656E742D636F6E7472696275746F72732D70726F6772616D292E0A3214323032352D30382D31385430303A30303A30305A320D6D696368656C6C65656C6C656E3229676E6F6C616E642C73747564656E74732C636F6D6D756E6974792C7363702C696E7465726E736869700AB5240A0A2F766D2E6D5F63616C6C12A6240A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374320E6D6F6E74686C792D6465762D31363213546865204D6F726520596F7520476E6F20313632E0220A0A496E20746869732065646974696F6E206F66202A546865204D6F726520596F7520476E6F2A2C20776527726520686967686C69676874696E672070726F6772657373206D61646520647572696E670A74686520726563656E74202A4A757374204D616B652A20737072696E7420287374696C6C206F6E676F696E67292C207468652072656C65617365206F6620546573743820286120636C6F736564200A746573746E657420666F7220706572666F726D616E63652074657374696E67292C20616E642077686174E280997320636F6D696E67206E657874206173207765206D6F766520636C6F73657220746F20610A42657461204D61696E6E65742072656C656173652063616E6469646174652E0A0A232320274A757374204D616B652720476E6F2E6C616E640A0A546865206B69636B206F6666206F6620746865202A4A757374204D616B652A20696E697469617469766520676176652061207369676E69666963616E74207075736820746F7761726420426574610A4D61696E6E65742072656164696E6573732E20536576656E7465656E207465616D206D656D626572732C20706172746E6572732C20616E6420636F6E7472696275746F72732067617468657265640A696E20706572736F6E2C206D616E79206D6F726520737570706F727465642072656D6F74656C792C20746F206964656E7469667920616E6420666173742D747261636B207468652072656D61696E696E67200A42657461204D61696E6E65742073636F70652E0A0A447572696E67207468652066697273742D706861736520776974682074686520696E2D706572736F6E20737072696E742C20746865207465616D20636F6D706C657465642061726F756E6420363525200A6F6620746865206F75747374616E64696E6720776F726B20726571756972656420666F72207468652042657461206C61756E63682E204D6F73742070656E64696E672070756C6C207265717565737473200A776572652072657669657765642C207769746820612066657720696D706F7274616E74206F6E6573206C696B6520746865205B607374642073706C6974605D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3430343029200A6A75737420726563656E746C7920636F6D706C657465642E200A0A576520616C736F2072656C656173656420546573743820647572696E672074686520696E2D706572736F6E2073657373696F6E2C20776869636820696E636F72706F726174656420616C6C200A6D6572676564205052732066726F6D2074686520696E697469616C2070617274206F662074686520737072696E742E205468697320746573746E65742072656C6561736520696E636C75646564200A61206D616A6F722075706461746520746F20746865206578616D706C657320666F6C6465722C206D616B696E67206120636C65617265722064697374696E6374696F6E206265747765656E200A73797374656D20636F6E74726163747320616E642064656D6F20636F6E7472616374732E0A0A4C6F6F6B696E672061686561642C2074686520666F637573206973206F6E207772617070696E67207570207468652066696E616C206974656D732066726F6D20746865202A4A757374204D616B652A0A73636F70652C2077686963682061726520617661696C61626C6520666F722072657669657720696E20746865206C696E6B6564205B70726F6A6563745D2868747470733A2F2F6769746875622E636F6D2F6F7267732F676E6F6C616E672F70726F6A656374732F3632292E0A546573743920697320636F6D696E6720736F6F6E2C20616E64207765E280996C6C20636F6E74696E7565207374726573732074657374696E6720746865206E6574776F726B20746F20656E73757265200A73746162696C6974792E0A0A232320546573746E6574204E6577730A0A5768696C6520546573743720686173206265656E2073756E7365747465642C20697420706C6179656420616E20696D706F7274616E7420726F6C6520696E20726563656E7420696D70726F76656D656E74732E0A476F7644414F207633207761732074686F726F7567686C7920746573746564206F6E2054657374372C207769746820736576656E2070726F706F73616C7320637265617465642C20766F746564206F6E2C200A616E64206578656375746564206F6E2D636861696E2E204E6574776F726B20706572666F726D616E636520696D70726F766564207369676E69666963616E746C792C207363616C696E67207468650A76616C696461746F722073657420746F203335206E6F6465732C20616E642065787465726E616C20776F726B666C6F777320617265206E6F772072756E6E696E67206D6F726520736D6F6F74686C79200A6163726F73732074686520626F6172642E0A0A546865205B476E6F2E6C616E642073746167696E67206E6574776F726B5D2868747470733A2F2F676E6F2E6C616E64292069732075702D746F2D64617465207769746820746865206C6174657374206D6572676573206F6E207468650A6D6F6E6F7265706F2C20616E6420616E6F74686572206C697665206E6574776F726B20666F722074657374696E6720796F757220636F6465207265616C2D74696D65207769746820616C6C20746865200A6E65776573742066656174757265732E200A0A2323205374617920696E2074686520476E6F3A20476E6F6D652044696765737420616E6420546563682044697363757373696F6E730A0A546865726520617265207365766572616C207761797320746F2073746179207570646174656420776974682077686174E28099732068617070656E696E6720696E2074686520476E6F2E6C616E64200A6275696C64657220636F6D6D756E6974792E20476E6F6D65204469676573742069732061207765656B6C79205B726F756E6475705D2868747470733A2F2F782E636F6D2F5F676E6F6C616E642F7374617475732F3139363534343532393032373939383536333029206F6620636F6E7472696275746F7220757064617465732C0A736861726564206F6E20582E204576657279206F74686572207765656B2C20776520616C736F20686F737420546563682044697363757373696F6E73207075626C6973686564206F6E200A5B596F75547562655D2868747470733A2F2F796F7574752E62652F622D685048785647757138292C20776865726520636F6E7472696275746F72732073686172652064656D6F732C20746865207465616D20636F76657273206B657920746F706963732C20616E640A44657652656C2072656361707320726563656E74206275696C64657220686967686C69676874732E200A0A496620796F75E280997265206C6F6F6B696E6720746F20656E67616765206469726563746C792C20796F75E28099726520616C776179732077656C636F6D6520746F206A6F696E206F757220646576656C6F706572200A6F666669636520686F757273206576657279207765656B202854687572736461797329206F6E20446973636F72642E0A0A232320436F6E7472696275746F722050726F6772616D0A0A576520726563656E746C79205B636F6E636C756465645D2868747470733A2F2F676E6F2E6C616E642F722F676E6F6C616E642F626C6F673A702F7363702D636F686F72742D342920612053747564656E7420436F6E7472696275746F722050726F6772616D20285343502920636F686F72742C2077686963680A62726F7567687420696E207365766572616C2073747564656E74732066726F6D204570697465636820556E697665727369747920666F722061207369782D6D6F6E746820646565702064697665200A696E746F20476E6F2E205468657920776F726B6564206F6E20766172696F75732061737065637473206F66207468652070726F6A6563742E205765E280997665206B69636B6564206F66662061206E6577200A5343502070726F6772616D20666F7220746865207365636F6E642068616C66206F662074686520796561722C20616E64206C6F6F6B20666F727761726420746F20746865697220636F6E747269627574696F6E732E200A0A5765E28099726520616C77617973206C6F6F6B696E6720666F72206E657720636F6E7472696275746F72732C20616E642074686520626573742077617920746F206765742073746172746564206973206279200A6578706C6F72696E672074686520E28098676F6F6420666972737420697373756573E28099206F6E20746865207265706F20616E64206F70656E696E672070756C6C20726571756573747320746F2068656C70200A7265736F6C7665207468656D2E20596F752063616E20616C736F2076697369742074686520476E6F7665727365205B636F6D6D756E697479207265706F5D2868747470733A2F2F6769746875622E636F6D2F676E6F76657273652F636F6D6D756E6974792920746F20646576656C6F70200A796F757220736D61727420636F6E74726163742074656D706C6174657320666F7220666565646261636B2E200A0A232320426F756E74792050726F6772616D205570646174650A0A54686520476E6F2E6C616E6420426F756E74792050726F6772616D20636F6E74696E75657320746F2067726F7720616E642065766F6C76652E20497420636F7665727320612072616E6765206F660A63617465676F7269657320696E636C7564696E67204D6574612C2053636F7065642C20436F6D706574696E6720496D706C656D656E746174696F6E732C20616E64204172636869746563747572616C200A536F6C7574696F6E732E2041206E65772063617465676F72792C20536563757269747920426F756E746965732C2077617320726563656E746C792061646465642C20666F637573696E67206F6E0A70726F766964696E6720736F6C7574696F6E7320746F2073656C656374207365637572697479206973737565732E20446576656C6F7065727320696E746572657374656420696E2070617274696369706174696E670A63616E2066696E6420616374697665206F70706F7274756E697469657320627920736561726368696E6720666F72207468652022626F756E747922206C6162656C206F6E2074686520476E6F207265706F7369746F72792E0A4D6F726520696E666F726D6174696F6E2C20696E636C7564696E672070617274696369706174696F6E2067756964656C696E65732C20697320617661696C61626C6520696E207468650A5B476E6F2E6C616E6420426F756E74696573205265706F5D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F626F756E74696573292E0A0A0A2323204E657720576F726B73686F703A20496E74726F20746F20476E6F0A0A417420476F70686572436F6E20696E204175677573742C20776520686F737465642061205B68616E64732D6F6E20776F726B73686F705D2868747470733A2F2F6769746875622E636F6D2F61656464692F676E6F2D776F726B73686F702920746F2068656C7020476F20646576656C6F70657273200A6765742073746172746564207769746820476E6F2E205468652073657373696F6E2077616C6B656420617474656E64656573207468726F756768206275696C64696E672074686569722066697273740A476E6F206170706C69636174696F6E207374657020627920737465702E2049742773206E6F7720617661696C61626C65206F6E6C696E6520666F7220616E796F6E65206C6F6F6B696E6720746F200A7374617274207468656972206A6F75726E657920776974682074686520476E6F20706C6174666F726D2E200A0A0A536F206E6F7720796F7520676E6F2120417320746865207465616D20636F6E74696E75657320746F20776F726B206F6E2067657474696E6720476E6F2E6C616E6420726561647920666F720A42657461204D61696E6E65742C2077652077616E7420746F207468616E6B2074686520656E7469726520636F6D6D756E697479206F6620676E6F6D65732061726F756E642074686520776F726C640A666F7220796F757220636F6E74696E75656420737570706F727420616E6420636F6E747269627574696F6E732E0A3214323032352D30392D33305430303A30303A30305A320D6D696368656C6C65656C6C656E3228676E6F6C616E642C65636F73797374656D2C757064617465732C544D59472C636F6D6D756E6974790ABA1E0A0A2F766D2E6D5F63616C6C12AB1E0A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374320E6D6F6E74686C792D6465762D31373210546865204D6F726520596F7520476E6F32E81C0A0A526563656E746C792C20746865207465616D206C61756E63686564205B5465737431315D2868747470733A2F2F7465737431312E746573746E6574732E676E6F2E6C616E642F292C2077686963682077652065787065637420746F206265207468652066696E616C20746573746E6574206265666F7265207468652042657461204D61696E6E65742072656C656173652C2062617272696E6720616E79206D616A6F72206973737565732E2054686520676F616C206973206E6F742073696D706C7920746F206465706C6F79206E65772066656174757265732C2062757420746F20766572696679207468617420676F7665726E616E63652C2076616C696461746F7220636F6F7264696E6174696F6E2C20616E64206E6574776F726B206F7065726174696F6E732066756E6374696F6E20756E64657220636F6E646974696F6E7320617320636C6F736520746F2042657461204D61696E6E657420617320706F737369626C652E0A0A54657374313120696E74726F6475636573206D756C74692D7369676E61747572652066756E6374696F6E616C6974792C207570646174657320746F2074686520476F7644414F2C20616E6420637269746963616C20666978657320746F2074686520476E6F564D2E204974206C61756E63686564207769746820616E20696E7465726E616C2076616C696461746F722073657420616E64206973206E6F77206163746976656C792065786572636973696E6720676F7665726E616E636520627920766F74696E6720696E206164646974696F6E616C2076616C696461746F727320746F207374726573732074657374207468652073797374656D2E2043757272656E746C792C207468726565206164646974696F6E616C20636F726520636F6E7472696275746F722076616C696461746F72732068617665206265656E20766F74656420696E20616E64207468652070726F706F73616C2065786563757465642E0A0A546865206465706C6F796D656E7420616C736F2064656D6F6E7374726174656420696E63726561736564206F7065726174696F6E616C206D61747572697479206163726F7373207468652072656C6561736520776F726B666C6F7720616E64206F6E2D636861696E20676F7665726E616E63652070726F6365737365732E2055706772616465732C2070726F706F73616C20666C6F77732C20616E642076616C696461746F7220636F6F7264696E6174696F6E20776572652065786563757465642077697468207369676E69666963616E746C79206665776572206D616E75616C20696E74657276656E74696F6E73207468616E20696E207072696F7220746573746E6574732E0A0A23232057686174205465737431312049732050726F76696E670A0A546865207072696D61727920707572706F7365206F66205465737431312069732066696E616C2076616C69646174696F6E2E2053746162696C6974792C20706572666F726D616E6365206368617261637465726973746963732C20676F7665726E616E636520657865637574696F6E2C20616E642076616C696461746F72206F6E626F617264696E672061726520616C6C206265696E672074657374656420696E20706172616C6C656C2E0A0A56616C696461746F72206F6E626F617264696E6720726571756972657320612076616C6F706572205B70726F66696C655D2868747470733A2F2F7465737431312E746573746E6574732E676E6F2E6C616E642F722F676E6F70732F76616C6F70657273292073657475702C20612070726F706F73616C207375626D697373696F6E206279206120476F7644414F2074657374205B6D656D6265725D2868747470733A2F2F7465737431312E746573746E6574732E676E6F2E6C616E642F722F676F762F64616F2F76332F6D656D62657273746F7265292028666F72206E6F77292C20616E6420666F726D616C205B6F6E2D636861696E20766F74696E675D2868747470733A2F2F7465737431312E746573746E6574732E676E6F2E6C616E642F722F676F762F64616F292E205468652073656C65637465642067726F7570206F662065787465726E616C2076616C696461746F7273207374696C6C206E65656420746F20626520766F74656420696E2062792074686520476F7644414F2C20616E642074686569722054657374313120706572666F726D616E63652077696C6C20736572766520617320616E20696D706F7274616E7420696E64696361746F72206F662072656164696E6573732E0A0A496E20706172616C6C656C2C20646576656C6F706D656E7420636F6E74696E756573206F6E207468652042657461204D61696E6E6574206C61756E6368205B6D696C6573746F6E655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F6D696C6573746F6E652F37292E2054686520636F7265207465616D2077696C6C2064657465726D696E652077686963682070656E64696E6720666978657320617265206D6572676564206265666F726520746865206C61756E63682E205468652074776F2072656D61696E696E67207072696F726974696573206172652066696E616C697A696E672074686520696E697469616C20476F7644414F206D656D62657220636F6D706F736974696F6E20616E6420636F6D706C6574696E67207468652067656E6573697320746F6B656E20646973747269627574696F6E20706C616E2E0A0A23232056616C696461746F7220436F6D706F736974696F6E20616E6420476F7644414F0A0A466F722074686520696E697469616C207072652D426574612076616C696461746F72207365742CC2A02077652073656C656374656420612067726F7570206F6620696E74657265737465642076616C696461746F72732066726F6D2041746F6D4F6E652E2053656C656374696F6E20637269746572696120696E636C7564656420616C69676E6D656E7420776974682041746F6D4F6E652C20766F74696E672070617274696369706174696F6E20686973746F72792C20616E20696E7465726E616C2073636F72696E67206672616D65776F726B2C20616E642067656F6772617068696320646976657273697479206163726F7373206D756C7469706C6520636F756E74726965732E0A0A556C74696D6174656C792C20476E6F2E6C616E64E28099732042657461204D61696E6E657420476F7644414F20697320726573706F6E7369626C6520666F7220617070726F76696E67207468652066756C6C20476E6F2E6C616E642076616C696461746F72207365742E2054686520696E697469616C2073657420666F72207468652042657461206C61756E636820697320617070726F78696D6174656C7920313520746F2032302076616C696461746F727320746F206B69636B207468696E6773206F66662C207374617274696E67207769746820696E7465726E616C2076616C696461746F727320616E6420657870616E64696E672074686520736574207468726F75676820476F7644414F20766F7465732E204F7665722074696D652C206164646974696F6E616C2076616C696461746F7273206D617920626520766F74656420696E2062792074686520476F7644414F2C207769746820707265666572656E636520676976656E20746F2074686F73652077686F2061766F69642072656C69616E6365206F6E20636C6F756420696E6672617374727563747572652C206D616B65206D65616E696E6766756C20636F6E747269627574696F6E7320746F2074686520636F6D6D756E6974792C20616E6420737472656E677468656E207468652067656F6772617068696320646973747269627574696F6E206F66207468652076616C696461746F72207365742E0A0A476E6F2E6C616E6420646F65736EE2809974206F70657261746520696E207468652073616D652077617920617320747261646974696F6E616C2050726F6F662D6F662D5374616B652C20736F206265696E6720766F74656420696E2061667465722042657461204D61696E6E65742067656E6573697320646F6573206E6F74206361727279207468652073616D6520696D706C69636174696F6E7320617320696E20636F6E76656E74696F6E616C20506F53206E6574776F726B732E0A0A2323204275696C64696E67204265666F726520426574610A0A4173204265746120617070726F61636865732C20636F6E747269627574696F6E20706174687761797320617265206265636F6D696E6720636C65617265722E204166746572206C61756E63682C206170706C69636174696F6E732C20746F6F6C732C20616E642065636F73797374656D2070726F706F73616C732077696C6C206D6F7665207468726F7567682074686520476F7644414F207265766965772070726F6365737365732C206D616B696E6720746869732063757272656E742074696D656C696E65206265747765656E204265746120616E64207468652066756C6C204D61696E6E657420696D706F7274616E742E204275696C646572732077686F20626567696E206E6F7720706F736974696F6E207468656D73656C766573206168656164206F662074686F73652077616974696E6720666F722066696E616C6974792E0A0A2323205768656E2042657461204D61696E6E65743F0A0A54686520616E7377657220686173206E6F74206368616E6765642E204D61696E6E657420666F6C6C6F77732072656164696E6573732E2053746162696C6974792C20476E6F564D2066697865732C20676F7665726E616E63652072656C696162696C6974792C20616E642076616C696461746F7220636F6F7264696E6174696F6E206D757374206D65657420746865207265717569726564207374616E646172642073657420666F7274682062792074686520636F726520656E67696E656572696E67207465616D2E2054686520776F726B206E6F7720756E64657277617920697320666F6375736564206F6E20746869732E204966205465737431312070726F76657320776861742069742069732064657369676E656420746F2070726F76652C20426574612077696C6C20666F6C6C6F772E0A3214323032362D30322D32365430303A30303A30305A320D6D696368656C6C65656C6C656E3228676E6F6C616E642C65636F73797374656D2C757064617465732C544D59472C636F6D6D756E6974790AEC500A0A2F766D2E6D5F63616C6C12DD500A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F7374320C626574612D6D61696E6E6574321D476E6F2E6C616E642042657461204D61696E6E6574206973204C69766532914F0A0A476E6F2E6C616E6427732042657461204D61696E6E6574206D61726B732074686520626567696E6E696E67206F662061206E65772065726120696E206170706C69636174696F6E20646576656C6F706D656E742E20456E67696E65657265642066726F6D207468652067726F756E642075702C20476E6F2E6C616E642069732074686520776F726C642773206669727374206C616E67756167652D62617365642C206D756C74692D75736572206F7065726174696E672073797374656D2E2049742070757368657320746865206C696D697473206F66206578697374696E6720626C6F636B636861696E20696E66726173747275637475726520616E642070726F6772616D6D696E67206C616E677561676573206279206D616B696E672073686172656420636F6D7075746174696F6E2C2070657273697374656E742073746174652C20616E6420636F6D706F736162696C697479206E617469766520746F207468652073797374656D20697473656C662E0A0A53696D696C617220746F207468652077617920436F736D6F73206368616E67656420686F7720626C6F636B636861696E7320696E746572636F6D6D756E69636174652C20616E64207468652054656E6465726D696E742042797A616E74696E65204661756C7420546F6C6572616E7420436F6E73656E7375732050726F746F636F6C206368616E67656420686F7720626C6F636B636861696E20646576656C6F7065727320617070726F61636820636F6E73656E73757320616C676F726974686D732C20476E6F2E6C616E642077696C6C206368616E6765207468652077617920646576656C6F70657273207468696E6B2061626F75742070726F6772616D6D696E672E0A0A232320476E6F2E6C616E642047656E657369730A0A5374617274656420696E2032303232206279204A6165204B776F6E2C20666F756E646572206F662054656E6465726D696E7420616E6420436F736D6F732C20476E6F2E6C616E6420736574206F757420746F206272696E67206E6578742D67656E65726174696F6E20736D61727420636F6E74726163742070726F6772616D6D696E6720746F2074686520436F736D6F732065636F73797374656D2E205768617420626567616E20617320612070617373696F6E2070726F6A6563742065766F6C76656420696E746F20612064656469636174656420656E67696E656572696E67206566666F72743A2061206E6F76656C204C617965723120706C6174666F726D2C2074686520476E6F206C616E67756167652028646572697665642066726F6D20476F292C2074686520476E6F207669727475616C206D616368696E652C20616E206170706C69636174696F6E206C617965722C20616E64206120756E6976657273616C2062726F7773657220616E642072656E646572696E672073797374656D20746F206D616B65206465706C6F79656420636F64652068756D616E2D7265616461626C6520616E6420696E7465726163746976652E0A0A476E6F2E6C616E64206973206120706172616469676D20736869667420696E20626F74682070726F6772616D6D696E67206C616E67756167657320616E64206F7065726174696E672073797374656D732E2054686520676F616C20697320746F206265636F6D652074686520776F726C642773206F70656E206B6E6F776C65646765206261736520666F7220746865206E6577206D696C6C656E6E69756D2C207374617274696E672077697468206120706F77657266756C20646576656C6F706D656E7420656E7669726F6E6D656E7420666F72206275696C64696E67206E6578742D6C6576656C20646563656E7472616C697A6564206170706C69636174696F6E732E0A0A2323204C61756E6368205068617365730A0A23232320506861736520493A205468652042657461204D61696E6E6574202850726573656E74290A0A546865206C61756E6368206F66207468652042657461204D61696E6E657420696E636C756465732074686520666972737420646973747269627574696F6E206F662074686520474E4F5420746F6B656E2C20616E206F7065726174696F6E616CC2A0476E6F564D2D706F776572656420736D61727420636F6E7472616374206E6574776F726B2C20616E642074686520696E6175677572616C2072656C65617365206F6620476F7644414F2C20476E6F2E6C616E642773206F6E2D636861696E20676F7665726E696E672073797374656D2E20416E20696E697469616C20747265617375727920686173206265656E207365742075702C206D616E6167656420627920476F7644414F206D656D6265727320746F2066756E6420667574757265206E6574776F726B20646576656C6F706D656E7420616E642067726F7774682E2054686572652077696C6C206265206120706572696F64206F662074696D6520776865726520746865207669727475616C206D616368696E652077696C6C2062652068617264656E656420616E64206F7074696D697A6564207769746820757365722070726F766964656420636F6E74726163747320616E64206175746F6D617465642066757A7A20746F6F6C696E67202877686963682069732063757272656E746C79206265696E6720646576656C6F706564292E2046696E616C6C792C20746865205B476E6F2E6C616E6420436F6E737469747574696F6E5D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F626C6F622F6D61737465722F646F63732F434F4E535449545554494F4E2E6D642920697320696E2061207072656C696D696E6172792073746174652C20616E6420697320657870656374656420746F20626520726174696669656420627920612053757065726D616A6F72697479204465636973696F6E206F6620476F7644414F206E6F772074686174207468652042657461204D61696E6E6574206973206C6976652E0A0A4E6F74653A20466F72206E6F772C20746F6B656E207472616E7366657273206172652064697361626C656420647572696E6720426574613B20474E4F5420697320757361626C652077697468696E20746865206E6574776F726B20666F7220737570706F72746564206F6E2D636861696E2066756E6374696F6E732E0A0A2323232050686173652049493A204D61696E6E65740A0A546869732070686173652077696C6C20656E61626C6520474E4F54207472616E73666572732E205468652061637469766174696F6E206F6620474E4F54207472616E73666572732077696C6C2062652070726F706F73656420616E6420766F746564206F6E20627920476F7644414F2E204F6E6365207472616E73666572732061726520656E61626C65642C20476E6F2E6C616E6427732065636F6E6F6D792077696C6C20626567696E20666F726D696E6720776974682074686520636F6D6D756E69747927732068656C702E20546865207072696F72697479207468656E206265636F6D65732067726F7774683A20657870616E642061776172656E6573732C2061747472616374206120636F72652067726F7570206F66206E657720476F20646576656C6F706572732C2070726F746F747970652064417070732061742073706565642C20616E64206571756970206275696C6465727320776974682062657474657220746F6F6C732E0A0A57652077696C6C20616C736F20736565206E756D65726F7573206F7074696D697A6174696F6E73206F662074686520476E6F207669727475616C206D616368696E6520626F746820647572696E67207468652042657461204D61696E6E657420616E64204D61696E6E6574207068617365732E204D6F726520746F20636F6D65206C61746572210A0A232323205068617365204949493A20457870616E64696E6720746865204E6574776F726B0A0A546865206E65787420656E67696E656572696E67207461736B20666F6C6C6F77696E672042657461204D61696E6E65742C20666F6375736573206F6E2073656375726520696E7465726F7065726162696C69747920776974682061207072696F72697479206F6E206272696467696E672041746F6D4F6E6520616E6420476E6F2E6C616E642E205468697320696E636C7564657320696E746567726174696E6720616E642074657374696E67206B657920436F736D6F7320746563686E6F6C6F676965733A20496E7465722D426C6F636B636861696E20436F6D6D756E69636174696F6E20284942432920616E64205B496E746572636861696E2053656375726974792028494353295D2868747470733A2F2F616C6C696E626974732E636F6D2F626C6F672F72657468696E6B696E672D6963732F292E0A0A2A54696D656C696E657320666F7220656163682070686173652077696C6C20626520636F6D6D756E696361746564206173207468657920736F6C69646966792E2A0A0A5B215B476E6F2E6C616E642042657461204D61696E6E65745D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032362D30332D32355F626574612D6D61696E6E65742F7372632F7468756D62732F62616E6E65722E706E67295D2868747470733A2F2F676E6F6C616E672E6769746875622E696F2F626C6F672F323032362D30332D32355F626574612D6D61696E6E65742F7372632F62616E6E65722E706E67290A0A232320474E4F5420446973747269627574696F6E2044657461696C730A0A4F662074686520312062696C6C696F6E20746F74616C20474E4F5420746F6B656E20737570706C792C20373025206973206265696E6720646973747269627574656420746F2074686520636F6D6D756E69747920696E2074687265652063617465676F726965732E0A0A2D20436F736D6F7320726563697069656E74733A2033352520686173206265656E20616C6C6F636174656420746F2061207061727469616C20676F7665726E616E636520736E617073686F742074616B656E206F6E205B4D617920323074682C20323032322028626C6F636B2031302C3536322C383430295D2868747470733A2F2F7777772E6D696E747363616E2E696F2F636F736D6F732F626C6F636B2F3130353632383430290A2D2041746F6D4F6E6520726563697069656E74733A2032332E312520686173206265656E20616C6C6F636174656420746F2041544F4E4520616E642050484F544F4E20686F6C646572732066726F6D206120736E617073686F74206461746564206174205B446563656D62657220323574682C20323032352028626C6F636B2036343339313137295D2868747470733A2F2F7777772E6D696E747363616E2E696F2F61746F6D6F6E652F626C6F636B2F36343339313137290A2D20476E6F20636F6E7472696275746F72733A2031312E392520686173206265656E20616C6C6F636174656420666F7220646973747269627574696F6E20746F207072696F7220616E64206E657720476E6F2E6C616E642065636F73797374656D20636F6E7472696275746F72732E20546869732063617465676F72792077696C6C206265206D616E6167656420696E2074686520667574757265206279206120476F7644414F2073756244414F2E0A0A2A416C6C6F636174696F6E206669677572657320616E6420656C69676962696C69747920617265206261736564206F6E20736E617073686F747320616E642063757272656E74207265636F72647320616E64206D61792062652061646A757374656420746F20636F7272656374206572726F72732C2070726576656E742061627573652C206F7220636F6D706C792077697468206C6567616C20726571756972656D656E74732E2A0A0A46726F6D207468652072656D61696E696E672033302520474E4F5420737570706C792C20372520686173206265656E20726573657276656420666F722063757272656E7420616E6420667574757265207072697661746520746F6B656E20707572636861736520726F756E64732028696620616E79292C207375626A65637420746F206170706C696361626C65206C61772C207768696C65207468652072656D61696E696E67203233252077696C6C206265206D616E61676564206279204E657754656E6465726D696E742C204C4C432E20476F7644414F20616E64204E657754656E6465726D696E742C204C4C4320746F6765746865722077696C6C20646576656C6F702C20737570706F727420616E64206D61696E7461696E2074686520476E6F2E6C616E642065636F73797374656D2E0A0A23232042657461204D65616E7320426574610A0A42657461204D61696E6E65742069732061206D696C6573746F6E652C206E6F74207468652066696E697368206C696E652E205768696C6520746865206E6574776F726B20697320737461626C6520656E6F75676820666F72206275696C6465727320616E6420636F6D6D756E697479206D656D6265727320746F20626567696E206578706572696D656E74696E672C206F63636173696F6E616C20636861696E20696E73746162696C6974792C20696E636C7564696E67206E6574776F726B20696E74657272757074696F6E73206F722072657374617274732C2061732077656C6C20617320627265616B696E67206368616E676573206D617920616C746572206578697374696E67206665617475726573206F7220636F6E7472616374732E204461746120726573657473202A77696C6C2A206F6363757220617320646576656C6F706D656E742070726F677265737365732E205468697320697320696E74656E74696F6E616C3B206C6561726E696E6720686F7720746F207265636F7665722066726F6D2074686573652069737375657320616E6420646576656C6F70696E6720746F6F6C696E6720746F206D616B65207468652070726F6365737320736D6F6F746865722069732070617274206F6620746865206F626A656374697665206F662074686520626574612070686173652E0A0A546865206B6579206F626A656374697665732061726520746F206465706C6F7920616E64206275696C64207265616C6D732C207061636B616765732C20616E6420636F6E74726163747320746F2076616C696461746520636F72652066756E6374696F6E616C6974792C207374726573732D7465737420746865206E6574776F726B20746F206578706C6F72652069747320706572666F726D616E6365206C696D69747320616E642076616C696461746F72206265686176696F722C20616E64207265706F727420616E6420646F63756D656E7420616E792066696E64696E67732C20627567732C206F7220696D70726F76656D656E74206F70706F7274756E697469657320746F2074686520636F6D6D756E6974792E0A0A45766572792062756720666F756E642C206576657279207265616C6D206465706C6F7965642C20616E642065766572792070617274206F6620476E6F2E6C616E6420746573746564206272696E677320746865206E6574776F726B206F6E65207374657020636C6F73657220746F20612066756C6C792070726F64756374696F6E2D7265616479206D61696E6E65742E0A0A2323204A6F696E207468652042657461204D61696E6E657420457870657269656E63650A0A546865726520617265206D616E79207761797320746F20636F6E747269627574652C207768657468657220796F7520617265206120646576656C6F7065722C20612076616C696461746F722C206F722061206E6574776F726B20656E74687573696173742C2074686572652773206120666577207761797320746F2070757368207468652065636F73797374656D20666F72776172642E0A0A23232320476E6F6D6965730A0A466F7220436F736D6F7320616E642041746F6D4F6E6520726563697069656E74732C20796F752063616E20636865636B20796F757220474E4F542062616C616E6365207769746820796F757220436F736D6F7320487562206F722041746F6D4F6E652061646472657373207573696E6720746865205B436F696E2042616C616E636520436865636B65725D2868747470733A2F2F676E6F2E6C616E642F722F676E6F6C616E642F636F696E73292E20596F7520686176652074776F206F7074696F6E7320666F72206D616E6167696E6720796F757220474E4F5420746F6B656E7320616E6420696E746572616374696E67207769746820746865206E6574776F726B3A0A0A2D204372656174696E67206F7220696D706F7274696E6720796F7572206578697374696E672077616C6C6574207468726F75676820746865205B4164656E612057616C6C65745D2868747470733A2F2F7777772E6164656E612E6170702F290A2D205573696E67205B476E6F6B657920434C495D2868747470733A2F2F646F63732E676E6F2E6C616E642F75736572732F696E7465726163742D776974682D676E6F6B6579292C2074686520636F6D6D616E642D6C696E652077616C6C657420666F7220476E6F2E6C616E640A0A3C7370616E207374796C653D22636F6C6F723A726564223E2A2A5741524E494E473A204E6576657220656E74657220796F7572206D6E656D6F6E696320287365637265742031322C2031382C206F7220323420776F72647329206F6E20616E79206465766963652074686174206973206F722077696C6C206576657220626520636F6E6E656374656420746F2074686520696E7465726E65742C206E6F74206576656E206F6E20746865204164656E612057616C6C6574206F7220476E6F6B657920434C492E205768696C6520796F752063616E20636865636B20796F757220474E4F542062616C616E63652C20616E64207573652074686520476E6F2E6C616E64206E6574776F726B2C20746F6B656E207472616E7366657273206172652063757272656E746C79206E6F7420617661696C61626C652E2A2A3C2F7370616E3E0A0A496620796F75206469646E2774207265636569766520474E4F542C20796F752063616E207374696C6C206578706C6F72652042657461204D61696E6E65742076696120746865205B466175636574204875625D2868747470733A2F2F6661756365742E676E6F2E6C616E642F292062792072657175657374696E6720746F6B656E732066726F6D20612064726970206661756365742E20546865205B53746167696E67206E6574776F726B5D2868747470733A2F2F73746167696E672E676E6F2E6C616E642F2920697320616C736F20617661696C61626C6520666F72206578706572696D656E746174696F6E207573696E672061207365706172617465207465737420746F6B656E2E0A0A23232320446576656C6F706572730A0A496620796F7520686176652074686520736B696C6C7320746F20676F20667572746865722061742074686973206561726C792073746167652C20796F752063616E206D616B65206D65616E696E6766756C20636F646520636F6E747269627574696F6E732C20746F6F6C696E672C20736D61727420636F6E7472616374206578616D706C65732C20616E64206B696C6C6572206170706C69636174696F6E732E20596F757220636F6E747269627574696F6E732061726520696E74656772616C20746F2073686170696E6720616E6420626F6F74737472617070696E6720746865206E6574776F726B2E0A0A446576656C6F706572732063616E207374617274206279206465706C6F79696E6720612073696D706C65207265616C6D2C206578706C6F72696E6720746865206578616D706C6520636F6E7472616374732C206F72207375626D697474696E6720612070756C6C207265717565737420656974686572206469726563746C7920696E20746865205B476E6F207265706F7369746F72795D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E67292C206F7220696E205B476E6F76657273655D2868747470733A2F2F6769746875622E636F6D2F676E6F7665727365292C206120636F6C6C61626F72617469766520737061636520666F72206578706572696D656E74616C20616E6420696E6E6F7661746976652070726F6A6563747320696E7370697265642062792074686520476E6F2E6C616E642065636F73797374656D2E2054686520626573742077617920746F206A756D7020726967687420696E206973207669736974696E6720746865205B476E6F2E6C616E6420446F63756D656E746174696F6E5D2868747470733A2F2F646F63732E676E6F2E6C616E642F292E0A0A436F6E7472696275746F727320746F207468652065636F73797374656D206D6179206576656E7475616C6C79206465706C6F79204752432D323020736D61727420636F6E74726163747320656E61626C696E6720667574757265206F6E2D636861696E20737761702066756E6374696F6E616C6974792077697468205B476E6F737761705D2868747470733A2F2F626574612E676E6F737761702E696F2F292C2074686520666972737420646563656E7472616C697A65642065786368616E6765202844455829206F6E20476E6F2E6C616E642E0A0A2323232056616C696461746F72730A0A56616C696461746F72732063616E206A6F696E20746865207365742C2068656C702074657374207363616C696E672C20616E64207072657061726520666F72206675747572652075706772616465732E2042657461204D61696E6E65742076616C696461746F72732061726520616464656420746F207468652076616C736574206F6E6C79207468726F756768206120476F7644414F2070726F706F73616C2E20556E6C696B65206F74686572206E6574776F726B732077686572652076616C696461746F7273207374616B652074686569722066756E647320616E64206561726E20726577617264732C20476E6F2E6C616E6427732076616C696461746F7220736C6F74732061726520676976656E20746F20636F6E7472696275746F727320776974682070726F76656E20747261636B207265636F7264732E20596F752063616E20726567697374657220796F75722076616C696461746F7220666F7220636F6E73696465726174696F6E206F6E2074686520476E6F2E6C616E64205B56616C6F7065722052656769737472795D2868747470733A2F2F676E6F2E6C616E642F722F676E6F70732F76616C6F706572732920616E64206C6561726E206D6F7265205B686572655D2868747470733A2F2F676E6F70732E696F2F61727469636C65732F6775696465732F6265636F6D652D746573746E65742D76616C696461746F722F29206F6E20686F7720746F2067657420737461727465642E0A0A2323232045766572796F6E650A0A54686520476E6F2E6C616E6420626C6F636B206578706C6F7265722C205B476E6F5363616E5D2868747470733A2F2F676E6F7363616E2E696F2F292C20676976657320796F7520616E206F76657276696577206F6620476E6F2E6C616E64206E6574776F726B73206C696B652042657461204D61696E6E65742061732077656C6C2061732053746167696E672C206F72206F6E676F696E6720746573746E6574732E20497420696E636C7564657320696D706F7274616E74206461746120666F7220616E206F76657276696577206F6620746865206E6574776F726B2773207374617475732061732077656C6C2061732061206D7972696164206F66207472616E73616374696F6E73206D61646520696E636C7564696E6720746F74616C2073746F72616765206465706F736974732C207265616C6D206465706C6F796D656E74732C20616E642066756E6769626C6520746F6B656E732028475243323020746F6B656E207374616E64617264292E0A0A2323205265636F676E6974696F6E20616E642074686520526F61642041686561640A0A506861736520494920697320657870656374656420746F20656E61626C6520746F6B656E207472616E736665727320616E6420657870616E6420646576656C6F706D656E7420616E64207573657220746F6F6C696E672E205068617365204949492077696C6C20666F637573206F6E20696E7465726F7065726162696C69747920616E64206275696C64696E67206272696467657320746F2074686520436F736D6F732065636F73797374656D2E2045616368207068617365206275696C647320746F776172642065737461626C697368696E6720476E6F2E6C616E642061732074686520676F2D746F206F7065726174696E672073797374656D20616E6420706C6174666F726D20666F7220612063656E736F72736869702D6672656520616E642065636F6E6F6D6963616C6C7920766961626C6520616C7465726E617469766520746F20746F64617927732062726F6B656E20696E7465726E65742E0A0A4561726C792061646F707465727320616E6420636F6E7472696275746F72732077696C6C20616C776179732062652072656D656D62657265642077697468696E20746865206E6574776F726B2E205768657468657220796F757220696D7061637420636F6D6573207468726F75676820636F726520636F64652C206F72206372656174697665207265616C6D732C207765276C6C2073706F746C6967687420796F757220776F726B20616E6420736861726520697420776974682074686520776964657220636F6D6D756E6974792E204E6F77206973207468652074696D652E205468652042657461204D61696E6E6574206973206F6E6C792074686520626567696E6E696E672E0A0A4A6F696E206F757220636F6D6D756E6974793A0A0A2D20576562706167653A205B68747470733A2F2F676E6F2E6C616E642F5D2868747470733A2F2F676E6F2E6C616E642F290A2D204769744875623A205B68747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F5D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F290A2D20446F63733A205B68747470733A2F2F646F63732E676E6F2E6C616E642F5D2868747470733A2F2F646F63732E676E6F2E6C616E642F290A2D20583A205B68747470733A2F2F782E636F6D2F5F676E6F6C616E645D2868747470733A2F2F782E636F6D2F5F676E6F6C616E64290A2D20446973636F72643A205B446973636F72642E67672F676E6F6C616E645D2868747470733A2F2F646973636F72642E67672F676E6F6C616E64290A2D2054656C656772616D3A205B68747470733A2F2F742E6D652F6A6F696E5F676E6F6C616E645D2868747470733A2F2F742E6D652F6A6F696E5F676E6F6C616E64290A2D20476E6F2E6C616E64204C696E6B65723A205B68747470733A2F2F676E6F2E6C616E642F6C696E6B735D2868747470733A2F2F676E6F2E6C616E642F6C696E6B73290A0A2A446973636C61696D65723A2A0A0A2A5468697320616E6E6F756E63656D656E7420697320666F7220696E666F726D6174696F6E616C20707572706F736573206F6E6C7920616E64206973206E6F7420616E206F6666657220746F2073656C6C206F72206120736F6C696369746174696F6E20746F2062757920616E7920746F6B656E206F7220616E79206F7468657220696E737472756D656E742E20497420696E636C7564657320666F72776172642D6C6F6F6B696E672073746174656D656E747320616E6420746172676574732074686174206D6179206368616E67653B2061637475616C206F7574636F6D6573206D617920646966666572206D6174657269616C6C792E2050617274696369706174696F6E206D61792062652072657374726963746564206F7220756E617661696C61626C6520696E206365727461696E206A7572697364696374696F6E732E204265746120666561747572657320616E64206E6574776F726B206265686176696F72206D6179206368616E67652C20696E636C7564696E67207468726F7567682075706772616465732C2072657374617274732C206F722064617461207265736574732E2A0A3214323032362D30332D32355430303A30303A30305A32186D696368656C6C65656C6C656E2C5469636F6A6F686E6E79321B676E6F6C616E642C65636F73797374656D2C636F6D6D756E6974790AB31D0A0A2F766D2E6D5F63616C6C12A41D0A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F73743207746573742D3133320E546573743133206973204C69766532E71B0A0A5765E28099726520706C656173656420746F20616E6E6F756E6365207468617420546573743133206973206C6976652E2041732077652064726177206E656172657220746F206D61696E6E6574206C61756E63682C20546573743133206D61726B732061207369676E69666963616E74206D696C6573746F6E6520696E2074686520646576656C6F706D656E74206F662074686520476E6F2E6C616E6420626C6F636B636861696E2E0A0A23232057686174E2809973204E657720696E205465737431333F0A0A546573743133206973206120636F6E73656E7375732D627265616B696E672072656C6561736520666F722074686520476E6F20746573746E6574206C696E6520776974682074686520666F6C6C6F77696E67206368616E6765732E0A0A2323232320496E7465727265616C6D2053656D616E74696373204F7665726861756C0A2D205061636B6167657320756E64657220602F702F6020616E6420746865207374616E64617264206C69627261727920617265206E6F772070657273697374656E742066726F7A656E205265616C6D730A2D2043726F73732D7265616C6D2070616E6963732066726F6D20602F702F602061626F727420696E7374656164206F66206265696E6720636174636861626C6520627920607265636F7665722829600A2D20546865206F6C6420604E5F526561646F6E6C79602070726F76656E616E6365207461696E7420686173206265656E2072656D6F76656420696E206661766F72206F6620506B674944206F776E65727368697020636865636B7320617420706F696E7465722064657265666572656E636520626F756E6461726965730A0A23232323204164646974696F6E616C20557064617465730A2D2048617264666F726B20763320737570706F72740A2D20476F7644414F2D64726976656E20636861696E2068616C742068616E646C696E670A2D20436F6F7264696E61746564206068616C745F686569676874602075706772616465730A2D2056616C696461746F722D736574206C696D6974730A2D2053657373696F6E206163636F756E74730A2D20496D70726F7665642067656E657369732F7265706C617920746F6F6C696E670A2D2043616C696272617465642067617320616E642073746F72616765206368616E6765730A2D205361666572206D61726B646F776E2068616E646C696E670A2D20476E6F7765622073656172636820616E6420555820696D70726F76656D656E74730A2D20476E6F6B6579206265686176696F7220757064617465730A2D2042726F616420564D2F5250432F7765622F73656375726974792068617264656E696E670A0A52656164207468652066756C6C205B6368616E6765206C6F6720686572655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F72656C65617365732F7461672F636861696E2F746573743133292E0A0A2323205768617420546573743133204D65616E7320666F72204F757220436F6D6D756E6974790A0A496E207468652070726163746963616C2073656E73652C20546573743133206F70656E7320757020612072616E6765206F6620706F73736962696C697469657320666F7220646576656C6F706572733A0A0A2D204465706C6F7920616E642072756E206170706C69636174696F6E73207573696E672066617563657420746F6B656E732077697468206E6F207269736B206F66206D6F6E6574617279206C6F73730A2D2049746572617465206F6E20476E6F20636F64652C207265616C6D732C20616E64207061636B6167657320696E20612070726F64756374696F6E2D6C696B652073657474696E670A2D204F6E626F617264206561726C7920757365727320616E642067617468657220666565646261636B206265666F7265206465706C6F79696E67206F6E206D61696E6E65740A2D205475726E20696465617320696E746F20646563656E7472616C697A6564206170706C69636174696F6E7320616E6420746573742070726F647563742D6D61726B6574206669740A2D20457374696D61746520636F737473206F66206275696C64696E67206365727461696E206170706C69636174696F6E7320746F2064657465726D696E65207468652066696E616E6369616C20666561736962696C697479206F66206465706C6F79696E67207468656D0A0A466F72207468652062726F6164657220636F6D6D756E6974792C205465737431332069732061206368616E636520746F206578706C6F726520476E6F2E6C616E6420666972737468616E642E204B65657020616E20657965206F757420666F72204465466920616E642067616D696E6720657870657269656E6365732066726F6D2065636F73797374656D2070726F6A65637473206C696B65205B476E6F537761705D2868747470733A2F2F782E636F6D2F676E6F737761706C6162732920616E64205B416B6B616469615D2868747470733A2F2F782E636F6D2F616B6B616469616C616E6429206173207468657920636F6D65206F6E6C696E652E204173207468652065636F73797374656D2067726F77732C20736F2077696C6C20746865207761797320746F20656E67616765207769746820476E6F2E6C616E642E20466F72206F75722076616C696461746F72732C207765E280996C6C206769766520796F7520616E20757064617465206F6E2077686174206E6565647320746F20626520646F6E65206E6578742E0A0A546F2067657420737461727465642C207669736974205B5465737431335D2868747470733A2F2F7465737431332E746573746E6574732E676E6F2E6C616E642F292C2072656365697665207465737420474E4F54207468726F756768206F7572205B6661756365745D2868747470733A2F2F7465737431332E746573746E6574732E676E6F2E6C616E642F666175636574292C20616E64206578706C6F726520617661696C61626C65205B52504320656E64706F696E74735D2868747470733A2F2F7270632E7465737431332E746573746E6574732E676E6F2E6C616E642F29206966206E65656465642E0A0A23232057687920546573743133204D6174746572730A0A5465737431332069732061207369676E69666963616E74207374657020666F727761726420696E20476E6F2E6C616E642773206A6F75726E657920746F77617264206D61696E6E65742E205468652072656C656173652064656C697665727320666F756E646174696F6E616C20696D70726F76656D656E7473206163726F73732073656375726974792C20676173206D6F64656C696E672C20564D20636F72726563746E6573732C20616E6420636861696E207570677261646520696E6672617374727563747572652C20656163682061646472657373696E6720636F726520656E67696E656572696E67206368616C6C656E67657320616E64207265647563696E67207269736B20666F7220746865206E6574776F726B20696E20746865206C6F6E67207465726D2E0A0A4D61696E6E6574206973207768656E20746865206E6574776F726B206265636F6D6573207065726D616E656E742C207265616C2076616C75652073746172747320746F20666C6F772C20616E6420476E6F2E6C616E64E280997320766973696F6E206F662061207472616E73706172656E7420616E6420636F6D706F7361626C6520626C6F636B636861696E20706C6174666F726D206265636F6D6573207265616C6974792E20546573743133206272696E6773207468617420766973696F6E206D65616E696E6766756C6C7920636C6F7365722E0A0A23232057686174E2809973204E6578743F0A0A57652776652070757420546573743133207468726F756768207269676F726F757320696E7465726E616C2074657374696E672C20616E64206E6F7720697427732074696D6520746F206F70656E20697420757020746F2074686520636F6D6D756E6974792E204279206465706C6F79696E6720636F6E7472616374732C207472616E73616374696E672C20616E64206578706C6F72696E6720746865206E6574776F726B2C20796F7520706C617920612064697265637420726F6C6520696E2076616C69646174696E6720746861742074686520636861696E20697320726561647920666F72207768617420636F6D6573206E6578742E0A0A416E64207768617420636F6D6573206E65787420697320696D706F7274616E742E2054686520636F7265207465616D206973206163746976656C7920707265706172696E6720666F72206D61696E6E65742C20776869636820696E636C756465732074686520546F6B656E2047656E65726174696F6E204576656E742028544745292C206C69766520474E4F54207472616E73666572732C206F6E2D636861696E20676F7665726E616E6365207468726F75676820476F7644414F2C20496E7465722D426C6F636B636861696E20436F6D6D756E69636174696F6E20284942432920616E6420496E746572636861696E20536563757269747920284943532920696E746567726174696F6E7320776974682041746F6D4F6E652C20636F6E74696E756564206F7074696D697A6174696F6E206F662074686520476E6F564D2C20696D70726F76656420646576656C6F70657220746F6F6C696E672C20616E64207468652062726F616465722067726F777468206F662074686520476E6F2E6C616E642065636F73797374656D2E0A0A57656C636F6D6520746F205465737431332E204A6F696E2074686520636F6E766572736174696F6E206F6E205B446973636F72645D2868747470733A2F2F646973636F72642E67672F676E6F6C616E642920616E64205B54656C656772616D5D2868747470733A2F2F742E6D652F6A6F696E5F676E6F6C616E64292E0A3214323032362D30362D31365431323A30303A30305A32097279616E6C65653139322F676E6F6C616E642C65636F73797374656D2C757064617465732C7465737431332C636F6D6D756E6974792C626C6F670AE6240A0A2F766D2E6D5F63616C6C12D7240A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F73743205746F70617A320D546F70617A206973204C697665329E230A0A5765E28099726520706C656173656420746F20616E6E6F756E6365207468617420546F70617A2C20746865206C61746573742074657374206E6574776F726B20666F7220476E6F2E6C616E642C206973206C6976652E20546F70617A20697320746865206E65787420697465726174696F6E206166746572205465737431332C20616E642069742069732061206E657720636861696E2C206E6F7420612068617264666F726B2E202A2A4E6F746963653A20546F70617A20697320616E206578706572696D656E74616C2074657374206E6574776F726B2E2A2A0A0A42656361757365206E6F2073746174652063617272696573206F7665722066726F6D205465737431332C2062616C616E6365732C207265616C6D732C20616E642072656769737465726564206E616D657320616C6C207374617274206174207A65726F2E20596F75E280996C6C206861766520746F207265636569766520474E4F542066726F6D20746865205B6661756365745D2868747470733A2F2F746F70617A2E746573746E6574732E676E6F2E6C616E642F6661756365742920616E642072652D726567697374657220796F7572206E616D65732E205465737431332077696C6C2073756E7365742077697468696E20746865206E65787420323420686F7572732E0A0A23232320436861696E2044657461696C730A0A2D20436861696E2049443A2060746F70617A2D31600A2D2039302063757261746564207061636B616765732061742067656E657369730A2D203220666F756E64696E672076616C696461746F72732C206E616D65737061636520656E666F7263656D656E74202860722F7379732F6E616D65736029206C6976652066726F6D20626C6F636B20310A2D203130207072652D66756E64656420666175636574730A2D20556E7265737472696374656420746F6B656E207472616E73666572730A2D20436F646520626173656C696E653A206D6173746572205B3935396365666439315D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F636F6D6D69742F39353963656664393136303231643361353565396235316632306430356566363138653766333537292C2031333320636F6D6D697473206168656164206F66205465737431330A0A23232057686174E2809973204E657720696E20546F70617A3F0A0A23232320427265616B696E67202F20436F6E73656E7375732D72656C6576616E7420557064617465730A2D20606669782867726332302921603A20746F6B656E206964206465636F75706C65642066726F6D2073796D626F6C20285B23353930385D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3539303829290A2D20736563703235366B312076616C696461746F72206B657973206E6F206C6F6E67657220737570706F7274656420285B23353934395D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3539343929290A2D207061636B616765206E616D65206D757374206D6174636820746865206C617374207061746820656C656D656E742061742060616464706B676020285B23353034385D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3530343829290A2D2060636F636B726F61636864622F61706460207265706C6163656420627920606D6174682F6269672E5261746020696E2074686520564D20285B23353836375D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3538363729290A2D20747970652D636865636B202B2070726570726F6365737320676173206E6F77206D65746572656420617420604164645061636B6167652F52756E6020285B23353839325D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3538393229290A0A23232320564D20436F72726563746E6573730A0A4E6F7461626C652066697865732066726F6D20746865206C61726765206261746368206F6620676E6F766D206669786573206172653A0A2D20696E746572666163652D626F756E64206D6574686F6420646973706174636820285B23353733375D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3537333729290A2D20656D626564646564206669656C642F6D6574686F64206C6F6F6B757020285B23353732315D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F35373231292C205B23353733395D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3537333929290A2D2064657465726D696E697374696320747970652D636865636B20766572646963747320285B23353839335D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3538393329290A2D207475706C652061737369676E6D656E74206F7264657220285B23353739305D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3537393029290A2D206D61702D64656C657465206F626A656374207265636C61696D20285B23353838325D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F35383832292C205B23353839395D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3538393929290A0A232323204E65772046656174757265730A2D207375622D7265616C6D206964656E7469746965732076696120607265616C6D2E5375622873756270617468296020285B23353839305D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3538393029290A2D206D656D7061636B6167652073746F726167652073706C697420696E746F2070726F6420616E64207465737420626C6F627320285B23353839315D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3538393129290A2D2076657374696E67206163636F756E747320506F4320285B23353834305D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3538343029290A2D20746D3220703270206164647265737320626F6F6B20285B23353836315D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3538363129290A2D20636F6E63757272656E74204142434920717565726965732076696120736E617073686F742069736F6C6174696F6E20285B23353433315D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3534333129290A2D20676E6F776562207061636B616765206F7665727669657720736F7572636520646F6320285B23353537325D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3535373229290A0A2323232047656E65736973202F204F70657261746F7220546F6F6C696E670A2D206C6F75642067656E657369732D7265706C6179206661696C7572657320285B23353932345D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3539323429290A2D2060476E6F54784D65746164617461602070726F76656E616E6365206669656C647320285B23353932355D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3539323529290A2D20756E69666965642067656E65736973207369676E61747572652D736B697020666F72207265706C61792074787320285B23353932365D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3539323629290A2D2060676E6F67656E6573697320666F726B602070726F76656E616E63652C207478207061746368696E67202B2060696E73706563746020285B23353932375D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3539323729290A2D2076616C69642C2070617961626C652060666F726B2076616C6F7065722D7365656460206F757470757420285B23353932385D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3539323829290A2D2060676E6F67656E6573697320766572696679202D736B69702D7369676E61747572652D636865636B6020285B23353934345D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3539343429290A0A2323232047656E65736973202B2042696E61726965730A2D205B67656E657369732E6A736F6E5D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F72656C65617365732F646F776E6C6F61642F636861696E2F746F70617A2F67656E657369732E6A736F6E2920287665726966792077697468206073686132353673756D60290A2D205072656275696C742060676E6F602C2060676E6F6B6579602C2060676E6F6C616E64602C2060676E6F776562602062696E617269657320666F722064617277696E2F6C696E757820C39720616D6436342F61726D36340A0A57616E7420746F20726567656E65726174652067656E657369733F20536565205B686572655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F626C6F622F636861696E2F746F70617A2F6D6973632F6465706C6F796D656E74732F746F70617A2E676E6F2E6C616E642F524541444D452E6D64292E0A0A2323232056616C696461746F72730A506C6561736520726566657220746F2074686973205B6C696E6B5D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F626C6F622F636861696E2F746F70617A2F6D6973632F6465706C6F796D656E74732F746F70617A2E676E6F2E6C616E642F56414C494441544F522E6D642920746F206A6F696E20546F70617A20617320612056616C696461746F722E204F6E636520796F75722076616C696461746F7220697320757020616E642073796E6365642C20796F752077696C6C206861766520746F20726567697374657220796F75722076616C6F7065722070726F66696C6520616761696E2077697468207468652073616D65206F70657261746F72206164647265737320796F75207573656420696E205465737431332E205468697320656E61626C657320757320746F2061646420796F75206469726563746C7920746F2074686520546F70617A2076616C7365742E20546865207465616D2077696C6C20736F6F6E20616E6E6F756E6365206F6E205B446973636F72645D2868747470733A2F2F646973636F72642E67672F676E6F6C616E6429207768656E205465737431332077696C6C2073756E73657420696E206F7264657220746F2073696D706C696679207468652076616C696461746F72206D6967726174696F6E2070726F636573732E0A0A2D2D2D0A0A23232323204C696E6B730A2D20476E6F7765623A2068747470733A2F2F746F70617A2E746573746E6574732E676E6F2E6C616E640A2D204661756365743A2068747470733A2F2F746F70617A2E746573746E6574732E676E6F2E6C616E642F6661756365740A2D205250433A2068747470733A2F2F7270632E746F70617A2E746573746E6574732E676E6F2E6C616E640A2D20476E6F636B7069743A2068747470733A2F2F676E6F636B7069742E746F70617A2E746573746E6574732E676E6F2E6C616E640A2D205374617475733A2068747470733A2F2F7374617475732E746F70617A2E746573746E6574732E676E6F2E6C616E640A2D2054782D696E64657865723A2068747470733A2F2F696E64657865722E746F70617A2E746573746E6574732E676E6F2E6C616E642F6772617068716C0A0A2A2A446973636C61696D65722A2A0A2A546F6B656E73206F6E20546F70617A20746573746E65742068617665206E6F207265616C2D776F726C642076616C75652C20616E642070617274696369706174696F6E20697320666F722074657374696E6720707572706F736573206F6E6C792E2A0A0A3214323032362D30372D32325431323A30303A30305A32097279616E6C65653139322E676E6F6C616E642C65636F73797374656D2C757064617465732C746F70617A2C636F6D6D756E6974792C626C6F670AA1210A0A2F766D2E6D5F63616C6C1292210A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F73743208736170706869726532105361707068697265206973204C69766532D01F0A576527726520706C656173656420746F20616E6E6F756E636520746861742053617070686972652C20746865206C61746573742074657374206E6574776F726B20666F72205B476E6F2E6C616E645D2868747470733A2F2F676E6F2E6C616E642F292C206973206C6976652E20536170706869726520697320746865206E65787420697465726174696F6E20616674657220546F70617A2C20616E642069742069732061206E657720636861696E2C206E6F7420612068617264666F726B2E202A2A2A4E6F746963653A20536170706869726520697320616E206578706572696D656E74616C2074657374206E6574776F726B2E2A2A2A0A0A417320697420776173207769746820546F70617A2C206E6F2073746174652063617272696573206F7665722066726F6D207468652070726576696F757320746573746E65742C20736F2062616C616E6365732C207265616C6D732C20616E642072656769737465726564206E616D657320616C6C207374617274206174207A65726F2E20546F2070617274696369706174652C20796F75E280996C6C206861766520746F207265636569766520474E4F542066726F6D20746865205B6661756365745D2868747470733A2F2F6661756365742E676E6F2E6C616E642F2920616E642072652D726567697374657220796F7572206E616D65732E20546F70617A2077696C6C2073756E7365742077697468696E20746865206E65787420323420686F7572732E0A0A23232320436861696E2044657461696C730A2D20436861696E2049443A206073617070686972652D31600A2D2038352063757261746564207061636B616765732061742067656E657369730A2D203220666F756E64696E672076616C696461746F72732C206E616D65737061636520656E666F7263656D656E74202860722F7379732F6E616D65736029206C6976652066726F6D20626C6F636B20310A2D2033207072652D66756E64656420666175636574206163636F756E74730A2D2050726F746F636F6C2D6C6576656C2074657374207472616E736665727320656E61626C65640A2D20436F646520626173656C696E653A206D6173746572205B3162663862323832365D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F636F6D6D69742F31626638623238323662376465656337363438633663313738353162303839636230373864303465292C20313720636F6D6D697473206168656164206F6620546F70617A0A0A412062616C616E63652D6D6561737572656D656E74206275672063617567687420647572696E67205B546F70617A2773205052207265766965775D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F353934352370756C6C726571756573747265766965772D343733333734323532302920697320616C736F20666978656420696E207468652067656E65736973206275696C64657220666F7220746869732072656C656173652C20736F206665652070617965722062616C616E63657320617265206E6F77207665726966696564206D6F7265207374726963746C79206265666F72652061206E6F646520697320636F6E736964657265642072656164792E204173206120726573756C742C20746865206F6E6C79206163636F756E74732066756E6465642061742067656E65736973206172652074686520746872656520666175636574733B206576657279206F746865722066656520706179657220737461727473206174207A65726F2E0A0A232320576861742773204E657720696E2053617070686972653F0A0A23232320427265616B696E67202F2047656E657369732D636F6D706F736974696F6E2D72656C6576616E7420557064617465730A2D20636F6D6D6F6E64616F20616C69676E656420776974682074686520436F6D6D6F6E2044414F205370656320E2809420436F756E63696C2C2064656661756C742074616C6C792C207065722D44414F207472656173757269657320285B23363031325D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3630313229293B207769746820626F61726473207065726D697373696F6E73206D6967726174656420746F20746865206E65772060702F6E742F67726F7570732F76306020285B23363030395D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3630303929292C20285B23363031305D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3630313029292C2060702F6E742F636F6D6D6F6E64616F2F76306020616E6420666F7572207472616E7369746976652064657073206C656674207468652067656E657369732073657420283835207061636B6167657320767320546F70617A2773203930290A2D20626F6172647332207075626C696320415049206D616465206E6F6E2D63726F7373696E6720616761696E3B20687562206D6F76656420696E746F2060702F676E6F6C616E642F626F617264732F657874732F6875626020285B23353830395D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3538303929290A2D20746D323A206E6F6E2D6761732062616C616E6365732073746F72656420696E207468656972206F776E206B65797320285B23363033345D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3630333429290A0A232323204E65772046656174757265730A2D2067726332303A20604E6577546F6B656E60206576656E74206F6E20746F6B656E206372656174696F6E20285B23363034325D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3630343229290A2D2067726332307265673A207472616E73616374696F6E20777261707065727320666F72207265676973746572656420746F6B656E7320285B23353936325D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3539363229290A2D20746D323A20636F6E666967757261626C6520525043206B6565702D616C6976652069646C652074696D656F757420285B23363030325D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3630303229290A2D20676E6F7765623A206F70656E2072656E646572206F6E207061636B6167652D6E616D6520636C69636B2C2042726F777365206C696E6B20696E206578706C6F72657220285B23353936365D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3539363629290A0A2323232046697865730A2D20746D323A20736E617073686F742D69736F6C6174656420717565727920706174687320616E642077726974652D70726F6F662062707472656520666173742D696E646578206D61696E74656E616E636520285B23363031385D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3630313829290A2D20676E6F6465763A2064697361626C6520605065657245786368616E67656020285B23353938345D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3539383429290A0A23232320446F6373202F204F7065726174696F6E730A2D206E6F64652D6F70657261746F7220646F6373206D6F76656420696E746F2060676E6F2E6C616E642F636D642F676E6F6C616E64602C20676E6F70732E696F206C696E6B732064726F7070656420285B23363033395D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3630333929290A2D202252756E6E696E672061206E6F64652220726F7574696E67207061676520285B23363033385D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3630333829290A0A23232047656E65736973202B2042696E61726965730A2D205B67656E657369732E6A736F6E5D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F72656C65617365732F646F776E6C6F61642F636861696E2F73617070686972652F67656E657369732E6A736F6E29202876657269667920776974682073686132353673756D290A2D205072656275696C742060676E6F602C2060676E6F6B6579602C2060676E6F6C616E64602C2060676E6F776562602062696E617269657320666F72206064617277696E602F606C696E75786020C3972060616D643634602F6061726D3634600A0A57616E7420746F20726567656E65726174652067656E657369733F20536565205B686572655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F626C6F622F636861696E2F73617070686972652F6D6973632F6465706C6F796D656E74732F73617070686972652E676E6F2E6C616E642F524541444D452E6D64292E0A0A2323232056616C696461746F72730A506C6561736520726566657220746F2074686973205B6C696E6B5D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F626C6F622F636861696E2F73617070686972652F6D6973632F6465706C6F796D656E74732F73617070686972652E676E6F2E6C616E642F56414C494441544F522E6D642920746F206A6F696E20536170706869726520617320612056616C696461746F722E204675727468657220616E6E6F756E63656D656E74732077696C6C206265206D61646520696E20746865205B746573746E65742D616E6E6F756E63656D656E7473206368616E6E656C5D2868747470733A2F2F646973636F72642E67672F34644154384B62745529206F6E20446973636F72642E0A0A2D2D2D0A0A23232323204C696E6B730A0A2D20476E6F7765623A2068747470733A2F2F73617070686972652E746573746E6574732E676E6F2E6C616E640A2D204661756365743A2068747470733A2F2F6661756365742E676E6F2E6C616E642F0A2D205250433A2068747470733A2F2F7270632E73617070686972652E746573746E6574732E676E6F2E6C616E640A2D20476E6F636B7069743A2068747470733A2F2F676E6F636B7069742E73617070686972652E746573746E6574732E676E6F2E6C616E640A2D205374617475733A2068747470733A2F2F7374617475732E73617070686972652E746573746E6574732E676E6F2E6C616E640A2D2054782D696E64657865723A2068747470733A2F2F696E64657865722E73617070686972652E746573746E6574732E676E6F2E6C616E642F6772617068716C200A0A2A2A446973636C61696D65722A2A0A2A546F6B656E73206F6E20536170706869726520746573746E65742068617665206E6F207265616C2D776F726C642076616C75652C20616E642070617274696369706174696F6E20697320666F722074657374696E6720707572706F736573206F6E6C792E2A0A3214323032362D30382D31305431323A30303A30305A32097279616E6C656531393231676E6F6C616E642C65636F73797374656D2C757064617465732C73617070686972652C636F6D6D756E6974792C626C6F670AFE310A0A2F766D2E6D5F63616C6C12EF310A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352217676E6F2E6C616E642F722F676E6F6C616E642F626C6F672A0A4D6F64416464506F73743205706561726C320D506561726C206973204C69766532B6300A0A41732041756775737420636F6D657320746F206120636C6F73652C20776527726520706C656173656420746F20616E6E6F756E6365207468617420506561726C2C20746865206C61746573742074657374206E6574776F726B20666F72205B476E6F2E6C616E645D2868747470733A2F2F676E6F2E6C616E642F292C206973206C6976652E20506561726C2C20746865206E65787420697465726174696F6E206166746572205B53617070686972655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F72656C65617365732F7461672F636861696E2F7361707068697265292C2069732061206E657720636861696E2C206E6F7420612068617264666F726B2E204E6F746963653A20506561726C20697320616E206578706572696D656E74616C2074657374206E6574776F726B2E0A0A41732069742077617320776974682053617070686972652C206E6F2073746174652063617272696573206F7665722066726F6D207468652070726576696F757320746573746E65742C20736F2062616C616E6365732C207265616C6D732C20616E642072656769737465726564206E616D657320616C6C207374617274206174207A65726F2E20546F2070617274696369706174652C20796F75276C6C206861766520746F207265636569766520474E4F542066726F6D20746865205B6661756365745D2868747470733A2F2F6661756365742E676E6F2E6C616E642F2920616E64205B72652D726567697374657220796F7572206E616D65735D2868747470733A2F2F646F63732E676E6F2E6C616E642F7265736F75726365732F75736572732D616E642D7465616D732F292E0A0A232320436861696E2044657461696C730A0A2D20436861696E2049443A2060706561726C2D31600A2D2052656C65617365207461673A205B60636861696E2F706561726C605D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F72656C65617365732F7461672F636861696E2F706561726C290A2D2038352063757261746564207061636B616765732061742067656E657369730A2D203320666F756E64696E672076616C696461746F72732077697468205B6F70657261746F72206B657965642076616C6F7065722070726F66696C65735D2868747470733A2F2F676E6F70732E696F2F61727469636C65732F6775696465732F6265636F6D652D746573746E65742D76616C696461746F722F292C205B6E616D65737061636520656E666F7263656D656E74202860722F7379732F6E616D657360295D2868747470733A2F2F676E6F2E6C616E642F722F7379732F6E616D657329206C6976652066726F6D20626C6F636B20310A2D2033207072652D66756E64656420666175636574206163636F756E74730A2D2050726F746F636F6C2D6C6576656C2074657374207472616E736665727320656E61626C65640A2D2047656E65736973206275696C742066726F6D20746865207265706F2773205B606578616D706C65732F605D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F747265652F6D61737465722F6578616D706C657329207472656520696E2061626F75742061206D696E7574652C20626F6F74696E6720696E207365636F6E64730A2D20436F646520626173656C696E653A206D6173746572205B60633034663837393364605D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F636F6D6D69742F63303466383739336461636433663334306132646461333737363334306362363262306565616131292C20323520636F6D6D697473206168656164206F66205361707068697265277320626173656C696E650A2D2054617267657420636F6D6D69743A205B60633463373266646432605D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F636F6D6D69742F63346337326664643238386337353765386461306439336161653836376661343739623162313563290A2D2046756C6C2072656C6561736520636F6D70617269736F6E3A205B6073617070686972652E2E2E706561726C605D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F636F6D706172652F746167732F636861696E2F73617070686972652E2E2E746167732F636861696E2F706561726C290A2D2052656C656173652063616E6469646174652050523A205B23363039315D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F36303931290A0A417420332076616C696461746F727320776569676874656420363020706F77657220656163682C206F6E652076616C696461746F7220676F696E67206F66666C696E6520736974732065786163746C7920617420746865206F6E652D74686972642068616C7420626F756E646172792E205468697320686173206265656E20616363657074656420666F72206C61756E636820616E642077696C6C20626520616464726573736564206173206164646974696F6E616C2076616C696461746F7220706172746E657273206A6F696E2E0A0A232320576861742773204E657720696E20506561726C3F0A0A54686520686561646C696E65206164646974696F6E20696E20746869732072656C65617365206973202A2A67656E657369732076657374696E67206163636F756E74732A2A2E205468652067656E65736973206275696C646572206E6F7720737570706F727473206120636F6E666967757261626C65206C697374206F6620766573746564206163636F756E74732C20776865726520636F6E74696E756F7573207363686564756C657320756E6C6F636B206C696E6561726C7920616E642064656C61796564207363686564756C657320756E6C6F636B206173206120636C6966662E204D616C666F726D656420656E74726965732C206475706C6963617465206163636F756E74732C20616E6420696E76616C6964207363686564756C65732061726520616C6C2063617567687420616E642072656A6563746564206265666F726520616E79206E6F64652072756E732C20616E642076657374696E67206163636F756E74206372656174696F6E206973206E6F7720657865726369736564206F6E206576657279206275696C642E20506561726C20736869707320776974682074656E207665737465642074657374206163636F756E747320636F766572696E67207468652066756C6C207363686564756C65206D61747269782C20696E636C7564696E67206163636F756E747320616C72656164792066756C6C79207665737465642061742067656E657369732C207365766572616C206C696E65617220756E6C6F636B2077696E646F77732C20636C696666207363686564756C65732C20612066757475726520737461727420646174652C20616E64206F6E65207363686564756C65207374726164646C696E672067656E6573697320697473656C662E0A0A232320427265616B696E67202F20436F6E73656E7375732052656C6576616E7420557064617465730A0A2D20496E6572742D7061636B61676520666C6F7720636F6D706C657465642C20696E636C7564696E67206120604D736752756E6020616C6C6F776C69737420616E642064656C65676174656420706172616D7320285B23363038385D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F36303838292C205B23363039335D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3630393329290A2D20604164645061636B61676560206E6F77207479706520636865636B732070726F64756374696F6E2066696C6573206F6E6C792C207768696C6520746573742066696C6573206172652073746F72656420616E642073796E7461782070617273656420285B23363032355D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3630323529290A2D20546872656520736570617261746520636173657320776865726520636F696E7320636F756C64206265206C6F7374206F72206F7665722D617574686F72697A65642061726F756E64207468652073656E6420656E76656C6F70652061726520666978656420285B23363036325D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3630363229290A2D20476F7644414F20616C6C6F776C697374206C6F636B646F776E2C2070726F706F73616C2070616765206573636170696E672C20616E64206578656375746F7220646973636C6F7375726520285B23363036385D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3630363829290A2D205065722D66696C6520476F2076657273696F6E206E6F772070696E6E656420696E2074686520636F6E73656E73757320747970652D636865636B20285B23353937385D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3539373829290A0A232320564D20436F72726563746E6573730A0A2D20547970652D7377697463682077697468206120736F6C65206063617365206E696C3A6020666978656420285B23353736365D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3537363629290A2D20436C617573652D6C6F63616C206E616D6573206F6E207377697463682066616C6C7468726F75676820285B23363035365D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3630353629290A2D2060676F746F60206F7574206F66206E6573746564206C6F6F707320285B23353936335D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3539363329290A2D204D617020636F6D706F736974652D6C69746572616C206B65797320696E7369646520666F72206C6F6F707320285B23363033375D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3630333729290A2D2060436F6D707574654D61704B657960206E6F77206D657465726564206F6E20746865207265616C6D2D726573746F7265207061746820285B23353731305D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3537313029290A2D20556E737570706F727465642074696C6465206F70657261746F72206E6F772072656A65637465642061742070617273652074696D6520285B23363035375D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3630353729290A0A232320506572666F726D616E63650A0A2D2053697A652D617761726520656E636F64652C206465636F64652C20616E642072656E64657220706174687320285B636F6D6D69742060616364303166613239605D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F636F6D6D69742F61636430316661323929290A2D2052756E74696D6520626C6F636B732072656379636C6564207468726F756768206120706572206D616368696E6520706F6F6C20285B23353831335D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3538313329290A2D2056657374696769616C206044656665722E506172656E74602064726F7070656420285B23353835365D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3538353629290A0A2323204E65772046656174757265730A0A2D20606772633732316020636F72652072657772697474656E206F6E207468652060546F6B656E602F60507269766174654C6564676572602F6054656C6C65726020617869732C207769746820737461636B61626C65206D657461646174612C20726F79616C74792C20616E6420656E756D657261626C6520657874656E73696F6E7320285B23363037325D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F36303732292C205B23363037335D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3630373329290A2D20476E6F564D20636861696E20706172616D73207265616465722041504920285B23363039345D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3630393429290A2D207032703A2060636F6E6669672E5032502E53656564736020776972656420696E746F207468652073776974636820285B23363032335D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3630323329292C20706C75732061206469616C206C6F6F70206261636B6F66662066697820285B23363035345D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3630353429290A2D204E6577206175646974207061747465726E206861726E65737320776974682065786563757461626C65207365637572697479207061747465726E20666978747572657320285B23353833355D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F70756C6C2F3538333529290A0A23232047656E65736973202B2042696E61726965730A0A2D205B6067656E657369732E6A736F6E605D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F72656C65617365732F646F776E6C6F61642F636861696E2F706561726C2F67656E657369732E6A736F6E2920E28094207665726966792077697468206073686132353673756D60206265666F7265207573653A0A0A20206060600A202063343566653630633863386131663835396439653464356161643763653464313030666630656237383330326537313331386261306465343831613864633931202067656E657369732E6A736F6E0A20206060600A0A2D205072656275696C742060676E6F602C2060676E6F6B6579602C2060676E6F6C616E64602C20616E642060676E6F776562602062696E617269657320666F72206064617277696E602F606C696E75786020C3972060616D643634602F6061726D3634602C207769746820612060434845434B53554D532E7478746020636F766572696E672065766572792061737365740A2D20446F20796F752077616E7420746F20726567656E65726174652067656E65736973206F72206A6F696E20617320612076616C696461746F723F2053656520746865205B506561726C206465706C6F796D656E7420646F63735D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F747265652F636861696E2F706561726C2F6D6973632F6465706C6F796D656E74732F706561726C2E676E6F2E6C616E64290A0A23232056616C696461746F72730A0A506C6561736520726566657220746F20746865205B506561726C2076616C696461746F722067756964655D2868747470733A2F2F6769746875622E636F6D2F676E6F6C616E672F676E6F2F626C6F622F636861696E2F706561726C2F6D6973632F6465706C6F796D656E74732F706561726C2E676E6F2E6C616E642F56414C494441544F522E6D642920746F206A6F696E20617320612076616C696461746F722E204675727468657220616E6E6F756E63656D656E74732077696C6C206265206D61646520696E20746865205B746573746E657420616E6E6F756E63656D656E7473206368616E6E656C5D2868747470733A2F2F646973636F72642E67672F34644154384B62745529206F6E20446973636F72642E0A0A2D2D2D0A0A232323204C696E6B730A2D20476E6F7765623A2068747470733A2F2F706561726C2E746573746E6574732E676E6F2E6C616E640A2D204661756365743A2068747470733A2F2F6661756365742E676E6F2E6C616E642F0A2D205250433A2068747470733A2F2F7270632E706561726C2E746573746E6574732E676E6F2E6C616E640A2D20476E6F636B7069743A2068747470733A2F2F676E6F636B7069742E706561726C2E746573746E6574732E676E6F2E6C616E640A2D205374617475733A2068747470733A2F2F7374617475732E706561726C2E746573746E6574732E676E6F2E6C616E640A2D2054782D696E64657865723A2068747470733A2F2F696E64657865722E706561726C2E746573746E6574732E676E6F2E6C616E642F6772617068716C0A0A2D2D2D0A0A23232320446973636C61696D65720A0A546F6B656E73206F6E20506561726C20746573746E65742068617665206E6F207265616C20776F726C642076616C75652C20616E642070617274696369706174696F6E20697320666F722074657374696E6720707572706F736573206F6E6C792E0A3214323032362D30382D32375431323A30303A30305A32097279616E6C65653139322E676E6F6C616E642C65636F73797374656D2C757064617465732C706561726C2C636F6D6D756E6974792C626C6F67121308A6A4BCCF03120B34383539383575676E6F741A7E0A3A0A132F746D2E5075624B6579536563703235366B3112230A210200524A3F8D2C003A89C43F45FEAF6EB8ED45B6E3A35F7BBE6B3B49FF9E2D83C812402A27F12AD489D409E1E5ACE1621333D9DA2DCF118FA9A2708D69E09D9D25B1C71DC17490DE2382CD4A8F6A232D95A9949ADBC28554ACA9CCC99FC18FC759F86C2217506F737465642066726F6D20676E6F626C6F672D636C69}
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "intro",
    "Intro to Gnoland - The Smart Contract Platform to Improve Our Understanding of the World",
    "\n\n_Welcome to Gno.land. This is the official site to learn about the Gnolang (Gno) programming language and the Gno.land smart contract platform, as well as understand the motivations behind Gno and our core values and mission. We’re starting a series of blog posts and holding regular community calls and AMAs so that you can stay up to date with upcoming developments and dive deeper into the Gno World Order. Stay tuned._\n\n## What Is Gno.land?\n\nGno.land (pronounced no-land) is a layer 1 smart contract platform invented by Jae Kwon, co-founder of Cosmos and Tendermint, to address multiple issues in the blockchain space — in particular, the ease of use and intuitiveness of smart contract programming platforms. Beyond offering succinctness, composability, expressivity, and completeness not found in any other smart contract platform, we aim to challenge the regime of information censorship that we find ourselves living in today.\n\nBy using the programming language Gnolang (Gno), an interpreted version of the widely-used Golang (Go) language, using a state-of-the-art VM written in Go, we want to lower the barrier to entry to web3 and make it simple for developers (particularly existing web2 developers) to write smart contracts and other blockchain applications without having to learn a programming language that is limited by design or exclusive to a single blockchain ecosystem.\n\n### Gnolang (Gno) Is Essential to Broader Adoption of Web3\n\nFor web3 to grow in a sustainable way, we need technological solutions that are designed for the blockchain with programming languages that are universally adopted, secure, composable, and complete. The main programming language currently used for creating smart contracts, Solidity, is designed for one purpose only (writing smart contracts) and lacks the completeness of a general-purpose language.\n\nSolidity removes many of the complexities that blockchain programming requires (such as memory management, ensuring that the code is deterministic, and understanding how the entire tech stack is implemented) allowing developers to quickly build succinct smart contracts. However, Solidity is only used for smart contracts on EVM-compatible blockchains (like Ethereum, Polygon, or EVMOS) and its design is limited by the limitations of the EVM. In addition, developers have to learn several languages if they want to understand the whole stack or work across different ecosystems.\n\nGo, on the other hand, is a well-designed complete programming language with its foundation based on composable structures, designed by the creators of Plan 9. This allows developers to rapidly accelerate application development and adopt a modular structure by reusing and reassembling existing modules without building from scratch. They can embed one structure inside another in an intuitive way while preserving localism, and the language specification is simple, successfully balancing practicality and minimalism.\n\nGo is widely used, especially among existing web2 developers. It’s easier to learn and can be used to program almost anything, such as GoEthereum or Tendermint. Every part of the Gno.land stack is written in Go so that one person can understand the entire system just by studying a relatively small code base. The Go language is so well designed that the Gnolang smart contract system will become the new gold standard for smart contract development and other blockchain (and even non-blockchain) applications.\n\n### Security Is a Built-in Feature of Go (Golang)\n\nBeyond object embedding, closures, importing of modules, composability of programs, and interfaces that allow you to implement a specific set of functions, Go supports secure programming through exported/non-exported fields, enabling “least-authority” design. It is easy to create objects and APIs that expose only what should be accessible to callers while hiding what should not be simply by the capitalization of letters, thus allowing a succinct representation of secure logic that can be called by multiple users.\n\nAnother major advantage of Go is that the language comes with an ecosystem of great tooling, like the compiler and third-party tools that statically analyze code. Gno inherits these advantages from Go directly to create a smart contract programming language that is safe and helps developers to write secure code relying on the compiler, parser, and interpreter to give warning alerts for common mistakes.\n\n### How Gnolang (Gno) Differs from Golang (Go)\n\n[![Go and Gno](https://gnolang.github.io/blog/2022-11-21_intro/src/thumbs/go-and-gno.png)](https://gnolang.github.io/blog/2022-11-21_intro/src/go-and-gno.png)\n\n_Image 1: Gnolang - Like Go but specific to the blockchain_\n\nGno is around 99% identical to Go and most people can code in Gno from day one, even minute one. The Gno.land programming environment comes with blockchain-specific standard libraries, but any code that doesn’t use the blockchain-specific logic can run in Go with minimal processing. On the other hand, some libraries that don’t make sense in the blockchain context are not available in the Gno.land programming environment, such as network or operating-system access.\n\nOtherwise, Gno loads and uses many standard libraries that power Go, so most of the parsing of the source code is the same. Under the hood, the Gno code is parsed into an abstract syntax tree (AST) and the AST itself is used in the interpreter, rather than byte code as in many virtual machines such as Java, Python, or WASM. This makes even the Gno VM accessible to any Go programmer. The novel design of the Gno VM interpreter allows  Gno to freeze and resume the program by persisting and loading the entire memory state. This allows (smart contract) programs to be succinct, as the programmer doesn’t have to serialize and deserialize objects to persist them into a database (unlike programming applications with the Cosmos SDK).\n\nThe composable nature of Go/Gno allows for type-checked interactions between contracts, making Gno.land safer and more powerful, as well as operationally cheaper and faster. Smart contracts on Gno.land will be light, simple, more focused, and easily interoperable — a network of interconnected contracts rather than siloed monoliths that limit interactions with other contracts.\n\n[![Gnolang code example](https://gnolang.github.io/blog/2022-11-21_intro/src/thumbs/code-example.jpg)](https://gnolang.github.io/blog/2022-11-21_intro/src/code-example.jpg)\n\n_Image 2: Code snippet from the Gno programming language_\n\nToday, Gno.land is the only blockchain instance in the world that supports Gno but tomorrow, there will be many chains with different names such as mydapp.zone, or mydao.xyz. Gno.land is the name of ONE chain and is not a name that will be used by other Gnolang-powered chains. Gno.land will remain a minimal hub with three main utilities:\n\n* Managing cross-Gnolang-chain fees/licenses\n* To be the (or an) official home for the best smart contracts\n* To provide new models of governance (w/ DAO modules)\n\n### Earning Rewards Through Proof-of-Contribution (PoC)\n\nThere are four main ways to earn rewards through PoC on the Gno.land chain:\n\n* Pre-defined tasks (technical or otherwise)\n* Pre-defined bounties\n* Retroactive bounties\n* Vesting-style rewards for core members\n\nBounties rewards (both pre-defined and retroactive) will be decided with “local rules,” through the agreement of the DAO with everything on-chain and transparent. If one human were to abuse the system, it would trigger and the bad actor would be slashed. We’ll go into depth on how you can earn rewards in an upcoming post.\n\n### Durable Solutions to Improve Our Understanding of the World\n\nOne of our inspirations for the Gno.land project is the gospels, which built a system of moral code that lasted for thousands of years. Part of Gno.land’s endurance will be having a minimal production implementation that becomes a reference for other implementations and a basis for education to elevate people's understanding of blockchains.\n\nGno.land aims to appeal to web developers, dApp developers, and blockchain builders to create solutions that help people improve their understanding of the world. With the barrage of misinformation delivered today from various factions, it’s impossible to separate the real from the fake. This causes a state of gridlock. We are living in a regime of information censorship spanning all important topics from climate change to global pandemics — a vast coordinated effort to prevent people from understanding the truth.\n\nBy just browsing Reddit, searching with Google, and scrolling through Facebook, Twitter, or Instagram, people are deliberately being [misled](https://twitter.com/lhfang/status/1587095890983936000) about key global issues that we all deserve clarity on. This is as malevolent as any type of censorship regime in the world — and we need to come together to challenge it and break the wall of censorship to achieve a functional democracy at last.\n\n### Gno.land’s Current Phase of Development\n\nGno.land is currently running in its third testnet and there will be several more testnets before the platform is production ready. Modern civilization wasn’t built in a day, and neither will Gno.land rush into committing to an exact launch date. However, the next development, an incentivized testnet called ‘Game of Realms’, is scheduled for Q1 2023.\n\nGame of Realms will be similar to ‘Game of Stakes’ on the Cosmos Hub and will reward the earliest and best contributors. If you would like to find out more about Game of Realms, Gno.land, Gnolang, or anything else,  join us for our first community call with Gno.land Founder, Jae Kwon on November 22nd, at 4pm UTC on our [Discord channel](https://discord.gg/YFtMjWwUN7). We look forward to seeing you.\n",
    "2022-11-21T17:13:00Z",
    "christina,jae,manfred",
    "gnoland,gnosh,gnot,permissionless,consensus,proof-of-contribution,dao,governance,ibc,democracy,freedom"
  ],
  "max_deposit": ""
}
#1 vm/execgno.land/r/gnoland/blog.ModAddPost(tech-ama1, Gno.land Community Technical AMA #1 - Recap, Your questions, observations, and feedback are vital to our core development team. Not only do they give us an understanding of the types of applications and features the community would like to see but they help us formulate better ideas for developing Gno.land as we go. Before we dive into our second **Discord AMA on November 22nd @4pm UTC**, check out the community questions from our first technical AMA below answered by core Gno.land devs Jae Kwon and Manfred Touron. ### Why did you choose Golang over Rust? **Jae**: “With parallelism offered by ICS1 [Interchain Security 1], the bottleneck becomes speed of innovation with safe code, rather than bare metal performance. So here, garbage collection, concurrency, embeddable structures, and clear spec are good primitives for the next-generation smart contract language. Rust (or components of Rust** may be used to implement faster clients for gno.land in the future, but in terms of mindshare, I don't think Rust can flip Go due to its design choices. That's not to say that Rust is any worse than Go; they are different.” ### Will Gno be its own hub? Will Gno provide ICS-like security to its own community? **Jae**: “Gno.land can be a "hub," like "git hub" is a "hub," but that doesn't mean it will offer ICS. If other chains solve ICS1 better, it makes sense for gno.land to be IBC-connected to zones that are not ICS1 replicated/secured with gno.land validators. If we consider that validators of gno.land are better as contributors to the gno.land ecosystem (rather than general validator service providers** we may be more comfortable contributing to an awesome ecosystem but not entering the validator-as-a-service business. It makes more sense to me that Cosmos Hub validators should own that business, which will eventually require validators to run their own server stacks and have data center infrastructure.” ### How can one become a validator? **Jae**: “First, one has to become a member. We have not yet defined the full member system, but we will figure that out along the way. For now, we can say that we want first and foremost members who also validate, rather than impartial validators that only validate.” ### How does Gno validate work? PoS? Proof of Contribution? **Manfred**: “The contributors DAO will elect validators and validators will have the same amount of power. They'll be focused on validating and will receive rewards for that job.” ### What is Proof of Contribution? What kind of contribution will be credited? **Manfred**: “Proof-of-Contribution is a way to replace Proof-of-Stake with a metric based on the contributions. It's a variation of Proof-of-Authority where the authority is a DAO of contributors. After the 'Game of Realms** competition, we'll reward the best contributors with a tiered membership in the first version of Proof-of-Contributions DAO. The voting power and everything related to staking will be distributed across the contributors. Later, we'll add more flexibility to the membership with $GNOSH, allowing more accurate and fair rewards. Validators won't receive voting power with staking. The DAO will elect them, and they will all receive the same amount of power. Validators will receive rewards for their technical work, not for the amount of staked tokens they are bound to.” ### Is there a document or resource that describes the key concepts in a Gno smart contract? **Manfred**: “We have yet to get a single top-level documentation, sorry. You can find documentation in the code, README files, issues, etc. We need to improve this. The community will be able to work on this during Game of Realms.” ### Is there a big-picture diagram of the ecosystem? **Jae**: cosmos hub <-- "ec2+DTCC" gno.land <-- "github for gno" (cosmos hub etc) ICS zones <-- "holy grail" scalable smart contracts your chain <-- "gno inside" your app <-- "import gno.land/..." blockchain-based communications/coordination/discourse platform <-- us // DTCC: "https://www.investopedia.com/terms/d/dtcc.asp" // my point is, be a good reliable token hub with good governance.” ### I'm a developer (PHP, Python**. How can I become a Gno developer? Please advise me on where to start. **Manfred**: “Start learning Go! One of the long-term goals of Gno is to make writing contracts as easy as writing web2 apps. The language is already strong in that direction, but we still need to catch tooling, documentation, tutorials, and language improvements. You need to have a good level with Golang and be autonomous to start building on Gno. One of the Game of Realms tracks will be to work on everything related to onboarding more people. This will be the best place to write specific tutorials to onboard people from other ecosystems or languages.” What are Realms, and what is r board? **Jae**: “A realm is a Gno package with state, that represents a smart contract with storage and coins. The other Gno packages don't have state, and so are "pure" packages that can be imported from other realm or non-realm packages. Like land-tax, realms must be whitelisted or pay storage upkeep for their state. You can create new realms by uploading a new package with the package directory starting with /r/REALM/NAME. /r/demo/boards is a Gno package that renders a message board. It is a proof of concept message board written in Gno. Since we need to preserve messages, it is a stateful (realm** package. You can see the files of the demo boards, like: https://test3.gno.land/r/demo/boards/board.gno ### How do external packages get imported? **Manfred**: “Example: when you call your smart contract from Go during testing, how can/should that smart contract load external packages? A gnolang can only import other gnolang contracts/libraries that were published on-chain. If you want to import an external Golang library, you need to port it to Gno, and publish it as a library, then you can import it from a top-level contract. gnodev test is an exception, it basically creates an in-memory Gnolang VM, publishes the dependencies (automatically detected**, and executes the test. The tool can act differently from the real on-chain experience. Note that we'll improve the gnodev so it can automatically download on-chain contracts or use custom local paths, to support advanced development workflows.” ### What is a Gnode? **Jae**: “I don't like the name "Gnode" because it's too generic, but the idea is to build Gno-based building blocks for GnoDAOs, as MyGnode embeds components (of owners, treasury, board, etc.** here: https://github.com/gnolang/gno/commit/b9128b1d69f02dbb49be883e0c70fe9d3fc40dcc **Manfred**: “We can change the name 🙂. A Gnode is a DAO implementation that implements an interface allowing them to interact. A Gnode can have a parent and have children. Top-down interactions may be funding, grants, and approvals. Bottom-up interactions may be reporting or voting. The implementation is flexible. You can have DAOs managing a Gnode, its treasury, and voting the cross-Gnode interactions. You can have Gnodes with an elected leader or one driven by a bot or another blockchain. One of the goals of Game of Realms will be to propose various implementations of Gnodes. At the level of Gnoland, we will probably have a top-level Gnoland Gnode managing a global treasury and vision. Then various technical and non-technical child Gnodes manage subsets of the treasury and their tasks. They may also have children. With IBC2, Gnodes could be distributed across different chains.” ### What is the timeline for IBC2? **Jae**: “After the launch of gno.land, IBC2 is permissionless innovation anyone can try for, so I imagine not long after that. After initial implementations, I bet we will want to tweak/optimize the Merkle tree further, but this can come after IBC2 demos.” ### Can you tell us more about Game of Realms? **Manfred**: “Game of Realms is a competition to build the first contracts of Gnoland and experiment with proof of contributions. The first step of the competition will be to build the missing tools for the second step. So people will compete to write the DAO that will review the other contributions and allocate points. The rest of the competition will be about competing to write the best contracts for well-known categories or make non-technical contributions. At the end, we'll have strong foundations (libraries, rules, tutorials, dApps** to help upcoming builders to start in better conditions. The best contributors will earn rewards and membership in the future DAO of contributors that will co-own the chain. We'll have the first version of a Proof-of-Contributions-based DAO of contributors. Focus on one of the official tracks: build a contract suite to compete with Cosmos' governance module to eventually complete Cosmos Hub governance. Realm boards are basic discussion contracts that can be used for discussions, and be extended for governance, launchpad, or other things mixing discussions and DAO actions.” ### Is it possible to build code with gno.land directly online? **Jae**: “We will make the sandbox staging.gno.land environment easy to access, and that will be preferable to testing on gno.land directly. The gno codebase tries to remain minimal so it shouldn't be difficult to run it locally.” **Manfred**: “I've seen people writing contracts from VSCode on an online VSCode instance. Someone could create a VSCode template configured to communicate with staging by default with a dummy wallet containing tokens.” ### Is there a plan to be able to use the Gno VM with a Cosmos SDK-based chain? **Manfred**: “This is one of the plans, yes. And not only on Cosmos SDK. But we don't have a clear plan about how it will happen yet.” ### How about interoperability? **Jae**: “Regarding interoperability, will it be between Gno chains, with Cosmos, or with more chains outside of Cosmos? If it is with chains outside of Cosmos, which ones, in the short and long term? I think if the latter were to come to pass, the world of web3 and NFT could be awesome. Short run, Cosmos SDK-based chains with IBC1 for code import and cross-chain smart contract calls; but with IBC2/Gno it's really up to the smart contract logic.” ### Are Gno.land tokenomics deflationary? **Jae**: “There will be $GNOT, and this token will be used for spam prevention fee payment, and it will be deflationary. Previously, we discussed $GNOSH as a secondary token, but we have moved away from the $GNOT/$GNOSH model and will keep $GNOT while making gno.land more about membership among levels of peers. I think we need an alternative to the Cosmos Hub that is more people-centric than stake-centric, and where alignment is not bought or sold but depends on contributions and value alignment proven over time. The hope is that by moving away from a pure tokenomics perspective and moving into the realm of politics and ethics along with general economics we can curate a different kind of culture.” ### Are there any collaborations with other projects to build on Gno? **Jae**: “Yes, why don't we make this truly open, in the style of free software, so that we can build upon a common VM design? The only thing I want to retain control over for a temporary duration of time is the regulation of trademarks, like "gno", "gno**", "*gno" (but you can use the license to fork this project however you want); and we want proper attribution, but the AGPL fork license suggests how we can work together collaboratively. The GNO VM can be used on any chain if it follows the AGPL style license, which we are calling the "Gno GPL". Blockchains can still be composed of components licensed with compatible open source software. We can collaborate indirectly by working and contributing to the same codebase, and know that the code we are building together will always be available for you to use for your chain, as long as it remains and is offered as GNO free software. So anyone can build GNO smart contracts into their chain for free, according to the license we are deriving from the GNU (not GNO** AGPL license. You don't have to pay gno.land or anyone if the license is followed. Example: we will collaborate with the Cosmos Hub and Cosmos/ATOM community to offer gno DAOs to be hosted by ICS1, and help bring collaboration tools for Cosmos. So this is how gno works with Cosmos Hub assuming ICS1 is solved. As for gno.land, we can start off with an independent gno instance for the Cosmos Hub's gno shards, and later allow the IBC importing of vetted code from gno.land/*.” ### Apart from Adena, are there any plans for another wallet? Jae: “I think what we need are a few competing base implementations that best leverage the framework they build upon, rather react or minimal vue; and to create common core libraries along the way if reasonable. But there ought to be more than one approach for such a key component, with special care taken into consideration for security. Like, I don't agree with Keplr asking so easily for a 12/24-word mnemonic, even if the implementation is secure, it is going to become a problem. PSA btw.” ### Wen mainnet? **Jae**: “Some time by Q2 next year would be good. But as policy, we can't commit to a date, because everything has to be ready first before the official launch. Our thesis is that having the DAO with sub-DAOs will allow us to reach the end result in a faster way via some form of parallelism. First, we need DAOs to assess new code, and better UX for managing something like upgrades to the Cosmos Hub. Once we have the DAO running on testx.gno.land, for some x > 4, and we have checked all vital TODOs, we will know that we are ready for "mainnet." _Do you have more questions for Manfred or Jae? Would you like to know more about Gno.land, Gnolang, Game of Realms, or ways to contribute to our growing ecosystem? Drop us a question on Discord and be sure to join us for our second **AMA on December 6th @4pm UTC.**_ , 2022-12-05T16:15:00Z, manfred,jae, gnoland,gnosh,gnot,permissionless,consensus,proof-of-contribution,dao,governance,ibc,democracy,freedom)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "tech-ama1",
    "Gno.land Community Technical AMA #1 - Recap",
    "\n\nYour questions, observations, and feedback are vital to our core development team. Not only do they give us an understanding of the types of applications and features the community would like to see but they help us formulate better ideas for developing Gno.land as we go. Before we dive into our second **Discord AMA on November 22nd @4pm UTC**, check out the community questions from our first technical AMA below answered by core Gno.land devs Jae Kwon and Manfred Touron.\n\n### Why did you choose Golang over Rust?\n\n**Jae**: “With parallelism offered by ICS1 [Interchain Security 1], the bottleneck becomes speed of innovation with safe code, rather than bare metal performance. So here, garbage collection, concurrency, embeddable structures, and clear spec are good primitives for the next-generation smart contract language.\n\nRust (or components of Rust** may be used to implement faster clients for gno.land in the future, but in terms of mindshare, I don't think Rust can flip Go due to its design choices. That's not to say that Rust is any worse than Go; they are different.”\n\n### Will Gno be its own hub? Will Gno provide ICS-like security to its own community?\n\n**Jae**: “Gno.land can be a \"hub,\" like \"git hub\" is a \"hub,\" but that doesn't mean it will offer ICS. If other chains solve ICS1 better, it makes sense for gno.land to be IBC-connected to zones that are not ICS1 replicated/secured with gno.land validators.\n\nIf we consider that validators of gno.land are better as contributors to the gno.land ecosystem (rather than general validator service providers** we may be more comfortable contributing to an awesome ecosystem but not entering the validator-as-a-service business.\n\nIt makes more sense to me that Cosmos Hub validators should own that business, which will eventually require validators to run their own server stacks and have data center infrastructure.”\n\n### How can one become a validator?\n\n**Jae**: “First, one has to become a member. We have not yet defined the full member system, but we will figure that out along the way. For now, we can say that we want first and foremost members who also validate, rather than impartial validators that only validate.”\n\n### How does Gno validate work? PoS? Proof of Contribution?\n\n**Manfred**: “The contributors DAO will elect validators and validators will have the same amount of power. They'll be focused on validating and will receive rewards for that job.”\n\n### What is Proof of Contribution? What kind of contribution will be credited?\n\n**Manfred**: “Proof-of-Contribution is a way to replace Proof-of-Stake with a metric based on the contributions. It's a variation of Proof-of-Authority where the authority is a DAO of contributors. After the 'Game of Realms** competition, we'll reward the best contributors with a tiered membership in the first version of Proof-of-Contributions DAO. The voting power and everything related to staking will be distributed across the contributors.\n\nLater, we'll add more flexibility to the membership with $GNOSH, allowing more accurate and fair rewards. Validators won't receive voting power with staking. The DAO will elect them, and they will all receive the same amount of power. Validators will receive rewards for their technical work, not for the amount of staked tokens they are bound to.”\n\n### Is there a document or resource that describes the key concepts in a Gno smart contract?\n\n**Manfred**: “We have yet to get a single top-level documentation, sorry. You can find documentation in the code, README files, issues, etc. We need to improve this. The community will be able to work on this during Game of Realms.”\n\n### Is there a big-picture diagram of the ecosystem?\n\n**Jae**: cosmos hub <-- \"ec2+DTCC\"\ngno.land <-- \"github for gno\"\n(cosmos hub etc) ICS zones <-- \"holy grail\" scalable smart contracts\nyour chain <-- \"gno inside\"\nyour app <-- \"import gno.land/...\"\nblockchain-based communications/coordination/discourse platform <-- us\n// DTCC: \"https://www.investopedia.com/terms/d/dtcc.asp\" // my point is, be a good reliable token hub with good governance.”\n\n### I'm a developer (PHP, Python**. How can I become a Gno developer? Please advise me on where to start.\n\n**Manfred**: “Start learning Go! One of the long-term goals of Gno is to make writing contracts as easy as writing web2 apps. The language is already strong in that direction, but we still need to catch tooling, documentation, tutorials, and language improvements. You need to have a good level with Golang and be autonomous to start building on Gno.\n\nOne of the Game of Realms tracks will be to work on everything related to onboarding more people. This will be the best place to write specific tutorials to onboard people from other ecosystems or languages.”\n\nWhat are Realms, and what is r board?\n\n**Jae**: “A realm is a Gno package with state, that represents a smart contract with storage and coins. The other Gno packages don't have state, and so are \"pure\" packages that can be imported from other realm or non-realm packages. Like land-tax, realms must be whitelisted or pay storage upkeep for their state. You can create new realms by uploading a new package with the package directory starting with /r/REALM/NAME.\n\n/r/demo/boards is a Gno package that renders a message board. It is a proof of concept message board written in Gno. Since we need to preserve messages, it is a stateful (realm** package. You can see the files of the demo boards, like:\n\nhttps://test3.gno.land/r/demo/boards/board.gno\n\n### How do external packages get imported?\n\n**Manfred**: “Example: when you call your smart contract from Go during testing, how can/should that smart contract load external packages?\n\nA gnolang can only import other gnolang contracts/libraries that were published on-chain. If you want to import an external Golang library, you need to port it to Gno, and publish it as a library, then you can import it from a top-level contract.\n\ngnodev test is an exception, it basically creates an in-memory Gnolang VM, publishes the dependencies (automatically detected**, and executes the test. The tool can act differently from the real on-chain experience. Note that we'll improve the gnodev so it can automatically download on-chain contracts or use custom local paths, to support advanced development workflows.”\n\n### What is a Gnode?\n\n**Jae**: “I don't like the name \"Gnode\" because it's too generic, but the idea is to build Gno-based building blocks for GnoDAOs, as MyGnode embeds components (of owners, treasury, board, etc.** here:\n\nhttps://github.com/gnolang/gno/commit/b9128b1d69f02dbb49be883e0c70fe9d3fc40dcc\n\n**Manfred**: “We can change the name 🙂. A Gnode is a DAO implementation that implements an interface allowing them to interact. A Gnode can have a parent and have children. Top-down interactions may be funding, grants, and approvals. Bottom-up interactions may be reporting or voting. The implementation is flexible. You can have DAOs managing a Gnode, its treasury, and voting the cross-Gnode interactions. You can have Gnodes with an elected leader or one driven by a bot or another blockchain. One of the goals of Game of Realms will be to propose various implementations of Gnodes.\n\nAt the level of Gnoland, we will probably have a top-level Gnoland Gnode managing a global treasury and vision. Then various technical and non-technical child Gnodes manage subsets of the treasury and their tasks. They may also have children. With IBC2, Gnodes could be distributed across different chains.”\n\n### What is the timeline for IBC2?\n\n**Jae**: “After the launch of gno.land, IBC2 is permissionless innovation anyone can try for, so I imagine not long after that. After initial implementations, I bet we will want to tweak/optimize the Merkle tree further, but this can come after IBC2 demos.”\n\n### Can you tell us more about Game of Realms?\n\n**Manfred**: “Game of Realms is a competition to build the first contracts of Gnoland and experiment with proof of contributions. The first step of the competition will be to build the missing tools for the second step. So people will compete to write the DAO that will review the other contributions and allocate points.\n\nThe rest of the competition will be about competing to write the best contracts for well-known categories or make non-technical contributions. At the end, we'll have strong foundations (libraries, rules, tutorials, dApps** to help upcoming builders to start in better conditions. The best contributors will earn rewards and membership in the future DAO of contributors that will co-own the chain.\n\nWe'll have the first version of a Proof-of-Contributions-based DAO of contributors. Focus on one of the official tracks: build a contract suite to compete with Cosmos' governance module to eventually complete Cosmos Hub governance. Realm boards are basic discussion contracts that can be used for discussions, and be extended for governance, launchpad, or other things mixing discussions and DAO actions.”\n\n### Is it possible to build code with gno.land directly online?\n\n**Jae**: “We will make the sandbox staging.gno.land environment easy to access, and that will be preferable to testing on gno.land directly. The gno codebase tries to remain minimal so it shouldn't be difficult to run it locally.”\n\n**Manfred**: “I've seen people writing contracts from VSCode on an online VSCode instance. Someone could create a VSCode template configured to communicate with staging by default with a dummy wallet containing tokens.”\n\n### Is there a plan to be able to use the Gno VM with a Cosmos SDK-based chain?\n\n**Manfred**: “This is one of the plans, yes. And not only on Cosmos SDK. But we don't have a clear plan about how it will happen yet.”\n\n### How about interoperability?\n\n**Jae**: “Regarding interoperability, will it be between Gno chains, with Cosmos, or with more chains outside of Cosmos? If it is with chains outside of Cosmos, which ones, in the short and long term? I think if the latter were to come to pass, the world of web3 and NFT could be awesome. Short run, Cosmos SDK-based chains with IBC1 for code import and cross-chain smart contract calls; but with IBC2/Gno it's really up to the smart contract logic.”\n\n### Are Gno.land tokenomics deflationary?\n\n**Jae**: “There will be $GNOT, and this token will be used for spam prevention fee payment, and it will be deflationary. Previously, we discussed $GNOSH as a secondary token, but we have moved away from the $GNOT/$GNOSH model and will keep $GNOT while making gno.land more about membership among levels of peers.\n\nI think we need an alternative to the Cosmos Hub that is more people-centric than stake-centric, and where alignment is not bought or sold but depends on contributions and value alignment proven over time. The hope is that by moving away from a pure tokenomics perspective and moving into the realm of politics and ethics along with general economics we can curate a different kind of culture.”\n\n### Are there any collaborations with other projects to build on Gno?\n\n**Jae**: “Yes, why don't we make this truly open, in the style of free software, so that we can build upon a common VM design? The only thing I want to retain control over for a temporary duration of time is the regulation of trademarks, like \"gno\", \"gno**\", \"*gno\" (but you can use the license to fork this project however you want); and we want proper attribution, but the AGPL fork license suggests how we can work together collaboratively.\n\nThe GNO VM can be used on any chain if it follows the AGPL style license, which we are calling the \"Gno GPL\". Blockchains can still be composed of components licensed with compatible open source software. We can collaborate indirectly by working and contributing to the same codebase, and know that the code we are building together will always be available for you to use for your chain, as long as it remains and is offered as GNO free software.\n\nSo anyone can build GNO smart contracts into their chain for free, according to the license we are deriving from the GNU (not GNO** AGPL license. You don't have to pay gno.land or anyone if the license is followed. Example: we will collaborate with the Cosmos Hub and Cosmos/ATOM community to offer gno DAOs to be hosted by ICS1, and help bring collaboration tools for Cosmos. So this is how gno works with Cosmos Hub assuming ICS1 is solved. As for gno.land, we can start off with an independent gno instance for the Cosmos Hub's gno shards, and later allow the IBC importing of vetted code from gno.land/*.”\n\n### Apart from Adena, are there any plans for another wallet?\n\nJae: “I think what we need are a few competing base implementations that best leverage the framework they build upon, rather react or minimal vue; and to create common core libraries along the way if reasonable. But there ought to be more than one approach for such a key component, with special care taken into consideration for security. Like, I don't agree with Keplr asking so easily for a 12/24-word mnemonic, even if the implementation is secure, it is going to become a problem. PSA btw.”\n\n### Wen mainnet?\n\n**Jae**: “Some time by Q2 next year would be good. But as policy, we can't commit to a date, because everything has to be ready first before the official launch. Our thesis is that having the DAO with sub-DAOs will allow us to reach the end result in a faster way via some form of parallelism. First, we need DAOs to assess new code, and better UX for managing something like upgrades to the Cosmos Hub. Once we have the DAO running on testx.gno.land, for some x > 4, and we have checked all vital TODOs, we will know that we are ready for \"mainnet.\"\n\n_Do you have more questions for Manfred or Jae? Would you like to know more about Gno.land, Gnolang, Game of Realms, or ways to contribute to our growing ecosystem? Drop us a question on Discord and be sure to join us for our second **AMA on December 6th @4pm UTC.**_\n",
    "2022-12-05T16:15:00Z",
    "manfred,jae",
    "gnoland,gnosh,gnot,permissionless,consensus,proof-of-contribution,dao,governance,ibc,democracy,freedom"
  ],
  "max_deposit": ""
}
#2 vm/execgno.land/r/gnoland/blog.ModAddPost(gor-launch, Game of Realms Is On: Win Rewards for Contributing to Gno.land, Phase one of Game of Realms, a worldwide competition to build the best Gnolang smart contracts, **is now open**. Game of Realms is a high-stakes contest with a total prize pool of **133,700 ATOM** that will see participants compete for tiered membership to co-own the Gno.land blockchain, the next-generation smart contract platform that uses the Gnolang (Gno) programming language. A series of complex technical and non-technical tasks will challenge contributors to create innovative patterns that push the chain to new limits. If you’re interested in helping build the most intuitive smart contract platform in web3—while gaining rewards for your contribution—join today by opening a [PR here](https://github.com/gnolang/gno). The Game of Realms contest will allow participants to get a feel for the Gno.land platform while building smart contracts and applications in the ecosystem. It will take place in two stages, phase one and phase two. Phase one is about building the core infrastructure, tools, and tutorials necessary to open the gates to broader participation and will be held off-chain. Phase two, on the other hand, will take place after the successful completion of phase one and be held on-chain, where contributors will build smart contracts on the platform. In addition to the ATOM prize pool, the best contributors will also be awarded (mostly) initial-level membership to govern the upcoming mainnet. Membership will be allocated according to the quality and extensiveness of the contribution—the higher the quality, the higher the tier, and the greater the voting rights and rewards. The top equal members will be composed of peers who have contributed the most to the ecosystem and have an understanding of its core components. Top members will also have aligned core moral values. This is essential so that members can maintain the chain together according to its Constitution (TBD** and ultimately create a sustainable ecosystem that rewards all valuable contributions. ## Game of Realms - Phase One (Off-Chain) While we aim to encourage cross-collaboration between devs and non-techs, phase one of the contest is recommended for advanced developers who are more autonomous and can contribute with limited guidelines and support. Accounting for around one-third of the total **133,700 ATOM** prize pool, getting a headstart in phase one will allow seasoned devs to kick the tires on the Gno.land platform, contribute with limited competition, and build the tools needed to open the second phase. During phase one, participants will open PRs against repos from the Gnolang organization. Phase one contributors will be expected to document and share their work efficiently to enable others to use it without conflicts. Your contribution is vital to the success of the contest, the Gno.land platform, and the Cosmos ecosystem at large, especially now, with discussions to move the Cosmos Hub’s core operations on-chain by establishing a DAO system. The first DAO to be created will be the [Decentralists DAO](https://github.com/decentralists/DAO), which will provide Cosmonauts with transparency, accountability, and decentralization. The Decentralists DAO will improve discourse, organization management, development, and conflict resolution through smart contracts, and will organize itself into a set of tightly-aligned sub-DAOs dedicated to specific topics, such as engineering and funding. So, how does this relate to Game of Realms and what type of contributions are judges looking for? Here are some examples, in order of priority: * **Define and Implement an Evaluation DAO:** For the Game of Realms contest, a sub-DAO – the Evaluation DAO – is needed to evaluate contributions during phase two and attribute rewards accordingly. Using a DAO will allow community members to vote on the best contributions for the platform. Implementation of the Evaluation DAO is the only step that must be approved by the core team because of its key role in the competition and the future of the platform. Once the DAO is in place, all previous and further contributions will be reviewed collectively by DAO members. * **Create Tutorials to Onboard More Participants:** We need experienced devs to write or record tutorials to help more people get started during phase two of the competition (and beyond) and to help grow the Gno.land developer community. These tutorials can include topics like interacting with the chain from the CLI, step-by-step guides to creating smart contracts in Gno, tips for running a local dev environment, fast prototyping with gnodev, or they can be tutorials dedicated to certain audiences, such as developers coming from Solidity or web2. All tutorials should be added to the [awesome-gno GitHub repo](https://github.com/gnolang/awesome-gno). * **Define and Implement a Governance Contract Suite:** In this challenge, developers will be expected to define and implement a governance contract suite capable of competing with existing chains’ governance modules. If you think you can improve the governance system of Cosmos Hub, this is your chance to show us how! Phase one challenges will stay open during phase two. No competition points will be attributed during this phase as the points will be retro-funded by the DAO and awarded during phase two. ## Game of Realms - Phase Two (On-Chain) Phase two of Game of Realms will onboard more people to the platform and begin as soon as sufficient materials are completed from phase one. Accounting for around two-thirds of the total 133,700 ATOM prize pool, phase two will be open to both developers and non-technicals who can follow tutorials, create smart contracts, or provide other important contributions to win rewards and scale the platform. As phase two will be held directly on-chain, contributors can submit their contributions to the DAO without publishing them on the main GitHub repo. However, we strongly encourage you to use GitHub as it’s an important resource that helps the community gain a better understanding through specific examples. _We are currently preparing the challenges for participants of phase two and are looking for your input. Let us know what type of smart contracts you would like to see (minimal or with multiple features) in our upcoming Game of Realms AMA on Tuesday, January 24 at 4 pm UTC. Note that this is a text based AMA so make sure to add your questions before or during the AMA in the #AMA-questions channel on the [Gno.land discord](https://discord.gg/S8nKUqwkPn). _Once we have collected your feedback and requests, we will finalize the challenge categories. You can visit the [Game of Realms repo](https://github.com/gnolang/game-of-realms) for more information._ , 2023-01-18T15:36:00Z, , gnoland,game-of-realms,launch)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "gor-launch",
    "Game of Realms Is On: Win Rewards for Contributing to Gno.land",
    "\n\nPhase one of Game of Realms, a worldwide competition to build the best Gnolang smart contracts, **is now open**. Game of Realms is a high-stakes contest with a total prize pool of **133,700 ATOM** that will see participants compete for tiered membership to co-own the Gno.land blockchain, the next-generation smart contract platform that uses the Gnolang (Gno) programming language. A series of complex technical and non-technical tasks will challenge contributors to create innovative patterns that push the chain to new limits. If you’re interested in helping build the most intuitive smart contract platform in web3—while gaining rewards for your contribution—join today by opening a [PR here](https://github.com/gnolang/gno).\n\nThe Game of Realms contest will allow participants to get a feel for the Gno.land platform while building smart contracts and applications in the ecosystem. It will take place in two stages, phase one and phase two. Phase one is about building the core infrastructure, tools, and tutorials necessary to open the gates to broader participation and will be held off-chain. Phase two, on the other hand, will take place after the successful completion of phase one and be held on-chain, where contributors will build smart contracts on the platform.\n\nIn addition to the ATOM prize pool, the best contributors will also be awarded (mostly) initial-level membership to govern the upcoming mainnet. Membership will be allocated according to the quality and extensiveness of the contribution—the higher the quality, the higher the tier, and the greater the voting rights and rewards. The top equal members will be composed of peers who have contributed the most to the ecosystem and have an understanding of its core components. Top members will also have aligned core moral values. This is essential so that members can maintain the chain together according to its Constitution (TBD** and ultimately create a sustainable ecosystem that rewards all valuable contributions.\n\n## Game of Realms - Phase One (Off-Chain)\n\nWhile we aim to encourage cross-collaboration between devs and non-techs, phase one of the contest is recommended for advanced developers who are more autonomous and can contribute with limited guidelines and support. Accounting for around one-third of the total **133,700 ATOM** prize pool, getting a headstart in phase one will allow seasoned devs to kick the tires on the Gno.land platform, contribute with limited competition, and build the tools needed to open the second phase.\n\nDuring phase one, participants will open PRs against repos from the Gnolang organization. Phase one contributors will be expected to document and share their work efficiently to enable others to use it without conflicts. Your contribution is vital to the success of the contest, the Gno.land platform, and the Cosmos ecosystem at large, especially now, with discussions to move the Cosmos Hub’s core operations on-chain by establishing a DAO system.\n\nThe first DAO to be created will be the [Decentralists DAO](https://github.com/decentralists/DAO), which will provide Cosmonauts with transparency, accountability, and decentralization. The Decentralists DAO will improve discourse, organization management, development, and conflict resolution through smart contracts, and will organize itself into a set of tightly-aligned sub-DAOs dedicated to specific topics, such as engineering and funding.\n\nSo, how does this relate to Game of Realms and what type of contributions are judges looking for? Here are some examples, in order of priority:\n\n* **Define and Implement an Evaluation DAO:** For the Game of Realms contest, a sub-DAO – the Evaluation DAO – is needed to evaluate contributions during phase two and attribute rewards accordingly. Using a DAO will allow community members to vote on the best contributions for the platform. Implementation of the Evaluation DAO is the only step that must be approved by the core team because of its key role in the competition and the future of the platform. Once the DAO is in place, all previous and further contributions will be reviewed collectively by DAO members.\n\n* **Create Tutorials to Onboard More Participants:** We need experienced devs to write or record tutorials to help more people get started during phase two of the competition (and beyond) and to help grow the Gno.land developer community. These tutorials can include topics like interacting with the chain from the CLI, step-by-step guides to creating smart contracts in Gno, tips for running a local dev environment, fast prototyping with gnodev, or they can be tutorials dedicated to certain audiences, such as developers coming from Solidity or web2. All tutorials should be added to the [awesome-gno GitHub repo](https://github.com/gnolang/awesome-gno).\n\n* **Define and Implement a Governance Contract Suite:** In this challenge, developers will be expected to define and implement a governance contract suite capable of competing with existing chains’ governance modules. If you think you can improve the governance system of Cosmos Hub, this is your chance to show us how!\n\nPhase one challenges will stay open during phase two. No competition points will be attributed during this phase as the points will be retro-funded by the DAO and awarded during phase two.\n\n## Game of Realms - Phase Two (On-Chain)\n\nPhase two of Game of Realms will onboard more people to the platform and begin as soon as sufficient materials are completed from phase one. Accounting for around two-thirds of the total 133,700 ATOM prize pool, phase two will be open to both developers and non-technicals who can follow tutorials, create smart contracts, or provide other important contributions to win rewards and scale the platform. As phase two will be held directly on-chain, contributors can submit their contributions to the DAO without publishing them on the main GitHub repo. However, we strongly encourage you to use GitHub as it’s an important resource that helps the community gain a better understanding through specific examples.\n\n_We are currently preparing the challenges for participants of phase two and are looking for your input. Let us know what type of smart contracts you would like to see (minimal or with multiple features) in our upcoming Game of Realms AMA on Tuesday, January 24 at 4 pm UTC. Note that this is a text based AMA so make sure to add your questions before or during the AMA in the #AMA-questions channel on the [Gno.land discord](https://discord.gg/S8nKUqwkPn).\n_Once we have collected your feedback and requests, we will finalize the challenge categories. You can visit the [Game of Realms repo](https://github.com/gnolang/game-of-realms) for more information._\n",
    "2023-01-18T15:36:00Z",
    "",
    "gnoland,game-of-realms,launch"
  ],
  "max_deposit": ""
}
#3 vm/execgno.land/r/gnoland/blog.ModAddPost(gor-ama1, Gno.land Community Game of Realms AMA #1 - Recap, With Game of Realms officially in phase one, core dev Manfred Touron jumped on Discord to answer Gno.land community questions about the ongoing high-stakes competition. From starting and end dates to participation requirements and a description of tasks, look for your answer below. If you have further questions or want to join our community, come and find us on the []Gno.land Discord](https://discord.com/channels/957002220384182312/1065646963825066044). The core team will be hosting regular “office hours” sessions soon so you can discuss your ideas with them directly. ## Q. How are the tasks in the issues assigned? We received questions about how the tasks in the Game of Realms issues are assigned. Should submissions contain the whole implementation? Is the following task "available** when the previous one is completed? How is the “sync” happening? **A.** TL;DR: Everything should go smoothly and we will be leaving room for negotiation if any review looks invalid. Once it has been established, the evaluation DAO will enforce how to submit a contribution. In the meantime, there are official communication challenges that we encourage participants to use. People are also free to work in stealth mode, with the risk of finishing too late or losing points for being bad at collaborating. ---- We expect the current issues to be done by multiple people, in multiple steps. But anyone can try to make everything in stealth mode and open a PR with everything. Let's discuss the cases we believe will happen: ### Case 1 We're in phase 1, people want to contribute but can't manage to do everything, so they will try to participate as much as they can. They will participate on the issue or in Discord by indicating their desire to participate, by sharing ideas, reviewing others' work, giving feedback, clarifying, or whatever makes sense. The only thing is that we're fully remote. We don't know each other, so everyone needs to be good at communication. At the end of a big task, i.e. the Evaluation DAO is finished, the core team will take all the small contributions and identify contributors, and then suggest how to split the task prize. We'll propose the split and allow room for public negotiations. ### Case 2 We're in phase 2, and a small contribution is done by an individual. We just review it, and that's done. ### Case 3 We're in phase 2, and a contribution is big and requires small steps. Probably, the Evaluation DAO will ask individual participants to submit their contributions so they can allocate points for the individual contributions. But maybe the Evaluation DAO prefers to review big tasks as a whole, and then split the prize, as we'll do in phase 1. We don’t have clarity on this at this stage, as it will be up to the implementers of the Evaluation DAO to design the best system for that case. ## Q. Will there be a leaderboard and place where we can submit evidence for tasks? **A.** Not yet. The leaderboard will come in phase 2. One of the critical parts of the Evaluation DAO will be to allow contributors to submit evidence for tasks. Votes and point allocations will also be transparent. This will make sense for future Proof-of-Contributions, too. We'll also develop a leaderboard to make it easier to follow the competition, but this will probably come after the Evaluation DAO is running. ## Q. What will the overall tasks consist of? **A.** Here is a non-exhaustive list: * Onboard more contributors ([create tutorials and documentation](https://github.com/gnolang/gno/issues/408) * Improve the project and implement more things * Bootstrap our genesis of contributors for the future mainnet * Experiment with Proof of Contribution by having a simpler system: Evaluation DAO * Identify the best participants to propose jobs * Identify the best organizations to propose partnerships ## Q. At what point in the Game of Realms timeline/phase are we? **A.** We are at the beginning of phase 1. We plan to create a website soon so you can keep track of the status and, as I mentioned, a leaderboard will come in phase 2. ## Q. What will be the contributions, how will points be calculated, and are there tasks for non-programmers? **A.** During phase 1, the tasks are relatively well defined, please read this: https://github.com/gnolang/gno/issues/390 There are more tasks for programmers, but multiple parts are for non-programmers too. During phase 2, it's hard to be sure about anything yet. Game of Realms is a competition to experiment with Proof-of-Contribution, which will replace Proof-of-Stake on Gno.land. If things go the way we imagine, then consider that the stakeholders (contributors** will allocate points to contributions that make sense for the project. The contributors won't lose points, but by allocating points, they will dilute their own point stack. We expect the Evaluation DAO to attribute points to whatever makes sense to make the project better. We'll have some task ideas for phase 2, including for non-programmers. You can likely consider that even if the core team doesn’t control the DAO, its suggestions will be approved by the Evaluation DAO because we deeply want the project to be a success. ## Q. What are the requirements to start participating? **A.** There is no requirement to start participating. You’ll need to do some KYC at the end of the competition to receive a prize. Feel free to fill out the form linked in the Register section of the following issue: https://github.com/gnolang/gno/issues/390 This will allow us to contact you about the competition through our newsletter and set up prize payment later. Use the comment section of the issues or discuss them on Discord if you plan to work on specific tasks, so we can see that you’re actively working on a topic. It may be better to work with others and share a prize instead of taking the risk of implementing everything in stealth mode and not being the first. ## Q. Is there a fixed period of time for the end? **A.** No. Phase 1 will be finished when we consider that enough materials have been implemented to switch to phase 2. This will probably take between 1-3 months. The end date for phase 2 will be announced during phase 2, which will probably last between 2-3 months. This is when we’ll send the prize rewards. After Game of Realms, people will continue to earn contribution points by contributing to the project, which will give them memberships on the future mainnet. ## Q. Is it possible to install a local testnet to get a proper local development environment? **A.** You can find the answer in this GitHub issue. Subscribe to the issue to get updates: https://github.com/gnolang/gno/issues/478 There are multiple ways to interact with Gno: * Using gnodev allows you to use the GnoVM, without a blockchain. This method is super fast and allows you to use development patterns like TDD, where you test your implementation multiple times per minute. * Running a localnet, by running the gnoland command and then configuring our tools like gnokey to use localhost:36657 * Using the staging network hosted on https://staging.gno.land reset regularly and you can use the hardcoded test key or use the faucet * Using the official testnets If you prefer to run a full blockchain node instead of just playing with GnoVM, you should play with the gnoland binary. This video shows how to do this in practice: https://www.youtube.com/watch?v=-BlnEXCs0eI Below is a further resource that may also help you: https://test2.gno.land/r/boards:testboard/5 ## Q. Will there be a list of what needs to be tested? When will the tests start? **A.** The best place to look is on GitHub here: https://github.com/gnolang/gno/issues/390 During phase 1, there are 3 official focuses: - Evaluation DAO - Tutorials - Governance Module The core team will actively review this and decide what contribution deserves to get prizes. During phase 2, we’ll use the Evaluation DAO developed during phase 1 to review old contributions, even contributions made before the competition, as well as ongoing contributions. Right now, we have an issue gathering interesting topics for phase 2 here, but any contribution can be reviewed by the DAO, including things that are not listed: https://github.com/gnolang/gno/issues/357 The competition was just announced, but we’ll review contributions made in the past, too, so it starts from the first commit, ~1-2y ago. _Do you have more questions for Manfred? Would you like to know more about Gno.land, Gnolang, Game of Realms, or ways to contribute to our growing ecosystem? Drop us a question on Discord and watch out for our next AMA on Tuesday 7 Feb at 4 pm UTC._ , 2023-02-03T15:44:00Z, manfred, game-of-realms,gnoland,proof-of-contribution,dao,governance)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "gor-ama1",
    "Gno.land Community Game of Realms AMA #1 - Recap",
    "\n\nWith Game of Realms officially in phase one, core dev Manfred Touron jumped on Discord to answer Gno.land community questions about the ongoing high-stakes competition. From starting and end dates to participation requirements and a description of tasks, look for your answer below. If you have further questions or want to join our community, come and find us on the []Gno.land Discord](https://discord.com/channels/957002220384182312/1065646963825066044). The core team will be hosting regular “office hours” sessions soon so you can discuss your ideas with them directly.\n\n## Q. How are the tasks in the issues assigned?\n\nWe received questions about how the tasks in the Game of Realms issues are assigned. Should submissions contain the whole implementation? Is the following task \"available** when the previous one is completed? How is the “sync” happening?\n\n**A.** TL;DR:\n\nEverything should go smoothly and we will be leaving room for negotiation if any review looks invalid. Once it has been established, the evaluation DAO will enforce how to submit a contribution. In the meantime, there are official communication challenges that we encourage participants to use. People are also free to work in stealth mode, with the risk of finishing too late or losing points for being bad at collaborating.\n\n----\n\nWe expect the current issues to be done by multiple people, in multiple steps. But anyone can try to make everything in stealth mode and open a PR with everything. Let's discuss the cases we believe will happen:\n\n### Case 1\n\nWe're in phase 1, people want to contribute but can't manage to do everything, so they will try to participate as much as they can. They will participate on the issue or in Discord by indicating their desire to participate, by sharing ideas, reviewing others' work, giving feedback, clarifying, or whatever makes sense.\n\nThe only thing is that we're fully remote. We don't know each other, so everyone needs to be good at communication. At the end of a big task, i.e. the Evaluation DAO is finished, the core team will take all the small contributions and identify contributors, and then suggest how to split the task prize. We'll propose the split and allow room for public negotiations.\n\n### Case 2\n\nWe're in phase 2, and a small contribution is done by an individual. We just review it, and that's done.\n\n### Case 3\n\nWe're in phase 2, and a contribution is big and requires small steps. Probably, the Evaluation DAO will ask individual participants to submit their contributions so they can allocate points for the individual contributions. But maybe the Evaluation DAO prefers to review big tasks as a whole, and then split the prize, as we'll do in phase 1. We don’t have clarity on this at this stage, as it will be up to the implementers of the Evaluation DAO to design the best system for that case.\n\n## Q. Will there be a leaderboard and place where we can submit evidence for tasks?\n\n**A.** Not yet. The leaderboard will come in phase 2. One of the critical parts of the Evaluation DAO will be to allow contributors to submit evidence for tasks. Votes and point allocations will also be transparent. This will make sense for future Proof-of-Contributions, too. We'll also develop a leaderboard to make it easier to follow the competition, but this will probably come after the Evaluation DAO is running.\n\n## Q. What will the overall tasks consist of?\n\n**A.** Here is a non-exhaustive list:\n\n* Onboard more contributors ([create tutorials and documentation](https://github.com/gnolang/gno/issues/408)\n* Improve the project and implement more things\n* Bootstrap our genesis of contributors for the future mainnet\n* Experiment with Proof of Contribution by having a simpler system: Evaluation DAO\n* Identify the best participants to propose jobs\n* Identify the best organizations to propose partnerships\n\n## Q. At what point in the Game of Realms timeline/phase are we?\n\n**A.** We are at the beginning of phase 1. We plan to create a website soon so you can keep track of the status and, as I mentioned, a leaderboard will come in phase 2.\n\n## Q. What will be the contributions, how will points be calculated, and are there tasks for non-programmers?\n\n**A.** During phase 1, the tasks are relatively well defined, please read this:\n\nhttps://github.com/gnolang/gno/issues/390\n\nThere are more tasks for programmers, but multiple parts are for non-programmers too.\n\nDuring phase 2, it's hard to be sure about anything yet. Game of Realms is a competition to experiment with Proof-of-Contribution, which will replace Proof-of-Stake on Gno.land. If things go the way we imagine, then consider that the stakeholders (contributors** will allocate points to contributions that make sense for the project. The contributors won't lose points, but by allocating points, they will dilute their own point stack.\n\nWe expect the Evaluation DAO to attribute points to whatever makes sense to make the project better. We'll have some task ideas for phase 2, including for non-programmers. You can likely consider that even if the core team doesn’t control the DAO, its suggestions will be approved by the Evaluation DAO because we deeply want the project to be a success.\n\n## Q. What are the requirements to start participating?\n\n**A.** There is no requirement to start participating. You’ll need to do some KYC at the end of the competition to receive a prize. Feel free to fill out the form linked in the Register section of the following issue:\n\nhttps://github.com/gnolang/gno/issues/390\n\nThis will allow us to contact you about the competition through our newsletter and set up prize payment later. Use the comment section of the issues or discuss them on Discord if you plan to work on specific tasks, so we can see that you’re actively working on a topic. It may be better to work with others and share a prize instead of taking the risk of implementing everything in stealth mode and not being the first.\n\n## Q. Is there a fixed period of time for the end?\n\n**A.** No. Phase 1 will be finished when we consider that enough materials have been implemented to switch to phase 2. This will probably take between 1-3 months. The end date for phase 2 will be announced during phase 2, which will probably last between 2-3 months. This is when we’ll send the prize rewards. After Game of Realms, people will continue to earn contribution points by contributing to the project, which will give them memberships on the future mainnet.\n\n## Q. Is it possible to install a local testnet to get a proper local development environment?\n\n**A.** You can find the answer in this GitHub issue. Subscribe to the issue to get updates:\n\nhttps://github.com/gnolang/gno/issues/478\n\nThere are multiple ways to interact with Gno:\n\n* Using gnodev allows you to use the GnoVM, without a blockchain. This method is super fast and allows you to use development patterns like TDD, where you test your implementation multiple times per minute.\n* Running a localnet, by running the gnoland command and then configuring our tools like gnokey to use localhost:36657\n* Using the staging network hosted on https://staging.gno.land reset regularly and you can use the hardcoded test key or use the faucet\n* Using the official testnets\n\nIf you prefer to run a full blockchain node instead of just playing with GnoVM, you should play with the gnoland binary. This video shows how to do this in practice:\nhttps://www.youtube.com/watch?v=-BlnEXCs0eI\n\nBelow is a further resource that may also help you:\n\nhttps://test2.gno.land/r/boards:testboard/5\n\n## Q. Will there be a list of what needs to be tested? When will the tests start?\n\n**A.** The best place to look is on GitHub here:\n\nhttps://github.com/gnolang/gno/issues/390\n\nDuring phase 1, there are 3 official focuses:\n\n- Evaluation DAO\n- Tutorials\n- Governance Module\n\nThe core team will actively review this and decide what contribution deserves to get prizes.\n\nDuring phase 2, we’ll use the Evaluation DAO developed during phase 1 to review old contributions, even contributions made before the competition, as well as ongoing contributions. Right now, we have an issue gathering interesting topics for phase 2 here, but any contribution can be reviewed by the DAO, including things that are not listed:\n\nhttps://github.com/gnolang/gno/issues/357\n\nThe competition was just announced, but we’ll review contributions made in the past, too, so it starts from the first commit, ~1-2y ago.\n\n_Do you have more questions for Manfred? Would you like to know more about Gno.land, Gnolang, Game of Realms, or ways to contribute to our growing ecosystem? Drop us a question on Discord and watch out for our next AMA on Tuesday 7 Feb at 4 pm UTC._\n",
    "2023-02-03T15:44:00Z",
    "manfred",
    "game-of-realms,gnoland,proof-of-contribution,dao,governance"
  ],
  "max_deposit": ""
}
#4 vm/execgno.land/r/gnoland/blog.ModAddPost(gor-phase1, All You Need to Know About Game of Realms: Phase One, Game of Realms, the worldwide competition to find the best contributors to Gno.land, is currently underway. Unlike some contests you may have entered, we're doing things a little differently. We want participants to be instrumental in building the Gno.land platform with meaningful contributions that help shape the direction of the project – either by writing the best Gnolang smart contracts or contributing to the core blockchain. It’s not just about winning prizes but becoming a meaningful contributor. We encourage participants to collaborate on the challenges – your contribution will be rewarded on individual merit. ## Phase One: The Basics Phase one of Game of Realms is about laying the foundations to onboard more people to the platform. You’ll need to be an advanced developer who wants to create core materials that power the platform every day. You should also be willing to document your work and even write tutorials and guides that help us advance to the second phase of the competition. There is a total prize pool of 133,700 ATOM available during the Game of Realms competition, one-third of which (44,121 ATOM) will be allocated to contributions from phase one. During phase one, which we expect to last between 1-3 months, participants will open PRs against repos from the Gnolang organization. For additional information on the competition phases and timelines, be sure to check out the following resources: - [Game of Realms blog post](https://test3.gno.land/r/gnoland/blog:p/gor-launch) - [Game of Realms AMA recap](https://test3.gno.land/r/gnoland/blog:p/gor-ama1) ## Phase One: The Challenges **Evaluation DAO**: To ensure contributions in Game of Realms are rewarded fairly, we need an Evaluation DAO. Allowing community members to vote on the best contributions and decide how much they are worth provides a level playing field for all. We’re therefore seeking your skills in DAO development and implementation. This is one of the most important challenges of phase one and the only challenge that must be approved unilaterally by the core team because of its key role in the competition and the future of the platform. Read more about the [Evaluation DAO challenge on GitHub here](https://github.com/gnolang/gno/issues/407). **Tutorials & Documentation**: So that we can progress to phase two and open up the Gno.land platform to a broader audience, we need written and recorded tutorials, guides, and documentation from phase one participants. There are almost no instruction manuals when it comes to this new frontier as the only smart contract platform using the Gnolang programming language. Help us to create materials that will onboard more contributors to Gno.land. Read more about the [Tutorials & Documentation challenge on GitHub here](https://github.com/gnolang/gno/issues/408). **Governance Module**: We want Gno.land to adopt the fairest and most effective governance solution possible; one that encourages voter participation and is transparent and accountable. We’re looking for contributors to define and implement a governance contract suite that rivals existing ones, such as the Cosmos Hub, and be implemented by other projects. Can you improve on that? Show us how! Read more about the [Governance Module challenge on GitHub Here](https://github.com/gnolang/gno/issues/409). All phase one challenges will stay open during phase two. No competition points will be attributed during this phase as the points will be retro-funded by the Evaluation DAO and awarded during phase two. ## Judging Criteria - What Wins Points? What will the judges be looking for when assessing contributions? You can find individual details on the corresponding GitHub issue regarding each challenge, but to get you started, the Game of Realms contest prioritizes communication and collaboration. We encourage participants to work together to find the best solutions. You will be awarded individually for your contribution but working as part of a team is highly valued. Good documentation that expresses high learning efficiency and shows how the task was completed in an educational way will also win additional points, as will a high standard of quality, great UX, and the ability to follow the contribution guidelines. As this is primarily a developer-oriented competition, most of the organization for Game of Realms is happening on GitHub; come by the repo and [visit issue #408](https://github.com/gnolang/gno/issues/408) to contribute to tutorial and documentation writing for Gno.land. ## Rules of Engagement All participants must keep in mind a strict code of conduct and specific rules and criteria to ensure fair play. Throughout the Game of Realms competition, no plagiarism will be tolerated at any time. Participants may submit what they wish, however, any project that has already been allocated rewards or received compensation in any other hackathon or similar contest will not receive double pay. That’s all for now. If you have more questions about Game of Realms or Gno.land you can join us in our next Office Hours session on Tuesday, March 14, 2023, at 4 pm UTC. You can also connect with other participants in the [Gnoland Discord](https://discord.com/invite/S8nKUqwkPn). ## Game of Realms Phase 1: FAQ Below are some frequently asked questions about phase one of the Game of Realms competition. If you can’t find your answer below, jump into our Discord and ask, or join us for a live “Office Hours” session with the core team. ### Q. How are the tasks in the issues assigned? A. There are official communication challenges that we encourage participants to use. ### Q. Can I work individually or should I work as part of a team? A. You are free to work in stealth mode, but please keep in mind that you risk finishing too late or losing points for being bad at collaborating. We expect the issues in phase 1 to be done by multiple people, in multiple steps. But anyone can try to make everything in stealth mode and open a PR with everything. ### Q. How can I find collaborators? A. Participate on the issue or in Discord by indicating your desire to participate, by sharing your ideas, reviewing others' work, giving feedback, clarifying, or whatever makes sense. ### Q. How can I ensure good collaboration? A. Since we are fully remote, collaborating can be a challenge and the best collaborators will be rewarded. We don't know each other, so having good communication is key. ### Q. How will my collaboration be evaluated? A. At the end of a big task, i.e. the Evaluation DAO is finished, the core team will take all the small contributions and identify contributors, and then suggest how to split the task prize. We'll propose the split and allow room for public negotiations. ### Q. How much is the prize pool? A. There is a total prize pool of **133,700 ATOM** available during the Game of Realms competition, one-third of which (**44,121 ATOM**) will be allocated to contributions from phase one. ### Q. When will I receive my rewards for my collaboration? A. Rewards will be allocated retroactively by the Evaluation DAO during phase 2. ### Q. Will there be a leaderboard and place where we can submit evidence for tasks? A. Not yet. The leaderboard will come in phase 2. ### Q. What will the overall tasks consist of? A. Here is a non-exhaustive list: * Onboard more contributors (create tutorials and documentation) * Improve the project and implement more things * Bootstrap our genesis of contributors for the future mainnet * Experiment with Proof of Contribution by having a simpler system: Evaluation DAO * Identify the best participants to propose jobs * Identify the best organizations to propose partnerships ### Q. Are there tasks for non-programmers? A. There are more tasks for programmers, but multiple parts are for non-programmers too. During phase 1, the tasks are relatively well defined, please read this: https://github.com/gnolang/gno/issues/390 https://github.com/gnolang/gno/issues/540 ### Q. What are the requirements to start participating? A. There is no requirement to start participating. You’ll need to do some KYC at the end of the competition to receive a prize. Feel free to fill out the form linked in the Register section of the following issue: https://github.com/gnolang/gno/issues/390 This will allow us to contact you about the competition through our newsletter and set up prize payment later. Use the comment section of the issues or discuss them on Discord if you plan to work on specific tasks, so we can see that you’re actively working on a topic. ### Q. Is there a fixed period of time for phase 1? A. No. Phase 1 will be finished when we consider that enough materials have been implemented to switch to phase 2. ### Q. Is it possible to install a local testnet to get a proper local development environment? A. You can find the answer in this GitHub issue. Subscribe to the issue to get updates: https://github.com/gnolang/gno/issues/478 ### Q. Will there be a list of what needs to be tested? When will the tests start? A. The best place to look is on GitHub here: https://github.com/gnolang/gno/issues/390 During phase 1, there are 3 official focuses: * Evaluation DAO * Tutorials * Governance Module The competition was just announced, but we’ll review contributions made in the past, too, so it starts from the first commit, ~1-2 years ago. , 2023-03-12T14:02:00Z, , gnoland,game-of-realms,faq)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "gor-phase1",
    "All You Need to Know About Game of Realms: Phase One",
    "\n\nGame of Realms, the worldwide competition to find the best contributors to Gno.land, is currently underway. Unlike some contests you may have entered, we're doing things a little differently. We want participants to be instrumental in building the Gno.land platform with meaningful contributions that help shape the direction of the project – either by writing the best Gnolang smart contracts or contributing to the core blockchain. It’s not just about winning prizes but becoming a meaningful contributor. We encourage participants to collaborate on the challenges – your contribution will be rewarded on individual merit.\n\n## Phase One: The Basics\n\nPhase one of Game of Realms is about laying the foundations to onboard more people to the platform. You’ll need to be an advanced developer who wants to create core materials that power the platform every day. You should also be willing to document your work and even write tutorials and guides that help us advance to the second phase of the competition.\n\nThere is a total prize pool of 133,700 ATOM available during the Game of Realms competition, one-third of which (44,121 ATOM) will be allocated to contributions from phase one. During phase one, which we expect to last between 1-3 months, participants will open PRs against repos from the Gnolang organization. For additional information on the competition phases and timelines, be sure to check out the following resources:\n\n- [Game of Realms blog post](https://test3.gno.land/r/gnoland/blog:p/gor-launch)\n- [Game of Realms AMA recap](https://test3.gno.land/r/gnoland/blog:p/gor-ama1)\n\n## Phase One: The Challenges\n\n**Evaluation DAO**: To ensure contributions in Game of Realms are rewarded fairly, we need an Evaluation DAO. Allowing community members to vote on the best contributions and decide how much they are worth provides a level playing field for all. We’re therefore seeking your skills in DAO development and implementation. This is one of the most important challenges of phase one and the only challenge that must be approved unilaterally by the core team because of its key role in the competition and the future of the platform. Read more about the [Evaluation DAO challenge on GitHub here](https://github.com/gnolang/gno/issues/407).\n\n**Tutorials & Documentation**: So that we can progress to phase two and open up the Gno.land platform to a broader audience, we need written and recorded tutorials, guides, and documentation from phase one participants. There are almost no instruction manuals when it comes to this new frontier as the only smart contract platform using the Gnolang programming language. Help us to create materials that will onboard more contributors to Gno.land. Read more about the [Tutorials & Documentation challenge on GitHub here](https://github.com/gnolang/gno/issues/408).\n\n**Governance Module**: We want Gno.land to adopt the fairest and most effective governance solution possible; one that encourages voter participation and is transparent and accountable. We’re looking for contributors to define and implement a governance contract suite that rivals existing ones, such as the Cosmos Hub, and be implemented by other projects. Can you improve on that? Show us how! Read more about the [Governance Module challenge on GitHub Here](https://github.com/gnolang/gno/issues/409).\n\nAll phase one challenges will stay open during phase two. No competition points will be attributed during this phase as the points will be retro-funded by the Evaluation DAO and awarded during phase two.\n\n## Judging Criteria - What Wins Points?\n\nWhat will the judges be looking for when assessing contributions? You can find individual details on the corresponding GitHub issue regarding each challenge, but to get you started, the Game of Realms contest prioritizes communication and collaboration. We encourage participants to work together to find the best solutions. You will be awarded individually for your contribution but working as part of a team is highly valued. Good documentation that expresses high learning efficiency and shows how the task was completed in an educational way will also win additional points, as will a high standard of quality, great UX, and the ability to follow the contribution guidelines.\n\nAs this is primarily a developer-oriented competition, most of the organization for Game of Realms is happening on GitHub; come by the repo and [visit issue #408](https://github.com/gnolang/gno/issues/408) to contribute to tutorial and documentation writing for Gno.land.\n\n## Rules of Engagement\n\nAll participants must keep in mind a strict code of conduct and specific rules and criteria to ensure fair play. Throughout the Game of Realms competition, no plagiarism will be tolerated at any time. Participants may submit what they wish, however, any project that has already been allocated rewards or received compensation in any other hackathon or similar contest will not receive double pay.\n\nThat’s all for now. If you have more questions about Game of Realms or Gno.land you can join us in our next Office Hours session on Tuesday, March 14, 2023, at 4 pm UTC. You can also connect with other participants in the [Gnoland Discord](https://discord.com/invite/S8nKUqwkPn).\n\n## Game of Realms Phase 1: FAQ\n\nBelow are some frequently asked questions about phase one of the Game of Realms competition. If you can’t find your answer below, jump into our Discord and ask, or join us for a live “Office Hours” session with the core team.\n\n### Q. How are the tasks in the issues assigned?\n\nA. There are official communication challenges that we encourage participants to use.\n\n### Q. Can I work individually or should I work as part of a team?\n\nA. You are free to work in stealth mode, but please keep in mind that you risk finishing too late or losing points for being bad at collaborating. We expect the issues in phase 1 to be done by multiple people, in multiple steps. But anyone can try to make everything in stealth mode and open a PR with everything.\n\n### Q. How can I find collaborators?\n\nA. Participate on the issue or in Discord by indicating your desire to participate, by sharing your ideas, reviewing others' work, giving feedback, clarifying, or whatever makes sense.\n\n### Q. How can I ensure good collaboration?\n\nA. Since we are fully remote, collaborating can be a challenge and the best collaborators will be rewarded. We don't know each other, so having good communication is key.\n\n### Q. How will my collaboration be evaluated?\n\nA. At the end of a big task, i.e. the Evaluation DAO is finished, the core team will take all the small contributions and identify contributors, and then suggest how to split the task prize. We'll propose the split and allow room for public negotiations.\n\n### Q. How much is the prize pool?\n\nA. There is a total prize pool of **133,700 ATOM** available during the Game of Realms competition, one-third of which (**44,121 ATOM**) will be allocated to contributions from phase one.\n\n### Q. When will I receive my rewards for my collaboration?\n\nA. Rewards will be allocated retroactively by the Evaluation DAO during phase 2.\n\n### Q. Will there be a leaderboard and place where we can submit evidence for tasks?\n\nA. Not yet. The leaderboard will come in phase 2.\n\n### Q. What will the overall tasks consist of?\n\nA. Here is a non-exhaustive list:\n\n* Onboard more contributors (create tutorials and documentation)\n* Improve the project and implement more things\n* Bootstrap our genesis of contributors for the future mainnet\n* Experiment with Proof of Contribution by having a simpler system: Evaluation DAO\n* Identify the best participants to propose jobs\n* Identify the best organizations to propose partnerships\n\n### Q. Are there tasks for non-programmers?\n\nA. There are more tasks for programmers, but multiple parts are for non-programmers too. During phase 1, the tasks are relatively well defined, please read this:\n\nhttps://github.com/gnolang/gno/issues/390\nhttps://github.com/gnolang/gno/issues/540\n\n### Q. What are the requirements to start participating?\n\nA. There is no requirement to start participating. You’ll need to do some KYC at the end of the competition to receive a prize. Feel free to fill out the form linked in the Register section of the following issue:\n\nhttps://github.com/gnolang/gno/issues/390\n\nThis will allow us to contact you about the competition through our newsletter and set up prize payment later. Use the comment section of the issues or discuss them on Discord if you plan to work on specific tasks, so we can see that you’re actively working on a topic.\n\n### Q. Is there a fixed period of time for phase 1?\n\nA. No. Phase 1 will be finished when we consider that enough materials have been implemented to switch to phase 2.\n\n### Q. Is it possible to install a local testnet to get a proper local development environment?\n\nA. You can find the answer in this GitHub issue. Subscribe to the issue to get updates:\n\nhttps://github.com/gnolang/gno/issues/478\n\n### Q. Will there be a list of what needs to be tested? When will the tests start?\n\nA. The best place to look is on GitHub here:\n\nhttps://github.com/gnolang/gno/issues/390\n\nDuring phase 1, there are 3 official focuses:\n\n* Evaluation DAO\n* Tutorials\n* Governance Module\n\nThe competition was just announced, but we’ll review contributions made in the past, too, so it starts from the first commit, ~1-2 years ago.\n",
    "2023-03-12T14:02:00Z",
    "",
    "gnoland,game-of-realms,faq"
  ],
  "max_deposit": ""
}
#5 vm/execgno.land/r/gnoland/blog.ModAddPost(monthly-dev-1, The More You Gno: Gno.land Monthly Updates, We made progress across the board at Gno.land last month, from onboarding more devs to receiving an influx of contributions to the Game of Realms contest. To encourage development and discourse, we set up a biweekly public developer call in addition to our biweekly Office Hours sessions. Anyone can join, ask questions, and give their suggestions on how to shape the Gno.land platform and become a contributor. Last month, we covered several pressing topics from Gno IDE and Gno.land website language, to GnoVM, IBC, and ICS. Jae also came back to the circuit in March with two IRL workshops for devs at side events during EthDenver and Game Developer Conference (GDC) in San Francisco. ## Developer Updates You can find the live streams of the new biweekly public developer calls on [Gno.land YouTube](https://www.youtube.com/@_gnoland/videos) as well as access the agendas on [GitHub](https://github.com/gnolang/meetings/blob/main/notes/2023_03_15_dev_call_notes.md). The main talking points this month were Gno IDE, Gno.land website language and UX, garbage collection, bug fixes, and how to bring IBC and ICS to the platform. We are working on all these issues concurrently but the order of release will be Gno.land mainnet, IBC, and then ICS (this is reflected in the DAG below). [![Gno.land mini DAG](https://gnolang.github.io/blog/2023-04-15_myg-march/src/thumbs/mini-dag.png)](https://gnolang.github.io/blog/2023-04-15_myg-march/src/mini-dag.png) ## Gno.land Website Language We want to add more features for developers, such as libraries to make writing interfaces better and more consistent. There is an open topic for frontend developers with typography skills and library developers to create a UI framework for markdown or a custom rendering system. Internally, our core team is working on improvements to Gno.land’s website, making it easier to navigate with shorter columns while ensuring the text is markdown centric and readable in plain text and the GitHub rendering machine. We hope to achieve this using CSS and having classes for vertical columns, without having to make an extension to the markdown parser. ## Gno IDE Gno.land developer experience team is working on a web-based Gno IDE for quickly building Gno realms and packages right on your browser by just visiting a web app. Gno IDE will provide much improved UX for everything around building a realm (including making the testing easier), and additional features like autocompletion in the editor. Gno IDE will contain all the features you would expect from an IDE as well as valuable APIs for devs building tools around Gno.land with the public Gno Infrastructure. [![Gno IDE](https://gnolang.github.io/blog/2023-04-15_myg-march/src/thumbs/gno-ide.png)](https://gnolang.github.io/blog/2023-04-15_myg-march/src/gno-ide.png) Gno IDE will have multiple modes to support different use cases. The normal mode will be used during everyday developments (as you’re familiar with from other code editors). The presentation mode is for high accessibility and readability. You can use it during video calls or physical workshops while projecting your screen to an audience. The third and perhaps most interesting mode is the embedded mode. Use this mode to embed the IDE into websites and blogs. This feature is especially useful for tutorials to test out sample code, run it on the real testnets, and play with it. ## IBC and ICS As depicted in the DAG above, Gno.land mainnet will launch first, followed by IBC and then ICS. We will focus on implementing IBC1, as we strongly believe in the ICS model and want to be a consumer of an existing Cosmos chain. We want a common ICS implementation that works across many hubs because Gno.land is a type of hub that will need its own ICS to scale while providing GnoVM on consumer chains on the Cosmos Hub. Our next step now is to find the best way to configure ICS for Gno.land and make GnoVM available as a consumer chain in the Cosmos Hub system. Regarding IBC, we will use the current implementation that was written for the Cosmos SDK and port that over to Tendermint2. We anticipate some issues along the way including security patches that need to be applied to our code base. There are multiple ongoing directions and discussions about how to bridge Gno.land’s smart contracts to IBC, which are essentially Interchain smart contract interactions. One possibility is to have an API that submits events to a queue of outgoing events, and another queue to receive and consume events asynchronously. This mechanism could work for IBC2 to have rich inter-contract Interchain features, and the same API could work for Interchain plus smart contract interactions that require advanced options. We discussed a proposal to create a standard for Interchain contracts so that IBC2 could eventually be standardized eliminating limitations by applying it with an EVM, other languages, and CosmWasm. This protocol could be based on Protobuf or a similar well-known syntax definition protocol so that we can push the Interchain to the next level. IBC2 will be safe and fast and replace vulnerable atomic bridges between multiple technologies. This is a major update that we are committed to developing and we need help identifying all the challenges involved. Working on IBC integration, separate from the Gno.land mainnet launch, will require significant time to understand how the light client system works. If you’re interested in taking on this task, let us know and we’ll set up a group. IBC will likely be the most important challenge of Game of Realms phase 2. ## Garbage Collection Currently, our work on garbage collection does not address the problem in the traditional Golang sense of dealing with memory efficiency. Instead, we are progressively optimizing and improving the main state tree by automating the clean-up of orphan nodes. The next phase will be targeting the official garbage collector component to begin work on memory management as we have some common Golang garbage collection challenges, but are identifying some uncommon ones too. We need to consider elements like where to hold our objects because this is tied to releasing them in a concurrent lock-free way. We also need a good data structure. This is ongoing research as of now to implement a dedicated routine to synchronously clean stuff in a non-blocking way. ## Game of Realms This month, we have seen a massive uptick in contributions to Game of Realms phase one with a tidal wave of issues, general discussions, and PRs. One of the biggest things we worked on was adding support for MOD, which is a version of Go mod with an easier interface to manage your dependencies and version your dependencies. You can track the ongoing issue on GitHub [here](https://github.com/gnolang/gno/issues/390). There have been some really strong contributions to the Evaluation DAO and governance module, as well as a big CLI refactor that went into our code base. We've also seen people contribute contracts like GRC 1155 or general improvements to existing realms, with many suggestions for fixing bugs. Finding bugs and reporting what people want is a good indication that the Gno.land platform is being picked up and gaining adoption. You can find the Office Hours recordings that cover Game of Realms on YouTube [here](https://www.youtube.com/watch?v=JTmNg-b6Lcs). ## Developer Events Stateside Gno.land hosted a lively meetup during EthDenver last month where Gno.land founder and core dev Jae Kwon gave a talk for Solidity developers called “Gno.land, the Inevitable Next Generation Smart Contract Platform." He compared and contrasted Gno.land and Gnolang to Solidity, and showed Ethereum developers how the GnoVM shifts the smart contract paradigm. You can watch the [recording here](https://www.youtube.com/watch?v=IJ0xel8lr4c). Also in March, Jae hosted a gaming workshop at a side event during the infamous Gaming Developer Conference (GDC) in San Francisco. “Gno.land for Game Developers, Building Your App in Web3," showed participants a sample gaming app built on the Gno.land platform and offered them the chance to try their hand at writing a smart contract for their app with Gno. ## Virtual Events - How to Build a Forum Core tech lead at Gno.land Miloš Živković held a virtual workshop for Go devs called “How to Build a Forum.” He showed how Gnolang is a fast and simple way to build and launch smart contracts using the Gnolang interpreter virtual machine that interprets Gno and eliminates the need for any servers or ORNs. The VM allows for the memory state of your Gno.land application to persist automatically after every transactional function call, which is a completely new way to handle transaction volume and memory recall. You can watch the [full tutorial here](https://github.com/gnolang/workshops). *We’d like the community to get involved in Gno.land’s monthly updates, so if you’re building on Gno.land and want to highlight your development, project, event, or idea, let us know and we’ll include your contribution.* , 2023-04-15T13:37:00Z, christina, gnoland,gnovm,tm2)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "monthly-dev-1",
    "The More You Gno: Gno.land Monthly Updates",
    "\n\nWe made progress across the board at Gno.land last month, from onboarding more devs to receiving an influx of contributions to the Game of Realms contest. To encourage development and discourse, we set up a biweekly public developer call in addition to our biweekly Office Hours sessions. Anyone can join, ask questions, and give their suggestions on how to shape the Gno.land platform and become a contributor. Last month, we covered several pressing topics from Gno IDE and Gno.land website language, to GnoVM, IBC, and ICS. Jae also came back to the circuit in March with two IRL workshops for devs at side events during EthDenver and Game Developer Conference (GDC) in San Francisco.\n\n## Developer Updates\n\nYou can find the live streams of the new biweekly public developer calls on [Gno.land YouTube](https://www.youtube.com/@_gnoland/videos) as well as access the agendas on [GitHub](https://github.com/gnolang/meetings/blob/main/notes/2023_03_15_dev_call_notes.md). The main talking points this month were Gno IDE, Gno.land website language and UX, garbage collection, bug fixes, and how to bring IBC and ICS to the platform. We are working on all these issues concurrently but the order of release will be Gno.land mainnet, IBC, and then ICS (this is reflected in the DAG below).\n\n[![Gno.land mini DAG](https://gnolang.github.io/blog/2023-04-15_myg-march/src/thumbs/mini-dag.png)](https://gnolang.github.io/blog/2023-04-15_myg-march/src/mini-dag.png)\n\n## Gno.land Website Language\n\nWe want to add more features for developers, such as libraries to make writing interfaces better and more consistent. There is an open topic for frontend developers with typography skills and library developers to create a UI framework for markdown or a custom rendering system.\n\nInternally, our core team is working on improvements to Gno.land’s website, making it easier to navigate with shorter columns while ensuring the text is markdown centric and readable in plain text and the GitHub rendering machine. We hope to achieve this using CSS and having classes for vertical columns, without having to make an extension to the markdown parser.\n\n## Gno IDE\n\nGno.land developer experience team is working on a web-based Gno IDE for quickly building Gno realms and packages right on your browser by just visiting a web app. Gno IDE will provide much improved UX for everything around building a realm (including making the testing easier), and additional features like autocompletion in the editor. Gno IDE will contain all the features you would expect from an IDE as well as valuable APIs for devs building tools around Gno.land with the public Gno Infrastructure.\n\n[![Gno IDE](https://gnolang.github.io/blog/2023-04-15_myg-march/src/thumbs/gno-ide.png)](https://gnolang.github.io/blog/2023-04-15_myg-march/src/gno-ide.png)\n\nGno IDE will have multiple modes to support different use cases. The normal mode will be used during everyday developments (as you’re familiar with from other code editors). The presentation mode is for high accessibility and readability. You can use it during video calls or physical workshops while projecting your screen to an audience. The third and perhaps most interesting mode is the embedded mode. Use this mode to embed the IDE into websites and blogs. This feature is especially useful for tutorials to test out sample code, run it on the real testnets, and play with it.\n\n## IBC and ICS\n\nAs depicted in the DAG above, Gno.land mainnet will launch first, followed by IBC and then ICS. We will focus on implementing IBC1, as we strongly believe in the ICS model and want to be a consumer of an existing Cosmos chain. We want a common ICS implementation that works across many hubs because Gno.land is a type of hub that will need its own ICS to scale while providing GnoVM on consumer chains on the Cosmos Hub. Our next step now is to find the best way to configure ICS for Gno.land and make GnoVM available as a consumer chain in the Cosmos Hub system.\n\nRegarding IBC, we will use the current implementation that was written for the Cosmos SDK and port that over to Tendermint2. We anticipate some issues along the way including security patches that need to be applied to our code base. There are multiple ongoing directions and discussions about how to bridge Gno.land’s smart contracts to IBC, which are essentially Interchain smart contract interactions.\n\nOne possibility is to have an API that submits events to a queue of outgoing events, and another queue to receive and consume events asynchronously. This mechanism could work for IBC2 to have rich inter-contract Interchain features, and the same API could work for Interchain plus smart contract interactions that require advanced options. We discussed a proposal to create a standard for Interchain contracts so that IBC2 could eventually be standardized eliminating limitations by applying it with an EVM, other languages, and CosmWasm.\n\nThis protocol could be based on Protobuf or a similar well-known syntax definition protocol so that we can push the Interchain to the next level. IBC2 will be safe and fast and replace vulnerable atomic bridges between multiple technologies. This is a major update that we are committed to developing and we need help identifying all the challenges involved. Working on IBC integration, separate from the Gno.land mainnet launch, will require significant time to understand how the light client system works. If you’re interested in taking on this task, let us know and we’ll set up a group. IBC will likely be the most important challenge of Game of Realms phase 2.\n\n## Garbage Collection\n\nCurrently, our work on garbage collection does not address the problem in the traditional Golang sense of dealing with memory efficiency. Instead, we are progressively optimizing and improving the main state tree by automating the clean-up of orphan nodes. The next phase will be targeting the official garbage collector component to begin work on memory management as we have some common Golang garbage collection challenges, but are identifying some uncommon ones too.\n\nWe need to consider elements like where to hold our objects because this is tied to releasing them in a concurrent lock-free way. We also need a good data structure. This is ongoing research as of now to implement a dedicated routine to synchronously clean stuff in a non-blocking way.\n\n## Game of Realms\n\nThis month, we have seen a massive uptick in contributions to Game of Realms phase one with a tidal wave of issues, general discussions, and PRs. One of the biggest things we worked on was adding support for MOD, which is a version of Go mod with an easier interface to manage your dependencies and version your dependencies. You can track the ongoing issue on GitHub [here](https://github.com/gnolang/gno/issues/390).\n\nThere have been some really strong contributions to the Evaluation DAO and governance module, as well as a big CLI refactor that went into our code base. We've also seen people contribute contracts like GRC 1155 or general improvements to existing realms, with many suggestions for fixing bugs. Finding bugs and reporting what people want is a good indication that the Gno.land platform is being picked up and gaining adoption.\n\nYou can find the Office Hours recordings that cover Game of Realms on YouTube [here](https://www.youtube.com/watch?v=JTmNg-b6Lcs).\n\n## Developer Events Stateside\n\nGno.land hosted a lively meetup during EthDenver last month where Gno.land founder and core dev Jae Kwon gave a talk for Solidity developers called “Gno.land, the Inevitable Next Generation Smart Contract Platform.\" He compared and contrasted Gno.land and Gnolang to Solidity, and showed Ethereum developers how the GnoVM shifts the smart contract paradigm. You can watch the [recording here](https://www.youtube.com/watch?v=IJ0xel8lr4c).\n\nAlso in March, Jae hosted a gaming workshop at a side event during the infamous Gaming Developer Conference (GDC) in San Francisco. “Gno.land for Game Developers, Building Your App in Web3,\" showed participants a sample gaming app built on the Gno.land platform and offered them the chance to try their hand at writing a smart contract for their app with Gno.\n\n## Virtual Events - How to Build a Forum\n\nCore tech lead at Gno.land Miloš Živković held a virtual workshop for Go devs called “How to Build a Forum.” He showed how Gnolang is a fast and simple way to build and launch smart contracts using the Gnolang interpreter virtual machine that interprets Gno and eliminates the need for any servers or ORNs.\n\nThe VM allows for the memory state of your Gno.land application to persist automatically after every transactional function call, which is a completely new way to handle transaction volume and memory recall. You can watch the [full tutorial here](https://github.com/gnolang/workshops).\n\n*We’d like the community to get involved in Gno.land’s monthly updates, so if you’re building on Gno.land and want to highlight your development, project, event, or idea, let us know and we’ll include your contribution.*\n",
    "2023-04-15T13:37:00Z",
    "christina",
    "gnoland,gnovm,tm2"
  ],
  "max_deposit": ""
}
#6 vm/execgno.land/r/gnoland/blog.ModAddPost(monthly-dev-2, The More You Gno: Gno.land Monthly Updates - 2, Over the past few weeks, our core devs and ecosystem contributors have been making massive strides on Gno.land. There’s a lot to cover in the second edition of *The More You Gno*, from updates on Tendermint2 and GnoVM to stack/frames management, Gno IDE, and plenty more. We’ll also see what some of the external teams contributing to the platform have been up to, including Gno.land’s first decentralized exchange, GnoSwap, and Adena compatibility with GRC20 tokens. Check it out. ## Tendermint2 We’re making steady development progress on Tendermint2, which focuses on simplicity of design, minimal code, minimal dependencies, modular dependencies, and completeness. For the time being, Tendermint2 will stay in the main repo in a top-level folder named Tendermint2. This is the official location to develop and improve the consensus protocol until it is stable enough to be extracted from the Gno repo and become a standalone project. Currently, Tendermint2 depends on GnoVM, however, we are working to unlink this dependency and build a basic demo Tendermint2 chain and Client. Tendermint2 JS/TS Client is a JavaScript/TypeScript client implementation for Tendermint2-based chains. The client will make it easier for developers to interact with Tendermint2 chains, with a simplified API for account and transaction management, removing a ton of manual work and allowing developers to focus on building their dApps. You can [read more about the client here](https://www.npmjs.com/package/@gnolang/tm2-js-client). In addition to the Tendermint2 JS/TS client, we also created a Gno JS/TS client that just extends the TM2 one to provide Gno-specific functionality. You can read more about this here. ## Game of Realms The incentivized competition to find the best contributors to Gno.land continues in phase one, with slow but steady progress being made. Nir1218 initiated an Evaluation DAO Kickoff discussion in [issue 792](https://github.com/gnolang/gno/pull/792) to initiate testing code for the key smart contract infrastructure that will power the Gno.land platform. We are also interviewing architects for the core team with experience in governance modules and creating new economies on-chain, and a new DevRel team member will be joining us soon to create awesome tutorials and documentation to advance Game of Realms further. Gno.land must be built by the community and we will not rush to push Game of Realms to the second phase until we have found quality contributors to complete the challenge tasks and become the platform’s first founding members. ## Gno IDE Our core development team is working on a web-based IDE for Gno.land that will greatly improve the developer experience, allowing builders to quickly spin up Gno realms and packages right on their browsers just by visiting a web app. Currently named Gno IDE but with a rebranding on the horizon, this intuitive product focuses on ease of use and improved UX, and will include all the features you’d expect from an IDE, such as auto compilation in the editor, debugging, extensive testing capability, and powerful APIs like IntelliJ to supercharge your programming. Gno IDE currently has multiple modes to support different use cases, including a normal mode for everyday programming, similar to a standard code editor, a presentation mode for video calls or screen sharing, and an embedded mode to extend functionality, allowing you to embed the IDE directly into websites and blogs. You can also choose to edit your code in Emacs or Vim and easily switch between steps, from previous to next, making creating your tutorials and blog posts more intuitive. Watch out for more to come on Gno IDE soon, and if you want to contribute by creating a plugin for your favorite editor, open a PR to win contribution points. ## Stack/Frames Management The stack/frames is an integral part of the virtual machine (VM) and the language. Stack/frames provide context for smart contract developers, enabling them to access useful information, such as the original caller, or to determine if a contract is being called through another one. The current implementation is limited in scope and relies on fixed positions in the stack which can lead to inconsistencies. There is an ongoing [issue 683 open here](https://github.com/gnolang/gno/issues/683) and we have continued to work on enhancing stack/frames development over the last month. We’re adding a new function in the standard library std.PrevRealm (previously GetRealmCaller). Currently, we only have GetOrigCaller, which returns the user calling the first realm. This is not secure and we need a way to call the previous caller. This will allow a realm to handle GRC20 treasuries. See [issue 667](https://github.com/gnolang/gno/pull/667) and [issue 634](https://github.com/gnolang/gno/issues/634) for further details. ## Dealing with Panics in Native Functions We have devised a solution for dealing with panics in native functions, [see pull request 732](https://github.com/gnolang/gno/pull/732). Previously, when there was a panic in a native function, we could not recover it in Gno code. An example of this was the assert origin call, which panicked if the call was not a direct call from a transaction. Based on discussions with contributors, we’ve agreed that native functions should never panic, but if they panic, they panic with machined Gno panic. This gives us the choice in a native function to code a Gno panic, or, if it's a very bad panic, use Go panic so that we know the Gno code is unable to recover it. ## Logic Upgrading Making it possible to upgrade your logic is definitely out of scope for the first version of Gno.land, however, it’s an important issue that we have begun to discuss so that we can place certain restrictions on it, such as allowing upgrades when we consider them safe enough to be compatible with imports. Another idea is to work on creating workflows where migrations become something official. This way, we could define ways to migrate a contract completely in a single transaction at the chain level. Once everything is working and approved as the previous contract is parsed or archived, the new one gets the data. We will revisit this topic after the first version of Gno.land reaches the mainnet. ## Garbage Collection In terms of garbage collection, we don’t have memory leaks as such but we do have defacto memory leaks. By the VM having references to all objects, they won’t be released by Go’s underlying GC. We have some form of reference counting but it is only done at the end of a transaction. We have implemented a mark-and-sweep garbage collector and are working on the VM runtime to manage the objects and signal to the garbage collector to release them when they are no longer needed. This is done by adding the notion of a heap, which is managed by the garbage collector. ## GnoVM Developing GnoVM is an ongoing task and we will likely need to fork the GnoVM to create different competing versions. GnoVM will be complete, limited in features, and serve as the only interpreter, an enduring reference point over time. Future versions of GnoVM will be designed to incorporate CosmWasm so that all Cosmos chains can have CosmWasm enabled and the VM can run directly on the browser and execute tasks on the browser without requiring to make an API call, making it faster. To do this, we can make a Gno compiler in WebAssembly without changing the code because Go supports WASM cross-compilation. We plan on making a competing version of the original minimalist GnoVM, such as a Rust version with a JIT compiler using LLVM as a backend. ## Ecosystem Updates Since our last update, the Gno.land community continues to expand with awesome teams and contributors building cool infrastructure and projects on the platform. Below, we take a look at the largest developments of the past few weeks and extend a special thanks to everyone helping us build Gno.land. ## Teritori Teritori blockchain and multi-chain hub launched in November 2022, allowing IBC and non-IBC communities to connect, create groups, exchange tokens and NFTs, and launch new projects. Teritori’s idea for building on Gno.land is to create a multi-chain experience for users with a web portal, NFT marketplace, and social feed that will grow the community, and gradually integrate smart contracts and realms. This will promote Gno.land to more developers and showcase all the dApps being built through an easy-to-navigate dApp store. In the coming weeks, Teritori will work with the Onbloc team to integrate the Athena wallet into their portal as well as discuss ideas for promoting Game of Realms to new developers. ## Onbloc Onbloc is one of the Gno.land ecosystem’s most active contributors, responsible for building the Adena wallet and the block explorer Gnoscan. The team has also been working on creating an official Gno SDK that will allow developers to interact with Gno.land more easily, and remove some of the current friction. Onbloc opened [issue 701](https://github.com/gnolang/gno/issues/701) on GitHub primarily for developers who either have their own web app or are building a JavaScript app and want to work with Gno in some way. Currently, developers need to do a lot of manual work, which Gno SDK will abstract away, improving the workflow and developer experience. If you have any ideas or feedback, please contribute to the aforementioned issue. In another cool development, Onbloc has rolled out a new feature in Adena and Gnoscan to provide support for GRC20 tokens. To store and send tokens, you can open your Adena wallet, click on "Manage Tokens”, navigate to the Custom Token page, and see which GRC20 tokens are available on Gno Testnet 3, searching by the symbol or path. To research on or discover tokens, head over to the Tokens page on Gnoscan for a full list of GRC20 tokens. You can click on any token on the list for detailed information, such as the total supply, owner, or other available functions built into the token. The Account Details page has also been updated to display all tokens owned by each address. You can help by checking out [issue 764](https://github.com/gnolang/gno/pull/764), which discusses adding bigint to support a wide range of numbers and encoding binary, and [issue 816](https://github.com/gnolang/gno/pull/816), which highlights a small bug the team runs into when coding. Onbloc has also created a new [token resource page on GitHub](http://github.com/onbloc/gnotokenresources) for anyone to share or upload resources associated with their Gno.land project. This will serve as a shared knowledge pool about any dApp on the platform. If you wanted to create a decentralized exchange, for example, you would need all the information about the tokens available on Gno.land, such as their images, symbols, descriptions, links to websites, etc. Now you can find this in one handy GitHub repository. If you’re a developer or builder who wants your logo or any other static data posted, be sure to submit a PR. And speaking of decentralized exchanges, Onbloc is also building Gnoswap, the first DEX to be powered by Gno.land, designed to simplify the concentrated liquidity experience and increase capital efficiency for traders. Its interface is built using TypeScript to be user-friendly, secure, and accessible for streamlining complex mechanisms such as price range configurations and staking as part of its core service. Contribute to its interface [here](https://github.com/gnoswap-labs/gnoswap-interface). As for the contract side, Onbloc is actively working on its development with help from the core members of Gno.land. The code will be open-sourced for full transparency once the basic functions are ready. ## New Core Contributors We’re excited to welcome two new core team members, Antonio and Zack. Antonio joined us in April in the core team, bringing with him vast experience in IPFS, and writing Git servers in Go. Zack is our first “tinkerer in residence” and will try to bootstrap the ecosystem of small contracts and small libraries. He will also be writing apps and helping us design a system to better share and showcase our work with a super UX for team builders and open-source addicts. Antonio is already hard at work researching a benchmarking dashboard that will show performance improvements or regressions when we change the code. He’s assessing whether to use GiHub to track actions or run our own machine to execute GitHub actions. Take a peek at his research so far on [issue 783 here](https://github.com/gnolang/gno/pull/783). Zack is working on a microblog project. As an experienced web2 Go programmer, Zack is transitioning to web3. Since he’s interested in incentivized social networks, the microblog project will be his first realm, as a Twitter-style blog without titles, where each user has their own page based on their address. Check out [issue 391](https://github.com/gnolang/gno/pull/391) for more details. ## Developer Events Over the past few weeks, our core devs have been mainly focused on building but they’re preparing to speak at some exciting events in the coming months. Catch up with Manfred at BUIDL Asia, in Seoul, South Korea, from June 5 - 9. We’re co-hosting a side event with Onbloc, Code States, and Cosmostation on June 5, so be sure to register if you’re in town! We’ll also be at EthBelgrade in Serbia from June 2 - 4, and GopherCon in Berlin from June 26 - 29, so stop by and say hello. *Do you want to contribute to Gno.land’s monthly updates? If you’re building on Gno.land and want to highlight your development, project, event, or idea, let us know and we’ll include your contribution.* , 2023-05-26T13:37:00Z, christina, gnoland,gnovm,tm2)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "monthly-dev-2",
    "The More You Gno: Gno.land Monthly Updates - 2",
    "\n\nOver the past few weeks, our core devs and ecosystem contributors have been making massive strides on Gno.land. There’s a lot to cover in the second edition of *The More You Gno*, from updates on Tendermint2 and GnoVM to stack/frames management, Gno IDE, and plenty more. We’ll also see what some of the external teams contributing to the platform have been up to, including Gno.land’s first decentralized exchange, GnoSwap, and Adena compatibility with GRC20 tokens. Check it out.\n\n## Tendermint2\n\nWe’re making steady development progress on Tendermint2, which focuses on simplicity of design, minimal code, minimal dependencies, modular dependencies, and completeness. For the time being, Tendermint2 will stay in the main repo in a top-level folder named Tendermint2. This is the official location to develop and improve the consensus protocol until it is stable enough to be extracted from the Gno repo and become a standalone project. Currently, Tendermint2 depends on GnoVM, however, we are working to unlink this dependency and build a basic demo Tendermint2 chain and Client.\n\nTendermint2 JS/TS Client is a JavaScript/TypeScript client implementation for Tendermint2-based chains. The client will make it easier for developers to interact with Tendermint2 chains, with a simplified API for account and transaction management, removing a ton of manual work and allowing developers to focus on building their dApps. You can [read more about the client here](https://www.npmjs.com/package/@gnolang/tm2-js-client). In addition to the Tendermint2 JS/TS client, we also created a Gno JS/TS client that just extends the TM2 one to provide Gno-specific functionality. You can read more about this here.\n\n## Game of Realms\n\nThe incentivized competition to find the best contributors to Gno.land continues in phase one, with slow but steady progress being made. Nir1218 initiated an Evaluation DAO Kickoff discussion in [issue 792](https://github.com/gnolang/gno/pull/792) to initiate testing code for the key smart contract infrastructure that will power the Gno.land platform. We are also interviewing architects for the core team with experience in governance modules and creating new economies on-chain, and a new DevRel team member will be joining us soon to create awesome tutorials and documentation to advance Game of Realms further. Gno.land must be built by the community and we will not rush to push Game of Realms to the second phase until we have found quality contributors to complete the challenge tasks and become the platform’s first founding members.\n\n## Gno IDE\n\nOur core development team is working on a web-based IDE for Gno.land that will greatly improve the developer experience, allowing builders to quickly spin up Gno realms and packages right on their browsers just by visiting a web app. Currently named Gno IDE but with a rebranding on the horizon, this intuitive product focuses on ease of use and improved UX, and will include all the features you’d expect from an IDE, such as auto compilation in the editor, debugging, extensive testing capability, and powerful APIs like IntelliJ to supercharge your programming.\n\nGno IDE currently has multiple modes to support different use cases, including a normal mode for everyday programming, similar to a standard code editor, a presentation mode for video calls or screen sharing, and an embedded mode to extend functionality, allowing you to embed the IDE directly into websites and blogs. You can also choose to edit your code in Emacs or Vim and easily switch between steps, from previous to next, making creating your tutorials and blog posts more intuitive. Watch out for more to come on Gno IDE soon, and if you want to contribute by creating a plugin for your favorite editor, open a PR to win contribution points.\n\n## Stack/Frames Management\n\nThe stack/frames is an integral part of the virtual machine (VM) and the language. Stack/frames provide context for smart contract developers, enabling them to access useful information, such as the original caller, or to determine if a contract is being called through another one. The current implementation is limited in scope and relies on fixed positions in the stack which can lead to inconsistencies.\n\nThere is an ongoing [issue 683 open here](https://github.com/gnolang/gno/issues/683) and we have continued to work on enhancing stack/frames development over the last month. We’re adding a new function in the standard library std.PrevRealm (previously GetRealmCaller). Currently, we only have GetOrigCaller, which returns the user calling the first realm. This is not secure and we need a way to call the previous caller. This will allow a realm to handle GRC20 treasuries. See [issue 667](https://github.com/gnolang/gno/pull/667) and [issue 634](https://github.com/gnolang/gno/issues/634) for further details.\n\n## Dealing with Panics in Native Functions\n\nWe have devised a solution for dealing with panics in native functions, [see pull request 732](https://github.com/gnolang/gno/pull/732). Previously, when there was a panic in a native function, we could not recover it in Gno code. An example of this was the assert origin call, which panicked if the call was not a direct call from a transaction. Based on discussions with contributors, we’ve agreed that native functions should never panic, but if they panic, they panic with machined Gno panic. This gives us the choice in a native function to code a Gno panic, or, if it's a very bad panic, use Go panic so that we know the Gno code is unable to recover it.\n\n## Logic Upgrading\n\nMaking it possible to upgrade your logic is definitely out of scope for the first version of Gno.land, however, it’s an important issue that we have begun to discuss so that we can place certain restrictions on it, such as allowing upgrades when we consider them safe enough to be compatible with imports. Another idea is to work on creating workflows where migrations become something official. This way, we could define ways to migrate a contract completely in a single transaction at the chain level. Once everything is working and approved as the previous contract is parsed or archived, the new one gets the data. We will revisit this topic after the first version of Gno.land reaches the mainnet.\n\n## Garbage Collection\n\nIn terms of garbage collection, we don’t have memory leaks as such but we do have defacto memory leaks. By the VM having references to all objects, they won’t be released by Go’s underlying GC. We have some form of reference counting but it is only done at the end of a transaction. We have implemented a mark-and-sweep garbage collector and are working on the VM runtime to manage the objects and signal to the garbage collector to release them when they are no longer needed. This is done by adding the notion of a heap, which is managed by the garbage collector.\n\n## GnoVM\n\nDeveloping GnoVM is an ongoing task and we will likely need to fork the GnoVM to create different competing versions. GnoVM will be complete, limited in features, and serve as the only interpreter, an enduring reference point over time. Future versions of GnoVM will be designed to incorporate CosmWasm so that all Cosmos chains can have CosmWasm enabled and the VM can run directly on the browser and execute tasks on the browser without requiring to make an API call, making it faster. To do this, we can make a Gno compiler in WebAssembly without changing the code because Go supports WASM cross-compilation.\n\nWe plan on making a competing version of the original minimalist GnoVM, such as a Rust version with a JIT compiler using LLVM as a backend.\n\n## Ecosystem Updates\n\nSince our last update, the Gno.land community continues to expand with awesome teams and contributors building cool infrastructure and projects on the platform. Below, we take a look at the largest developments of the past few weeks and extend a special thanks to everyone helping us build Gno.land.\n\n## Teritori\n\nTeritori blockchain and multi-chain hub launched in November 2022, allowing IBC and non-IBC communities to connect, create groups, exchange tokens and NFTs, and launch new projects. Teritori’s idea for building on Gno.land is to create a multi-chain experience for users with a web portal, NFT marketplace, and social feed that will grow the community, and gradually integrate smart contracts and realms. This will promote Gno.land to more developers and showcase all the dApps being built through an easy-to-navigate dApp store. In the coming weeks, Teritori will work with the Onbloc team to integrate the Athena wallet into their portal as well as discuss ideas for promoting Game of Realms to new developers.\n\n## Onbloc\n\nOnbloc is one of the Gno.land ecosystem’s most active contributors, responsible for building the Adena wallet and the block explorer Gnoscan. The team has also been working on creating an official Gno SDK that will allow developers to interact with Gno.land more easily, and remove some of the current friction. Onbloc opened [issue 701](https://github.com/gnolang/gno/issues/701) on GitHub primarily for developers who either have their own web app or are building a JavaScript app and want to work with Gno in some way. Currently, developers need to do a lot of manual work, which Gno SDK will abstract away, improving the workflow and developer experience. If you have any ideas or feedback, please contribute to the aforementioned issue.\n\nIn another cool development, Onbloc has rolled out a new feature in Adena and Gnoscan to provide support for GRC20 tokens. To store and send tokens, you can open your Adena wallet, click on \"Manage Tokens”, navigate to the Custom Token page, and see which GRC20 tokens are available on Gno Testnet 3, searching by the symbol or path. To research on or discover tokens, head over to the Tokens page on Gnoscan for a full list of GRC20 tokens. You can click on any token on the list for detailed information, such as the total supply, owner, or other available functions built into the token. The Account Details page has also been updated to display all tokens owned by each address. You can help by checking out [issue 764](https://github.com/gnolang/gno/pull/764), which discusses adding bigint to support a wide range of numbers and encoding binary, and [issue 816](https://github.com/gnolang/gno/pull/816), which highlights a small bug the team runs into when coding.\n\nOnbloc has also created a new [token resource page on GitHub](http://github.com/onbloc/gnotokenresources) for anyone to share or upload resources associated with their Gno.land project. This will serve as a shared knowledge pool about any dApp on the platform. If you wanted to create a decentralized exchange, for example, you would need all the information about the tokens available on Gno.land, such as their images, symbols, descriptions, links to websites, etc. Now you can find this in one handy GitHub repository. If you’re a developer or builder who wants your logo or any other static data posted, be sure to submit a PR.\n\nAnd speaking of decentralized exchanges, Onbloc is also building Gnoswap, the first DEX to be powered by Gno.land, designed to simplify the concentrated liquidity experience and increase capital efficiency for traders. Its interface is built using TypeScript to be user-friendly, secure, and accessible for streamlining complex mechanisms such as price range configurations and staking as part of its core service. Contribute to its interface [here](https://github.com/gnoswap-labs/gnoswap-interface).\n\nAs for the contract side, Onbloc is actively working on its development with help from the core members of Gno.land. The code will be open-sourced for full transparency once the basic functions are ready.\n\n## New Core Contributors\n\nWe’re excited to welcome two new core team members, Antonio and Zack. Antonio joined us in April in the core team, bringing with him vast experience in IPFS, and writing Git servers in Go. Zack is our first “tinkerer in residence” and will try to bootstrap the ecosystem of small contracts and small libraries. He will also be writing apps and helping us design a system to better share and showcase our work with a super UX for team builders and open-source addicts.\n\nAntonio is already hard at work researching a benchmarking dashboard that will show performance improvements or regressions when we change the code. He’s assessing whether to use GiHub to track actions or run our own machine to execute GitHub actions. Take a peek at his research so far on [issue 783 here](https://github.com/gnolang/gno/pull/783).\n\nZack is working on a microblog project. As an experienced web2 Go programmer, Zack is transitioning to web3. Since he’s interested in incentivized social networks, the microblog project will be his first realm, as a Twitter-style blog without titles, where each user has their own page based on their address. Check out [issue 391](https://github.com/gnolang/gno/pull/391) for more details.\n\n## Developer Events\n\nOver the past few weeks, our core devs have been mainly focused on building but they’re preparing to speak at some exciting events in the coming months. Catch up with Manfred at BUIDL Asia, in Seoul, South Korea, from June 5 - 9. We’re co-hosting a side event with Onbloc, Code States, and Cosmostation on June 5, so be sure to register if you’re in town! We’ll also be at EthBelgrade in Serbia from June 2 - 4, and GopherCon in Berlin from June 26 - 29, so stop by and say hello.\n\n*Do you want to contribute to Gno.land’s monthly updates? If you’re building on Gno.land and want to highlight your development, project, event, or idea, let us know and we’ll include your contribution.*\n",
    "2023-05-26T13:37:00Z",
    "christina",
    "gnoland,gnovm,tm2"
  ],
  "max_deposit": ""
}
#7 vm/execgno.land/r/gnoland/blog.ModAddPost(funding-program, Announcing the Gno.land Funding and Grants Program, If you’re interested in building in Gno.land and using the Gnolang (Gno) language to make a meaningful contribution, we’ve launched the Gno.land Funding and Grants Program to support you on your journey. If you’re a developer, tinkerer, researcher, or educator and you’re excited by the idea of creating innovative dApps, tooling, infrastructure, products, or smart contract libraries on Gno.land, now you can apply for funding. ## About the Gnoland Funding and Grants Program We’re building Gno.land to endure with timeless code that will serve as a reference point for many years to come. Secured by a novel consensus mechanism, Proof of Contribution, Gno.land rewards contributors fairly, addressing one of the blockchain industry’s biggest problems. The developers that are most active on the platform with the highest quality contributions will secure the most rewards. We already have a growing community of Gnomes innovating and building on Gno.land and we’re looking to add more contributors to extend the usability of the platform and its smart contract library. Our grants program will encourage further participation by allocating financial awards and contributions to individuals and teams who want to build dApps, core infrastructure, products, or features on Gno.land, incentivizing more like-minded Gnomes to test the Proof of Contribution mechanism and push the chain to new limits. The grant amount and duration will depend on the scope and ambition of the project as well as the work involved. ## Types of Contributors The Gno.land Funding and Grants program is divided into four different categories – tinkerer, builder, researcher, and educator – to ensure that we cater to a diverse range of people and working preferences. Here’s how we define these categories: - Tinkerer: You want to experiment and invent - Build dApps, improve features, and find and develop new ideas - Builder: You have an idea and are ready to build it - Build dApps, infrastructure, tooling, products, or port your existing apps to Gno - Researcher: You want to discover and analyze - Deep dive into topics linked to the Gno.land universe ## What We Are Looking For To qualify for a Gno.land grant, we’re looking for motivated and passionate people who can contribute by developing dApps, core infrastructure, useful and innovative products, or features that improve the usability of the Gno.land chain, specifically: - Decentralized Applications (dApps) - What types of dApps do you want to see on Gno.land? Show us. - Build, test, and launch a suite of Gno.land dApps for the community, focusing on diverse use cases and industries such as DeFi, gaming, supply chain management, and social media. Ensure that these apps cater to both individual users and businesses - These dApps should integrate seamlessly with existing Gno.land infrastructure, encourage user interaction, and promote the adoption of Gno.land services - Infrastructure, DevX, Quality - Develop comprehensive GitHub and AWS integration for Gno.land, including streamlined deployment processes, continuous integration and delivery pipelines, and monitoring tools - Create Helm charts for easy deployment and management of Gno clusters, enabling users to quickly set up and scale their Gno infrastructure - Design and implement an event system for Gno.land contracts, allowing for real-time monitoring, analysis, and auditing of contract-related events - Enhance Gno.land security by conducting regular vulnerability assessments, penetration testing, and implementing best practices for secure smart contract development - Products - Develop advanced project management software tailored to the needs of Gno.land developers and teams, with features such as task tracking, collaboration tools, and integrated Gno.land services - Create comprehensive documentation, including guides, tutorials, and API references, to help users understand and utilize Gno.land's features and services more effectively - Design a censorship-resistant smart contract system, enabling secure and transparent transactions and interactions on the Gno.land platform, free from external interference - Interoperability & Integration - Implement cross-chain compatibility and interoperability, allowing Gno.land to connect and interact with other blockchain networks, expanding its potential user base and increasing its overall reach - Develop a powerful integrated development environment (IDE) specifically for Gno.land developers, with features like code completion, debugging tools, and seamless integration with Gno.land services - Design and launch a user-friendly wallet for Gno tokens, featuring a secure and intuitive interface, support for multiple devices, and easy integration with Gno.land dApps The above guidelines are by no means exhaustive and are intended to spark your imagination and give examples of the types of contributions we’re looking for in Gno.land. We’re open-minded and willing to assess all grant proposals, so if you have an idea that’s not on the list or a suggestion that you think will benefit our vibrant community, let us know. If your submission doesn’t qualify for a grant, we’ll do our best to provide you with open and honest feedback and points for improvement, as well as identify any opportunities to get involved in our ongoing incentivized Game of Realms competition. ## Meet Our First Grantees ### Onbloc Onbloc is a blockchain software company building core infrastructure for Gno.land and helping other dApp developers onboard to the Gno.land ecosystem seamlessly. The team has developed the Gno.land Developer Portal, which provides comprehensive introductory docs for developers, the Adena web3 wallet for Gno.land, and the Gnoscan block explorer. As Gno.land’s most active contributor, Onbloc is leading many community-driven initiatives and we’re excited to extend a grant to this passionate South Korea-based development team to continue their incredible work developing the wallet further, iterating the Gnoscan block explorer, and building Gno.land’s first DEX, Gnoswap. In addition to this, we want to encourage Onbloc to continue their amazing work with the community, contributing to meetings, replying to comments on our social platforms, writing code base, organizing local events and meet-ups in South Korea, and creating products that expand the Gno.land ecosystem. *“Onbloc is thrilled to be a part of the Gno.land Grants Program. As one of the earliest contributors, our endeavors have involved releasing technical guides and research reports, developing infrastructure tools for dApps, creating DeFi smart contracts, and more. We are excited to leverage this grant to further enhance the quality of our products and strengthen our workforce. The grant will enable us to cover some of the existing expenses and hire additional developers to focus on smart contracts and the core side of GnoVM. We expect these endeavors to push the Gno.land blockchain to new limits and accelerate the achievement of the milestones on our roadmap. With the support from the Gnoland team, we are confident in our ability to make significant strides and further contributions to foster the growth of the Gnoland ecosystem.”* *Dongwon Shin, CEO, Onbloc* ### Teritori Teritori is a super-dApp project allowing individuals and organizations to interact, organize, and communicate in a radically resilient and decentralized way. Based on an interoperable vision, the application is built on a multi-chain experience approach, gradually integrating Gnolang as the fundamental technical brick of the system. Currently in Beta ([available here](https://app.teritori.com/)), the app is making modular tools and dApps available to users, with a single gamified user experience. Teritori's philosophy is to offer users and developers a place that belongs to them, their territory, with an emphasis on interoperability, modularity, and customization. Users can interact with a social network, NFT marketplace, DAO launcher, service marketplace, games, etc., and integrate a plethora of dApps thanks to the dApp store, where Teritori will promote all Gno.land dApps to encourage the growth of the ecosystem. Using the Gno.land grant, Teritori will continue this amazing work and develop a moderation DAO to provide content moderation to Gno.land in a healthy and decentralized way, a challenge that faces the entire web3 industry. By 2024, the UX of Teritori v1 will be based on decentralized messaging without blockchain, allowing users to converse in a "natural" way while adding modules and web3 features. Creating and managing a GnoDAO could be as easy as managing a WhatsApp group. *“At Teritori, we want to make decentralized organizations accessible to all and experiment with new governance models for humans, social groups, businesses, and diverse organizations. Gno.land enables us to build this vision in a modular, future-proof, and censorship-resistant way. Thanks to the Grants Program, we'll be able to accelerate our development, continue to contribute proactively and build user experiences that enable as many people as possible to discover the Gnol.and ecosystem. We're starting work developing a DAO launcher, with different standard templates for DAOs, in particular, DAOs enabling moderation within news feeds, forums, or social networks. This will rapidly open many doors, such as those of conflict resolution DAOs, on-service marketplaces, or project management software. Gnol.and is a playground where anything is possible! We'll be documenting [our journey here](https://github.com/gnolang/hackerspace/issues/7#issuecomment-1588197187), and sharing our progress as we stay connected to the needs of the community.”* *Zooma, Core Lead, Teritori* ### Zack Zack is the first tinkerer-in-residence at Gno.land. With a deep-rooted passion for innovation, he embraced Go early on in 2013 and ever since, has been harnessing its power to craft peer-to-peer programs and develop web2 applications. While Gno.land marks Zack's initial foray into web3 development and blockchain dApps, the Gnolang language allowed him to effortlessly apply his Golang expertise. This has enabled him to flourish within an ecosystem that revolves around decentralized systems, seamlessly transitioning his skill set to create unique decentralized solutions. *“I have always been curious about web3 and blockchain technologies but have not developed expertise in smart contract languages and struggled to keep up with the fast-changing ecosystem around blockchain technologies. As an avid Go programmer, Gno and Gno.land created the opportunity for me to develop decentralized applications on blockchains by providing a framework and ecosystem that is consistent with Golang in terms of syntax, sustainability, and stability. The additional web3 features in Gno and Gno.land provide huge potential for interesting applications that I hope to unlock to move beyond web2 and harness blockchain technology for novel use cases. The grant provided for tinkerer-in-residence was the key to giving me the resources to move through this ecosystem as I try to think outside the box for what web3 can be and what blockchain can do for a web2 developer like myself.”* *Zack Scholl, tinkerer-in-residence* **How You Can Apply** Actions speak louder than words. Until Gno.land is completely on-chain, the best place to start is by contributing to PRs and issues on the Gno.land repos or participating in the Game of Realms competition. If you want to apply for a grant, you’ll need to fork the Gno.land Ecosystem Fund repo and outline your proposal in your project name’s file. Once we receive your application, our team will review it and get in touch if we believe that you fit the criteria. [See GitHub for full instructions](https://github.com/gnolang/ecosystem-fund-grants). Stay tuned, we’ll be hosting a Funding and Grants Program Q&A in the next few weeks! , 2023-06-27T13:37:00Z, christina,michelle, gnoland,funding,grants)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "funding-program",
    "Announcing the Gno.land Funding and Grants Program",
    "\n\nIf you’re interested in building in Gno.land and using the Gnolang (Gno) language to make a meaningful contribution, we’ve launched the Gno.land Funding and Grants Program to support you on your journey. If you’re a developer, tinkerer, researcher, or educator and you’re excited by the idea of creating innovative dApps, tooling, infrastructure, products, or smart contract libraries on Gno.land, now you can apply for funding.\n\n## About the Gnoland Funding and Grants Program\n\nWe’re building Gno.land to endure with timeless code that will serve as a reference point for many years to come. Secured by a novel consensus mechanism, Proof of Contribution, Gno.land rewards contributors fairly, addressing one of the blockchain industry’s biggest problems. The developers that are most active on the platform with the highest quality contributions will secure the most rewards. We already have a growing community of Gnomes innovating and building on Gno.land and we’re looking to add more contributors to extend the usability of the platform and its smart contract library.\n\nOur grants program will encourage further participation by allocating financial awards and contributions to individuals and teams who want to build dApps, core infrastructure, products, or features on Gno.land, incentivizing more like-minded Gnomes to test the Proof of Contribution mechanism and push the chain to new limits. The grant amount and duration will depend on the scope and ambition of the project as well as the work involved.\n\n## Types of Contributors\n\nThe Gno.land Funding and Grants program is divided into four different categories – tinkerer, builder, researcher, and educator – to ensure that we cater to a diverse range of people and working preferences. Here’s how we define these categories:\n\n- Tinkerer: You want to experiment and invent\n    - Build dApps, improve features, and find and develop new ideas\n- Builder: You have an idea and are ready to build it\n    - Build dApps, infrastructure, tooling, products, or port your existing apps to Gno\n- Researcher: You want to discover and analyze\n    - Deep dive into topics linked to the Gno.land universe\n\n## What We Are Looking For\n\nTo qualify for a Gno.land grant, we’re looking for motivated and passionate people who can contribute by developing dApps, core infrastructure, useful and innovative products, or features that improve the usability of the Gno.land chain, specifically:\n\n- Decentralized Applications (dApps)\n    - What types of dApps do you want to see on Gno.land? Show us.\n    - Build, test, and launch a suite of Gno.land dApps for the community, focusing on diverse use cases and industries such as DeFi, gaming, supply chain management, and social media. Ensure that these apps cater to both individual users and businesses\n    - These dApps should integrate seamlessly with existing Gno.land infrastructure, encourage user interaction, and promote the adoption of Gno.land services\n- Infrastructure, DevX, Quality\n    - Develop comprehensive GitHub and AWS integration for Gno.land, including streamlined deployment processes, continuous integration and delivery pipelines, and monitoring tools\n    - Create Helm charts for easy deployment and management of Gno clusters, enabling users to quickly set up and scale their Gno infrastructure\n    - Design and implement an event system for Gno.land contracts, allowing for real-time monitoring, analysis, and auditing of contract-related events\n    - Enhance Gno.land security by conducting regular vulnerability assessments, penetration testing, and implementing best practices for secure smart contract development\n- Products\n    - Develop advanced project management software tailored to the needs of Gno.land developers and teams, with features such as task tracking, collaboration tools, and integrated Gno.land services\n    - Create comprehensive documentation, including guides, tutorials, and API references, to help users understand and utilize Gno.land's features and services more effectively\n    - Design a censorship-resistant smart contract system, enabling secure and transparent transactions and interactions on the Gno.land platform, free from external interference\n- Interoperability & Integration\n    - Implement cross-chain compatibility and interoperability, allowing Gno.land to connect and interact with other blockchain networks, expanding its potential user base and increasing its overall reach\n    - Develop a powerful integrated development environment (IDE) specifically for Gno.land developers, with features like code completion, debugging tools, and seamless integration with Gno.land services\n    - Design and launch a user-friendly wallet for Gno tokens, featuring a secure and intuitive interface, support for multiple devices, and easy integration with Gno.land dApps\n\nThe above guidelines are by no means exhaustive and are intended to spark your imagination and give examples of the types of contributions we’re looking for in Gno.land. We’re open-minded and willing to assess all grant proposals, so if you have an idea that’s not on the list or a suggestion that you think will benefit our vibrant community, let us know. If your submission doesn’t qualify for a grant, we’ll do our best to provide you with open and honest feedback and points for improvement, as well as identify any opportunities to get involved in our ongoing incentivized Game of Realms competition.\n\n## Meet Our First Grantees\n\n### Onbloc\n\nOnbloc is a blockchain software company building core infrastructure for Gno.land and\n\nhelping other dApp developers onboard to the Gno.land ecosystem seamlessly. The team has developed the Gno.land Developer Portal, which provides comprehensive introductory docs for developers, the Adena web3 wallet for Gno.land, and the Gnoscan block explorer. As Gno.land’s most active contributor, Onbloc is leading many community-driven initiatives and we’re excited to extend a grant to this passionate South Korea-based development team to continue their incredible work developing the wallet further, iterating the Gnoscan block explorer, and building Gno.land’s first DEX, Gnoswap.\n\nIn addition to this, we want to encourage Onbloc to continue their amazing work with the community, contributing to meetings, replying to comments on our social platforms, writing code base, organizing local events and meet-ups in South Korea, and creating products that expand the Gno.land ecosystem.\n\n*“Onbloc is thrilled to be a part of the Gno.land Grants Program. As one of the earliest contributors, our endeavors have involved releasing technical guides and research reports, developing infrastructure tools for dApps, creating DeFi smart contracts, and more. We are excited to leverage this grant to further enhance the quality of our products and strengthen our workforce. The grant will enable us to cover some of the existing expenses and hire additional developers to focus on smart contracts and the core side of GnoVM. We expect these endeavors to push the Gno.land blockchain to new limits and accelerate the achievement of the milestones on our roadmap. With the support from the Gnoland team, we are confident in our ability to make significant strides and further contributions to foster the growth of the Gnoland ecosystem.”*\n\n*Dongwon Shin, CEO, Onbloc*\n\n### Teritori\n\nTeritori is a super-dApp project allowing individuals and organizations to interact, organize, and communicate in a radically resilient and decentralized way. Based on an interoperable vision, the application is built on a multi-chain experience approach, gradually integrating Gnolang as the fundamental technical brick of the system. Currently in Beta ([available here](https://app.teritori.com/)), the app is making modular tools and dApps available to users, with a single gamified user experience. Teritori's philosophy is to offer users and developers a place that belongs to them, their territory, with an emphasis on interoperability, modularity, and customization.\n\nUsers can interact with a social network, NFT marketplace, DAO launcher, service marketplace, games, etc., and integrate a plethora of dApps thanks to the dApp store, where Teritori will promote all Gno.land dApps to encourage the growth of the ecosystem. Using the Gno.land grant, Teritori will continue this amazing work and develop a moderation DAO to provide content moderation to Gno.land in a healthy and decentralized way, a challenge that faces the entire web3 industry. By 2024, the UX of Teritori v1 will be based on decentralized messaging without blockchain, allowing users to converse in a \"natural\" way while adding modules and web3 features. Creating and managing a GnoDAO could be as easy as managing a WhatsApp group.\n\n*“At Teritori, we want to make decentralized organizations accessible to all and experiment with new governance models for humans, social groups, businesses, and diverse organizations. Gno.land enables us to build this vision in a modular, future-proof, and censorship-resistant way. Thanks to the Grants Program, we'll be able to accelerate our development, continue to contribute proactively and build user experiences that enable as many people as possible to discover the Gnol.and ecosystem. We're starting work developing a DAO launcher, with different standard templates for DAOs, in particular, DAOs enabling moderation within news feeds, forums, or social networks. This will rapidly open many doors, such as those of conflict resolution DAOs, on-service marketplaces, or project management software. Gnol.and is a playground where anything is possible! We'll be documenting [our journey here](https://github.com/gnolang/hackerspace/issues/7#issuecomment-1588197187), and sharing our progress as we stay connected to the needs of the community.”*\n\n*Zooma, Core Lead, Teritori*\n\n### Zack\n\nZack is the first tinkerer-in-residence at Gno.land. With a deep-rooted passion for innovation, he embraced Go early on in 2013 and ever since, has been harnessing its power to craft peer-to-peer programs and develop web2 applications. While Gno.land marks Zack's initial foray into web3 development and blockchain dApps, the Gnolang language allowed him to effortlessly apply his Golang expertise. This has enabled him to flourish within an ecosystem that revolves around decentralized systems, seamlessly transitioning his skill set to create unique decentralized solutions.\n\n*“I have always been curious about web3 and blockchain technologies but have not developed expertise in smart contract languages and struggled to keep up with the fast-changing ecosystem around blockchain technologies. As an avid Go programmer, Gno and Gno.land created the opportunity for me to develop decentralized applications on blockchains by providing a framework and ecosystem that is consistent with Golang in terms of syntax, sustainability, and stability. The additional web3 features in Gno and Gno.land provide huge potential for interesting applications that I hope to unlock to move beyond web2 and harness blockchain technology for novel use cases. The grant provided for tinkerer-in-residence was the key to giving me the resources to move through this ecosystem as I try to think outside the box for what web3 can be and what blockchain can do for a web2 developer like myself.”*\n\n*Zack Scholl, tinkerer-in-residence*\n\n**How You Can Apply**\n\nActions speak louder than words. Until Gno.land is completely on-chain, the best place to start is by contributing to PRs and issues on the Gno.land repos or participating in the Game of Realms competition. If you want to apply for a grant, you’ll need to fork the Gno.land Ecosystem Fund repo and outline your proposal in your project name’s file. Once we receive your application, our team will review it and get in touch if we believe that you fit the criteria. [See GitHub for full instructions](https://github.com/gnolang/ecosystem-fund-grants). Stay tuned, we’ll be hosting a Funding and Grants Program Q&A in the next few weeks!\n",
    "2023-06-27T13:37:00Z",
    "christina,michelle",
    "gnoland,funding,grants"
  ],
  "max_deposit": ""
}
#8 vm/execgno.land/r/gnoland/blog.ModAddPost(monthly-dev-3, The More You Gno: Gno.land Monthly Updates - 3, We’ve been busy since the last edition of *The More You Gno,* with the Gno.land core team and ecosystem partners present at various global developer events. We’ve visited many gnomes (and gnomes-in-the-making) around the world from Berlin to Belgrade, spreading the word about Gno.land and growing our expanding community. Aside from all the networking, Gno.land is taking shape with a new iteration of our website, the Gno.land Funding and Grants Program, and a host of developer updates as always. Let’s dive in. ## Gno by Example We recently launched [Gno by Example](https://gno-by-example.com/), our equivalent to both [Solidity by Example](https://solidity-by-example.org/) and [Go by Example](https://gobyexample.com/), where you can see tutorials and code snippets to help you learn and get more easily onboarded to Gno.land. Gno by Example is designed to be community-run with a front-end app and tutorials in markdown. There’s also a specific markdown syntax where you can embed certain file fragments to make your tutorials more structured. We’d love to build this into the ultimate resource center for Gno.land, so feel free to [contribute](https://github.com/gnolang/gno-by-example) with new tutorials and sections. Contributions here are eligible for rewards from the Game of Realms competition. ## GnoVM We continue developing GnoVM and invite you to provide feedback on what can be improved. This month, there have been a lot of discussions about how to improve native bindings and use the Gno machine in native function calls. Native function calls are well-defined in Go code generation and Go templates but need some modifications for GnoVM. For example, since new native functions already exist in the Gno code, when we try to define a native function, calling the function doesn’t yield the desired result. We’ve created a bunch of panics and tried writing out native functions to see what goes on for them, in an investigation that will go on for the next few weeks. Got any ideas? Please contribute. ([PR 859](https://github.com/gnolang/gno/pull/859)). ## Testnets Talk about testnets has come up a lot in recent weeks and how to best proceed. Some gnomes are asking for a multi-node testnet to allow for great experimentation, whereas others prefer to keep the testnet single-node. There are advantages and disadvantages to both approaches and we are still listening to feedback and ideas. However, we will likely keep testnet 3 single-node and focus on the language while having a second dedicated multi-node testnet where devs can get creative, think outside of the box, test performance, consensus, and everything they need to push the chain to its limits. We’ve created a new [Hackerspace](https://github.com/gnolang/hackerspace) Repository for the multi-node testnet to prevent spam on the main repo, so please use it to share your scripts, posts, snippets, etc. ## Native Coins and GRC-20 Tokens We uncovered some significant issues with the banker module ([PR 393](https://github.com/gnolang/gno/pull/393)) regarding minting and burning tokens with the package minter. It was not scoping, filtering, or minting tokens correctly, making it possible to mint and burn unlimited tokens, including GNOT. We want to allow any realm to create its own token and run multiple tokens on their chains, but we need a prefix for security to resolve the issue and allow anyone to create GRC20 smart-contract-based coins but not native coins. We continue to work with small fixes on this issue and will reopen the PR soon. ## Gno.land Funding and Grants Program Last month we released our Funding and Grants Program to encourage more developers, researchers, educators, and tinkerers to interact with Gno.land. If you’re interested in experimenting with Gnolang (Gno) and building innovative dApps, tooling, products, or infrastructure, check out our GitHub [Funding and Grants](https://github.com/gnolang/ecosystem-fund-grants) page for further information on how you can apply. Start contributing to Gno.land or Game of Realms as this is a prerequisite of the funding and grant application process. ## Developer Relations The Gno core team is growing! We hired a new DevRel last month and are looking to take on another dev for this open position, so if you’re interested, head over to our [careers page](https://jobs.lever.co/allinbits) and apply! You can expect to see a lot more documentation, FAQs, tutorials, and onboarding materials in the coming weeks and months. ## Ecosystem Updates Our community of gnomes continues to expand, making tons of activity and progress over the past few weeks. Let’s see what they’ve been up to below. ## Onbloc Onbloc has been super active this month attending and co-hosting IRL events and networking to find new gnomes about town. Among other updates, Onbloc has completed the first integration of Tendermint2 JS with the Adena wallet and will continue to swap out their existing libraries with TM2JS wherever applicable to ensure that they are as tightly integrated as possible. The team has also open-sourced the Gnoscan block explorer, so if you’re interested in contributing, hop on over to [Gnoscan](https://gnoscan.io/) or the [GitHub repo](https://github.com/onbloc/gnoscan). ## Teritori Another of our first cohorts from the Grants program, Teritori continues to churn out awesome work and expand its growing team. This month, Teritori has been busy integrating Adena with the Teritori app and working on the DAO contract to build a DAO deployer and various DAO standards and templates for DAO creation. Teritori’s target is to focus on a moderation DAO that can be used for content moderation in social feeds and boards. In the coming weeks, the team plans to integrate the DAO contract into the UI to allow the community to launch a DAO and experiment on the testnet. They have also made an effort to really integrate Gno users by adding .gno at the end of nicknames for people to use. All our grant recipients are documenting their journeys in the hackerspace repo, check out [Teritori’s](https://github.com/gnolang/hackerspace/issues/7) journey. ## Resident Tinkerer, Zack Another grant receiver, Zack, has been making significant progress on his microblogging project. You can check out the specs on GitHub ([PR 791](https://github.com/gnolang/gno/pull/791)) or watch the informative tutorial video, [Go to Gno: How to Build a Microblog](https://www.youtube.com/watch?v=F-_dadxcRJM). You’ll find this especially useful if you have a background in Go and need some additional insights to turn your hand to blockchain coding. Zack has also been working on an implementation of a smart contract for creating and transferring text-based NFTs that conform to haiku poetry standards (find out more on GitHub ([PR 860](https://github.com/gnolang/gno/pull/860)). Other than that, Zack continues his Gnolang journey, “learning and having a lot of fun.” ## EthSeoul, BUIDL Asia, and Getting to Gno June saw members of our core team heading over to Seoul, South Korea, for a week of networking, talks, and events. Our VP of Engineering Manfred Touron gave a keynote on the evolution of smart contracts and an introduction to Gno.land for participants of EthSeoul, followed by a fascinating dive into Proof of Contribution at BUIDL Asia, where we also had a booth. It was an honor to meet so many talented and motivated Korean developers and contributors from around the globe. Seoul is a hotbed of up-and-coming talent and we’ll definitely be back soon. We also had the chance to meet with our most active ecosystem contributors Onbloc and co-hosted an event together, Getting to Gno, at the Code States developer academy along with long-time Cosmos builders, Cosmostation. Attendees had the chance to hear about what the core team is building and see some of the great work of our community. A massive thanks to everyone involved, it’s awesome to be BUIDLing together! Read more about our Korean adventures in this [fab write-up by Onbloc](https://medium.com/onbloc/2023-buidl-asia-recap-894c60a1c0f). EthSeoul - [Watch the talk here](https://www.youtube.com/watch?v=_iSsStlmxoU) BUIDL Asia - [Watch the talk here](https://www.youtube.com/watch?v=v6k3NHm5vcE) ## EthBelgrade Core contributor Milos Zivkovic rocked the Gno.land presence at EthBelgrade in Serbia, giving an introductory workshop about Gno.land, called 'Alice in Gno.land'. Being the first Ethereum conference organized in Serbia, there were lots of attendees from all over the Balkans. Participants joined in a journey through the enchanting realm of Gnolang and the Gno.land platform. Most of the participants were not aware of Goland before but were avid Gophers eager to learn more about the application of the Gno language in blockchains. ## GopherCon Berlin The Gno.land team also had a blast last month at the European edition of GopherCon in Berlin. We had a booth at the event for two days, where we networked, talked about all things Gno, made some amazing connections, and even shared some live code! We’re looking to build an active, open-source Gopher contributor group in Gno.land, so stay tuned for more on that soon. Coming up later this month, Gno.land is an official sponsor of EthCC, Paris, July 17-20. Stop by our booth to pick up some swag, say hey, and ask your questions about Gno.land. You can also catch us at the Nebular Summit for a keynote and workshop by our VP of Engineering, Manfred Touron. *Do you want to contribute to Gno.land’s monthly updates? If you’re building on Gno.land and want to highlight your development, project, event, or idea, let us know and we’ll include your contribution.* , 2023-07-11T13:37:00Z, christina, gnoland,gnovm,tm2)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "monthly-dev-3",
    "The More You Gno: Gno.land Monthly Updates - 3",
    "\n\nWe’ve been busy since the last edition of *The More You Gno,* with the Gno.land core team and ecosystem partners present at various global developer events. We’ve visited many gnomes (and gnomes-in-the-making) around the world from Berlin to Belgrade, spreading the word about Gno.land and growing our expanding community. Aside from all the networking, Gno.land is taking shape with a new iteration of our website, the Gno.land Funding and Grants Program, and a host of developer updates as always. Let’s dive in.\n\n## Gno by Example\n\nWe recently launched [Gno by Example](https://gno-by-example.com/), our equivalent to both [Solidity by Example](https://solidity-by-example.org/) and [Go by Example](https://gobyexample.com/), where you can see tutorials and code snippets to help you learn and get more easily onboarded to Gno.land. Gno by Example is designed to be community-run with a front-end app and tutorials in markdown. There’s also a specific markdown syntax where you can embed certain file fragments to make your tutorials more structured. We’d love to build this into the ultimate resource center for Gno.land, so feel free to [contribute](https://github.com/gnolang/gno-by-example) with new tutorials and sections. Contributions here are eligible for rewards from the Game of Realms competition.\n\n## GnoVM\n\nWe continue developing GnoVM and invite you to provide feedback on what can be improved. This month, there have been a lot of discussions about how to improve native bindings and use the Gno machine in native function calls. Native function calls are well-defined in Go code generation and Go templates but need some modifications for GnoVM. For example, since new native functions already exist in the Gno code, when we try to define a native function, calling the function doesn’t yield the desired result. We’ve created a bunch of panics and tried writing out native functions to see what goes on for them, in an investigation that will go on for the next few weeks. Got any ideas? Please contribute. ([PR 859](https://github.com/gnolang/gno/pull/859)).\n\n## Testnets\n\nTalk about testnets has come up a lot in recent weeks and how to best proceed. Some gnomes are asking for a multi-node testnet to allow for great experimentation, whereas others prefer to keep the testnet single-node. There are advantages and disadvantages to both approaches and we are still listening to feedback and ideas. However, we will likely keep testnet 3 single-node and focus on the language while having a second dedicated multi-node testnet where devs can get creative, think outside of the box, test performance, consensus, and everything they need to push the chain to its limits. We’ve created a new [Hackerspace](https://github.com/gnolang/hackerspace) Repository for the multi-node testnet to prevent spam on the main repo, so please use it to share your scripts, posts, snippets, etc.\n\n## Native Coins and GRC-20 Tokens\n\nWe uncovered some significant issues with the banker module ([PR 393](https://github.com/gnolang/gno/pull/393)) regarding minting and burning tokens with the package minter. It was not scoping, filtering, or minting tokens correctly, making it possible to mint and burn unlimited tokens, including GNOT. We want to allow any realm to create its own token and run multiple tokens on their chains, but we need a prefix for security to resolve the issue and allow anyone to create GRC20 smart-contract-based coins but not native coins. We continue to work with small fixes on this issue and will reopen the PR soon.\n\n## Gno.land Funding and Grants Program\n\nLast month we released our Funding and Grants Program to encourage more developers, researchers, educators, and tinkerers to interact with Gno.land. If you’re interested in experimenting with Gnolang (Gno) and building innovative dApps, tooling, products, or infrastructure, check out our GitHub [Funding and Grants](https://github.com/gnolang/ecosystem-fund-grants) page for further information on how you can apply. Start contributing to Gno.land or Game of Realms as this is a prerequisite of the funding and grant application process.\n\n## Developer Relations\n\nThe Gno core team is growing! We hired a new DevRel last month and are looking to take on another dev for this open position, so if you’re interested, head over to our [careers page](https://jobs.lever.co/allinbits) and apply! You can expect to see a lot more documentation, FAQs, tutorials, and onboarding materials in the coming weeks and months.\n\n## Ecosystem Updates\n\nOur community of gnomes continues to expand, making tons of activity and progress over the past few weeks. Let’s see what they’ve been up to below.\n\n## Onbloc\n\nOnbloc has been super active this month attending and co-hosting IRL events and networking to find new gnomes about town. Among other updates, Onbloc has completed the first integration of Tendermint2 JS with the Adena wallet and will continue to swap out their existing libraries with TM2JS wherever applicable to ensure that they are as tightly integrated as possible. The team has also open-sourced the Gnoscan block explorer, so if you’re interested in contributing, hop on over to [Gnoscan](https://gnoscan.io/) or the [GitHub repo](https://github.com/onbloc/gnoscan).\n\n## Teritori\n\nAnother of our first cohorts from the Grants program, Teritori continues to churn out awesome work and expand its growing team. This month, Teritori has been busy integrating Adena with the Teritori app and working on the DAO contract to build a DAO deployer and various DAO standards and templates for DAO creation. Teritori’s target is to focus on a moderation DAO that can be used for content moderation in social feeds and boards. In the coming weeks, the team plans to integrate the DAO contract into the UI to allow the community to launch a DAO and experiment on the testnet. They have also made an effort to really integrate Gno users by adding .gno at the end of nicknames for people to use. All our grant recipients are documenting their journeys in the hackerspace repo, check out [Teritori’s](https://github.com/gnolang/hackerspace/issues/7) journey.\n\n## Resident Tinkerer, Zack\n\nAnother grant receiver, Zack, has been making significant progress on his microblogging project. You can check out the specs on GitHub ([PR 791](https://github.com/gnolang/gno/pull/791)) or watch the informative tutorial video, [Go to Gno: How to Build a Microblog](https://www.youtube.com/watch?v=F-_dadxcRJM). You’ll find this especially useful if you have a background in Go and need some additional insights to turn your hand to blockchain coding. Zack has also been working on an implementation of a smart contract for creating and transferring text-based NFTs that conform to haiku poetry standards (find out more on GitHub ([PR 860](https://github.com/gnolang/gno/pull/860)). Other than that, Zack continues his Gnolang journey, “learning and having a lot of fun.”\n\n## EthSeoul, BUIDL Asia, and Getting to Gno\n\nJune saw members of our core team heading over to Seoul, South Korea, for a week of networking, talks, and events. Our VP of Engineering Manfred Touron gave a keynote on the evolution of smart contracts and an introduction to Gno.land for participants of EthSeoul, followed by a fascinating dive into Proof of Contribution at BUIDL Asia, where we also had a booth. It was an honor to meet so many talented and motivated Korean developers and contributors from around the globe. Seoul is a hotbed of up-and-coming talent and we’ll definitely be back soon.\n\nWe also had the chance to meet with our most active ecosystem contributors Onbloc and co-hosted an event together, Getting to Gno, at the Code States developer academy along with long-time Cosmos builders, Cosmostation. Attendees had the chance to hear about what the core team is building and see some of the great work of our community. A massive thanks to everyone involved, it’s awesome to be BUIDLing together! Read more about our Korean adventures in this [fab write-up by Onbloc](https://medium.com/onbloc/2023-buidl-asia-recap-894c60a1c0f).\n\nEthSeoul - [Watch the talk here](https://www.youtube.com/watch?v=_iSsStlmxoU)\n\nBUIDL Asia - [Watch the talk here](https://www.youtube.com/watch?v=v6k3NHm5vcE)\n\n## EthBelgrade\n\nCore contributor Milos Zivkovic rocked the Gno.land presence at EthBelgrade in Serbia, giving an introductory workshop about Gno.land, called 'Alice in Gno.land'. Being the first Ethereum conference organized in Serbia, there were lots of attendees from all over the Balkans. Participants joined in a journey through the enchanting realm of Gnolang and the Gno.land platform. Most of the participants were not aware of Goland before but were avid Gophers eager to learn more about the application of the Gno language in blockchains.\n\n## GopherCon Berlin\n\nThe Gno.land team also had a blast last month at the European edition of GopherCon in Berlin. We had a booth at the event for two days, where we networked, talked about all things Gno, made some amazing connections, and even shared some live code! We’re looking to build an active, open-source Gopher contributor group in Gno.land, so stay tuned for more on that soon.\n\nComing up later this month, Gno.land is an official sponsor of EthCC, Paris, July 17-20. Stop by our booth to pick up some swag, say hey, and ask your questions about Gno.land. You can also catch us at the Nebular Summit for a keynote and workshop by our VP of Engineering, Manfred Touron.\n\n*Do you want to contribute to Gno.land’s monthly updates? If you’re building on Gno.land and want to highlight your development, project, event, or idea, let us know and we’ll include your contribution.*\n",
    "2023-07-11T13:37:00Z",
    "christina",
    "gnoland,gnovm,tm2"
  ],
  "max_deposit": ""
}
#9 vm/execgno.land/r/gnoland/blog.ModAddPost(monthly-dev-4, The More You Gno: Gno.land Monthly Updates - 4, We’ve had more on our plates than ever over the last few weeks, with a huge team presence in Paris at EthCC and Nebular Summit in July, an opening talk at Stanford Blockchain Club in August by Gno.land’s founder Jae Kwon, and some awesome contributions from Gno.land grantees and ecosystem partners, including the first demos of Gnoswap and Teritori’s social platform and DAO deployer. We continue to make solid progress on GnoVM, an alternative VM in Rust, Tendermint2, native bindings, and much more. Check out our latest developer updates below. ## Upgrade Strategy for AVL Between GitHub and test3.gno.land One ongoing discussion is about an incompatibility bug that affects many things we do on Gno.land. The current AVL implementation on the testnet is outdated and does not match the AVL implementation users get when they pull in the latest master branch. Therefore, building and deploying contracts on a local Gno chain (with the latest master changes) and deploying those same contracts on the testnet may fail due to this incompatibility. We need to find a way to seamlessly integrate these two approaches. Ideally, when you write code on the master branch on GitHub, it should work on the testnet as well. In [issue 970](https://github.com/gnolang/gno/issues/970), you can find details of five different proposed solutions to implement this upgrade strategy, from resetting the whole blockchain (which would mean losing on-chain content and debugging information) to implementing a migration feature specifically for testnets that allows developers to rename packages and patch their contracts before publishing them. There are pros and cons to each proposal, and we continue to work together to find the best way forward. ## Encoding JSON and the Discussion Around Reflection Some contributors have highlighted the need for native JSON encoding, and we are discussing how best to approach it. See [issue 808](https://github.com/gnolang/gno/issues/808) for further details. One idea is to copy the code from encoding JSON in the standard library Go and take it over to Gno, but we would need to have reflection to do that. So, the important question here is whether we want to have reflection and, if so, what it should look like. We could emulate Go’s reflection package with some added elements, like being able to inspect the realm state, but we would need to be extremely careful about how we do this. For example, should users be able to read private fields of external packages through reflection or even *ufmt*, or could that introduce a problem? It would be simpler, and the language capability security would be tighter and easier to understand if we made accessing private fields impossible, but that would also make it limited. We could consider supporting reflection as an internal user package and whitelisting and encoding JSON. This way, new encoding packages would have to be whitelisted because they’re using the reflection package. We could also mark reflection as unsafe so developers know they must carefully audit their work. Another solution is the partial implementation of reflection. In [issue 971](https://github.com/gnolang/gno/issues/971), Gno.land core engineer Petar discusses introspection, which involves implementing reflection as Go has it now but enabling only one of its two main capabilities: the ability to inspect types, but not the ability to modify code. The main difference between introspection and reflection is that, since it is done at compile time, it is completely type-safe. This discussion is ongoing. ## Alternative GnoVM Implementations To deliver the best possible virtual machine, we’re working on two different implementations of GnoVM. Petar has spent the last three weeks developing a new GnoVM implementation written in Rust. His work is still private as the machine is not yet ready for public use, but he will soon make the code public for your inspection. Rust gives the ability to write more performant code and, in some scenarios, the Rust GnoVM can run up to 20 times faster than the GnoVM at roughly 87 milliseconds compared to 2,000 milliseconds on a Fibonacci benchmark, which is a considerable improvement in speed. Since one of Gno.land’s core features is that the entire tech stack is written in Go, we’re unsure if everyone will appreciate a Rust GnoVM or whether it aligns with our vision. However, it’s always good to provide alternatives, and, Petar argues, as long as the VM carries out the same functions (and does so more cheaply), most developers won’t mind what language the VM is written in. Rust has a few other features that some developers may favor over Go, such as more tools for creating languages, advanced garbage collector libraries that allow you to change the algorithm without changing the runtime (by swapping out a tricolor algorithm for a generational one, for example), and built-in data structures that solve many issues. For example, we needed a deterministic map that is fairly fast. With Rust’s Btree in the standard library, this was simple, Petar only had to implement the native Go map type with a Btree map from the standard library. This took just a few minutes. Core team dev Marc has also started an initiative to improve the Go GnoVM so that it is faster and offers a clean and user-friendly interface. He believes the debate over the VM is more about whether to have a VM that is bytecode-defined or AST-defined (rather than speed). Marc has been comparing the fundamental differences between the two and noted that the bytecode version is 15 times faster than the AST. This means that changing to Rust would give an increased performance of 2-3 times. The VM must be fast, secure, and performant in many ways. In either version, the AST will be stored on the blockchain, whereas the bytecode is only an internal representation that doesn't affect the users. We must still consider any potential architecture consequences between bytecode and AST before deciding whether to change. Marc’s WIP code is still in a private repo, but you’ll be able to inspect it soon and make a comparison of the VM implementations in the coming weeks. The decision about the direction of GnoVM is still very much TBD; however, the Rust GnoVM will not replace the Go GnoVM but will complement it, eventually giving validators the choice of which to run. ## Defining Wording for People/Documentation and Consistency [Issue 1024](https://github.com/gnolang/gno/issues/1024) discusses the need to define the wording we use throughout our documentation, for example, how we name a module, package, sub-module, etc. Once we have the wording defined, we will set the GnoVM to only accept elements with the correct naming. The importance of wording affects the design choice of the whole project and how we go about versioning for the best possible user experience. For example, is mt/board/admin part of the same realm of mt boards, or is it its own realm? Can we work with both by adding patterns to have some realms responsible for hosting data and others responsible for having more privileged actions? How do we split a complex realm into sub-libraries and sub-realms? We want to define the documentation and the logic for this and have begun to touch on this issue. We will discuss this in greater depth in the upcoming developer calls. ## Improving the GRC20/Foo20 APIs When working on the specs for a Merkle airdrop contract, Albert came against some issues with users initiating airdrop reward claims (see [PR 906](https://github.com/gnolang/gno/pull/906) for more details). Currently, when the Merkle airdrop contract tries to execute the reward claim for the user, an instance of the GRC20 contract is used for transferring. Within the GRC20 implementation Transfer() method, the caller (token sender) is fetched using the standard library method std.PrevRealm(). However, calling this method in the Merkle airdrop context returns the user as the caller, not the Merkle airdrop contract, which is an unexpected functionality. We are discussing different ways to tackle this issue efficiently. However, each solution would require possible changes to the GRC20 API and subsequent token implementations. Additionally, as part of [PR 952](https://github.com/gnolang/gno/pull/952), we are looking into improving the standard GRC20 API and possibly resolving the ambiguity with standard library calls that are causing the mentioned issues. ## Client Optimized for CLI, Not Mobile Our newest contributor to Gno.land, Berty, is developing the mobile version of Gno, which means writing a mobile app to interact directly with the blockchain. The team is facing some issues as they need a client library with utility functions like sign and broadcast, which are used by the command line. This code (tm2/pkg/crypto/keys/client) is not ready for external users yet, and the Gno client is designed for CLI. However, Berty needs a way to interact with the Gno chain from their application and to call the logic without adding the full CLI. From the existing TypeScript/JavaScript client library (gno-js-client and tm2-js-client), Berty should be able to build out a Go client library by exclusively using the RPC endpoints of the node itself (just like gno-js and tm2-js work), and not having to worry about importing private logic like transaction broadcasting. The team is writing its own framework to call Go code for Gno from Java, Swift, and React Native mobile apps that creates a transaction and sends it (see [PR 1047](https://github.com/gnolang/gno/pull/1047)). They are working on an API that interacts with the blockchain and lets them export the code without having to write their own utilities. The API will be minimal, and update the Tendermint2 build script by moving tm2txsync from tm2/cmd to gno.land/cmd (see more details in [PR 1080](https://github.com/gnolang/gno/pull/1080) here). For the time being, Berty will copy the code and use the objects directly until a more convenient API is complete. ## Tendermint2 Development In [PR 546](https://github.com/gnolang/gno/pull/546), we introduce file-based transaction indexing. Transaction index parsing should be done as a separate process from the main node, meaning other services can be instantiated to index transactions as readers. The current problem is that there is no way to figure out whether a transaction has failed after it’s been sent out with a broadcast sync, or fetch any kind of receipt information or error reason in the delivered transaction. So, we’ve started working on an event indexer to index Gno node events, which include transactions. Soon, developers and users will be able to ask the event indexer what happened to the transaction or in which state in its execution it's currently at, and also to retrieve information on other events like block commits as they happen. ## Extending the Functionality of Go In [issue 919](https://github.com/gnolang/gno/issues/919), Petar proposes extending the functionality of Go by adding constant data structures, arrays, slices, etc. He believes this would benefit users, as they wouldn’t need to create special functions as in Go to simulate this behavior, and it would also catch bugs when there is mutation. There has been a discussion, and Jae has similar ideas with the notion of “invar” expressions, where the resulting value can only be read, not mutated or stored. This would fix the bug where if you pass a pointer (that represents part of your contract state) to another contract, the other party can “steal” it by assigning it to their state, and your contract would fail to execute. Morgan believes that we should take a different approach as slices have the semantic in Go, where the underlying array is always heap-allocated and modifiable. Introducing constant slices would thus necessarily have to introduce concepts regarding im/mutability of values without the matching constructs that a language like Rust has. To make a compromise and keep compatibility with the Go spec, we are likely to implement this in a transpiler (gnoffeescript) that would implement this feature and be able to transpile to valid Go. ## Grantee and Ecosystem Updates As you can see, we’ve made a ton of development progress over the last few weeks. We’re also steadily adding more gnomes to our community of builders, and they’re working on the core infrastructure of Gno.land, as well as the permissionless dApps the platform will house. Let’s see what they’ve been up to since the last update. ## Onbloc Onbloc has been busy, as always, with a slew of updates for us over the last few weeks. The team has been developing Gnoswap, the first Gno.land automated market maker with concentrated liquidity, and they gave us a live demo. On the front end, which is still a work in progress, you can find a one-stop venue for traders to view all the information about tokens on gno.land, so you don’t have to move between Gnoswap and a token aggregator like CoinGecko. You can also see incentivized pools sorted by liquidity, volume, APR, liquidity mining rewards, etc., and a wallet page to check your balances. You will also be able to deposit or withdraw assets from the Interchain when IBC is enabled. Check out the work they’ve done so far on the Onbloc [hackerspace](https://github.com/gnolang/hackerspace/issues/29). The team has also released [the documentation](https://docs.gnoswap.io/) about what you can expect from Gnoswap, the rationale behind their design choices, some information about tokenomics, a preview of the UI, and more. Their main focus is on delivering a smooth and welcoming user experience and abstracting away the difficult mechanisms of concentrated liquidity so that the interface is as minimal and simple as possible. The team will be ready to launch Gnoswap as soon as gno.land reaches mainnet. Feature updates and enhancements will be aligned with the development of the core Gno Stack.  The code for Gnoswap has now been [open-sourced](https://github.com/gnoswap-labs), so you can take a look at everything they’ve done and even make suggestions. In the coming weeks, Onbloc will also work on building core Gno.land infrastructure to support an earlier launch. Find details of this in Onbloc’s [grant submission](https://github.com/gnolang/ecosystem-fund-grants/pull/4). And be sure to check out Onbloc’s informative 6-episode [blog series](https://medium.com/@gnoswaplabs/why-gno-introducing-gnoswap-dd6acc22e6a1) that features the history of blockchain and exchanges, a deep dive into the Gno Stack, and an introduction to Gnoswap, where they share details of their journey and insights. ## Teritori We also saw an awesome demo from the Teritori team, which you can check out at app.teritori.com. Simply connect your Adena wallet to create a user name, start interacting with the social feed, create your own DAO, and add members. The team is working on more extensive documentation to explain how it works in more detail. While still a work in progress, Teritori has developed a cool flagging system that allows you to unfollow content you don’t like or flag content as inappropriate. If posts receive many flags, users can vote on whether to ban them, creating a healthy and supportive social environment free from derogatory content monitored by a like-minded community through a moderation DAO. The team continues its work on DAO interfaces and has built a useful tool for speeding up the deployment of packages as a workaround until we’ve decided how to best tackle realm versioning. They are also working on the escrow system, which will be useful for the freelance marketplace, and presenting DAO standards documentation. ## Berty We have a new contributing team to Gno.land from the Berty private messaging app. This team is working on a mobile version of Gno.land, implementing the WESH protocol, which is available by Bluetooth, local WIFI, or other means, and provides secure censorship-resistant communication between devices. The plan is to be able to provide an alternative transport for Gno applications when the internet is not available and build the skeleton/foundations that enable developers to create Gno-centric mobile apps more easily in the future. Berty brings a ton of experience in off-grid communication and getting apps to run on mobile devices, both Android and iOS. The team has created its own [testnet](http://testnet.gno.berty.io/), which you are welcome to test out and play around with, although they will be restarting and rebooting without prior notice, so be aware that your work could be wiped. In the few short weeks they’ve been working with us, Berty has already finished their first Proof of Concept, a simple app running on iOS and Android. They copied code from the gnokey command line, and now it’s installing and running on mobile and interacting with the blockchain. Now, Berty is working on a nicer UI for the app and will propose a project to create a formal framework called GnoMobile, which will allow anyone to create their own app and run it on mobile. We look forward to seeing their demo soon. ## Golang Working Group In other news, we've started a bi-weekly [Gnome Golang Working Group](https://github.com/gnolang/hackerspace/issues/15) where we get together and discuss various topics, such as the language-related and theory elements of Go and Gno. We also aim to identify meaningful and reasonable ways to contribute to Golang, Gophers, and the general open-source community and improve our visibility there. We hope to attract more Go devs to the project and provide a “blockchain-less” experience for web2 Go devs. We've had two meetings so far, and some recent hackerspace issues have already emerged from the discussions. One in particular that we’re actively evaluating is Gnoffee, a transpiler tool inspired by the likes of [CoffeeScript](https://coffeescript.org/) for Go and Gno integration. Gnoffee would be a powerful standalone tool to enhance Go and Gno (blockchain) projects by generating code and seamlessly integrating new features without manual coding. Find out more at the link above. ## EthCC and Nebular Summit The Gno.land team was in full force in Paris at the end of July for EthCC, where we met many passionate developers and spread the word about Gno.land and, specifically, how Gnolang compares and contrasts to Solidity. We had a booth during the conference manned by the Gno.land team complete with awesome swag and a continuous presentation in the background playing on a full-screen television. At Nebular Summit, our VP of Engineering, Manfred Touron, [gave a talk](https://www.youtube.com/watch?v=CtxBajCcTYQ) called ‘Gnolang for Developers: Examining the Core Stack,’ where he broke down the major components of Gno, demonstrated how the upcoming Gno SDK compares with the existing Cosmos SDK, and explained why Gno.land is an excellent choice for accessible and sustainable blockchain development. ## Blockchain Application Stanford Summit (BASS) Jae opened the [Blockchain Application Stanford Summit (BASS)](https://bass.sites.stanford.edu/) event, attended by thousands of students and future blockchain developers. He gave an overview of Gno.land, GnoVM, and Gnolang, and explained the features that make our platform paradigm-shifting and timeless. He also dove into the core of why we’re building Gno.land – to provide a censorship-resistant platform for truth discovery that helps people improve their understanding of the world in an era of information censorship and control. Coming up later this month, you can catch up with the Gno.land team at [DappCon Berlin](https://www.dappcon.io/) from September 11-13, where we’ll be delivering an informative keynote and hosting a side event to get to gno you better. If you find yourself in Barcelona for [Web3 Family](https://web3fc.xyz/) on September 23, you can join in a Gno coding workshop. You’ll also be able to meet the team at [GopherCon US](https://www.gophercon.com/) in San Diego. We’re hosting an action-packed workshop, ‘Chess: The Gnolang Way,’ on Gopher Community Day, where you can learn to build a web3 chess server on Gno.land and compete for cool prizes in an ongoing chess tournament throughout the event. More details coming soon. That’s all for now! Be sure to check back again with us for the next edition of *The More You Gno* to keep up with all our progress. *Do you want to contribute to Gno.land’s monthly updates? If you’re building on Gno.land and want to highlight your development, project, event, or idea, let us know, and we’ll include your contribution.* , 2023-09-04T13:37:00Z, christina, gnoland,gnovm,tm2)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "monthly-dev-4",
    "The More You Gno: Gno.land Monthly Updates - 4",
    "\n\nWe’ve had more on our plates than ever over the last few weeks, with a huge team presence in Paris at EthCC and Nebular Summit in July, an opening talk at Stanford Blockchain Club in August by Gno.land’s founder Jae Kwon, and some awesome contributions from Gno.land grantees and ecosystem partners, including the first demos of Gnoswap and Teritori’s social platform and DAO deployer. We continue to make solid progress on GnoVM, an alternative VM in Rust, Tendermint2, native bindings, and much more. Check out our latest developer updates below.\n\n## Upgrade Strategy for AVL Between GitHub and test3.gno.land\n\nOne ongoing discussion is about an incompatibility bug that affects many things we do on Gno.land. The current AVL implementation on the testnet is outdated and does not match the AVL implementation users get when they pull in the latest master branch. Therefore, building and deploying contracts on a local Gno chain (with the latest master changes) and deploying those same contracts on the testnet may fail due to this incompatibility. We need to find a way to seamlessly integrate these two approaches. Ideally, when you write code on the master branch on GitHub, it should work on the testnet as well.\n\nIn [issue 970](https://github.com/gnolang/gno/issues/970), you can find details of five different proposed solutions to implement this upgrade strategy, from resetting the whole blockchain (which would mean losing on-chain content and debugging information) to implementing a migration feature specifically for testnets that allows developers to rename packages and patch their contracts before publishing them. There are pros and cons to each proposal, and we continue to work together to find the best way forward.\n\n## Encoding JSON and the Discussion Around Reflection\n\nSome contributors have highlighted the need for native JSON encoding, and we are discussing how best to approach it. See [issue 808](https://github.com/gnolang/gno/issues/808) for further details. One idea is to copy the code from encoding JSON in the standard library Go and take it over to Gno, but we would need to have reflection to do that. So, the important question here is whether we want to have reflection and, if so, what it should look like. We could emulate Go’s reflection package with some added elements, like being able to inspect the realm state, but we would need to be extremely careful about how we do this.\n\nFor example, should users be able to read private fields of external packages through reflection or even *ufmt*, or could that introduce a problem? It would be simpler, and the language capability security would be tighter and easier to understand if we made accessing private fields impossible, but that would also make it limited. We could consider supporting reflection as an internal user package and whitelisting and encoding JSON. This way, new encoding packages would have to be whitelisted because they’re using the reflection package. We could also mark reflection as unsafe so developers know they must carefully audit their work.\n\nAnother solution is the partial implementation of reflection. In [issue 971](https://github.com/gnolang/gno/issues/971), Gno.land core engineer Petar discusses introspection, which involves implementing reflection as Go has it now but enabling only one of its two main capabilities: the ability to inspect types, but not the ability to modify code. The main difference between introspection and reflection is that, since it is done at compile time, it is completely type-safe. This discussion is ongoing.\n\n## Alternative GnoVM Implementations\n\nTo deliver the best possible virtual machine, we’re working on two different implementations of GnoVM. Petar has spent the last three weeks developing a new GnoVM implementation written in Rust. His work is still private as the machine is not yet ready for public use, but he will soon make the code public for your inspection. Rust gives the ability to write more performant code and, in some scenarios, the Rust GnoVM can run up to 20 times faster than the GnoVM at roughly 87 milliseconds compared to 2,000 milliseconds on a Fibonacci benchmark, which is a considerable improvement in speed.\n\nSince one of Gno.land’s core features is that the entire tech stack is written in Go, we’re unsure if everyone will appreciate a Rust GnoVM or whether it aligns with our vision. However, it’s always good to provide alternatives, and, Petar argues, as long as the VM carries out the same functions (and does so more cheaply), most developers won’t mind what language the VM is written in.\n\nRust has a few other features that some developers may favor over Go, such as more tools for creating languages, advanced garbage collector libraries that allow you to change the algorithm without changing the runtime (by swapping out a tricolor algorithm for a generational one, for example), and built-in data structures that solve many issues. For example, we needed a deterministic map that is fairly fast. With Rust’s Btree in the standard library, this was simple, Petar only had to implement the native Go map type with a Btree map from the standard library. This took just a few minutes.\n\nCore team dev Marc has also started an initiative to improve the Go GnoVM so that it is faster and offers a clean and user-friendly interface. He believes the debate over the VM is more about whether to have a VM that is bytecode-defined or AST-defined (rather than speed). Marc has been comparing the fundamental differences between the two and noted that the bytecode version is 15 times faster than the AST. This means that changing to Rust would give an increased performance of 2-3 times.\n\nThe VM must be fast, secure, and performant in many ways. In either version, the AST will be stored on the blockchain, whereas the bytecode is only an internal representation that doesn't affect the users. We must still consider any potential architecture consequences between bytecode and AST before deciding whether to change. Marc’s WIP code is still in a private repo, but you’ll be able to inspect it soon and make a comparison of the VM implementations in the coming weeks. The decision about the direction of GnoVM is still very much TBD; however, the Rust GnoVM will not replace the Go GnoVM but will complement it, eventually giving validators the choice of which to run.\n\n## Defining Wording for People/Documentation and Consistency\n\n[Issue 1024](https://github.com/gnolang/gno/issues/1024) discusses the need to define the wording we use throughout our documentation, for example, how we name a module, package, sub-module, etc. Once we have the wording defined, we will set the GnoVM to only accept elements with the correct naming. The importance of wording affects the design choice of the whole project and how we go about versioning for the best possible user experience.\n\nFor example, is mt/board/admin part of the same realm of mt boards, or is it its own realm? Can we work with both by adding patterns to have some realms responsible for hosting data and others responsible for having more privileged actions? How do we split a complex realm into sub-libraries and sub-realms? We want to define the documentation and the logic for this and have begun to touch on this issue. We will discuss this in greater depth in the upcoming developer calls.\n\n## Improving the GRC20/Foo20 APIs\n\nWhen working on the specs for a Merkle airdrop contract, Albert came against some issues with users initiating airdrop reward claims (see [PR 906](https://github.com/gnolang/gno/pull/906) for more details). Currently, when the Merkle airdrop contract tries to execute the reward claim for the user, an instance of the GRC20 contract is used for transferring. Within the GRC20 implementation Transfer() method, the caller (token sender) is fetched using the standard library method std.PrevRealm().\n\nHowever, calling this method in the Merkle airdrop context returns the user as the caller, not the Merkle airdrop contract, which is an unexpected functionality. We are discussing different ways to tackle this issue efficiently. However, each solution would require possible changes to the GRC20 API and subsequent token implementations. Additionally, as part of [PR 952](https://github.com/gnolang/gno/pull/952), we are looking into improving the standard GRC20 API and possibly resolving the ambiguity with standard library calls that are causing the mentioned issues.\n\n## Client Optimized for CLI, Not Mobile\n\nOur newest contributor to Gno.land, Berty, is developing the mobile version of Gno, which means writing a mobile app to interact directly with the blockchain. The team is facing some issues as they need a client library with utility functions like sign and broadcast, which are used by the command line. This code (tm2/pkg/crypto/keys/client) is not ready for external users yet, and the Gno client is designed for CLI. However, Berty needs a way to interact with the Gno chain from their application and to call the logic without adding the full CLI.\n\nFrom the existing TypeScript/JavaScript client library (gno-js-client and tm2-js-client), Berty should be able to build out a Go client library by exclusively using the RPC endpoints of the node itself (just like gno-js and tm2-js work), and not having to worry about importing private logic like transaction broadcasting. The team is writing its own framework to call Go code for Gno from Java, Swift, and React Native mobile apps that creates a transaction and sends it (see [PR 1047](https://github.com/gnolang/gno/pull/1047)).\n\nThey are working on an API that interacts with the blockchain and lets them export the code without having to write their own utilities. The API will be minimal, and update the Tendermint2 build script by moving tm2txsync from tm2/cmd to gno.land/cmd (see more details in [PR 1080](https://github.com/gnolang/gno/pull/1080) here). For the time being, Berty will copy the code and use the objects directly until a more convenient API is complete.\n\n## Tendermint2 Development\n\nIn [PR 546](https://github.com/gnolang/gno/pull/546), we introduce file-based transaction indexing. Transaction index parsing should be done as a separate process from the main node, meaning other services can be instantiated to index transactions as readers. The current problem is that there is no way to figure out whether a transaction has failed after it’s been sent out with a broadcast sync, or fetch any kind of receipt information or error reason in the delivered transaction.\n\nSo, we’ve started working on an event indexer to index Gno node events, which include transactions. Soon, developers and users will be able to ask the event indexer what happened to the transaction or in which state in its execution it's currently at, and also to retrieve information on other events like block commits as they happen.\n\n## Extending the Functionality of Go\n\nIn [issue 919](https://github.com/gnolang/gno/issues/919), Petar proposes extending the functionality of Go by adding constant data structures, arrays, slices, etc. He believes this would benefit users, as they wouldn’t need to create special functions as in Go to simulate this behavior, and it would also catch bugs when there is mutation. There has been a discussion, and Jae has similar ideas with the notion of “invar” expressions, where the resulting value can only be read, not mutated or stored. This would fix the bug where if you pass a pointer (that represents part of your contract state) to another contract, the other party can “steal” it by assigning it to their state, and your contract would fail to execute.\n\nMorgan believes that we should take a different approach as slices have the semantic in Go, where the underlying array is always heap-allocated and modifiable. Introducing constant slices would thus necessarily have to introduce concepts regarding im/mutability of values without the matching constructs that a language like Rust has. To make a compromise and keep compatibility with the Go spec, we are likely to implement this in a transpiler (gnoffeescript) that would implement this feature and be able to transpile to valid Go.\n\n## Grantee and Ecosystem Updates\n\nAs you can see, we’ve made a ton of development progress over the last few weeks. We’re also steadily adding more gnomes to our community of builders, and they’re working on the core infrastructure of Gno.land, as well as the permissionless dApps the platform will house. Let’s see what they’ve been up to since the last update.\n\n## Onbloc\n\nOnbloc has been busy, as always, with a slew of updates for us over the last few weeks. The team has been developing Gnoswap, the first Gno.land automated market maker with concentrated liquidity, and they gave us a live demo. On the front end, which is still a work in progress, you can find a one-stop venue for traders to view all the information about tokens on gno.land, so you don’t have to move between Gnoswap and a token aggregator like CoinGecko. You can also see incentivized pools sorted by liquidity, volume, APR, liquidity mining rewards, etc., and a wallet page to check your balances. You will also be able to deposit or withdraw assets from the Interchain when IBC is enabled.\n\nCheck out the work they’ve done so far on the Onbloc [hackerspace](https://github.com/gnolang/hackerspace/issues/29). The team has also released [the documentation](https://docs.gnoswap.io/) about what you can expect from Gnoswap, the rationale behind their design choices, some information about tokenomics, a preview of the UI, and more. Their main focus is on delivering a smooth and welcoming user experience and abstracting away the difficult mechanisms of concentrated liquidity so that the interface is as minimal and simple as possible.\n\nThe team will be ready to launch Gnoswap as soon as gno.land reaches mainnet. Feature updates and enhancements will be aligned with the development of the core Gno Stack.  The code for Gnoswap has now been [open-sourced](https://github.com/gnoswap-labs), so you can take a look at everything they’ve done and even make suggestions. In the coming weeks, Onbloc will also work on building core Gno.land infrastructure to support an earlier launch. Find details of this in Onbloc’s [grant submission](https://github.com/gnolang/ecosystem-fund-grants/pull/4). And be sure to check out Onbloc’s informative 6-episode [blog series](https://medium.com/@gnoswaplabs/why-gno-introducing-gnoswap-dd6acc22e6a1) that features the history of blockchain and exchanges, a deep dive into the Gno Stack, and an introduction to Gnoswap, where they share details of their journey and insights.\n\n## Teritori\n\nWe also saw an awesome demo from the Teritori team, which you can check out at app.teritori.com. Simply connect your Adena wallet to create a user name, start interacting with the social feed, create your own DAO, and add members. The team is working on more extensive documentation to explain how it works in more detail. While still a work in progress, Teritori has developed a cool flagging system that allows you to unfollow content you don’t like or flag content as inappropriate. If posts receive many flags, users can vote on whether to ban them, creating a healthy and supportive social environment free from derogatory content monitored by a like-minded community through a moderation DAO.\n\nThe team continues its work on DAO interfaces and has built a useful tool for speeding up the deployment of packages as a workaround until we’ve decided how to best tackle realm versioning. They are also working on the escrow system, which will be useful for the freelance marketplace, and presenting DAO standards documentation.\n\n## Berty\n\nWe have a new contributing team to Gno.land from the Berty private messaging app. This team is working on a mobile version of Gno.land, implementing the WESH protocol, which is available by Bluetooth, local WIFI, or other means, and provides secure censorship-resistant communication between devices. The plan is to be able to provide an alternative transport for Gno applications when the internet is not available and build the skeleton/foundations that enable developers to create Gno-centric mobile apps more easily in the future. Berty brings a ton of experience in off-grid communication and getting apps to run on mobile devices, both Android and iOS.\n\nThe team has created its own [testnet](http://testnet.gno.berty.io/), which you are welcome to test out and play around with, although they will be restarting and rebooting without prior notice, so be aware that your work could be wiped. In the few short weeks they’ve been working with us, Berty has already finished their first Proof of Concept, a simple app running on iOS and Android. They copied code from the gnokey command line, and now it’s installing and running on mobile and interacting with the blockchain.\n\nNow, Berty is working on a nicer UI for the app and will propose a project to create a formal framework called GnoMobile, which will allow anyone to create their own app and run it on mobile. We look forward to seeing their demo soon.\n\n## Golang Working Group\n\nIn other news, we've started a bi-weekly [Gnome Golang Working Group](https://github.com/gnolang/hackerspace/issues/15) where we get together and discuss various topics, such as the language-related and theory elements of Go and Gno. We also aim to identify meaningful and reasonable ways to contribute to Golang, Gophers, and the general open-source community and improve our visibility there. We hope to attract more Go devs to the project and provide a “blockchain-less” experience for web2 Go devs.\n\nWe've had two meetings so far, and some recent hackerspace issues have already emerged from the discussions. One in particular that we’re actively evaluating is Gnoffee, a transpiler tool inspired by the likes of [CoffeeScript](https://coffeescript.org/) for Go and Gno integration. Gnoffee would be a powerful standalone tool to enhance Go and Gno (blockchain) projects by generating code and seamlessly integrating new features without manual coding. Find out more at the link above.\n\n## EthCC and Nebular Summit\n\nThe Gno.land team was in full force in Paris at the end of July for EthCC, where we met many passionate developers and spread the word about Gno.land and, specifically, how Gnolang compares and contrasts to Solidity. We had a booth during the conference manned by the Gno.land team complete with awesome swag and a continuous presentation in the background playing on a full-screen television.\n\nAt Nebular Summit, our VP of Engineering, Manfred Touron, [gave a talk](https://www.youtube.com/watch?v=CtxBajCcTYQ) called ‘Gnolang for Developers: Examining the Core Stack,’ where he broke down the major components of Gno, demonstrated how the upcoming Gno SDK compares with the existing Cosmos SDK, and explained why Gno.land is an excellent choice for accessible and sustainable blockchain development.\n\n## Blockchain Application Stanford Summit (BASS)\n\nJae opened the [Blockchain Application Stanford Summit (BASS)](https://bass.sites.stanford.edu/) event, attended by thousands of students and future blockchain developers. He gave an overview of Gno.land, GnoVM, and Gnolang, and explained the features that make our platform paradigm-shifting and timeless. He also dove into the core of why we’re building Gno.land – to provide a censorship-resistant platform for truth discovery that helps people improve their understanding of the world in an era of information censorship and control.\n\nComing up later this month, you can catch up with the Gno.land team at [DappCon Berlin](https://www.dappcon.io/) from September 11-13, where we’ll be delivering an informative keynote and hosting a side event to get to gno you better. If you find yourself in Barcelona for [Web3 Family](https://web3fc.xyz/) on September 23, you can join in a Gno coding workshop. You’ll also be able to meet the team at [GopherCon US](https://www.gophercon.com/) in San Diego. We’re hosting an action-packed workshop, ‘Chess: The Gnolang Way,’ on Gopher Community Day, where you can learn to build a web3 chess server on Gno.land and compete for cool prizes in an ongoing chess tournament throughout the event. More details coming soon. That’s all for now! Be sure to check back again with us for the next edition of *The More You Gno* to keep up with all our progress.\n\n*Do you want to contribute to Gno.land’s monthly updates? If you’re building on Gno.land and want to highlight your development, project, event, or idea, let us know, and we’ll include your contribution.*\n",
    "2023-09-04T13:37:00Z",
    "christina",
    "gnoland,gnovm,tm2"
  ],
  "max_deposit": ""
}
#10 vm/execgno.land/r/gnoland/blog.ModAddPost(chess-gc23, Play Chess with Us: The Gnolang Way at GopherCon 2023, Calling all gnomes and gophers! Come join the Gno.land team at GopherCon 2023, September 25 - 28, in San Diego, US. We’re sponsoring this year’s action-packed event that will gather together some of the world’s brightest minds and smartest programmers under one roof. So drop by our booth, pick up some swag, and say hey! We’ll be on hand every day to meet and greet, answer all your questions, and discuss everything Go, Gno, and beyond! We’ll also be hosting a workshop on Community Day, September 26, called ‘Chess: The Gnolang Way,’ where you can learn how to build a web3 chess server on Gno.land. ## GopherCon 2023 [GopherCon](https://www.gophercon.com/) is a community-driven annual event that started in 2014 and is dedicated to promoting the use of Go and the education of Go developers. Every year, thousands of gophers from around the world exchange ideas, share their work and expand the Go network. There are four days of fun-filled activities, including hands-on workshops, informative keynotes, networking events, and hackathons, all taking place in the laidback West Coast city of San Diego. Where better to expand your knowledge and make new friends than in one of the US’ most popular destinations? As a gold sponsor at this year’s event, Gno.land will be running a booth and doing our best to convert as many gophers as possible to Gno, showing them how easy it is to port their existing web2 apps over to Gno.land or to build completely new ones from scratch. ## Chess: The Gnolang Way If you’re looking for a hands-on coding experience and to have a little fun with us at the same time, join us on Community Day for an awesome workshop, **‘Chess: The Gnolang Way.’** Kickstart your day by learning to build a web3 chess server on Gno.land using Gnolang. By the end of the session, you’ll have gathered basic knowledge on developing and deploying smart contracts on Gno.land, and connecting smart contracts to a web frontend. You’ll also see how web3 enables you to write perpetual and trustable social and gaming platforms and how to build a web3 chess server and website with Gno.land. If you want to join us, meet us at 10:00 a.m. in the Grand Ballroom 10. ## Let’s Play After the workshop, the fun begins with an ongoing chess tournament throughout the GC23 summit for event participants. To be in with a chance of scooping up some seriously cool prizes, GC23 attendees will need to show us their best moves and how much they engage with the Gno.land chain. This competition is designed to put our platform to the test over two main areas: chess mastery (50% of points) and platform engagement (50% of points). To be eligible for prizes, participants must be present at the event. We hope to see you there! If you can’t join us in person in San Diego, be sure to [follow us on X](https://twitter.com/_gnoland). We’ll be giving updates on our progress and sharing the highlights of the event. May the best gnome win! , 2023-09-25T13:37:00Z, christina, gnoland,gnovm,gnochess,events)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "chess-gc23",
    "Play Chess with Us: The Gnolang Way at GopherCon 2023",
    "\n\nCalling all gnomes and gophers! Come join the Gno.land team at GopherCon 2023, September 25 - 28, in San Diego, US. We’re sponsoring this year’s action-packed event that will gather together some of the world’s brightest minds and smartest programmers under one roof. So drop by our booth, pick up some swag, and say hey! We’ll be on hand every day to meet and greet, answer all your questions, and discuss everything Go, Gno, and beyond! We’ll also be hosting a workshop on Community Day, September 26, called ‘Chess: The Gnolang Way,’ where you can learn how to build a web3 chess server on Gno.land.\n\n## GopherCon 2023\n\n[GopherCon](https://www.gophercon.com/) is a community-driven annual event that started in 2014 and is dedicated to promoting the use of Go and the education of Go developers. Every year, thousands of gophers from around the world exchange ideas, share their work and expand the Go network. There are four days of fun-filled activities, including hands-on workshops, informative keynotes, networking events, and hackathons, all taking place in the laidback West Coast city of San Diego. Where better to expand your knowledge and make new friends than in one of the US’ most popular destinations?\n\nAs a gold sponsor at this year’s event, Gno.land will be running a booth and doing our best to convert as many gophers as possible to Gno, showing them how easy it is to port their existing web2 apps over to Gno.land or to build completely new ones from scratch.\n\n## Chess: The Gnolang Way\n\nIf you’re looking for a hands-on coding experience and to have a little fun with us at the same time, join us on Community Day for an awesome workshop, **‘Chess: The Gnolang Way.’** Kickstart your day by learning to build a web3 chess server on Gno.land using Gnolang. By the end of the session, you’ll have gathered basic knowledge on developing and deploying smart contracts on Gno.land, and connecting smart contracts to a web frontend. You’ll also see how web3 enables you to write perpetual and trustable social and gaming platforms and how to build a web3 chess server and website with Gno.land.\n\nIf you want to join us, meet us at 10:00 a.m. in the Grand Ballroom 10.\n\n## Let’s Play\n\nAfter the workshop, the fun begins with an ongoing chess tournament throughout the GC23 summit for event participants. To be in with a chance of scooping up some seriously cool prizes, GC23 attendees will need to show us their best moves and how much they engage with the Gno.land chain. This competition is designed to put our platform to the test over two main areas: chess mastery (50% of points) and platform engagement (50% of points). To be eligible for prizes, participants must be present at the event. We hope to see you there! If you can’t join us in person in San Diego, be sure to [follow us on X](https://twitter.com/_gnoland). We’ll be giving updates on our progress and sharing the highlights of the event. May the best gnome win!\n",
    "2023-09-25T13:37:00Z",
    "christina",
    "gnoland,gnovm,gnochess,events"
  ],
  "max_deposit": ""
}
#11 vm/execgno.land/r/gnoland/blog.ModAddPost(gnomobile, GnoMobile, a Framework for Building Gno Mobile Apps, *This blog post is written by Berty Technologies, an NGO that is building open and free communication solutions without any of the limitations imposed by centralized systems. Berty is a proud partner and grantee of Gno.land.* The year is 2023. Current Gno apps run on desktop or laptop computers that have Go installed. To run on mobile, the app would need to bundle the Go runtime, which is complicated for most developers. At Berty, we have years of experience using Go on mobile and overcoming difficulties with Android and iOS operating systems. We built Wesh Network, a decentralized communication protocol that enables p2p users to reliably and securely send messages over async networks, even in environments with poor or no connectivity. This stage is thus set to take the leap and make it easier for builders to develop Gno applications for mobile devices. # What is GnoMobile? Simply put, GnoMobile is a framework for developing Gno mobile applications. This is how it works: *WARNING: Deep technical sections ahead. Grab a coffee before venturing forth*. For communication between the mobile app and the Gno code, GnoMobile uses [gRPC](https://grpc.io/), a well-supported framework that sends and receives Google Protobuf messages. Even though the core Gno code is written in Go, the app code can use React Native, Java, Swift, etc. The following system diagram shows how gRPC is used. <div align="center"> ![](https://github-production-user-asset-6210df.s3.amazonaws.com/109347079/267934754-e4da6fec-a586-4ebe-97cc-3b3ad7f79370.jpg) </div> Moving from the bottom to the top, this is how the flow looks: 1. At the bottom are Go packages in the gno codebase. A **gnoclient.Client** supports communication with the remote Gno.land node with methods like Call to call a realm function. The Gno codebase also has **keys.Keybase** to support a wallet stored on the local device with methods like CreateAccount. 2. These methods are called directly from the next level up by the **GnoMobile** Go code. A Go object can’t be passed through the gRPC interface, so the GnoMobile Go code maintains a persistent gnoclient.Client object, which is accessed by gRPC calls. The GnoMobile API functions are registered by an amino package.go file and the generated Protobuf files are used to configure the gRPC server. 3. Finally, at the top of the diagram, the **gRPC client in the mobile app** communicates with the GnoMobile gRPC server over a local connection using Protobuf messages. A gRPC call can either return an immediate result (for example, GetKeyCount) or an asynchronous gRPC stream object, which can return delayed results (for example, a Call to a remote realm function). The gRPC framework uses the Protobuf API to generate convenient API functions in the mobile app’s [preferred language](https://grpc.io/docs/languages) (React Native, Java, Swift, etc.). # How GnoMobile benefits builders The first version of the framework will include three main sets of features: 1. **Blockchain Operations**: These refer to the core block of functions that the apps need to interact with the blockchain. Things like the gnoclient API to effectively bring the benefits of the Gno framework on mobile, the gas estimation interface and calling realm functions, querying a blockchain node (and more) are included here. 2. **Wallet**: As the name suggests, here we have all the standard wallet operations like create or delete an account, set the recovery phrase, account balance, and so on. 3. **Toolkit**: We want to make it as easy as possible for devs to start building apps with our framework, so we’ll provide them with install instructions, example apps, and more technical stuff like genproto options to support gRPC and helper functions to parse the render output. Those should be enough to allow builders to get started on using and experimenting with Gno mobile apps. - *Support for secure p2p communication, even when the Internet is down?* - *Yes, please!* Something that is not necessarily essential for V1, but for sure will open the doors to some powerful capabilities later on is to add an interface and a constructor to adapt the communication transport. This will make it possible for devs to incorporate other tools like Wesh Network and give their apps the ability to securely and reliably send messages even in very poor network conditions. But that’s a story for another time. # When will GnoMobile be ready? V1 is planned for release in mid-December 2023. Until then, you can check out our progress [here](https://github.com/gnolang/hackerspace/issues/28). Got feedback or want to drop us a question? Ask away on our [repo](https://github.com/gnolang/gnomobile/issues). # What does the future look like beyond V1? We see a lot of potential directions for GnoMobile after the initial release that will improve the user experience, extend its functionality, and make GnoMobile even more secure. We’re still scratching the surface in terms of how far we can take its development, and we look forward to working on further iterations and improvements. Some of our ideas for the future beyond V1 include: 1. Making it easier for developers to **build** **desktop apps** **and** **browser extensions**: 2. Through GnoMobile, we can gradually enable “desktop” devs to use our React Native gRPC interface to write desktop applications while using existing functionality from the core Go code. This way, developers will not necessarily have to learn Go to leverage its advantages. 3. Browser extensions are usually written in JavaScript in the same way as in React Native. This opens the door to getting the benefits of Go via the GnoMobile framework. Otherwise, you’d have to either make the Go code run inside the browser extension (which is not easy) or use a remote server (which is not pretty). 4. Making it possible to **execute smart contracts directly from mobile**. *Why is this important?* If you want to add a new message to a blockchain, you need to actually interact with it (the blockchain) and update its state with the new message. However, if you just want to browse through the messages, you can execute the Render function locally without needing to use your network and, at the same time, get the results much faster. This is because the node runs locally on the mobile device without needing to spend crypto coins to get a remote node to do the operation for you. Gno nodes run on GnoVMs (gnovm), and for the moment, these are only available on desktops. We believe it is possible to make them available on mobile as well, but we need to find clever ways to overcome the constraints of mobile devices (like putting the apps in the background (iOS), addressing network bandwidth limitations, and so on). 1. Developing a **decentralized push notification service** for *both* mobile and desktop apps. Getting notifications is now a standard (and very important) functionality of centralized apps. Technically, this happens via a central server. Naturally, having a centralized server is not possible for a p2p app, but there are other ways to implement notifications, and we are considering including them in the GnoMobile framework. 2. Making it possible for decentralized apps to **interact with the blockchain even if the network connection is poor or virtually unavailable**. Through the [**Wesh Network** protocol](https://wesh.network/), we are opening up the possibility of using alternative transport mediums to exchange messages between peers in an asynchronous but reliable manner in off-grid environments. Enabling reliable, secure, and censorship-resistant communication is our main cause at Berty Technologies. We want to open the door for p2p users to send messages and interact even in extreme situations or adverse scenarios, and Wesh Network is built specifically for this purpose. It is only natural to make it easier for developers to use it through the GnoMobile framework. 3. Advancing **edge networking for enhanced blockchain resilience**. Edge networking refers to bringing functionality like computing power or storage closer to the user so that they don't need to travel through the whole Internet to interact with a server. The same edge concept can be applied to bring the necessary services to interact with the blockchain closer to each p2p user. For example, hosting a copy of the blockchain so a user can sync it or even execute smart contracts. Having these fundamental services closer to the p2p users is especially important in the case of mobile apps. We want to offer developers the possibility of taking advantage of the edge networking benefits by allowing them to use, for instance, network address redirections or special HTTP headers in the configuration of their applications. In all honesty, it’s hard not to get excited about all the different possibilities that lie ahead for GnoMobile, but we’re keeping our focus on shipping V1 for now and collecting feedback from the community. After that, well, we hope you’ll stick around to see what happens next! , 2023-09-29T13:37:00Z, jeff,costin,remi,iuri, gnomobile,berty,weshnetwork)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "gnomobile",
    "GnoMobile, a Framework for Building Gno Mobile Apps",
    "\n\n*This blog post is written by Berty Technologies, an NGO that is building open and free communication solutions without any of the limitations imposed by centralized systems. Berty is a proud partner and grantee of Gno.land.*\n\nThe year is 2023. Current Gno apps run on desktop or laptop computers that have Go installed. To run on mobile, the app would need to bundle the Go runtime, which is complicated for most developers. At Berty, we have years of experience using Go on mobile and overcoming difficulties with Android and iOS operating systems. We built Wesh Network, a decentralized communication protocol that enables p2p users to reliably and securely send messages over async networks, even in environments with poor or no connectivity.\n\nThis stage is thus set to take the leap and make it easier for builders to develop Gno applications for mobile devices.\n\n# What is GnoMobile?\n\nSimply put, GnoMobile is a framework for developing Gno mobile applications. This is how it works:\n\n*WARNING: Deep technical sections ahead. Grab a coffee before venturing forth*.\n\nFor communication between the mobile app and the Gno code, GnoMobile uses [gRPC](https://grpc.io/), a well-supported framework that sends and receives Google Protobuf messages. Even though the core Gno code is written in Go, the app code can use React Native, Java, Swift, etc. The following system diagram shows how gRPC is used.\n\n<div align=\"center\">\n    ![](https://github-production-user-asset-6210df.s3.amazonaws.com/109347079/267934754-e4da6fec-a586-4ebe-97cc-3b3ad7f79370.jpg)\n</div>\n\nMoving from the bottom to the top, this is how the flow looks:\n\n1. At the bottom are Go packages in the gno codebase. A **gnoclient.Client** supports communication with the remote Gno.land node with methods like Call to call a realm function. The Gno codebase also has **keys.Keybase** to support a wallet stored on the local device with methods like CreateAccount.\n2. These methods are called directly from the next level up by the **GnoMobile** Go code. A Go object can’t be passed through the gRPC interface, so the GnoMobile Go code maintains a persistent gnoclient.Client object, which is accessed by gRPC calls. The GnoMobile API functions are registered by an amino package.go file and the generated Protobuf files are used to configure the gRPC server.\n3. Finally, at the top of the diagram, the **gRPC client in the mobile app** communicates with the GnoMobile gRPC server over a local connection using Protobuf messages. A gRPC call can either return an immediate result (for example, GetKeyCount) or an asynchronous gRPC stream object, which can return delayed results (for example, a Call to a remote realm function). The gRPC framework uses the Protobuf API to generate convenient API functions in the mobile app’s [preferred language](https://grpc.io/docs/languages) (React Native, Java, Swift, etc.).\n\n# How GnoMobile benefits builders\n\nThe first version of the framework will include three main sets of features:\n\n1. **Blockchain Operations**: These refer to the core block of functions that the apps need to interact with the blockchain. Things like the gnoclient API to effectively bring the benefits of the Gno framework on mobile, the gas estimation interface and calling realm functions, querying a blockchain node (and more) are included here.\n2. **Wallet**: As the name suggests, here we have all the standard wallet operations like create or delete an account, set the recovery phrase, account balance, and so on.\n3. **Toolkit**: We want to make it as easy as possible for devs to start building apps with our framework, so we’ll provide them with install instructions, example apps, and more technical stuff like genproto options to support gRPC and helper functions to parse the render output.\n\nThose should be enough to allow builders to get started on using and experimenting with Gno mobile apps.\n\n- *Support for secure p2p communication, even when the Internet is down?*\n- *Yes, please!*\n\nSomething that is not necessarily essential for V1, but for sure will open the doors to some powerful capabilities later on is to add an interface and a constructor to adapt the communication transport. This will make it possible for devs to incorporate other tools like Wesh Network and give their apps the ability to securely and reliably send messages even in very poor network conditions. But that’s a story for another time.\n\n# When will GnoMobile be ready?\n\nV1 is planned for release in mid-December 2023.\n\nUntil then, you can check out our progress [here](https://github.com/gnolang/hackerspace/issues/28).\n\nGot feedback or want to drop us a question? Ask away on our [repo](https://github.com/gnolang/gnomobile/issues).\n\n# What does the future look like beyond V1?\n\nWe see a lot of potential directions for GnoMobile after the initial release that will improve the user experience, extend its functionality, and make GnoMobile even more secure. We’re still scratching the surface in terms of how far we can take its development, and we look forward to working on further iterations and improvements. Some of our ideas for the future beyond V1 include:\n\n1. Making it easier for developers to **build** **desktop apps** **and** **browser extensions**:\n2. Through GnoMobile, we can gradually enable “desktop” devs to use our React Native gRPC interface to write desktop applications while using existing functionality from the core Go code. This way, developers will not necessarily have to learn Go to leverage its advantages.\n3. Browser extensions are usually written in JavaScript in the same way as in React Native. This opens the door to getting the benefits of Go via the GnoMobile framework. Otherwise, you’d have to either make the Go code run inside the browser extension (which is not easy) or use a remote server (which is not pretty).\n4. Making it possible to **execute smart contracts directly from mobile**.\n\n*Why is this important?*\n\nIf you want to add a new message to a blockchain, you need to actually interact with it (the blockchain) and update its state with the new message. However, if you just want to browse through the messages, you can execute the Render function locally without needing to use your network and, at the same time, get the results much faster. This is because the node runs locally on the mobile device without needing to spend crypto coins to get a remote node to do the operation for you.\n\nGno nodes run on GnoVMs (gnovm), and for the moment, these are only available on desktops. We believe it is possible to make them available on mobile as well, but we need to find clever ways to overcome the constraints of mobile devices (like putting the apps in the background (iOS), addressing network bandwidth limitations, and so on).\n\n1. Developing a **decentralized push notification service** for *both* mobile and desktop apps. Getting notifications is now a standard (and very important) functionality of centralized apps. Technically, this happens via a central server. Naturally, having a centralized server is not possible for a p2p app, but there are other ways to implement notifications, and we are considering including them in the GnoMobile framework.\n2. Making it possible for decentralized apps to **interact with the blockchain even if the network connection is poor or virtually unavailable**. Through the [**Wesh Network** protocol](https://wesh.network/), we are opening up the possibility of using alternative transport mediums to exchange messages between peers in an asynchronous but reliable manner in off-grid environments. Enabling reliable, secure, and censorship-resistant communication is our main cause at Berty Technologies. We want to open the door for p2p users to send messages and interact even in extreme situations or adverse scenarios, and Wesh Network is built specifically for this purpose. It is only natural to make it easier for developers to use it through the GnoMobile framework.\n3. Advancing **edge networking for enhanced blockchain resilience**. Edge networking refers to bringing functionality like computing power or storage closer to the user so that they don't need to travel through the whole Internet to interact with a server. The same edge concept can be applied to bring the necessary services to interact with the blockchain closer to each p2p user. For example, hosting a copy of the blockchain so a user can sync it or even execute smart contracts. Having these fundamental services closer to the p2p users is especially important in the case of mobile apps. We want to offer developers the possibility of taking advantage of the edge networking benefits by allowing them to use, for instance, network address redirections or special HTTP headers in the configuration of their applications.\n\nIn all honesty, it’s hard not to get excited about all the different possibilities that lie ahead for GnoMobile, but we’re keeping our focus on shipping V1 for now and collecting feedback from the community. After that, well, we hope you’ll stick around to see what happens next!\n",
    "2023-09-29T13:37:00Z",
    "jeff,costin,remi,iuri",
    "gnomobile,berty,weshnetwork"
  ],
  "max_deposit": ""
}
#12 vm/execgno.land/r/gnoland/blog.ModAddPost(monthly-dev-5, The More You Gno: Gno.land Monthly Updates - 5, It's been another productive month, packed with developer calls, live events, new contributors, a large team presence at the Go community's biggest event of the year, GopherCon 2023, and the launch of a PoC gaming dApp on Gno.land, GnoChess. We uncovered a bunch of bugs in the code and some issues with the GnoVM, and made further progress on the Go and Rust VMs, the banker module bug, Gnofee, and much more. Check out the updates below. ## Building a Web3 Chess Server on Gno.land - GnoChess Most of our work over the last few weeks has been dedicated to [GnoChess](https://gnochess.com/), a [PoC gaming dApp](https://test3.gno.land/r/gnoland/blog:p/chess-gc23) unveiled at GopherCon 2023. As gold event sponsors, we wanted to provide gopher attendees with a memorable experience – and a little friendly competition – while battle-testing the Gno.land platform. As our first gaming dApp, developing GnoChess was extremely useful for our team in many ways. We managed to attract 61 players to the game during the event, including some die-hard web2 gophers who wanted to show off their moves and discover more about Gno. Several PRs were opened as a result of our endeavors, and, beyond the conference, GnoChess taught us a lot about where we're at with Gno, how to successfully build complex dApps on top of the platform, and how well we work as a team. We uncovered some key issues and breaking behavior in the GnoVM, made our JavaScript clients much more reliable in their communications with the Gno.land node, and unearthed further issues that lead to complex errors and potential security flaws that must be addressed before mainnet. For example, appending nil to a slice of errors resulted in a panic, or conditional statements like if not supporting custom boolean types. The GnoVM doesn't currently perform terminating statement analysis, which results in a cryptic panic message ([issue 1086](https://github.com/gnolang/gno/issues/1086)), and mixing untyped (negative) floats and integers in arithmetic sometimes drops the sign ([issue 1152](https://github.com/gnolang/gno/issues/1152)). The issues uncovered while developing GnoChess were discussed extensively in the public developer calls of [Sept 6](https://www.youtube.com/watch?v=BBBqgycMjqU) and [Sept 20](https://www.youtube.com/watch?v=WrxFVPR55G0), and referenced in the [GitHub meeting agenda](https://github.com/gnolang/meetings/issues/31). Most of the issues are common in software development and fairly simple to fix by making some implementation changes or adjustments to design choices. While developing GnoChess, our engineers took on the role of expert platform users rather than core team members. This approach was very useful as it pushed the platform to new limits, and allowed us to dive deep into many aspects of the project, creating a culture of sharing by opening up issues for each bug and asking for feedback and support. We'll definitely take a similar approach for future app development and onboarding new devs to Gno. We'll be releasing a retrospective of our experiences in the coming weeks. In the meantime, if you want to build a dApp on Gno.land, check out the GnoChess repo, where you can find a useful [tutorial](https://github.com/gnolang/gnochess/blob/main/tutorial/01_getting_started/README.md) or watch the recording of the GopherCon workshop, '[Chess: The Gnolang Way](https://www.youtube.com/watch?v=JQh7LhqW7ns).' ## The Battle of the Virtual Machines Core engineers Marc and Petar continue their excellent work developing two different VMs for Gno, one in Go and one in Rust. In the coming weeks, we'll have a face-off, comparing and contrasting their features, efficiency, speed, and performance, so watch this space! For now, the definition of the virtual machine is stable for both, and they are no longer working on the virtual machine definition. They are mainly focusing on code generation; everything from parsing to scanning to parsing and compiling. Let's see how they are shaping up. ### Rust VM Petar has developed a Rust implementation not only of the virtual machine but of the whole chain, including the compiler. He has written a Go compiler entirely in Rust and has even started experimenting with changing the compiler to implement the Invar proposal from Jae. Further progress includes porting a part of the parser and scanner from the Go compiler to Rust (almost a direct translation from Go to Rust) and making it stable. In addition, Petar has completed work on typed nil values and improving the recursive closures of Go, which were not working with Gno code and needed additional pointers. He has also implemented Iota and hooked up the garbage collector. In the coming weeks, Petar will be working to smooth out bugs and implement type aliases, as well as implementing function analysis for the dependency graph. The dependency graph is necessary for compiling global types in the correct order, so, for example, when type A refers to type B, you need to compile type B first so that when type A refers to it, type B exists. ### Go VM Marc is currently rewriting a parser and a scanner from scratch. His work is not as far along as Petar's, but he's getting closer, and the code generation works well. He is currently refactoring and building a single-pass compiler that can perform a **syntax-directed translation**, which means there are no intermediate data structures between the source code and the byte code. This is a much simpler design that should compile faster and be easier to maintain, but it requires a complete redesign. Marc believes his Go parser will be easier to maintain and understand than the one in Rust and benefit the user since the entire stack is written in Go. However, to assess the best implementation of the VMs, Marc has started a Go **test shoot project, which is a script** that will run many samples to verify that the compiler (in Go, Rust, or any other implementation) conforms to Go's specifications. Marc and Petar will open their repos soon, and the next edition of The More You Gno will highlight how the GnoVM works. ## Gnoffee: Coffeescript for Go and Gno Gnoffee (hackerspace [issue 22](https://github.com/gnolang/hackerspace/issues/22)) will be a powerful standalone tool to elevate the development process of Go and Gno by generating code and integrating new features, eliminating manual coding. We aim to create a custom variation of Golang that preserves similar readability, maintains compatibility, and enables being able to code in Gno very quickly when you know how to code in Go. How do we go about this? Regarding compatibility, one possibility is to propose all our changes to Golang and wait for approval before we start developing. However, this is likely to take some time. Another approach is to use a way to transpile TypeScript for JavaScript or Coffeescript for JavaScript, so it's another language passing through a program that creates standard valid Golang and will generate valid Gnolang. With this simple method, we can experiment with missing features like new native types, and new keywords, and when we have new features in mind, we can develop what we lack. For instance, it does not make sense to have extra security for your exported variables when you write a library in Go. However, in Gno, it is very important to ensure that everything you expose cannot be modified by other contracts. This means finding a way to expose constants and other readable elements without risking their values being overwritten. Besides allowing us to carry out all types of experimentation more easily, Gnofee could eventually be a way for the Go team to measure the potential adoption of Gno. Gnofee is not a priority for the mainnet, but we're excited to work on this important initiative. ## META Multinode Testnet The discussions about single and multinode testnets have been ongoing, so we opened an issue to establish a multinode testnet focused on multi-validator experimentation, including stability, benchmarking, and lifecycle management. This multinode testnet aims to provide a platform for in-depth explorations and evaluations of multi-validator setups, while we maintain the single-node test3+.gno.land set up, primarily dedicated to showcasing the VM and providing examples. Visit hackerspace [issue 9](https://github.com/gnolang/hackerspace/issues/9) if you want to participate in this initiative or share your insights. ## Banker Module Bug The banker module bug is a known issue that needs to be fixed before the mainnet because, currently, it's still possible to mint new GNOT tokens from any contract. Several fixes have been suggested, and our goal is to merge [PR 875](https://github.com/gnolang/gno/pull/875) put forward by Onbloc to change the denomination of the coins minted by the banker. Merging this PR is currently blocked by 2 small failing checks, but we are close to resolving this issue. ## Preserving Go Comments in Protobuf In [issue 1157](https://github.com/gnolang/gno/issues/1157), Jeff from Berty raises the question about preserving Go comments in the Receiver field. Currently, Amino converts the code, but the proto message Receiver field doesn't have the comment. Manfred agrees that informative comments are helpful. However, he doesn't want to create a complex Protobuf configuration. We will continue to discuss this issue to look for solutions, but for now, Berty will parse the original Go source code and get the comments this way. ## Multi-Sig and Security Features Several contributors, including Teritori, are working on built-in multi-sig support in Gno.land, where Gnokey supports a multi-sig setup. We also want to introduce additional ways to improve the UX and security of Gno.land (and web3 in general). An idea we currently have is to add a new layer in authentication, creating something similar to browser cookies that we can name sessions. The chain will have two tables, one with the public key for an account and one with a public key for sessions linked to an account. From your main account, you can create a session with self-destructing features, such as destructing after one hour without usage or after 24 hours. The goal would be to allow more complex and secure flows when starting your operations. We may not want this for multi-sig, but it comes under the same family of security and privacy features. For example, imagine a wallet like Adena uses your key, a passphrase, or a ledger. It will sign a new public key that you just created in memory. Each time you close your browser, the memory is cleared. You can also have a logout button to call on the blockchain to delete all your sessions or simply wait for the session to be self-destructed, especially if the session was just in memory on your side. We will continue to develop this idea. ## New Team Member We're excited to welcome a new DevRel team member to Gno.land, Leon, who's been in blockchain development for two years and is passionate about engineering and teaching. Leon has taught languages, development, math, and music privately, as well as an OS fundamentals class at his previous faculty. Welcome on board! ## Grantee and Ecosystem Updates As Gno.land core continues to advance, so does our blossoming ecosystem, with new contributors and community members turning their eyes to Gno. The overriding theme of this last month has been collaboration, and we're pleased to see gnomes working together to overcome their obstacles and push their projects forward. Let's see what they've worked on over the last few weeks. ### Onbloc Onbloc is powering ahead, contributing to Gno.land core, making upgrades and improvements to Adena and Gnoscan, and developing the Gnoswap DEX. Last month, Onbloc released the patched version 1.8.0 of Adena, which includes some UI and UX enhancements, such as more intuitive account management settings, a copy icon next to the names of the accounts, and some bug fixes. This release also comes with new injection methods to enable dApps to request users to add a custom gno.land network or switch to an existing one. Check out the [release note](https://github.com/onbloc/adena-wallet/releases/tag/v1.8.0) for more details. Onbloc has open-sourced the code for Gnoswap on this GitHub [repo here](https://github.com/gnoswap-labs/gnoswap). You can also find a guide to running unit tests. The team continues to improve the Gnoswap interface, focusing on the earn and staking pages, the graphs for positions, and some components for adding and removing liquidity and providing pool incentives. They're working on the next iteration of the interface, with the governance and airdrop pages, and developing the front-end logic to integrate with Gnoswap realms and APIs. Onbloc also contributed to Gno core, adding PRs for fixes to testing and the banker module. Keep up with Onbloc through their [hackerspace journey](https://github.com/gnolang/hackerspace/issues/29) and check out their latest initiative [Gnodesk](https://medium.com/onbloc/gnodesk-week-2-of-sept-2023-5edbc451bba7), which delivers weekly highlights and updates from Gno.land. ### Teritori Teritori has been working on improvements since the last update and open-sourcing all their work, including the DAO deployer and the Moderation module. You can visit the Teritori DAO tooling repo to find the complete documentation and new realms to easily deploy your DAO. There is also a tutorial on creating your own DAO using the framework. The team has made extensive progress on the Justice DAO deployer, a module that can be used for third-party arbitration when there is a problem with the escrow system in a decentralized freelance marketplace. The Justice DAO can resolve potential conflicts between the seller and the buyer and implements randomness to choose the judges to solve problems without conflicts of interest. The content flagging system, which highlights the content that users deem to be inappropriate, has been tweaked and improved. Keep up with Teritori's [hackerspace journey here](https://github.com/gnolang/hackerspace/issues/7). ### Berty Berty has already completed the first phase of the project and published the [technical proposal](https://github.com/gnolang/gnomobile/issues/15) to develop the Gno mobile framework. The team is now busy with the second phase of implementing the proposal and the gRPC interface, which is working with the local socket on Android and iOS. Jeff has been trying to use Amino, and, now that Iuri is back from vacation, the team will work on improving other parts of the interface. Check out their latest [demo](https://www.loom.com/share/c0f68f707d3e47089c2fdbd2698fc92f), which shows an example user interface with wallet functions and blockchain communication. Onbloc has laid the foundations for Gno mobile apps with the Adena mobile wallet, so Berty will use some of this code in the mobile framework and work with Onbloc to ensure a similar user experience across all Gno apps. ### Flippando Dragos, the developer behind new grantee Flippando, is an experienced mobile app developer. Flippando is a simple on-chain memory game, which is currently written in Solidity and deployed on several testnets, including Goerli, Polygon, Near, Aurora, Evmos, and a Saga chainlet. Fippando started as a project for Dragos to learn Solidity but has already been the winner of two hackathons in Korea. It can be deployed relatively easily on any machine and is currently being ported to Gno.land. Dragos is exploring which user intersection can be more beneficial for this and will show us a demo in the coming weeks. Soon, we'll have two gaming dApps on Gno.land – Flippando and GnoChess! Read about Flippando in the [hackerspace journey](https://github.com/gnolang/hackerspace/issues/33). ### New Contributor Joseph Kato We have a new contributor to Gno.land who showed a demo last month of what he's been working on, a language server to run tests and scripts. Joseph is a major Go fan looking to get into web3 and was super excited to come across Gno. While interacting with Gno.land, he found many IDE-like features that he missed when working on files, so he decided to work with an LSP implementation—gnols—with the goal of making these features available to all contributors regardless of editor preference, starting with Sublime Text and Neovim and moving on to IntelliJ, Golang, and Emacs. This is a welcome addition for anyone who has ever developed a realm in Gno. Check out his [hackerspace](https://github.com/gnolang/hackerspace/issues/34) page for more details. ## DappCon, Berlin Manfred was back in Berlin in September at the Radial System presenting 'Gno.land: The Key To Perpetual Transparency,' where he discussed how Gno.land offers a familiar, seamless experience for code sharing and a sustainable and transparent path for blockchain development. ## Web3 Family Core dev Miloš Živković gave a talk at Web3 Family in Barcelona last month, 'Gno.land and Gnolang: The Dynamic Duo of Blockchain Development.' He presented a brief history of smart contract development and the issues associated with existing platforms, such as limitations in design and security. He introduced Gno and showed how we make web3 accessible and blockchain development more intuitive and secure. Catch the [talk here](https://www.youtube.com/watch?v=0K-jr_Ad3bI). ## GopherCon 2023 Gno.land was out in force at GopherCon 2023 with a well-stocked booth at the conference and an awesome workshop building a web3 chess server on Gno.land. Both Manfred and Jae were at the booth championing Gnolang to Gophers, and we received a lot of positive feedback, some new contributions, fresh PRs, and exposure for Gno.land in web2 circles. It was also a fabulous chance for the team to meet for valuable face-to-face time. That's all for now! Be sure to check back again with us for the next edition of The More You Gno to keep up with all our progress. Do you want to contribute to Gno.land's monthly updates? If you're building on Gno.land and want to highlight your development, project, event, or idea, let us know, and we'll include your contribution. , 2023-10-10T13:37:00Z, christina, gnoland,gnovm,tm2)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "monthly-dev-5",
    "The More You Gno: Gno.land Monthly Updates - 5",
    "\n\nIt's been another productive month, packed with developer calls, live events, new contributors, a large team presence at the Go community's biggest event of the year, GopherCon 2023, and the launch of a PoC gaming dApp on Gno.land, GnoChess. We uncovered a bunch of bugs in the code and some issues with the GnoVM, and made further progress on the Go and Rust VMs, the banker module bug, Gnofee, and much more. Check out the updates below.\n\n## Building a Web3 Chess Server on Gno.land - GnoChess\n\nMost of our work over the last few weeks has been dedicated to [GnoChess](https://gnochess.com/), a [PoC gaming dApp](https://test3.gno.land/r/gnoland/blog:p/chess-gc23) unveiled at GopherCon 2023. As gold event sponsors, we wanted to provide gopher attendees with a memorable experience – and a little friendly competition – while battle-testing the Gno.land platform. As our first gaming dApp, developing GnoChess was extremely useful for our team in many ways. We managed to attract 61 players to the game during the event, including some die-hard web2 gophers who wanted to show off their moves and discover more about Gno.\n\nSeveral PRs were opened as a result of our endeavors, and, beyond the conference, GnoChess taught us a lot about where we're at with Gno, how to successfully build complex dApps on top of the platform, and how well we work as a team. We uncovered some key issues and breaking behavior in the GnoVM, made our JavaScript clients much more reliable in their communications with the Gno.land node, and unearthed further issues that lead to complex errors and potential security flaws that must be addressed before mainnet.\n\nFor example, appending nil to a slice of errors resulted in a panic, or conditional statements like if not supporting custom boolean types. The GnoVM doesn't currently perform terminating statement analysis, which results in a cryptic panic message ([issue 1086](https://github.com/gnolang/gno/issues/1086)), and mixing untyped (negative) floats and integers in arithmetic sometimes drops the sign ([issue 1152](https://github.com/gnolang/gno/issues/1152)). The issues uncovered while developing GnoChess were discussed extensively in the public developer calls of [Sept 6](https://www.youtube.com/watch?v=BBBqgycMjqU) and [Sept 20](https://www.youtube.com/watch?v=WrxFVPR55G0), and referenced in the [GitHub meeting agenda](https://github.com/gnolang/meetings/issues/31). Most of the issues are common in software development and fairly simple to fix by making some implementation changes or adjustments to design choices.\n\nWhile developing GnoChess, our engineers took on the role of expert platform users rather than core team members. This approach was very useful as it pushed the platform to new limits, and allowed us to dive deep into many aspects of the project, creating a culture of sharing by opening up issues for each bug and asking for feedback and support. We'll definitely take a similar approach for future app development and onboarding new devs to Gno. We'll be releasing a retrospective of our experiences in the coming weeks. In the meantime, if you want to build a dApp on Gno.land, check out the GnoChess repo, where you can find a useful [tutorial](https://github.com/gnolang/gnochess/blob/main/tutorial/01_getting_started/README.md) or watch the recording of the GopherCon workshop, '[Chess: The Gnolang Way](https://www.youtube.com/watch?v=JQh7LhqW7ns).'\n\n## The Battle of the Virtual Machines\n\nCore engineers Marc and Petar continue their excellent work developing two different VMs for Gno, one in Go and one in Rust. In the coming weeks, we'll have a face-off, comparing and contrasting their features, efficiency, speed, and performance, so watch this space! For now, the definition of the virtual machine is stable for both, and they are no longer working on the virtual machine definition. They are mainly focusing on code generation; everything from parsing to scanning to parsing and compiling. Let's see how they are shaping up.\n\n### Rust VM\n\nPetar has developed a Rust implementation not only of the virtual machine but of the whole chain, including the compiler. He has written a Go compiler entirely in Rust and has even started experimenting with changing the compiler to implement the Invar proposal from Jae. Further progress includes porting a part of the parser and scanner from the Go compiler to Rust (almost a direct translation from Go to Rust) and making it stable. \n\nIn addition, Petar has completed work on typed nil values and improving the recursive closures of Go, which were not working with Gno code and needed additional pointers. He has also implemented Iota and hooked up the garbage collector. In the coming weeks, Petar will be working to smooth out bugs and implement type aliases, as well as implementing function analysis for the dependency graph. The dependency graph is necessary for compiling global types in the correct order, so, for example, when type A refers to type B, you need to compile type B first so that when type A refers to it, type B exists.\n\n### Go VM\n\nMarc is currently rewriting a parser and a scanner from scratch. His work is not as far along as Petar's, but he's getting closer, and the code generation works well. He is currently refactoring and building a single-pass compiler that can perform a **syntax-directed translation**, which means there are no intermediate data structures between the source code and the byte code. This is a much simpler design that should compile faster and be easier to maintain, but it requires a complete redesign. \n\nMarc believes his Go parser will be easier to maintain and understand than the one in Rust and benefit the user since the entire stack is written in Go. However, to assess the best implementation of the VMs, Marc has started a Go **test shoot project, which is a script** that will run many samples to verify that the compiler (in Go, Rust, or any other implementation) conforms to Go's specifications. Marc and Petar will open their repos soon, and the next edition of The More You Gno will highlight how the GnoVM works. \n\n## Gnoffee: Coffeescript for Go and Gno\n\nGnoffee (hackerspace [issue 22](https://github.com/gnolang/hackerspace/issues/22)) will be a powerful standalone tool to elevate the development process of Go and Gno by generating code and integrating new features, eliminating manual coding. We aim to create a custom variation of Golang that preserves similar readability, maintains compatibility, and enables being able to code in Gno very quickly when you know how to code in Go. How do we go about this? \n\nRegarding compatibility, one possibility is to propose all our changes to Golang and wait for approval before we start developing. However, this is likely to take some time. Another approach is to use a way to transpile TypeScript for JavaScript or Coffeescript for JavaScript, so it's another language passing through a program that creates standard valid Golang and will generate valid Gnolang. With this simple method, we can experiment with missing features like new native types, and new keywords, and when we have new features in mind, we can develop what we lack. \n\nFor instance, it does not make sense to have extra security for your exported variables when you write a library in Go. However, in Gno, it is very important to ensure that everything you expose cannot be modified by other contracts. This means finding a way to expose constants and other readable elements without risking their values being overwritten.\n\nBesides allowing us to carry out all types of experimentation more easily, Gnofee could eventually be a way for the Go team to measure the potential adoption of Gno. Gnofee is not a priority for the mainnet, but we're excited to work on this important initiative.\n\n## META Multinode Testnet\n\nThe discussions about single and multinode testnets have been ongoing, so we opened an issue to establish a multinode testnet focused on multi-validator experimentation, including stability, benchmarking, and lifecycle management. This multinode testnet aims to provide a platform for in-depth explorations and evaluations of multi-validator setups, while we maintain the single-node test3+.gno.land set up, primarily dedicated to showcasing the VM and providing examples. Visit hackerspace [issue 9](https://github.com/gnolang/hackerspace/issues/9) if you want to participate in this initiative or share your insights.\n\n## Banker Module Bug\n\nThe banker module bug is a known issue that needs to be fixed before the mainnet because, currently, it's still possible to mint new GNOT tokens from any contract. Several fixes have been suggested, and our goal is to merge [PR 875](https://github.com/gnolang/gno/pull/875) put forward by Onbloc to change the denomination of the coins minted by the banker. Merging this PR is currently blocked by 2 small failing checks, but we are close to resolving this issue.\n\n## Preserving Go Comments in Protobuf\n\nIn [issue 1157](https://github.com/gnolang/gno/issues/1157), Jeff from Berty raises the question about preserving Go comments in the Receiver field. Currently, Amino converts the code, but the proto message Receiver field doesn't have the comment. Manfred agrees that informative comments are helpful. However, he doesn't want to create a complex Protobuf configuration. We will continue to discuss this issue to look for solutions, but for now, Berty will parse the original Go source code and get the comments this way.\n\n## Multi-Sig and Security Features\n\nSeveral contributors, including Teritori, are working on built-in multi-sig support in Gno.land, where Gnokey supports a multi-sig setup. We also want to introduce additional ways to improve the UX and security of Gno.land (and web3 in general). An idea we currently have is to add a new layer in authentication, creating something similar to browser cookies that we can name sessions. The chain will have two tables, one with the public key for an account and one with a public key for sessions linked to an account. From your main account, you can create a session with self-destructing features, such as destructing after one hour without usage or after 24 hours. The goal would be to allow more complex and secure flows when starting your operations. We may not want this for multi-sig, but it comes under the same family of security and privacy features.\n\nFor example, imagine a wallet like Adena uses your key, a passphrase, or a ledger. It will sign a new public key that you just created in memory. Each time you close your browser, the memory is cleared. You can also have a logout button to call on the blockchain to delete all your sessions or simply wait for the session to be self-destructed, especially if the session was just in memory on your side. We will continue to develop this idea.\n\n## New Team Member\n\nWe're excited to welcome a new DevRel team member to Gno.land, Leon, who's been in blockchain development for two years and is passionate about engineering and teaching. Leon has taught languages, development, math, and music privately, as well as an OS fundamentals class at his previous faculty. Welcome on board!\n\n## Grantee and Ecosystem Updates\n\nAs Gno.land core continues to advance, so does our blossoming ecosystem, with new contributors and community members turning their eyes to Gno. The overriding theme of this last month has been collaboration, and we're pleased to see gnomes working together to overcome their obstacles and push their projects forward. Let's see what they've worked on over the last few weeks.\n\n### Onbloc\n\nOnbloc is powering ahead, contributing to Gno.land core, making upgrades and improvements to Adena and Gnoscan, and developing the Gnoswap DEX. Last month, Onbloc released the patched version 1.8.0 of Adena, which includes some UI and UX enhancements, such as more intuitive account management settings, a copy icon next to the names of the accounts, and some bug fixes. This release also comes with new injection methods to enable dApps to request users to add a custom gno.land network or switch to an existing one. Check out the [release note](https://github.com/onbloc/adena-wallet/releases/tag/v1.8.0) for more details.\n\nOnbloc has open-sourced the code for Gnoswap on this GitHub [repo here](https://github.com/gnoswap-labs/gnoswap). You can also find a guide to running unit tests. The team continues to improve the Gnoswap interface, focusing on the earn and staking pages, the graphs for positions, and some components for adding and removing liquidity and providing pool incentives. They're working on the next iteration of the interface, with the governance and airdrop pages, and developing the front-end logic to integrate with Gnoswap realms and APIs. Onbloc also contributed to Gno core, adding PRs for fixes to testing and the banker module. Keep up with Onbloc through their [hackerspace journey](https://github.com/gnolang/hackerspace/issues/29) and check out their latest initiative [Gnodesk](https://medium.com/onbloc/gnodesk-week-2-of-sept-2023-5edbc451bba7), which delivers weekly highlights and updates from Gno.land.\n\n### Teritori\n\nTeritori has been working on improvements since the last update and open-sourcing all their work, including the DAO deployer and the Moderation module. You can visit the Teritori DAO tooling repo to find the complete documentation and new realms to easily deploy your DAO. There is also a tutorial on creating your own DAO using the framework. \n\nThe team has made extensive progress on the Justice DAO deployer, a module that can be used for third-party arbitration when there is a problem with the escrow system in a decentralized freelance marketplace. The Justice DAO can resolve potential conflicts between the seller and the buyer and implements randomness to choose the judges to solve problems without conflicts of interest. The content flagging system, which highlights the content that users deem to be inappropriate, has been tweaked and improved. Keep up with Teritori's [hackerspace journey here](https://github.com/gnolang/hackerspace/issues/7).\n\n### Berty\n\nBerty has already completed the first phase of the project and published the [technical proposal](https://github.com/gnolang/gnomobile/issues/15) to develop the Gno mobile framework. The team is now busy with the second phase of implementing the proposal and the gRPC interface, which is working with the local socket on Android and iOS. Jeff has been trying to use Amino, and, now that Iuri is back from vacation, the team will work on improving other parts of the interface. Check out their latest [demo](https://www.loom.com/share/c0f68f707d3e47089c2fdbd2698fc92f), which shows an example user interface with wallet functions and blockchain communication. \n\nOnbloc has laid the foundations for Gno mobile apps with the Adena mobile wallet, so Berty will use some of this code in the mobile framework and work with Onbloc to ensure a similar user experience across all Gno apps.\n\n### Flippando\n\nDragos, the developer behind new grantee Flippando, is an experienced mobile app developer. Flippando is a simple on-chain memory game, which is currently written in Solidity and deployed on several testnets, including Goerli, Polygon, Near, Aurora, Evmos, and a Saga chainlet. Fippando started as a project for Dragos to learn Solidity but has already been the winner of two hackathons in Korea. It can be deployed relatively easily on any machine and is currently being ported to Gno.land. Dragos is exploring which user intersection can be more beneficial for this and will show us a demo in the coming weeks. Soon, we'll have two gaming dApps on Gno.land – Flippando and GnoChess! Read about Flippando in the [hackerspace journey](https://github.com/gnolang/hackerspace/issues/33).\n\n### New Contributor Joseph Kato \n\nWe have a new contributor to Gno.land who showed a demo last month of what he's been working on, a language server to run tests and scripts. Joseph is a major Go fan looking to get into web3 and was super excited to come across Gno. While interacting with Gno.land, he found many IDE-like features that he missed when working on files, so he decided to work with an LSP implementation—gnols—with the goal of making these features available to all contributors regardless of editor preference, starting with Sublime Text and Neovim and moving on to IntelliJ, Golang, and Emacs. This is a welcome addition for anyone who has ever developed a realm in Gno. Check out his [hackerspace](https://github.com/gnolang/hackerspace/issues/34) page for more details. \n\n## DappCon, Berlin\n\nManfred was back in Berlin in September at the Radial System presenting 'Gno.land: The Key To Perpetual Transparency,' where he discussed how Gno.land offers a familiar, seamless experience for code sharing and a sustainable and transparent path for blockchain development. \n\n## Web3 Family\n\nCore dev Miloš Živković gave a talk at Web3 Family in Barcelona last month, 'Gno.land and Gnolang: The Dynamic Duo of Blockchain Development.' He presented a brief history of smart contract development and the issues associated with existing platforms, such as limitations in design and security. He introduced Gno and showed how we make web3 accessible and blockchain development more intuitive and secure. Catch the [talk here](https://www.youtube.com/watch?v=0K-jr_Ad3bI).\n\n## GopherCon 2023\n\nGno.land was out in force at GopherCon 2023 with a well-stocked booth at the conference and an awesome workshop building a web3 chess server on Gno.land. Both Manfred and Jae were at the booth championing Gnolang to Gophers, and we received a lot of positive feedback, some new contributions, fresh PRs, and exposure for Gno.land in web2 circles. It was also a fabulous chance for the team to meet for valuable face-to-face time.\n\nThat's all for now! Be sure to check back again with us for the next edition of The More You Gno to keep up with all our progress.\nDo you want to contribute to Gno.land's monthly updates? If you're building on Gno.land and want to highlight your development, project, event, or idea, let us know, and we'll include your contribution.\n",
    "2023-10-10T13:37:00Z",
    "christina",
    "gnoland,gnovm,tm2"
  ],
  "max_deposit": ""
}
#13 vm/execgno.land/r/gnoland/blog.ModAddPost(funding-program-23q3, Gno.land Funding and Grants Program - Progress So Far, # Quarterly Report: Q3 2023 We launched the [Gno.land Funding and Grants](https://github.com/gnolang/ecosystem-fund-grants) program in July 2023 to encourage talented and passionate developers to interact with Gno.land, help build core infrastructure and tooling, and enhance the usability of the platform. After establishing a review process to streamline the program and identify core areas that need the most work, we ran with our first cohort of grantees in Q3, awarding four grants from a total of seven submissions (to two teams and two individuals). Full details of grant submissions, scope, and funding can be found on GitHub, but here’s a summary of the program’s progress so far and what’s coming up in Q4. ## Q3 Funding Breakdown The total grants distribution for Q3 was **$563,595** over the four grants: Teritori, Berty, Zack Scholl, and Flippando. This work has been split over two main large-scale infrastructure products (the Gno Moderation DAO, and GnoMobile), a gaming application, and our first resident tinkerer (Zack), who is experimenting with Gno and developing Proof of Concepts using it. Each grant recipient was provided with milestones for deliverables and has kept track of their progress through regular syncs, hackerspace journeys, blog posts, and developer calls. ### Teritori (delivered September 2023) Teritori blockchain and multi-chain hub allows IBC and non-IBC communities to connect, create groups, exchange tokens and NFTs, and launch new projects. The Teritori team has solid experience building social dApps, marketplaces, NFTs, collectibles, and interfaces to encourage community interaction. For the Gno.land Grants and Funding program, Teritori was tasked with building a Moderation DAO to enable effective and fair content moderation in a decentralized and permissionless environment. The Moderation Module is a smart contract ‘realm’ that enables a DAO to manage the daily moderation of forums or social threads through blockchain decision-making, supporting the vision of a censorship-resistant platform that fosters a safe space for open debate and discussion. Find detailed updates on Teritori’s [hackerspace issue 7](https://github.com/gnolang/hackerspace/issues/7), and watch out for upcoming blogs on Gno.land. ### Berty Technologies (delivery Dec 2023) Berty private messaging app was allocated a grant to build a mobile version of Gno.land, implementing the WESH protocol (available by Bluetooth, local WIFI, or other means), and providing secure censorship-resistant communication between devices. Berty’s experience in off-grid communication is invaluable to Gno.land, and the team is an expert at running Go on mobile Android and iOS operating systems. For this grant, to be completed in Q4, Berty will deliver a minimal PoC of the existing apps of Gno.land running on mobile, and deliver an open-source mobile app with basic CI/CD, interacting with the Gno.land testnet. Find detailed reports and updates on Berty’s [hackerspace issue 28](https://github.com/gnolang/hackerspace/issues/28) or within their [Gnomobile blog post](https://test3.gno.land/r/gnoland/blog:p/gnomobile). ### Flippando (delivery Nov 2023) Flippando is a multi-level on-chain memory game currently written in Solidity and deployed on several testnets, including Goerli, Polygon, Near, Aurora, Evmos, and a Saga chainlet. Like the classic card-based Memory game, Flippando players must match card pairs (digital tiles). When a player selects a tile, the game sends a request to the chain, which sends back the uncovered tile. If two tiles match, they remain uncovered. If they don’t match, they are flipped back until the game is won, and an NFT is generated for the winning player to prove the win. Through the development of a simple gaming app on Gno.land, we want to show how easy it is for gaming and metaverse concepts to be built. Through this grant, Flippando will port its memory game to Gno. Find detailed updates on Flippando’s [hackerspace issue 33](https://github.com/gnolang/hackerspace/issues/33). ### Resident Tinkerers Program: Zack Scholl (6 months) Zack Scholl is Gno.land’s first resident tinkerer with tons of experience in web2 development and a passion for the Go language. Through the grants program, Zack aims to translate his extensive knowledge to Gno and web3 by developing PoCs using Gno. So far, Zack has worked on a microblogging app for Gno.land and a prototype for using generative audio with smart contracts. He’s also creating documentation and tutorials to help other developers follow his lead. You’ll be hearing more from Zack over the coming weeks. Follow his [hackerspace issue 2](https://github.com/gnolang/hackerspace/issues/2) journey for more details. After a great start to the Funding and Grants Program in Q3, below is a breakdown of the percentage of funding allocated to each area of development so far: [![Funding](https://gnolang.github.io/blog/2023-10-17_funding-program-q3/src/thumbs/funding.png)](https://gnolang.github.io/blog/2023-10-17_funding-program-q3/src/funding.png) ## Coming Up in Q4 and Q1 2024 We’re looking forward to more exciting developments in the coming quarters as we focus on the road to mainnet. Onbloc, one of Gno.land’s most active contributors, is currently being confirmed as a [Q4 grantee](https://github.com/gnolang/ecosystem-fund-grants/pull/4/files#diff-6dbd2e305897910e59072f9efa8c537d86f8aa281eb3742e0c150048a1df95eb) to work on core infrastructure necessary for mainnet, including tm2-js and gno-js support, GnoVM debugging, contract interactions, and leading the multi-node testnet initiative. Onbloc has already developed essential public infrastructure tools for Gno.land, including the non-custodial Adena wallet, the Gnoscan blockchain explorer, and Gnoswap decentralized exchange. The team has demonstrated immense passion and dedication in attending public developer calls and in-person events, and releasing extensive documentation, blog series, and [hackerspace issue 29](https://github.com/gnolang/hackerspace/issues/29) about their journey. Over the next two quarters, the Grants program will focus on building our tinkerer and student cohorts, and publishing more content, such as application libraries, documentation, and Gno packages. The goal is twofold: to support more users and ensure a diversified set of users on the Gno.land platform testing, debugging, troubleshooting, and running user feedback loops. We currently have two apps to reference on how to get started – GnoChess, built by the Gno core team, and Flippando, a grant recipient – we’re looking for a lot more to come. We’re steadily building out the Gno.land platform, and our ecosystem of grantees and contributors. Let us know if you want to join us by submitting an application any time on the Funding and Grants [repository](https://github.com/gnolang/ecosystem-fund-grants). We’re opening up our second grant batch this month, and look forward to reviewing your submissions. , 2023-10-17T13:37:00Z, christina,michelle, gnoland,funding,grants)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "funding-program-23q3",
    "Gno.land Funding and Grants Program - Progress So Far",
    "\n\n# Quarterly Report: Q3 2023\n\nWe launched the [Gno.land Funding and Grants](https://github.com/gnolang/ecosystem-fund-grants) program in July 2023 to encourage talented and passionate developers to interact with Gno.land, help build core infrastructure and tooling, and enhance the usability of the platform. After establishing a review process to streamline the program and identify core areas that need the most work, we ran with our first cohort of grantees in Q3, awarding four grants from a total of seven submissions (to two teams and two individuals). Full details of grant submissions, scope, and funding can be found on GitHub, but here’s a summary of the program’s progress so far and what’s coming up in Q4.\n\n## Q3 Funding Breakdown\n\nThe total grants distribution for Q3 was **$563,595** over the four grants: Teritori, Berty, Zack Scholl, and Flippando. This work has been split over two main large-scale infrastructure products (the Gno Moderation DAO, and GnoMobile), a gaming application, and our first resident tinkerer (Zack), who is experimenting with Gno and developing Proof of Concepts using it. Each grant recipient was provided with milestones for deliverables and has kept track of their progress through regular syncs, hackerspace journeys, blog posts, and developer calls. \n\n### Teritori (delivered September 2023)\n\nTeritori blockchain and multi-chain hub allows IBC and non-IBC communities to connect, create groups, exchange tokens and NFTs, and launch new projects. The Teritori team has solid experience building social dApps, marketplaces, NFTs, collectibles, and interfaces to encourage community interaction. For the Gno.land Grants and Funding program, Teritori was tasked with building a Moderation DAO to enable effective and fair content moderation in a decentralized and permissionless environment. \n\nThe Moderation Module is a smart contract ‘realm’ that enables a DAO to manage the daily moderation of forums or social threads through blockchain decision-making, supporting the vision of a censorship-resistant platform that fosters a safe space for open debate and discussion. Find detailed updates on Teritori’s [hackerspace issue 7](https://github.com/gnolang/hackerspace/issues/7), and watch out for upcoming blogs on Gno.land.\n\n### Berty Technologies (delivery Dec 2023)\n\nBerty private messaging app was allocated a grant to build a mobile version of Gno.land, implementing the WESH protocol (available by Bluetooth, local WIFI, or other means), and providing secure censorship-resistant communication between devices. Berty’s experience in off-grid communication is invaluable to Gno.land, and the team is an expert at running Go on mobile Android and iOS operating systems. For this grant, to be completed in Q4, Berty will deliver a minimal PoC of the existing apps of Gno.land running on mobile, and deliver an open-source mobile app with basic CI/CD, interacting with the Gno.land testnet. Find detailed reports and updates on Berty’s [hackerspace issue 28](https://github.com/gnolang/hackerspace/issues/28) or within their [Gnomobile blog post](https://test3.gno.land/r/gnoland/blog:p/gnomobile).\n\n### Flippando (delivery Nov 2023)\n\nFlippando is a multi-level on-chain memory game currently written in Solidity and deployed on several testnets, including Goerli, Polygon, Near, Aurora, Evmos, and a Saga chainlet. Like the classic card-based Memory game, Flippando players must match card pairs (digital tiles). When a player selects a tile, the game sends a request to the chain, which sends back the uncovered tile. If two tiles match, they remain uncovered. If they don’t match, they are flipped back until the game is won, and an NFT is generated for the winning player to prove the win. Through the development of a simple gaming app on Gno.land, we want to show how easy it is for gaming and metaverse concepts to be built. Through this grant, Flippando will port its memory game to Gno. Find detailed updates on Flippando’s  [hackerspace issue 33](https://github.com/gnolang/hackerspace/issues/33).\n\n### Resident Tinkerers Program: Zack Scholl (6 months)\n\nZack Scholl is Gno.land’s first resident tinkerer with tons of experience in web2 development and a passion for the Go language. Through the grants program, Zack aims to translate his extensive knowledge to Gno and web3 by developing PoCs using Gno. So far, Zack has worked on a microblogging app for Gno.land and a prototype for using generative audio with smart contracts. He’s also creating documentation and tutorials to help other developers follow his lead. You’ll be hearing more from Zack over the coming weeks. Follow his [hackerspace issue 2](https://github.com/gnolang/hackerspace/issues/2) journey for more details.\n\nAfter a great start to the Funding and Grants Program in Q3, below is a breakdown of the percentage of funding allocated to each area of development so far:\n            \n[![Funding](https://gnolang.github.io/blog/2023-10-17_funding-program-q3/src/thumbs/funding.png)](https://gnolang.github.io/blog/2023-10-17_funding-program-q3/src/funding.png)\n\n##  Coming Up in Q4 and Q1 2024\n\nWe’re looking forward to more exciting developments in the coming quarters as we focus on the road to mainnet. Onbloc, one of Gno.land’s most active contributors, is currently being confirmed as a [Q4 grantee](https://github.com/gnolang/ecosystem-fund-grants/pull/4/files#diff-6dbd2e305897910e59072f9efa8c537d86f8aa281eb3742e0c150048a1df95eb) to work on core infrastructure necessary for mainnet, including tm2-js and gno-js support, GnoVM debugging, contract interactions, and leading the multi-node testnet initiative. Onbloc has already developed essential public infrastructure tools for Gno.land, including the non-custodial Adena wallet, the Gnoscan blockchain explorer, and Gnoswap decentralized exchange. The team has demonstrated immense passion and dedication in attending public developer calls and in-person events, and releasing extensive documentation, blog series, and [hackerspace issue 29](https://github.com/gnolang/hackerspace/issues/29) about their journey. \n\nOver the next two quarters, the Grants program will focus on building our tinkerer and student cohorts, and publishing more content, such as application libraries, documentation, and Gno packages. The goal is twofold: to support more users and ensure a diversified set of users on the Gno.land platform testing, debugging, troubleshooting, and running user feedback loops. We currently have two apps to reference on how to get started – GnoChess, built by the Gno core team, and Flippando, a grant recipient – we’re looking for a lot more to come. \n\nWe’re steadily building out the Gno.land platform, and our ecosystem of grantees and contributors. Let us know if you want to join us by submitting an application any time on the Funding and Grants [repository](https://github.com/gnolang/ecosystem-fund-grants). We’re opening up our second grant batch this month, and look forward to reviewing your submissions. \n",
    "2023-10-17T13:37:00Z",
    "christina,michelle",
    "gnoland,funding,grants"
  ],
  "max_deposit": ""
}
#14 vm/execgno.land/r/gnoland/blog.ModAddPost(gnoland-moderation-dao-module, Gno.land Moderation DAO Module, # Gno.land Moderation DAO Module *This blog post is written by the Teritori team, whose focus is to allow organizations to communicate and interact in a resilient and transparent way. Teritori is a partner and grantee of Gno.land.* When it comes to the complex subject of discussion forums and decentralized social networks, numerous technical and philosophical questions arise. Imagining a 24/7 online communication system whose administration cannot be compromised or censored by any entity or individual is one of the most intriguing challenges of the decade. Approximately 10 months ago, the Teritori core team decided to explore the new possibilities offered by Gno.land on the theme of decentralized moderation and to build the foundation for future generations of developers to create resilient, robust, and autonomous applications. ## The vision ### About Teritori Teritori is a decentralized Operating System for individuals & communities that allows organizations to communicate and interact in a resilient and transparent way. Its core components include the creation of a decentralized User Profile for individuals & organizations as well as a dApp Store allowing users to pick their favorite services for daily usage and developers to list their product in order to grow their user base. Finally, Teritori backbone, its P2P messenger application that will enable users to create resilient token-gated groups in a click will even allow non-crypto-native users to get onboard as this feature doesn't even require a wallet connection to get started. ### Teritori <> Gno.land Convinced of the benefits of offering a contribution-based consensus model and taking advantage of an interpreted version of Golang, the Teritori core team aims to become one of the most prolific contributors to Gno.land. Our plan is to focus on features that enable the coordination of organizations and individuals via governance, communications, and collaboration. Eventually, all the features listed on Teritori will be accessible in the Gno.land network, contributing to the growth of the ecosystem. ### PoC and iterations Another important point to emphasize is that the Teritori core team intends to improve the features it deploys on Gno.land by taking advantage of the user test phases to collect feedback that will enable iteration and improvement of the service. As a result, the “Proof-of-Concept” (“PoC”) presented in this article will be subject to updates and evolutions, which will be communicated in due course, as will the associated test phases. ## What is the Gno Moderation Module? The Gno Moderation Module is a smart contract (“realm”) that enables a decentralized, autonomous organization (DAO) to manage the moderation of a forum or social thread through a transparent on-chain vote. ### Let’s take an example: Imagine a simple social network similar to Instagram, in which all content is decentralized (using IPFS for images, videos, music etc.). For each post, users sign in via their wallet to post content, and no centralized administrator can delete this content. The freedom offered by this type of decentralized application is immense since even as developers of the application, it is impossible to delete the content. Therefore, we can consider this “space of freedom” as a “common space” unlike any application owned by a private company and hosted on centralized infrastructure. With this radical freedom for the user comes a great responsibility— to collectively ensure the security of this space rather than delegating the responsibility to moderators employed by a commercial enterprise. This is why we’ve created the “Gno Moderation Module.” ### How does it work? [![moderation_flow v0.1](https://gnolang.github.io/blog/2023-10-19_dao-moderation-module/src/thumbs/moderation_flow_v0.1.png)](https://gnolang.github.io/blog/2023-10-19_dao-moderation-module/src/moderation_flow_v0.1.png) The Gno Moderation Module allows users to notify the moderation DAO community that they wish to report content. Through this action (permitted by the smart contract), they inform the DAO community that the content is inappropriate. [![content flag](https://gnolang.github.io/blog/2023-10-19_dao-moderation-module/src/thumbs/content_flag.png)](https://gnolang.github.io/blog/2023-10-19_dao-moderation-module/src/content_flag.png) Once the content has been reported a certain number of times (10 times in this PoC) by users (who may or may not be members of the Moderation DAO), an on-chain proposal is automatically created. [![moderation dao feed](https://gnolang.github.io/blog/2023-10-19_dao-moderation-module/src/thumbs/moderation_dao_feed.png)](https://gnolang.github.io/blog/2023-10-19_dao-moderation-module/src/moderation_dao_feed.png) This on-chain proposal is then listed in the Moderation DAO tab on the Social Feed as well as on the Moderation DAO profile proposals feed so all Moderation DAO members can vote on it. A debate can take place to discuss the best choice for the content. [![moderation dao vote](https://gnolang.github.io/blog/2023-10-19_dao-moderation-module/src/thumbs/moderation_dao_vote.png)](https://gnolang.github.io/blog/2023-10-19_dao-moderation-module/src/moderation_dao_vote.png) Moderation DAO members have three voting options: - Ban the content in question - Abstain - Do not ban the content in question Once the required vote quota has been reached, the contract automatically executes the voted decision. ## The Current Status: The Teritori core team received a grant from the Gno.land core team to build the necessary tools for decentralized moderation. To accomplish this task, we divided our work into five main stages: 1. Build “DAO” standards to establish the fundamental building blocks and ensure a modular approach in the long term for various tools. 2. Build a “DAO” deployer that allows non-tech users to easily utilize the different standards. 3. Build a customizable Moderation Module that can cater to a wide range of use cases. For example, if we replace the social feed with a service marketplace, the Moderation Module can transform into a “Justice Module” that resolves conflicts between sellers and buyers on a decentralized platform and serves as an escrow system. 4. Develop the user experience that allows for large-scale experimentation with the Moderation Module within a dedicated context of an active social feed. Here, we created a social feed realm and enabled non-developer Gno.land users to participate in the full-scale experience. 5. Establish interactions between smart contracts (r/boards, r/socialfeed, /r/users), conduct experiments to enhance their security, and identify emerging needs for these innovative use cases. ### What does a DAO realm look like? - We decided to build two different DAO standards, using two different approaches of modularity: - Aragon DAO Standard, based on the amazing work of [the Aragon team](https://aragon.org/) (using Solidity) - [DAODAO](https://github.com/DA0-DA0) smart contract, using CosmWasm, that allows more modularity. Here is an example, with the DAODAO contract ported into Gnolang: [Source](https://testnet.gno.teritori.com/r/demo/dao_realm_v6/dao_realm.gno) ```go package dao_realm import ( "encoding/base64" "std" "strings" "time" dao_core "gno.land/p/demo/daodao/core_v16" dao_interfaces "gno.land/p/demo/daodao/interfaces_v16" proposal_single "gno.land/p/demo/daodao/proposal_single_v16" voting_group "gno.land/p/demo/daodao/voting_group_v17" "gno.land/p/demo/ujson_v5" "gno.land/r/demo/groups_v22" modboards "gno.land/r/demo/modboards_v9" ) var ( daoCore dao_interfaces.IDAOCore mainBoardName = "dao_realm" groupName = mainBoardName + "_voting_group" groupID groups.GroupID ) func init() { modboards.CreateBoard(mainBoardName) votingModuleFactory := func(core dao_interfaces.IDAOCore) dao_interfaces.IVotingModule { groupID = groups.CreateGroup(groupName) groups.AddMember(groupID, "g1747t5m2f08plqjlrjk2q0qld7465hxz8gkx59c", 1, "") groups.AddMember(groupID, "g108cszmcvs4r3k67k7h5zuhm4el3qhlrxzhshtv", 1, "") groups.AddMember(groupID, "g14u5eaheavy0ux4dmpykg2gvxpvqvexm9cyg58a", 1, "") groups.AddMember(groupID, "g1ckn395mpttp0vupgtratyufdaakgh8jgkmr3ym", 1, "") groups.AddMember(groupID, std.GetOrigCaller().String(), 1, "") return voting_group.NewVotingGroup(groupID) } proposalModulesFactories := []dao_interfaces.ProposalModuleFactory{ func(core dao_interfaces.IDAOCore) dao_interfaces.IProposalModule { tt := proposal_single.Percent(100) // 1% tq := proposal_single.Percent(100) // 1% return proposal_single.NewDAOProposalSingle(core, &proposal_single.DAOProposalSingleOpts{ MaxVotingPeriod: time.Hour * 24 * 42, Threshold: proposal_single.Threshold{ThresholdQuorum: &proposal_single.ThresholdQuorum{ Threshold: proposal_single.PercentageThreshold{Percent: &tt}, Quorum: proposal_single.PercentageThreshold{Percent: &tq}, }}, }) }, } messageHandlersFactories := []dao_interfaces.MessageHandlerFactory{ func(core dao_interfaces.IDAOCore) dao_interfaces.MessageHandler { return groups.NewAddMemberHandler() }, func(core dao_interfaces.IDAOCore) dao_interfaces.MessageHandler { return groups.NewDeleteMemberHandler() }, func(core dao_interfaces.IDAOCore) dao_interfaces.MessageHandler { // TODO: add a router to support multiple proposal modules propMod := core.ProposalModules()[0] return proposal_single.NewUpdateSettingsHandler(propMod.Module.(*proposal_single.DAOProposalSingle)) }, func(core dao_interfaces.IDAOCore) dao_interfaces.MessageHandler { return modboards.NewCreateBoardHandler() }, func(core dao_interfaces.IDAOCore) dao_interfaces.MessageHandler { return modboards.NewDeletePostHandler() }, } daoCore = dao_core.NewDAOCore(votingModuleFactory, proposalModulesFactories, messageHandlersFactories) } func Render(path string) string { return "[[board](/r/demo/modboards:" + mainBoardName + ")]\n\n" + daoCore.Render(path) } func VoteJSON(moduleIndex int, proposalID int, voteJSON string) { module := dao_core.GetProposalModule(daoCore, moduleIndex) if !module.Enabled { panic("proposal module is not enabled") } module.Module.VoteJSON(proposalID, voteJSON) } func Execute(moduleIndex int, proposalID int) { module := dao_core.GetProposalModule(daoCore, moduleIndex) if !module.Enabled { panic("proposal module is not enabled") } module.Module.Execute(proposalID) } func ProposeJSON(moduleIndex int, proposalJSON string) { module := dao_core.GetProposalModule(daoCore, moduleIndex) if !module.Enabled { panic("proposal module is not enabled") } module.Module.ProposeJSON(proposalJSON) } func getProposalsJSON(moduleIndex int, limit int, startAfter string, reverse bool) string { module := dao_core.GetProposalModule(daoCore, moduleIndex) return module.Module.ProposalsJSON(limit, startAfter, reverse) } ``` ### Public Grant Report: You can find the full report of [Teritori Core’s journey here](https://github.com/gnolang/hackerspace/issues/7). ### Resources: Documentation: - [Gno Moderation DAO](https://github.com/TERITORI/gno/blob/teritori-unified/examples/gno.land/r/demo/teritori/MODERATION_DAO.md) Packages: - [https://testnet.gno.teritori.com/r/demo/groups_v22](https://testnet.gno.teritori.com/r/demo/groups_v22) - [https://testnet.gno.teritori.com/p/demo/daodao/interfaces_v16](https://testnet.gno.teritori.com/p/demo/daodao/interfaces_v16) Tutorial: - [Gno.land Social Feed Moderation on Teritori](https://teritori.gitbook.io/teritori-whitepaper/gno.land/introducing-gno.land-social-feed-v0.1#social-feed-moderation) , 2023-10-19T01:50:00Z, ferrymangmi,zxxma,michelleellen, gnoland,dao,moderation,teritori)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "gnoland-moderation-dao-module",
    "Gno.land Moderation DAO Module",
    "\r\n# Gno.land Moderation DAO Module\r\n*This blog post is written by the Teritori team, whose focus is to allow organizations to communicate and interact in a resilient and transparent way. Teritori is a partner and grantee of Gno.land.*\r\n\r\nWhen it comes to the complex subject of discussion forums and decentralized social networks, numerous technical and philosophical questions arise.\r\nImagining a 24/7 online communication system whose administration cannot be compromised or censored by any entity or individual is one of the most intriguing challenges of the decade.\r\nApproximately 10 months ago, the Teritori core team decided to explore the new possibilities offered by Gno.land on the theme of decentralized moderation and to build the foundation for future generations of developers to create resilient, robust, and autonomous applications.\r\n\r\n## The vision\r\n\r\n### About Teritori\r\n\r\nTeritori is a decentralized Operating System for individuals & communities that allows organizations to communicate and interact in a resilient and transparent way. Its core components include the creation of a decentralized User Profile for individuals & organizations as well as a dApp Store allowing users to pick their favorite services for daily usage and developers to list their product in order to grow their user base. Finally, Teritori backbone, its P2P messenger application that will enable users to create resilient token-gated groups in a click will even allow non-crypto-native users to get onboard as this feature doesn't even require a wallet connection to get started.\r\n\r\n### Teritori <> Gno.land\r\n\r\nConvinced of the benefits of offering a contribution-based consensus model and taking advantage of an interpreted version of Golang, the Teritori core team aims to become one of the most prolific contributors to Gno.land. Our plan is to focus on features that enable the coordination of organizations and individuals via governance, communications, and collaboration. Eventually, all the features listed on Teritori will be accessible in the Gno.land network, contributing to the growth of the ecosystem.\r\n\r\n### PoC and iterations\r\n\r\nAnother important point to emphasize is that the Teritori core team intends to improve the features it deploys on Gno.land by taking advantage of the user test phases to collect feedback that will enable iteration and improvement of the service. As a result, the “Proof-of-Concept” (“PoC”) presented in this article will be subject to updates and evolutions, which will be communicated in due course, as will the associated test phases.\r\n\r\n## What is the Gno Moderation Module?\r\n\r\nThe Gno Moderation Module is a smart contract (“realm”) that enables a decentralized, autonomous organization (DAO) to manage the moderation of a forum or social thread through a transparent on-chain vote.\r\n\r\n### Let’s take an example:\r\n\r\nImagine a simple social network similar to Instagram, in which all content is decentralized (using IPFS for images, videos, music etc.). For each post, users sign in via their wallet to post content, and no centralized administrator can delete this content. The freedom offered by this type of decentralized application is immense since even as developers of the application, it is impossible to delete the content. Therefore, we can consider this “space of freedom” as a “common space” unlike any application owned by a private company and hosted on centralized infrastructure.\r\nWith this radical freedom for the user comes a great responsibility— to collectively ensure the security of this space rather than delegating the responsibility to moderators employed by a commercial enterprise. This is why we’ve created the “Gno Moderation Module.”\r\n\r\n### How does it work?\r\n\r\n[![moderation_flow v0.1](https://gnolang.github.io/blog/2023-10-19_dao-moderation-module/src/thumbs/moderation_flow_v0.1.png)](https://gnolang.github.io/blog/2023-10-19_dao-moderation-module/src/moderation_flow_v0.1.png)\r\n\r\nThe Gno Moderation Module allows users to notify the moderation DAO community that they wish to report content. Through this action (permitted by the smart contract), they inform the DAO community that the content is inappropriate.\r\n\r\n[![content flag](https://gnolang.github.io/blog/2023-10-19_dao-moderation-module/src/thumbs/content_flag.png)](https://gnolang.github.io/blog/2023-10-19_dao-moderation-module/src/content_flag.png)\r\n\r\nOnce the content has been reported a certain number of times (10 times in this PoC) by users (who may or may not be members of the Moderation DAO), an on-chain proposal is automatically created.\r\n\r\n[![moderation dao feed](https://gnolang.github.io/blog/2023-10-19_dao-moderation-module/src/thumbs/moderation_dao_feed.png)](https://gnolang.github.io/blog/2023-10-19_dao-moderation-module/src/moderation_dao_feed.png)\r\n\r\nThis on-chain proposal is then listed in the Moderation DAO tab on the Social Feed as well as on the Moderation DAO profile proposals feed so all Moderation DAO members can vote on it. A debate can take place to discuss the best choice for the content.\r\n\r\n[![moderation dao vote](https://gnolang.github.io/blog/2023-10-19_dao-moderation-module/src/thumbs/moderation_dao_vote.png)](https://gnolang.github.io/blog/2023-10-19_dao-moderation-module/src/moderation_dao_vote.png)\r\n\r\nModeration DAO members have three voting options:\r\n- Ban the content in question\r\n- Abstain\r\n- Do not ban the content in question\r\n\r\nOnce the required vote quota has been reached, the contract automatically executes the voted decision.\r\n\r\n## The Current Status:\r\n\r\nThe Teritori core team received a grant from the Gno.land core team to build the necessary tools for decentralized moderation.\r\n\r\nTo accomplish this task, we divided our work into five main stages:\r\n1. Build “DAO” standards to establish the fundamental building blocks and ensure a modular approach in the long term for various tools.\r\n2. Build a “DAO” deployer that allows non-tech users to easily utilize the different standards.\r\n3. Build a customizable Moderation Module that can cater to a wide range of use cases. For example, if we replace the social feed with a service marketplace, the Moderation Module can transform into a “Justice Module” that resolves conflicts between sellers and buyers on a decentralized platform and serves as an escrow system.\r\n4. Develop the user experience that allows for large-scale experimentation with the Moderation Module within a dedicated context of an active social feed. Here, we created a social feed realm and enabled non-developer Gno.land users to participate in the full-scale experience.\r\n5. Establish interactions between smart contracts (r/boards, r/socialfeed, /r/users), conduct experiments to enhance their security, and identify emerging needs for these innovative use cases.\r\n\r\n### What does a DAO realm look like?\r\n\r\n- We decided to build two different DAO standards, using two different approaches of modularity:\r\n- Aragon DAO Standard, based on the amazing work of [the Aragon team](https://aragon.org/) (using Solidity)\r\n- [DAODAO](https://github.com/DA0-DA0) smart contract, using CosmWasm, that allows more modularity.\r\n\r\n\r\nHere is an example, with the DAODAO contract ported into Gnolang:\r\n[Source](https://testnet.gno.teritori.com/r/demo/dao_realm_v6/dao_realm.gno)\r\n\r\n```go\r\npackage dao_realm\r\n\r\nimport (\r\n\t\"encoding/base64\"\r\n\t\"std\"\r\n\t\"strings\"\r\n\t\"time\"\r\n\r\n\tdao_core \"gno.land/p/demo/daodao/core_v16\"\r\n\tdao_interfaces \"gno.land/p/demo/daodao/interfaces_v16\"\r\n\tproposal_single \"gno.land/p/demo/daodao/proposal_single_v16\"\r\n\tvoting_group \"gno.land/p/demo/daodao/voting_group_v17\"\r\n\t\"gno.land/p/demo/ujson_v5\"\r\n\t\"gno.land/r/demo/groups_v22\"\r\n\tmodboards \"gno.land/r/demo/modboards_v9\"\r\n)\r\n\r\nvar (\r\n\tdaoCore       dao_interfaces.IDAOCore\r\n\tmainBoardName = \"dao_realm\"\r\n\tgroupName     = mainBoardName + \"_voting_group\"\r\n\tgroupID       groups.GroupID\r\n)\r\n\r\nfunc init() {\r\n\tmodboards.CreateBoard(mainBoardName)\r\n\r\n\tvotingModuleFactory := func(core dao_interfaces.IDAOCore) dao_interfaces.IVotingModule {\r\n\t\tgroupID = groups.CreateGroup(groupName)\r\n\t\tgroups.AddMember(groupID, \"g1747t5m2f08plqjlrjk2q0qld7465hxz8gkx59c\", 1, \"\")\r\n\t\tgroups.AddMember(groupID, \"g108cszmcvs4r3k67k7h5zuhm4el3qhlrxzhshtv\", 1, \"\")\r\n\t\tgroups.AddMember(groupID, \"g14u5eaheavy0ux4dmpykg2gvxpvqvexm9cyg58a\", 1, \"\")\r\n\t\tgroups.AddMember(groupID, \"g1ckn395mpttp0vupgtratyufdaakgh8jgkmr3ym\", 1, \"\")\r\n\t\tgroups.AddMember(groupID, std.GetOrigCaller().String(), 1, \"\")\r\n\t\treturn voting_group.NewVotingGroup(groupID)\r\n\t}\r\n\r\n\tproposalModulesFactories := []dao_interfaces.ProposalModuleFactory{\r\n\t\tfunc(core dao_interfaces.IDAOCore) dao_interfaces.IProposalModule {\r\n\t\t\ttt := proposal_single.Percent(100) // 1%\r\n\t\t\ttq := proposal_single.Percent(100) // 1%\r\n\t\t\treturn proposal_single.NewDAOProposalSingle(core, &proposal_single.DAOProposalSingleOpts{\r\n\t\t\t\tMaxVotingPeriod: time.Hour * 24 * 42,\r\n\t\t\t\tThreshold: proposal_single.Threshold{ThresholdQuorum: &proposal_single.ThresholdQuorum{\r\n\t\t\t\t\tThreshold: proposal_single.PercentageThreshold{Percent: &tt},\r\n\t\t\t\t\tQuorum:    proposal_single.PercentageThreshold{Percent: &tq},\r\n\t\t\t\t}},\r\n\t\t\t})\r\n\t\t},\r\n\t}\r\n\r\n\tmessageHandlersFactories := []dao_interfaces.MessageHandlerFactory{\r\n\t\tfunc(core dao_interfaces.IDAOCore) dao_interfaces.MessageHandler {\r\n\t\t\treturn groups.NewAddMemberHandler()\r\n\t\t},\r\n\t\tfunc(core dao_interfaces.IDAOCore) dao_interfaces.MessageHandler {\r\n\t\t\treturn groups.NewDeleteMemberHandler()\r\n\t\t},\r\n\t\tfunc(core dao_interfaces.IDAOCore) dao_interfaces.MessageHandler {\r\n\t\t\t// TODO: add a router to support multiple proposal modules\r\n\t\t\tpropMod := core.ProposalModules()[0]\r\n\t\t\treturn proposal_single.NewUpdateSettingsHandler(propMod.Module.(*proposal_single.DAOProposalSingle))\r\n\t\t},\r\n\t\tfunc(core dao_interfaces.IDAOCore) dao_interfaces.MessageHandler {\r\n\t\t\treturn modboards.NewCreateBoardHandler()\r\n\t\t},\r\n\t\tfunc(core dao_interfaces.IDAOCore) dao_interfaces.MessageHandler {\r\n\t\t\treturn modboards.NewDeletePostHandler()\r\n\t\t},\r\n\t}\r\n\r\n\tdaoCore = dao_core.NewDAOCore(votingModuleFactory, proposalModulesFactories, messageHandlersFactories)\r\n}\r\n\r\nfunc Render(path string) string {\r\n\treturn \"[[board](/r/demo/modboards:\" + mainBoardName + \")]\\n\\n\" + daoCore.Render(path)\r\n}\r\n\r\nfunc VoteJSON(moduleIndex int, proposalID int, voteJSON string) {\r\n\tmodule := dao_core.GetProposalModule(daoCore, moduleIndex)\r\n\tif !module.Enabled {\r\n\t\tpanic(\"proposal module is not enabled\")\r\n\t}\r\n\tmodule.Module.VoteJSON(proposalID, voteJSON)\r\n}\r\n\r\nfunc Execute(moduleIndex int, proposalID int) {\r\n\tmodule := dao_core.GetProposalModule(daoCore, moduleIndex)\r\n\tif !module.Enabled {\r\n\t\tpanic(\"proposal module is not enabled\")\r\n\t}\r\n\tmodule.Module.Execute(proposalID)\r\n}\r\n\r\nfunc ProposeJSON(moduleIndex int, proposalJSON string) {\r\n\tmodule := dao_core.GetProposalModule(daoCore, moduleIndex)\r\n\tif !module.Enabled {\r\n\t\tpanic(\"proposal module is not enabled\")\r\n\t}\r\n\tmodule.Module.ProposeJSON(proposalJSON)\r\n}\r\n\r\nfunc getProposalsJSON(moduleIndex int, limit int, startAfter string, reverse bool) string {\r\n\tmodule := dao_core.GetProposalModule(daoCore, moduleIndex)\r\n\treturn module.Module.ProposalsJSON(limit, startAfter, reverse)\r\n}\r\n```\r\n\r\n### Public Grant Report:\r\n\r\nYou can find the full report of [Teritori Core’s journey here](https://github.com/gnolang/hackerspace/issues/7). \r\n\r\n### Resources:\r\n\r\nDocumentation:\r\n- [Gno Moderation DAO](https://github.com/TERITORI/gno/blob/teritori-unified/examples/gno.land/r/demo/teritori/MODERATION_DAO.md)\r\n\r\nPackages:\r\n- [https://testnet.gno.teritori.com/r/demo/groups_v22](https://testnet.gno.teritori.com/r/demo/groups_v22)\r\n- [https://testnet.gno.teritori.com/p/demo/daodao/interfaces_v16](https://testnet.gno.teritori.com/p/demo/daodao/interfaces_v16)\r\n\r\nTutorial:\r\n- [Gno.land Social Feed Moderation on Teritori](https://teritori.gitbook.io/teritori-whitepaper/gno.land/introducing-gno.land-social-feed-v0.1#social-feed-moderation)\r\n",
    "2023-10-19T01:50:00Z",
    "ferrymangmi,zxxma,michelleellen",
    "gnoland,dao,moderation,teritori"
  ],
  "max_deposit": ""
}
#15 vm/execgno.land/r/gnoland/blog.ModAddPost(wyg-dongwon-shin, Who You Gno – On the Record with Dongwon Shin, *Who You Gno is intended to shine a light on the builders, contributors, and generally brilliant humans behind the tech. We’re excited to kick off this series with Dongwon Shin, the co-founder and CEO of one of Gno.land’s longest-contributing teams, Onbloc, a South Korean-based blockchain software company that builds key infrastructure and tooling for Gno.land* Since embarking on their Gno journey in late 2021, Dongwon and his team have been among the most active gnomes embodying the values of the Gno project: hardworking, passionate, honest, and humble, to name a few. You may already be familiar with Onbloc’s projects [Adena](https://adena.app/), [Gnoscan](https://gnoscan.io/), and [Gnoswap](https://github.com/gnoswap-labs) more about this can be found in [Onbloc's Hackerspace journey](https://github.com/gnolang/hackerspace/issues/29). In this interview, we’ll get the latest updates on these projects, hear about Dongwon the person, and learn more about what motivates him to be a gnome. Check it out. ## Dongwon’s life before coding It’s a cold November morning in Seoul, and Dongwon is in the office early after sleeping just a few hours. Speaking to him from Dubai, where “cool” is 30 ℃, it’s -1 ℃ in Korea. “I hope you’re keeping warm,” I smile, “Yeah," he laughs, “it’s not too bad.” Dongwon’s been in the industry since 2015 when web3 was still called “crypto,” ICOs were selling snake oil, and his compatriots were busy paying above the market price for bitcoin in a phenomenon called the “Kimchi premium.” At the time, he was traveling the world as a professional e-sports gamer which saw him leaving Korea and living in San Francisco and L.A. for several years. “I had lots of tournaments to compete in, so I had to travel to many other countries,” he says, “while traveling, I learned about other cultures and people, and new experiences. It was really eye-opening, you know, it really helped make me who I am today.” And who is Dongwon today? Ambitious, driven, and one of the kindest, most genuine people you could ever meet. “I like challenges, and I’m very competitive,” he says. “I can't just do regular jobs. I get bored quickly, so I need to find something very competitive and hard that makes me stressed.” I point out that he’s in the right place, and he laughs. He explains that he used to spend an entire week, sometimes two, learning a game before a tournament, almost around the clock. “I had to put everything I have into winning that game, right?” He views working in web3 the same way. ## The intersection between e-gaming and blockchain Dongwong is clearly comfortable on the cutting edge in emerging industries that “are often looked down on,” like e-gaming and crypto. He takes great satisfaction in how they’ve both grown. “My parents were saying, 'Just go study,' while I was playing games, but e-sports has grown a lot. Right now, the industry is really big, and it's kind of the same with crypto.” He adds, “I like getting in early when other people are not interested and finding an opportunity there.” When looking to retire as a professional gamer, he found his home right away in web3, working with a blockchain consultant and the sports and entertainment-focused [Chiliz project](https://www.chiliz.com/), before launching his own blockchain consulting and development firm. “I didn't think I was going to be just a regular employee for a big company. So I wanted to start my own business,” he says. ## Getting to Gno… Gno.land How did Dongwon hear about Gno.land? “My co-founder, Peter, and I were long-time followers of the Cosmos ecosystem, and we found out that Jae was working on a new project called Gno.land in late 2021. We really liked the vision behind Gno.land, why he started, and what he wants to achieve. We value transparency, fairness, and censorship resistance, so we read all the documentation and his initial codebase and decided we should be part of his new initiative. We started Onbloc in early 2022.” Dongwon didn’t know Jae personally, but he felt strongly aligned with his vision and what Gno.land aims to achieve. Also, his reputation as the founder of Tendermint and Cosmos preceded him. Dongwon’s co-founder, Peter, was also working on a project called Lunagram, a Cosmos wallet integrated with Telegram. Peter had fond memories of Jae, being very supportive of experimental projects, including his own, in the early days of Cosmos. ## Building tools… Adena, Gnoscan, Gnoswap Onbloc has since become Gno.land’s most prolific contributor, launching the [Gnoscan](https://gnoscan.io/) block explorer and the [Adena](https://adena.app/) wallet, as well as creating tutorials and blogs to help onboard developers to Gno, and creating Gno.land’s first AMM DEX Gnoswap, the beta version of which is estimated for December this year. “Currently, the team is focused on developing Gnoswap, integrating [the realms and APIs](https://github.com/gnoswap-labs/gnoswap) with [the interface](https://github.com/gnoswap-labs/gnoswap-interface), enhancing the swap function and liquidity pools, and some additional features. We expect to launch the beta in about a month, so we’re quite excited!” As for Adena, the defacto Gno.land wallet, “It's already production-ready, but we want to improve our UX, and UI to provide more secure ways of using a web3 wallet.” To achieve this, Onbloc is adding a feature called [Air-Gap](https://en.wikipedia.org/wiki/Air_gap_(networking)) which allows the wallet to be used in an offline environment, without the user needing to import their keys to Adena. “They can just use Adena as a broadcaster,” Dongwon explains. “I think this kind of feature is needed for enhancing security and educating people to use noncustodial products in a secure way.” Onbloc is also a [Q4 2023 grantee](https://test3.gno.land/r/gnoland/blog:p/funding-program-23q3) and will develop core Gno.land infrastructure in preparation for mainnet. “We are working on three key features,” Dongwon explains. “The first is contract interaction. So it's a way for a realm to interact with other realms. The second is porting essential Go packages to Gno, and the third is a multi-node testnet.” All in addition to Onbloc’s continued efforts on Gnoswap, Gnoscan, and Adena. “You’re keeping busy, then?” I ask. “All our hands are full now,” he laughs. I ask what he does in his free time and – in fact – whether he has any. “Not much,” he jokes, “but I like spending time with my son and playing board games together. He’s seven years old, and we are like friends.” Dongwon also likes to unwind by reading books when his son is asleep. One of his favorites is [*The Secret*](https://en.wikipedia.org/wiki/The_Secret_(Byrne_book)); he was “really inspired by the concept” when he was younger. I ask if he sees it working in his daily life and whether he believes he manifests what he wants into existence, “Definitely,” he replies without hesitation. ## Dongwon’s conviction in Gno.land Not only is Dongwon working night and day, but he has bootstrapped his team from his own pocket to go all in on Gno.land. What makes his conviction so strong? “I truly believe that the Gno.land blockchain is the next generation of the blockchain industry. Gno.land is trying to invite web2 developers into web3 and providing all these developer-friendly tools so they don't need to learn a new language to get into the ecosystem. GnoVM, Tendermint2, everything is so transparent and simple.” He believes Gno.land will be “one of the greatest experiments in the crypto industry” thanks to its fair rewards and contribution-based governance. “I'm really excited about this initiative, and all our team members are well-aligned to support this vision. We want to do our part to achieve the success of Gno.land.” I thank him for his time and ask if there’s anything he would like to add. He pauses for a moment and then says, “If you're building a dApp or looking for a new opportunity in a new ecosystem, I think this is your chance. I hope to see great developers and teams getting into Gno.land. Let’s make this ecosystem great together.” , 2023-11-24T00:00:00Z, christina, whoyougno,onbloc,community,interview)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "wyg-dongwon-shin",
    "Who You Gno – On the Record with Dongwon Shin",
    "\n*Who You Gno is intended to shine a light on the builders, contributors, and generally brilliant humans behind the tech. We’re excited to kick off this series with Dongwon Shin, the co-founder and CEO of one of Gno.land’s longest-contributing teams, Onbloc, a South Korean-based blockchain software company that builds key infrastructure and tooling for Gno.land*\n\nSince embarking on their Gno journey in late 2021, Dongwon and his team have been among the most active gnomes embodying the values of the Gno project: hardworking, passionate, honest, and humble, to name a few. You may already be familiar with Onbloc’s projects [Adena](https://adena.app/), [Gnoscan](https://gnoscan.io/), and [Gnoswap](https://github.com/gnoswap-labs) more about this can be found in [Onbloc's Hackerspace journey](https://github.com/gnolang/hackerspace/issues/29). In this interview, we’ll get the latest updates on these projects, hear about Dongwon the person, and learn more about what motivates him to be a gnome. Check it out.\n\n## Dongwon’s life before coding\nIt’s a cold November morning in Seoul, and Dongwon is in the office early after sleeping just a few hours. Speaking to him from Dubai, where “cool” is 30 ℃, it’s -1 ℃ in Korea. “I hope you’re keeping warm,” I smile, “Yeah,\" he laughs, “it’s not too bad.” Dongwon’s been in the industry since 2015 when web3 was still called “crypto,” ICOs were selling snake oil, and his compatriots were busy paying above the market price for bitcoin in a phenomenon called the “Kimchi premium.”\n\nAt the time, he was traveling the world as a professional e-sports gamer which saw him leaving Korea and living in San Francisco and L.A. for several years. “I had lots of tournaments to compete in, so I had to travel to many other countries,” he says, “while traveling, I learned about other cultures and people, and new experiences. It was really eye-opening, you know, it really helped make me who I am today.”\n\nAnd who is Dongwon today? \n\nAmbitious, driven, and one of the kindest, most genuine people you could ever meet. “I like challenges, and I’m very competitive,” he says. “I can't just do regular jobs. I get bored quickly, so I need to find something very competitive and hard that makes me stressed.” I point out that he’s in the right place, and he laughs. He explains that he used to spend an entire week, sometimes two, learning a game before a tournament, almost around the clock. “I had to put everything I have into winning that game, right?” He views working in web3 the same way.\n\n## The intersection between e-gaming and blockchain\nDongwong is clearly comfortable on the cutting edge in emerging industries that “are often looked down on,” like e-gaming and crypto. He takes great satisfaction in how they’ve both grown. “My parents were saying, 'Just go study,' while I was playing games, but e-sports has grown a lot. Right now, the industry is really big, and it's kind of the same with crypto.” He adds, “I like getting in early when other people are not interested and finding an opportunity there.”\n\nWhen looking to retire as a professional gamer, he found his home right away in web3, working with a blockchain consultant and the sports and entertainment-focused [Chiliz project](https://www.chiliz.com/), before launching his own blockchain consulting and development firm. “I didn't think I was going to be just a regular employee for a big company. So I wanted to start my own business,” he says.\n\n## Getting to Gno… Gno.land\nHow did Dongwon hear about Gno.land? \n\n“My co-founder, Peter, and I were long-time followers of the Cosmos ecosystem, and we found out that Jae was working on a new project called Gno.land in late 2021. We really liked the vision behind Gno.land, why he started, and what he wants to achieve. We value transparency, fairness, and censorship resistance, so we read all the documentation and his initial codebase and decided we should be part of his new initiative. We started Onbloc in early 2022.”\n\nDongwon didn’t know Jae personally, but he felt strongly aligned with his vision and what Gno.land aims to achieve. Also, his reputation as the founder of Tendermint and Cosmos preceded him. Dongwon’s co-founder, Peter, was also working on a project called Lunagram, a Cosmos wallet integrated with Telegram. Peter had fond memories of Jae, being very supportive of experimental projects, including his own, in the early days of Cosmos.\n\n## Building tools… Adena, Gnoscan, Gnoswap\nOnbloc has since become Gno.land’s most prolific contributor, launching the [Gnoscan](https://gnoscan.io/) block explorer and the [Adena](https://adena.app/) wallet, as well as creating tutorials and blogs to help onboard developers to Gno, and creating Gno.land’s first AMM DEX Gnoswap, the beta version of which is estimated for December this year. “Currently, the team is focused on developing Gnoswap, integrating [the realms and APIs](https://github.com/gnoswap-labs/gnoswap) with [the interface](https://github.com/gnoswap-labs/gnoswap-interface), enhancing the swap function and liquidity pools, and some additional features. We expect to launch the beta in about a month, so we’re quite excited!”\n\nAs for Adena, the defacto Gno.land wallet, “It's already production-ready, but we want to improve our UX, and UI to provide more secure ways of using a web3 wallet.” To achieve this, Onbloc is adding a feature called [Air-Gap](https://en.wikipedia.org/wiki/Air_gap_(networking)) which allows the wallet to be used in an offline environment, without the user needing to import their keys to Adena. “They can just use Adena as a broadcaster,” Dongwon explains. “I think this kind of feature is needed for enhancing security and educating people to use noncustodial products in a secure way.”\n\nOnbloc is also a [Q4 2023 grantee](https://test3.gno.land/r/gnoland/blog:p/funding-program-23q3) and will develop core Gno.land infrastructure in preparation for mainnet. “We are working on three key features,” Dongwon explains. “The first is contract interaction. So it's a way for a realm to interact with other realms. The second is porting essential Go packages to Gno, and the third is a multi-node testnet.” All in addition to Onbloc’s continued efforts on Gnoswap, Gnoscan, and Adena. “You’re keeping busy, then?” I ask. “All our hands are full now,” he laughs.\nI ask what he does in his free time and – in fact – whether he has any. “Not much,” he jokes, “but I like spending time with my son and playing board games together. He’s seven years old, and we are like friends.” Dongwon also likes to unwind by reading books when his son is asleep. One of his favorites is [*The Secret*](https://en.wikipedia.org/wiki/The_Secret_(Byrne_book)); he was “really inspired by the concept” when he was younger. I ask if he sees it working in his daily life and whether he believes he manifests what he wants into existence, “Definitely,” he replies without hesitation.\n\n## Dongwon’s conviction in Gno.land\nNot only is Dongwon working night and day, but he has bootstrapped his team from his own pocket to go all in on Gno.land. What makes his conviction so strong? “I truly believe that the Gno.land blockchain is the next generation of the blockchain industry. Gno.land is trying to invite web2 developers into web3 and providing all these developer-friendly tools so they don't need to learn a new language to get into the ecosystem. GnoVM, Tendermint2, everything is so transparent and simple.”\nHe believes Gno.land will be “one of the greatest experiments in the crypto industry” thanks to its fair rewards and contribution-based governance. “I'm really excited about this initiative, and all our team members are well-aligned to support this vision. We want to do our part to achieve the success of Gno.land.”\n\nI thank him for his time and ask if there’s anything he would like to add. He pauses for a moment and then says, “If you're building a dApp or looking for a new opportunity in a new ecosystem, I think this is your chance. I hope to see great developers and teams getting into Gno.land. Let’s make this ecosystem great together.”\n",
    "2023-11-24T00:00:00Z",
    "christina",
    "whoyougno,onbloc,community,interview"
  ],
  "max_deposit": ""
}
#16 vm/execgno.land/r/gnoland/blog.ModAddPost(monthly-dev-6, The More You Gno: Gno.land Monthly Updates - 6, Welcome to the latest edition of The More You Gno, your regular source of updates from the Gno.land core team and contributor ecosystem. There’s a lot to cover this month, from a company engineering retreat to new core members and contributors. We’ve made progress across the board to fix important bugs and issues and provide additional features. There’s a new way to dynamically call realms, Gno.land’s tokenomics and governance are advancing, our standard library list is expanding, and our grantees are killing it with their deliverables. Without further ado, let’s dive in. ## Gno Core Team Updates - TL;DR Only got time to skim the updates? You’ll find the highlights in the list below. If you want to dive deeper into the topics, track our progress, understand the rationale behind our decisions, or explore the issues we came across, grab a coffee, kick back, and savor the full details. * **The Portal Loop** – Much of our focus over the past few months has been on the Portal Loop [(issue 1108)](https://github.com/gnolang/gno/issues/1108), which will make developing on Gno smoother, faster, and more intuitive. The Portal Loop will speed up deploying dApps and improve the UX for Gno.land devs. * **Dynamic Realm Caller** – We’ve added a new way to call realms dynamically so that dApps no longer have to manually import GRC20/721 tokens [(PR 1262)](https://github.com/gnolang/gno/pull/1262). * **DAO Structure & Tokenomics** – We’re close to finalizing the DAO structure of Gno.land and its tokenomics. There will be three main DAOs, GovDAO, EvaluationDAO, and SupportDAO. We’re exploring staking options for GNOT holders and working on transaction fees and gas. * **Gno Playground** – Gno Playground is an awesome way for developers to collaborate, share, and test their code. The full version isn’t ready yet, but we’re sharing the beta with anyone who wants to help us iterate and improve this week. * **Gno Standard Libraries** – In [issue 1267](https://github.com/gnolang/gno/issues/1267), you can find our current wishlist for Gno standard libraries. If you want to see what we have and what’s lacking, or you want to contribute, open an issue or a PR. * **Gno Language Server (Gnols)** – An implementation of the [Language Server Protocol (LSP)](https://microsoft.github.io/language-server-protocol/) for Gno, Gnols makes writing code simpler and works with several editors. Visit the [CONTRIBUTING.md file](https://github.com/gnolang/gno/blob/master/CONTRIBUTING.md#vim-support-with-lsp) to try it out. * **RustVM Implementation** – The RustVM implementation is almost ready and is in the debugging stages. We’re also looking at adding a Jit compiler and researching the topics of determinism and concurrency. * **Bytecode Go VM Implementation** – The Parscan project is progressing well toward completion of the spec. We look to provide support for interfaces in the interpreter by extending the standard reflect package, also to the benefit of the entire Go community. ### Engineering Retreat Gno core engineering team got together last month in our first company-wide retreat. It was an invaluable opportunity to work face-to-face, brainstorm ideas, code together, and fix several high-level concerns. We made many improvements to the technical aspects of the project, including major advances on the Portal Loop, and strengthened our alignment through team bonding activities, socializing, and having fun. We made multiple bug fixes and resolved many of the issues that arose out of [GnoChess](https://github.com/gnolang/gnochess) development, and Manfred and the Onbloc team (who joined us on the retreat) demonstrated a new way to dynamically call contracts using dependency injection with a registry. This, combined with Golang's interface capabilities, can achieve a good balance between dynamism, explicitness, and security (including type safety). This pattern could enable massive DeFi applications when used with GRC interfaces. It could also support contract-based DAOs where features can be added later, opening the door to new design patterns around contract upgrades. Check out [PR 1262](https://github.com/gnolang/gno/pull/1262) for more details. It was invaluable for everyone to get plenty of 1:1 time with Jae. Morgan was able to bring the Native Bindings topic ([PR 859](https://github.com/gnolang/gno/pull/859)) much closer to completion. This has been a recurring theme in our developer calls for the last few months as it’s a complex topic that aims to change how Gno can use Go code while still being understood by static analysis tools like gno doc. Michael got greater clarity over the DAO structure and GNOT tokenomics, Milos was able to merge [PR 546](https://github.com/gnolang/gno/pull/546), after many months of effort, which adds file-based transaction indexing, and Thomas created instructions for getting started with the Gno Language Server (gnols), to give just some examples. It was productive and enjoyable and unblocked many issues. AiB engineers were also at the retreat, Zooma from Teritori, and Dongwon, ByeongJun, and Ray from Onbloc, creating plenty of opportunities for interesting discussions and showcasing our work. We also welcomed new core members Dylan and Danny to the team. Dylan is a senior software engineer, and Danny is supporting DevEx. We enjoyed meeting and hacking together with like-minded people and would like to do it more often with a broader audience. How about a Gnome contributor festival next year? Stay tuned. ### Gno.land DAOs and Tokenomics Throughout the retreat and ongoing, we’ve made major advances to the DAO structure for Gno.land and the tokenomics of the chain. We’re still hammering out the final details, but we’ve decided on three main DAOs – GovDAO, EvaluationDAO, and SupportDAO – that will work together alongside other domain-specific DAOs, such as EngineeringDAO or ProjectsDAO, making Gno.land more decentralized over time. The multi-tiered GovDAO will be responsible for voting on all decisions that affect the chain, such as parameter changes or validator acceptance/denial. GovDAO members will assess new contributors to the chain and allocate them a score and corresponding membership tier. EvaluationDAO will assist with specific contributions, lending its expertise and critic reviews as needed. SupportDAO will provide knowledge-specific services such as HR, marketing, and finance. Regarding transaction fees, we're exploring something similar to how Ethereum deals with gas in its EIP 1559 update. Essentially, a combination of comparing a new block’s size with the last block to gauge demand and some small parameters we’re looking at. We’re also experimenting with staking alternatives where contributors can stake their tokens to support certain projects in return for staking rewards. It’s still early days, so watch this space. We’ll be releasing more details soon. ### Gno Playground Gno Playground is a simple web interface that lets you share your code, run unit tests, deploy your realm and package, and execute functions in your code using the repo for a smoother and more collaborative developer experience. We’re excited to release Gno Playground out in the wild later this month in a soft launch set for November 28. If you’re interested in testing it out, head over to our Discord channel. We’re looking for feedback and help to identify bugs and improve the UX before its full launch in the new year. It will be interesting to see how people interact with the Playground and how they use it so we can iterate and attract more gnomes to our growing community. ### The Portal Loop The Portal Loop is an effort to create a continuously-deployed staging testnet to be hosted on the official [gno.land website](https://gno.land). The testnet will be reset at each commit on our repository, but it will re-play all the transactions from its previous version, dropping any that might fail following breaking changes in the code. The Portal Loop will provide a central place where you can experiment with the latest Gno.land updates, resolving the problem our existing testnets have faced (becoming stale only a few months after their launch) while also paving the way for building DAOs and on-chain Game of Realms and Proof-of-Contribution systems. Within the Portal Loop efforts, we’re also building systems to more efficiently iterate locally on your Gno realms, similar to the previously described testnet. The Portal Loop will help to create an iterative cycle focused on development, testing, and feedback, enhancing local development and the Gno.land website. As developers are discovering, when building dApps like GnoChess, GnoMobile, or Flippando, they run into issues with the repo, GnoVM, and client libraries when developing locally. The Portal Loop will enable much quicker feedback so we can iterate, uncover, and fix problems faster. Devs will get a greatly improved UI, with UX contributions and issues much easier to resolve, and the same CI/CD experience as web2 applications, where each time something is published on Git, they get instant feedback on how it works in staging, not only in terms of code but also in terms of data. Stay tuned, the Portal Loop is coming soon! ### Standard Library Wish List The standard library wish list in [issue 1267](https://github.com/gnolang/gno/issues/1267) is intended to be a starting place for anyone who wants to add new standard libraries to Gno. It's an opinionated collection of libraries that we would like to see added. So, if you see something missing that you’d like added to our standard libraries, leave a comment explaining your reasoning. If you want to port over a standard library from the list, make an issue for it and assign yourself, or if you can do it quickly, make a PR referencing the issue. You can see the global status of our standard libraries (as compared to Go) on our [Go<>Gno compatibility document](https://github.com/gnolang/gno/blob/d421b963aed7f7c3ba3718edfc6fbd787fa8f0dd/docs/reference/go-gno-compatibility.md). ### Dreaming with SOGNO The Sogno project is a [dream](https://www.wordreference.com/iten/Sogno) Morgan has about improvements he plans to make on GnoVM. From his experience working on GnoChess, he found that many features were lacking that would have improved the workflow, for example, an improved debugging system, enhanced representation of the values within the VM, having maps as sortable data structures, and adding reflection. Morgan plans to work on this project on the side as a fork when he has time, so Sogno won’t be merged into the master branch for now. If you want to check it out and see if you can contribute, visit the [hackerspace PR 44](https://github.com/gnolang/hackerspace/pull/44). ### The Future of the Gno Language Server (Gnols) The [Gno Language Server (gnols)](https://github.com/gno-playground/gnols) is an implementation of the [Language Server Protocol (LSP)](https://microsoft.github.io/language-server-protocol/) for the Gno programming language. It is similar to the equivalent “gopls” project for Go, as they can be plugged into your code editor through extensions and allow you to access handy features, such as autocompletion, formatting, and compile-time warnings/errors. Gnols makes writing code simpler, working with several editors to suit your preferences. To try it out, visit the [CONTRIBUTING.md file](https://github.com/gnolang/gno/blob/master/CONTRIBUTING.md#vim-support-with-lsp), which contains instructions to get you started. Our current documentation targets Vim, Neovim, and SublimeText, but can likely be used with any editor that supports LSP. Feel free to contribute to improving Gnols and adding more features. It’s well-written, and simple to dive into the code and add more capabilities. ### RustVM Implementation Petar continues progressing on the RustVM implementation and has almost finished, apart from a few bug fixes. As the design is now complete, he will enter the testing stages. He is also looking at how to add a Jit compiler to the current design. Petar was initially concerned that the garbage collector might have presented serious issues, but this has turned out not to present a problem. Adding a Jit compiler will require a lot of work (at least six months) to support everything in the language, but it should be possible. Petar is also looking at implementing concurrency the way it is in Go to have a fully functional virtual machine as it is in the spec. This would likely attract more external contributors to developing the VM. One advantage of Rust is that, with the concurrency model, there is already an extensive library called [Tokio](https://tokio.rs/) which he can use. Petar stresses that this isn’t easy, but he believes it’s achievable, at least as a research topic around determinism and concurrency. ### Go Bytecode VM Implementation Marc continues to develop Parscan, another bytecode VM, but entirely based on the Go runtime, with the advantage of reusing the type-checking system, concurrency model, and memory management already part of the existing Go runtime. In the last month, the support for all missing declaration statements (constants, variables, and types) was added in the code generator. ## Grantee and Ecosystem Updates Our ecosystem partners and grantees are working flat out on their contributions. We’re close to seeing the on-chain memory game Flippando launch, Adena and Gnoswap are incorporating some major new features, Zack’s released another informative tutorial as part of the Go to Gno series, and we’ve received several new grant proposals as well. We’ve even welcomed a new contributing team, Varmeta, to the fold. Scroll through the details below. TL;DR? * On-chain memory game Flippando is coming soon * Gnomobile is almost complete and will be receiving a rebrand soon * Gnosocial will allow devs to experiment with social media dApps * Experiment with content moderation using the ModerationDAO or create your own DAO * Gnoswap AMM DEX beta will launch in December * Adena to implement new ‘Air-Gap’ feature * Varmeta is working on Gno.land Unity SDK to make Gno more accessible to game developers ### Dragos Dragos has been working on porting his on-chain memory game Flippando from Solidity to Gno, and we’re looking forward to playing it soon after seeing an awesome demo earlier this month. When you play Flippando, you uncover a matrix of matching visual symbols. There are 2 levels of difficulty (matrix made of 16 tiles or 64 tiles). For the launch, Dragos aims to have visual symbols containing basic colors, dice, hexagrams, or various gradients. Once you’ve matched all the pairs and completed a matrix, you mint an NFT that can be assembled as artwork on-chain and traded in a marketplace. Dragos is currently looking at the initial tokenomics for Flippando, with a fixed supply of 1 billion and no airdrop distribution (more details soon). Dragos has been a mobile app developer for over 10 years, with an interest in blockchain for around seven years. He enjoys working with Gno, although having to reset the chain and redeploy programs each time he makes a change was a challenge. The Portal Loop solves these issues in local development and will allow him to deploy Flippando sooner. As part of the work for Flippando, Dragos also added [PR 1309](https://github.com/gnolang/gno/pull/1309) to improve our GRC721 implementation]. He is also applying for a grant to port his project management system on-chain for Gno, and he gave us a [demo](https://drive.google.com/file/d/1eJGyATHhEzletWwQ4Xt_9ON7L231Yvow/view). An on-chain project management tool will be essential for organizing the DAO system, focusing on our team’s needs, organizing tasks, setting goals, and more. Keep up with Dragos’ progress by visiting his [hackerspace](https://github.com/gnolang/hackerspace/issues/33). ### Berty Berty has been powering ahead with Gnomobile (which will soon receive a new name to better reflect its functionality), Gnosocial, and Gno core. Some highlights include significant progress on the GRPC interface (see [demo video]https://www.loom.com/share/d1cef60199c0487e86deab2a9e61d61c). As the interface to Protobuf has many more data types available than the interface to the language bridge, GRPC greatly simplifies the app and improves the UX. The API is almost complete and now includes wallet functions, such as creating an account and restoring an account from the recovery phase, and an event stream when calling a realm function [(demo video available here)](https://www.loom.com/share/42f2dcb0b4a34f77a95a0f8012e4b52b).To help developers, Gnomobile also includes example apps. Here is a [demo video](https://www.loom.com/share/41a20a764f0f4caf91f068b62e1f16c4) of the latest minimal hello app. Berty created [PR 1235](https://github.com/gnolang/gno/pull/1235) relating to Amino. They start with a Go struct and add comments explaining all the fields. Previously, when they ran Amino and generated a Protobuf structure, all their comments disappeared. This PR allows them to preserve the comments. They also created [PR 1213](https://github.com/gnolang/gno/pull/1213) since Amino should create a Protobuf structure where the fields follow official naming conventions. Thanks to help from the Gno devs, these PRs are merged. Berty is also focused on building a decentralized social media application using the Gnomobile framework, which is almost complete. The aim is to create a testbed where dApp builders can see how their implementations integrate and function with web2-like social media features, opening the door to interesting experiments such as DAO collaboration and content modification. Berty is building a decentralized Twitter-like application and plans to finish it in six months. Check their progress on their [hackerspace here](https://github.com/gnolang/hackerspace/issues/28) and look for more upcoming demos. ### Teritori Teritori has been focusing on Escrows in the past couple of months, aiming to make improvements that facilitate on-chain project management. The team is also iterating the Moderation DAO and has identified a need for a conflict solver module to call an external authority to solve a conflict between two parties (for example, the buyer and the seller). They have called this module the Conflict Solver Module and integrated several options like Justice DAO (composed of humans) or any realms (e.g. GnoChess) to solve the conflict. They are researching work on VRF to implement randomness so that the module selects a person (or group of people) with no conflicts of interest in the issue. [PR 11](https://github.com/TERITORI/gno/pull/11/files) provides more details. A true randomness function will also be handy for the Flippando game that doesn’t currently rely on true randomness. In other news from Teritori, the moderation DAO is live! You can head to the [Teritori site](https://app.teritori.com/feed?network=gno-teritori) to play around with it and even try deploying your own DAO, creating a user profile, and adding a social feed. The team has deployed V1 of a “Soundcloud-like” app on the [Gnosocial feed](https://app.teritori.com/feed?network=gno-teritori) in which you can listen to music while browsing features, publish your own music as an artist that appears on your profile, comment on tracks, tip artists, and more. Keep updated with Teritori on their [hackerspace here](https://github.com/gnolang/hackerspace/issues/7). ### Zack Scholl Our resident tinkerer Zack gave a workshop last month as part of his “Go to Gno” series called [Go to Gno: ByteBeat - Generating Audio with Smart Contracts](https://www.youtube.com/watch?v=lmmUIEHhdqA). This is a really interesting tutorial on how to build Bytebeat (a minimal programming language for synthesized music) with smart contracts and follows on from his microblogging workshop. Be sure to check it out. If you want to hear more about Zack, you can also watch [Getting to Gno with Zack Scholl](https://www.youtube.com/watch?v=LgXa7QCdxdA&t=1258s), a Fireside Chat series that talks about contributors’ work, lives, and motivations to be on the Gno.land journey with us. ### Onbloc As always, the Onbloc team has been busy! Over the past few weeks, they have been working on extending the functionality of Gnoswap, integrating APIs and realms with the interface, improving the governance page UI, and integrating the Adena wallet. Onbloc expects to launch the beta of Gnoswap next month, and we’re super excited to see it in action. To improve the UX and UI of Adena and make the wallet even more secure, the team is implementing a feature called Air-Gap which allows the wallet to broadcast transactions signed from an offline environment without the user needing to import their keys to Adena. Onbloc has also started a discussion around ideas to improve the usability of QR Codes for secure data transmissions between offline signers and watch-only wallets in [Issue 1375](https://github.com/gnolang/gno/issues/1375). We’ll keep you updated on the work here. You can also find more information on Onbloc’s [informative blog](https://medium.com/onbloc). As well as developing core tooling for Gno, Onbloc is working on Gno core to help us build important functionality. The team welcomed a new hire, Lee ByeongJun as a core engineer and to help with work on three core areas: contract interaction (enabling realms to interact with other realms), the multinode testnet, and porting essential Go packages to Gno. You can find more details and keep track of everything Onbloc is working on in their [hackerspace issue here](https://github.com/gnolang/hackerspace/issues/29). ### Varmeta We’re excited to welcome a new contributor Varmeta to Gno.land. Varmeta was founded in 2020 to focus on blockchain and virtual reality/augmented reality technologies and has grown from a team of three to over 40 engineers. Varmeta is excited by the vision behind Gno.land and its philosophy for rewarding developers. The team is committed to supporting Gno’s success by providing various applications for the ecosystem, starting with the Gno.land Unity SDK to make blockchain more accessible to game developers. Track Varmeta’s progress on their [hackerspace here](https://github.com/gnolang/hackerspace/issues/43). ### Gno @ Devconnect Istanbul 2023 Gno.land core team members organized a small, unofficial meetup in Istanbul during Devconnect week from November 13-17. The engineering-focused meetup was accompanied by a Happy Hour and snacks, where attendees got the chance to learn about Gno.land in an informal way and how they can easily develop dApps in Gno, as well as contribute to the project. That's all for now! Be sure to check back again with us for the next edition of The More You Gno to keep up with all our progress. Do you want to contribute to Gno.land's monthly updates? If you're building on Gno.land and want to highlight your development, project, event, or idea, let us know, and we'll include your contribution., 2023-11-29T00:00:00Z, christina, gnoland,ecosystem,updates,gnovm,tm2)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "monthly-dev-6",
    "The More You Gno: Gno.land Monthly Updates - 6",
    "\n\nWelcome to the latest edition of The More You Gno, your regular source of updates from the Gno.land core team and contributor ecosystem. There’s a lot to cover this month, from a company engineering retreat to new core members and contributors. We’ve made progress across the board to fix important bugs and issues and provide additional features. There’s a new way to dynamically call realms, Gno.land’s tokenomics and governance are advancing, our standard library list is expanding, and our grantees are killing it with their deliverables. Without further ado, let’s dive in.\n\n## Gno Core Team Updates - TL;DR\n\nOnly got time to skim the updates? You’ll find the highlights in the list below. If you want to dive deeper into the topics, track our progress, understand the rationale behind our decisions, or explore the issues we came across, grab a coffee, kick back, and savor the full details.\n\n* **The Portal Loop** – Much of our focus over the past few months has been on the Portal Loop [(issue 1108)](https://github.com/gnolang/gno/issues/1108), which will make developing on Gno smoother, faster, and more intuitive. The Portal Loop will speed up deploying dApps and improve the UX for Gno.land devs.\n\n* **Dynamic Realm Caller** – We’ve added a new way to call realms dynamically so that dApps no longer have to manually import GRC20/721 tokens [(PR 1262)](https://github.com/gnolang/gno/pull/1262).\n\n* **DAO Structure & Tokenomics** – We’re close to finalizing the DAO structure of Gno.land and its tokenomics. There will be three main DAOs, GovDAO, EvaluationDAO, and SupportDAO. We’re exploring staking options for GNOT holders and working on transaction fees and gas.\n\n* **Gno Playground** – Gno Playground is an awesome way for developers to collaborate, share, and test their code. The full version isn’t ready yet, but we’re sharing the beta with anyone who wants to help us iterate and improve this week.\n\n* **Gno Standard Libraries** – In [issue 1267](https://github.com/gnolang/gno/issues/1267), you can find our current wishlist for Gno standard libraries. If you want to see what we have and what’s lacking, or you want to contribute, open an issue or a PR.\n\n* **Gno Language Server (Gnols)** – An implementation of the [Language Server Protocol (LSP)](https://microsoft.github.io/language-server-protocol/) for Gno, Gnols makes writing code simpler and works with several editors. Visit the [CONTRIBUTING.md file](https://github.com/gnolang/gno/blob/master/CONTRIBUTING.md#vim-support-with-lsp) to try it out.\n\n* **RustVM Implementation** – The RustVM implementation is almost ready and is in the debugging stages. We’re also looking at adding a Jit compiler and researching the topics of determinism and concurrency.\n\n* **Bytecode Go VM Implementation** – The Parscan project is progressing well toward completion of the spec. We look to provide support for interfaces in the interpreter by extending the standard reflect package, also to the benefit of the entire Go community.\n\n### Engineering Retreat\nGno core engineering team got together last month in our first company-wide retreat. It was an invaluable opportunity to work face-to-face, brainstorm ideas, code together, and fix several high-level concerns. We made many improvements to the technical aspects of the project, including major advances on the Portal Loop, and strengthened our alignment through team bonding activities, socializing, and having fun.  \n\nWe made multiple bug fixes and resolved many of the issues that arose out of [GnoChess](https://github.com/gnolang/gnochess) development, and Manfred and the Onbloc team (who joined us on the retreat) demonstrated a new way to dynamically call contracts using dependency injection with a registry. This, combined with Golang's interface capabilities, can achieve a good balance between dynamism, explicitness, and security (including type safety). This pattern could enable massive DeFi applications when used with GRC interfaces. It could also support contract-based DAOs where features can be added later, opening the door to new design patterns around contract upgrades. Check out [PR 1262](https://github.com/gnolang/gno/pull/1262) for more details.  \n\nIt was invaluable for everyone to get plenty of 1:1 time with Jae. Morgan was able to bring the Native Bindings topic ([PR 859](https://github.com/gnolang/gno/pull/859)) much closer to completion. This has been a recurring theme in our developer calls for the last few months as it’s a complex topic that aims to change how Gno can use Go code while still being understood by static analysis tools like gno doc. Michael got greater clarity over the DAO structure and GNOT tokenomics, Milos was able to merge [PR 546](https://github.com/gnolang/gno/pull/546), after many months of effort, which adds file-based transaction indexing, and Thomas created instructions for getting started with the Gno Language Server (gnols), to give just some examples. It was productive and enjoyable and unblocked many issues. \n\nAiB engineers were also at the retreat, Zooma from Teritori, and Dongwon, ByeongJun, and Ray from Onbloc, creating plenty of opportunities for interesting discussions and showcasing our work. We also welcomed new core members Dylan and Danny to the team. Dylan is a senior software engineer, and Danny is supporting DevEx. We enjoyed meeting and hacking together with like-minded people and would like to do it more often with a broader audience. How about a Gnome contributor festival next year? Stay tuned.\n\n### Gno.land DAOs and Tokenomics\nThroughout the retreat and ongoing, we’ve made major advances to the DAO structure for Gno.land and the tokenomics of the chain. We’re still hammering out the final details, but we’ve decided on three main DAOs – GovDAO, EvaluationDAO, and SupportDAO – that will work together alongside other domain-specific DAOs, such as EngineeringDAO or ProjectsDAO, making Gno.land more decentralized over time.  \n\nThe multi-tiered GovDAO will be responsible for voting on all decisions that affect the chain, such as parameter changes or validator acceptance/denial. GovDAO members will assess new contributors to the chain and allocate them a score and corresponding membership tier. EvaluationDAO will assist with specific contributions, lending its expertise and critic reviews as needed. SupportDAO will provide knowledge-specific services such as HR, marketing, and finance.\n\nRegarding transaction fees, we're exploring something similar to how Ethereum deals with gas in its EIP 1559 update. Essentially, a combination of comparing a new block’s size with the last block to gauge demand and some small parameters we’re looking at. We’re also experimenting with staking alternatives where contributors can stake their tokens to support certain projects in return for staking rewards. It’s still early days, so watch this space. We’ll be releasing more details soon.  \n\n### Gno Playground\nGno Playground is a simple web interface that lets you share your code, run unit tests, deploy your realm and package, and execute functions in your code using the repo for a smoother and more collaborative developer experience. We’re excited to release Gno Playground out in the wild later this month in a soft launch set for November 28. If you’re interested in testing it out, head over to our Discord channel. We’re looking for feedback and help to identify bugs and improve the UX before its full launch in the new year. It will be interesting to see how people interact with the Playground and how they use it so we can iterate and attract more gnomes to our growing community.\n\n### The Portal Loop\nThe Portal Loop is an effort to create a continuously-deployed staging testnet to be hosted on the official [gno.land website](https://gno.land). The testnet will be reset at each commit on our repository, but it will re-play all the transactions from its previous version, dropping any that might fail following breaking changes in the code. The Portal Loop will provide a central place where you can experiment with the latest Gno.land updates, resolving the problem our existing testnets have faced (becoming stale only a few months after their launch) while also paving the way for building DAOs and on-chain Game of Realms and Proof-of-Contribution systems.  \n\nWithin the Portal Loop efforts, we’re also building systems to more efficiently iterate locally on your Gno realms, similar to the previously described testnet. The Portal Loop will help to create an iterative cycle focused on development, testing, and feedback, enhancing local development and the Gno.land website. As developers are discovering, when building dApps like GnoChess, GnoMobile, or Flippando, they run into issues with the repo, GnoVM, and client libraries when developing locally.\n\nThe Portal Loop will enable much quicker feedback so we can iterate, uncover, and fix problems faster. Devs will get a greatly improved UI, with UX contributions and issues much easier to resolve, and the same CI/CD experience as web2 applications, where each time something is published on Git, they get instant feedback on how it works in staging, not only in terms of code but also in terms of data. Stay tuned, the Portal Loop is coming soon!\n\n### Standard Library Wish List\nThe standard library wish list in [issue 1267](https://github.com/gnolang/gno/issues/1267) is intended to be a starting place for anyone who wants to add new standard libraries to Gno. It's an opinionated collection of libraries that we would like to see added. So, if you see something missing that you’d like added to our standard libraries, leave a comment explaining your reasoning. If you want to port over a standard library from the list, make an issue for it and assign yourself, or if you can do it quickly, make a PR referencing the issue. You can see the global status of our standard libraries (as compared to Go) on our [Go<>Gno compatibility document](https://github.com/gnolang/gno/blob/d421b963aed7f7c3ba3718edfc6fbd787fa8f0dd/docs/reference/go-gno-compatibility.md).\n\n### Dreaming with SOGNO\nThe Sogno project is a [dream](https://www.wordreference.com/iten/Sogno) Morgan has about improvements he plans to make on GnoVM. From his experience working on GnoChess, he found that many features were lacking that would have improved the workflow, for example, an improved debugging system, enhanced representation of the values within the VM, having maps as sortable data structures, and adding reflection. Morgan plans to work on this project on the side as a fork when he has time, so Sogno won’t be merged into the master branch for now. If you want to check it out and see if you can contribute, visit the [hackerspace PR 44](https://github.com/gnolang/hackerspace/pull/44).\n\n### The Future of the Gno Language Server (Gnols)\nThe [Gno Language Server (gnols)](https://github.com/gno-playground/gnols) is an implementation of the [Language Server Protocol (LSP)](https://microsoft.github.io/language-server-protocol/) for the Gno programming language. It is similar to the equivalent “gopls” project for Go, as they can be plugged into your code editor through extensions and allow you to access handy features, such as autocompletion, formatting, and compile-time warnings/errors. Gnols makes writing code simpler, working with several editors to suit your preferences. To try it out, visit the [CONTRIBUTING.md file](https://github.com/gnolang/gno/blob/master/CONTRIBUTING.md#vim-support-with-lsp), which contains instructions to get you started. Our current documentation targets Vim, Neovim, and SublimeText, but can likely be used with any editor that supports LSP. Feel free to contribute to improving Gnols and adding more features. It’s well-written, and simple to dive into the code and add more capabilities.\n\n### RustVM Implementation\nPetar continues progressing on the RustVM implementation and has almost finished, apart from a few bug fixes. As the design is now complete, he will enter the testing stages. He is also looking at how to add a Jit compiler to the current design. Petar was initially concerned that the garbage collector might have presented serious issues, but this has turned out not to present a problem. Adding a Jit compiler will require a lot of work (at least six months) to support everything in the language, but it should be possible.\n\nPetar is also looking at implementing concurrency the way it is in Go to have a fully functional virtual machine as it is in the spec. This would likely attract more external contributors to developing the VM. One advantage of Rust is that, with the concurrency model, there is already an extensive library called [Tokio](https://tokio.rs/) which he can use. Petar stresses that this isn’t easy, but he believes it’s achievable, at least as a research topic around determinism and concurrency.\n\n### Go Bytecode VM Implementation\nMarc continues to develop Parscan, another bytecode VM, but entirely based on the Go runtime, with the advantage of reusing the type-checking system, concurrency model, and memory management already part of the existing Go runtime. In the last month, the support for all missing declaration statements (constants, variables, and types) was added in the code generator.\n\n## Grantee and Ecosystem Updates\nOur ecosystem partners and grantees are working flat out on their contributions. We’re close to seeing the on-chain memory game Flippando launch, Adena and Gnoswap are incorporating some major new features, Zack’s released another informative tutorial as part of the Go to Gno series, and we’ve received several new grant proposals as well. We’ve even welcomed a new contributing team, Varmeta, to the fold. Scroll through the details below.\nTL;DR?\n* On-chain memory game Flippando is coming soon\n* Gnomobile is almost complete and will be receiving a rebrand soon\n* Gnosocial will allow devs to experiment with social media dApps\n* Experiment with content moderation using the ModerationDAO or create your own DAO\n* Gnoswap AMM DEX beta will launch in December\n* Adena to implement new ‘Air-Gap’ feature\n* Varmeta is working on Gno.land Unity SDK to make Gno more accessible to game developers\n\n### Dragos\nDragos has been working on porting his on-chain memory game Flippando from Solidity to Gno, and we’re looking forward to playing it soon after seeing an awesome demo earlier this month. When you play Flippando, you uncover a matrix of matching visual symbols. There are 2 levels of difficulty (matrix made of 16 tiles or 64 tiles). For the launch, Dragos aims to have visual symbols containing basic colors, dice, hexagrams, or various gradients. Once you’ve matched all the pairs and completed a matrix, you mint an NFT that can be assembled as artwork on-chain and traded in a marketplace. Dragos is currently looking at the initial tokenomics for Flippando, with a fixed supply of 1 billion and no airdrop distribution (more details soon).  \n\nDragos has been a mobile app developer for over 10 years, with an interest in blockchain for around seven years. He enjoys working with Gno, although having to reset the chain and redeploy programs each time he makes a change was a challenge. The Portal Loop solves these issues in local development and will allow him to deploy Flippando sooner. As part of the work for Flippando, Dragos also added [PR 1309](https://github.com/gnolang/gno/pull/1309) to improve our GRC721 implementation]. He is also applying for a grant to port his project management system on-chain for Gno, and he gave us a [demo](https://drive.google.com/file/d/1eJGyATHhEzletWwQ4Xt_9ON7L231Yvow/view). An on-chain project management tool will be essential for organizing the DAO system, focusing on our team’s needs, organizing tasks, setting goals, and more. Keep up with Dragos’ progress by visiting his [hackerspace](https://github.com/gnolang/hackerspace/issues/33).\n\n### Berty\nBerty has been powering ahead with Gnomobile (which will soon receive a new name to better reflect its functionality), Gnosocial, and Gno core. Some highlights include significant progress on the GRPC interface (see [demo video]https://www.loom.com/share/d1cef60199c0487e86deab2a9e61d61c). As the interface to Protobuf has many more data types available than the interface to the language bridge, GRPC greatly simplifies the app and improves the UX. The API is almost complete and now includes wallet functions, such as creating an account and restoring an account from the recovery phase, and an event stream when calling a realm function [(demo video available here)](https://www.loom.com/share/42f2dcb0b4a34f77a95a0f8012e4b52b).To help developers, Gnomobile also includes example apps. Here is a [demo video](https://www.loom.com/share/41a20a764f0f4caf91f068b62e1f16c4) of the latest minimal hello app.\n\nBerty created [PR 1235](https://github.com/gnolang/gno/pull/1235) relating to Amino. They start with a Go struct and add comments explaining all the fields. Previously, when they ran Amino and generated a Protobuf structure, all their comments disappeared. This PR allows them to preserve the comments. They also created [PR 1213](https://github.com/gnolang/gno/pull/1213) since Amino should create a Protobuf structure where the fields follow official naming conventions. Thanks to help from the Gno devs, these PRs are merged.\nBerty is also focused on building a decentralized social media application using the Gnomobile framework, which is almost complete. The aim is to create a testbed where dApp builders can see how their implementations integrate and function with web2-like social media features, opening the door to interesting experiments such as DAO collaboration and content modification. Berty is building a decentralized Twitter-like application and plans to finish it in six months. Check their progress on their [hackerspace here](https://github.com/gnolang/hackerspace/issues/28) and look for more upcoming demos.\n\n### Teritori\nTeritori has been focusing on Escrows in the past couple of months, aiming to make improvements that facilitate on-chain project management. The team is also iterating the Moderation DAO and has identified a need for a conflict solver module to call an external authority to solve a conflict between two parties (for example, the buyer and the seller). They have called this module the Conflict Solver Module and integrated several options like Justice DAO (composed of humans) or any realms (e.g. GnoChess) to solve the conflict. They are researching work on VRF to implement randomness so that the module selects a person (or group of people) with no conflicts of interest in the issue. [PR 11](https://github.com/TERITORI/gno/pull/11/files) provides more details. A true randomness function will also be handy for the Flippando game that doesn’t currently rely on true randomness.  \n\nIn other news from Teritori, the moderation DAO is live! You can head to the [Teritori site](https://app.teritori.com/feed?network=gno-teritori) to play around with it and even try deploying your own DAO, creating a user profile, and adding a social feed. The team has deployed V1 of a “Soundcloud-like” app on the [Gnosocial feed](https://app.teritori.com/feed?network=gno-teritori) in which you can listen to music while browsing features, publish your own music as an artist that appears on your profile, comment on tracks, tip artists, and more. Keep updated with Teritori on their [hackerspace here](https://github.com/gnolang/hackerspace/issues/7).\n\n### Zack Scholl\nOur resident tinkerer Zack gave a workshop last month as part of his “Go to Gno” series called [Go to Gno: ByteBeat - Generating Audio with Smart Contracts](https://www.youtube.com/watch?v=lmmUIEHhdqA). This is a really interesting tutorial on how to build Bytebeat (a minimal programming language for synthesized music) with smart contracts and follows on from his microblogging workshop. Be sure to check it out. If you want to hear more about Zack, you can also watch [Getting to Gno with Zack Scholl](https://www.youtube.com/watch?v=LgXa7QCdxdA&t=1258s), a Fireside Chat series that talks about contributors’ work, lives, and motivations to be on the Gno.land journey with us.\n\n### Onbloc\nAs always, the Onbloc team has been busy! Over the past few weeks, they have been working on extending the functionality of Gnoswap, integrating APIs and realms with the interface, improving the governance page UI, and integrating the Adena wallet. Onbloc expects to launch the beta of Gnoswap next month, and we’re super excited to see it in action. To improve the UX and UI of Adena and make the wallet even more secure, the team is implementing a feature called Air-Gap which allows the wallet to broadcast transactions signed from an offline environment without the user needing to import their keys to Adena. Onbloc has also started a discussion around ideas to improve the usability of QR Codes for secure data transmissions between offline signers and watch-only wallets in [Issue 1375](https://github.com/gnolang/gno/issues/1375). We’ll keep you updated on the work here. You can also find more information on Onbloc’s [informative blog](https://medium.com/onbloc).  \n\nAs well as developing core tooling for Gno, Onbloc is working on Gno core to help us build important functionality. The team welcomed a new hire, Lee ByeongJun as a core engineer and to help with work on three core areas: contract interaction (enabling realms to interact with other realms), the multinode testnet, and porting essential Go packages to Gno. You can find more details and keep track of everything Onbloc is working on in their [hackerspace issue here](https://github.com/gnolang/hackerspace/issues/29).\n\n### Varmeta\nWe’re excited to welcome a new contributor Varmeta to Gno.land. Varmeta was founded in 2020 to focus on blockchain and virtual reality/augmented reality technologies and has grown from a team of three to over 40 engineers. Varmeta is excited by the vision behind Gno.land and its philosophy for rewarding developers. The team is committed to supporting Gno’s success by providing various applications for the ecosystem, starting with the Gno.land Unity SDK to make blockchain more accessible to game developers. Track Varmeta’s progress on their [hackerspace here](https://github.com/gnolang/hackerspace/issues/43).\n\n### Gno @ Devconnect Istanbul 2023\nGno.land core team members organized a small, unofficial meetup in Istanbul during Devconnect week from November 13-17. The engineering-focused meetup was accompanied by a Happy Hour and snacks, where attendees got the chance to learn about Gno.land in an informal way and how they can easily develop dApps in Gno, as well as contribute to the project.\n\nThat's all for now! Be sure to check back again with us for the next edition of The More You Gno to keep up with all our progress. Do you want to contribute to Gno.land's monthly updates? If you're building on Gno.land and want to highlight your development, project, event, or idea, let us know, and we'll include your contribution.",
    "2023-11-29T00:00:00Z",
    "christina",
    "gnoland,ecosystem,updates,gnovm,tm2"
  ],
  "max_deposit": ""
}
#17 vm/execgno.land/r/gnoland/blog.ModAddPost(bgl-poc1, Building Gno.land – Next Generation Smart Contract System, *Disclaimer: The Building Gno.land series aims to share the core concepts of our platform, mission, and tech stack, providing a snapshot of a current state on our builder’s journey. New episodes may deprecate previous ones, but no editions will be modified at any time. We encourage you to follow along as we create the rails for a more transparent and accountable society, and we welcome feedback and contributions to the repo.* ## I. What Is Proof of Contribution (PoC)? Gno.land is secured by a novel consensus mechanism that makes our platform unique—Proof of Contribution (PoC). PoC prioritizes fairness and merit, rewarding the people most active on the platform and revolutionizing the concept of open-source rewards. By removing the voting power associated with being wealthy (holding tokens in Proof-of-Stake (PoS) networks or amassing mining hardware in Proof-of-Work (PoW) networks), PoC restructures the financial incentives that tend to corrupt blockchain projects in the long run and rewards contributors fairly for their work based on their expertise, commitment, and values. Gno.land contributors receive rewards and voting power according to their contribution level. These rewards increase as they make additional contributions, gain expertise, and are promoted up the Gno.land governing DAO’s (GovDAO) tier levels by higher-level contributors. So how does PoC work, what are its core features, and how does it lend security and decentralization to the platform? ### Prioritizing Fairness and Alignment Proof of Stake (PoS) was a monumental leap forward for the blockchain industry, solving the energy-intensive requirements of Proof of Work (PoW) and enabling blockchains to scale for broader adoption (thanks to its minimal carbon footprint and faster throughput). However, like PoW, PoS has some disadvantages. For example, in PoS networks, participants receive rewards based on how many tokens they stake, which means their incentives for working on the chain are often purely financial. Validators accumulate vast net worths and don’t always hold values that align with the core development of the chain. Since validators are crucial in securing PoS networks, they should be paid fairly for their work and encouraged to contribute more. However, validators should not be purely financially (and certainly not politically) motivated, taking up competing positions and launching political campaigns to convince token holders to stake with them. This type of lobbying affects all aspects of the chain’s development—from governance to technical upgrades—and can lead to factionalism and misalignment. PoC makes the system fairer and more sustainable, ensuring participants are aligned and take actions that benefit the Gno.land community and the broader ecosystem. That’s why (unlike PoS) contributors receive rewards based on their contribution effort (tier level) rather than how many tokens they stake. They are thus incentivized and recognized for the quality of their work, ideas, and alignment, driving participation and active engagement. Governance is allocated to the people most likely to care for the ecosystem’s long-term success—the contributors who have spent the most time working toward it—from open-source developers to video creators and everyone in between. ### Rethinking Financial Incentives For long-term security and sustainability, PoC emphasizes project principles and values over monetary gains, replacing standard token incentives with a system that separates voting power from token ownership. Two reward systems are currently being considered (in addition to a hybrid system). For the first, contributors receive WORX units that weigh the amount of GNOT tokens (the native Gno.land gas token) earned each month. Each member of the same tier receives the same amount of WORX. At the end of the month, the total each member earned is divided by the total amount of WORX distributed that month to calculate a percentage. This percentage represents the percentage of Gno.land fees earmarked for contributors that each member will earn in GNOT. WORX will likely be cleared each month to prevent cumulative, exponential reward exploits over long periods of time. For the second, each tier level simply receives an amount of GNOT each month fixed to a USD value, similar to a salary. This would be combined with risk management and caps per tier level in order to promote long-term sustainability based on Gno.land fee generation. A hybrid of this system is also possible, either rewarding contributors of lower tiers one way and higher tiers the other or using both systems in tandem based on predefined conditions. This will be explored further in future tokenomics articles, models, and documentation. Regardless, WORX units are not transferable, will not be listed on exchanges, and hold no monetary value. WORX units are more like shares that represent value provided by contributors and allow their work to be quantified compared to other contributors/tier levels. It’s important to stress that GNOT tokens do not influence governance on the platform in any way. Voting power is earned through contributions and distributed according to contribution effort, with each member of the same tier representing equal voting power that increases with their tier level. This creates a network of highly aligned contributors who care deeply about the platform they are building and strive to improve it. GNOT, the native Gno.land gas token and the gas token of the Gno.land ecosystem, will be distributed via airdrop to qualifying ATOM stakers. It will also be available for purchase after that point (*more on Gno.land’s airdrop and tokenomics coming soon*). GNOT is used to pay all fees associated with the network and beyond, including transfers, IBC, ICS, and contract interactions, giving holders the chance to earn rewards from the economic activities of Gno.land. ### What Makes a Good Contribution? WORX and/or GNOT can be earned through different types of contributions—not only coding and development expertise—but also through non-technical contributions, such as community building, governance involvement, constitutional proposals, teamwork, media creation, etc. The core focus is on alignment, not necessarily specific tasks. For example, an accepted proposal or merged code will raise or at least maintain the contributor’s tier level, allowing them to receive rewards during their time working between submissions. However, a proposal or code that has displayed a very high level of effort, detail, and aligned values (but is not merged) will also be considered in any proposals regarding contributor promotion. This system allows the ecosystem to show appreciation for diverse forms of contributions and ‘useful failures’ that bring us closer to the solutions we adopt. It is designed to foster engagement, creativity, and collaboration while encouraging anyone aligned to contribute to growing the Gno.land chain and community. ### How Are Contributions Assessed? There is a strong human element to deciding what makes a good contribution, requiring knowledgeable human judges to exercise discretion. As such, contributions won’t be templated by default or rewarded automatically but assessed through Gno.land’s governing DAO, GovDAO. GovDAO is responsible for development and governance and is organized into tiers, as discussed above. GovDAO members review, measure, and curate contributions, and the tokenomics of GovDAO incentivizes members to be effective and unbiased evaluators. They engage in discussions and assess contributions based on effort, time, and other relevant factors/metrics that contributors will have stored in their profiles. The decision-making rationale is transparent and visible through on-chain forums. Again, contributors are assigned a tier level and receive a corresponding reward each month according to their tier. As contributors join GovDAO, the DAO grows, giving Gno.land decentralization efficiency and a high Satoshi score. GovDAO is assisted by a network of knowledge-specific DAOs, such as an Engineering DAO, a Support DAO, an Operations DAO, and the EvaluationDAO, which comprises a trusted group of high-reputation contributors that help assess specific contributions. This enables secure collaboration and seamless integration (*more on Gno.land’s network of interconnected DAOs coming soon*.) ### Sybil-Resistant and Secure In addition to being fairer, more aligned, and sustainable, PoC is Sybil-resistant by design. In blockchains, a Sybil attack is where one or multiple attackers multiply their presence and influence by creating fake identities to sway major network decisions (for example, including malicious blocks). In terms of PoS, the Sybil resistance is purely monetary (people need to stake real money to get power), so an attacker that wants to carry out a Sybil attack on a PoS network needs to lock at least as much stake as that locked by honest validators. PoC minimizes risks of Sybil attacks, takeovers, and alliances as the community vets every person who is given any power or sway in the network (including validator power) through the DAO, so at no point can anyone "spoof" identities and regain major sway. Moreover, Gno.land is built and secured by the merit and effort put into the project, as opposed to how many tokens someone can buy, rethinking financial incentives and making the platform Sybil-resistant and secure. Through fairer rewards, restructured incentives, resistance to corruption and Sybil attacks, and a strong appreciation for all contributions, Gno.land is designed to be sustainable and fair. A censorship-resistant platform built, owned, and secured by a growing, aligned community for many generations to come. *I. What Is Proof of Contribution? is the first in a series of articles to dive deeply into the philosophy, vision, mechanics, and work involved in developing a new consensus mechanism for the next generation of smart contract systems. Look out for subsequent editions and additional Building Gno.land series, and let us know what you think! Got questions? Join the Gno.land [Discord](https://discord.com/invite/S8nKUqwkPn) or follow us on [Twitter/X](https://x.com/_gnoland)*. , 2024-01-10T10:51:00Z, , building-gnoland,gnoland,proof-of-contribution)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "bgl-poc1",
    "Building Gno.land – Next Generation Smart Contract System",
    "\n\n*Disclaimer: The Building Gno.land series aims to share the core concepts of our platform, mission, and tech stack, providing a snapshot of a current state on our builder’s journey. New episodes may deprecate previous ones, but no editions will be modified at any time. We encourage you to follow along as we create the rails for a more transparent and accountable society, and we welcome feedback and contributions to the repo.*\n\n## I. What Is Proof of Contribution (PoC)?\n\nGno.land is secured by a novel consensus mechanism that makes our platform unique—Proof of Contribution (PoC). PoC prioritizes fairness and merit, rewarding the people most active on the platform and revolutionizing the concept of open-source rewards. By removing the voting power associated with being wealthy (holding tokens in Proof-of-Stake (PoS) networks or amassing mining hardware in Proof-of-Work (PoW) networks), PoC restructures the financial incentives that tend to corrupt blockchain projects in the long run and rewards contributors fairly for their work based on their expertise, commitment, and values. \n\nGno.land contributors receive rewards and voting power according to their contribution level. These rewards increase as they make additional contributions, gain expertise, and are promoted up the Gno.land governing DAO’s (GovDAO) tier levels by higher-level contributors. So how does PoC work, what are its core features, and how does it lend security and decentralization to the platform? \n\n### Prioritizing Fairness and Alignment \n\nProof of Stake (PoS) was a monumental leap forward for the blockchain industry, solving the energy-intensive requirements of Proof of Work (PoW) and enabling blockchains to scale for broader adoption (thanks to its minimal carbon footprint and faster throughput). However, like PoW, PoS has some disadvantages. For example, in PoS networks, participants receive rewards based on how many tokens they stake, which means their incentives for working on the chain are often purely financial. Validators accumulate vast net worths and don’t always hold values that align with the core development of the chain. \n\nSince validators are crucial in securing PoS networks, they should be paid fairly for their work and encouraged to contribute more. However, validators should not be purely financially (and certainly not politically) motivated, taking up competing positions and launching political campaigns to convince token holders to stake with them. This type of lobbying affects all aspects of the chain’s development—from governance to technical upgrades—and can lead to factionalism and misalignment. \n\nPoC makes the system fairer and more sustainable, ensuring participants are aligned and take actions that benefit the Gno.land community and the broader ecosystem. That’s why (unlike PoS) contributors receive rewards based on their contribution effort (tier level) rather than how many tokens they stake. They are thus incentivized and recognized for the quality of their work, ideas, and alignment, driving participation and active engagement. Governance is allocated to the people most likely to care for the ecosystem’s long-term success—the contributors who have spent the most time working toward it—from open-source developers to video creators and everyone in between.\n\n### Rethinking Financial Incentives \n\nFor long-term security and sustainability, PoC emphasizes project principles and values over monetary gains, replacing standard token incentives with a system that separates voting power from token ownership. Two reward systems are currently being considered (in addition to a hybrid system). For the first, contributors receive WORX units that weigh the amount of GNOT tokens (the native Gno.land gas token) earned each month. Each member of the same tier receives the same amount of WORX. At the end of the month, the total each member earned is divided by the total amount of WORX distributed that month to calculate a percentage. This percentage represents the percentage of Gno.land fees earmarked for contributors that each member will earn in GNOT. WORX will likely be cleared each month to prevent cumulative, exponential reward exploits over long periods of time. \n\nFor the second, each tier level simply receives an amount of GNOT each month fixed to a USD value, similar to a salary. This would be combined with risk management and caps per tier level in order to promote long-term sustainability based on Gno.land fee generation. A hybrid of this system is also possible, either rewarding contributors of lower tiers one way and higher tiers the other or using both systems in tandem based on predefined conditions. This will be explored further in future tokenomics articles, models, and documentation.\n\nRegardless, WORX units are not transferable, will not be listed on exchanges, and hold no monetary value. WORX units are more like shares that represent value provided by contributors and allow their work to be quantified compared to other contributors/tier levels. It’s important to stress that GNOT tokens do not influence governance on the platform in any way. Voting power is earned through contributions and distributed according to contribution effort, with each member of the same tier representing equal voting power that increases with their tier level. This creates a network of highly aligned contributors who care deeply about the platform they are building and strive to improve it.\n\nGNOT, the native Gno.land gas token and the gas token of the Gno.land ecosystem, will be distributed via airdrop to qualifying ATOM stakers. It will also be available for purchase after that point (*more on Gno.land’s airdrop and tokenomics coming soon*). GNOT is used to pay all fees associated with the network and beyond, including transfers, IBC, ICS, and contract interactions, giving holders the chance to earn rewards from the economic activities of Gno.land.\n\n### What Makes a Good Contribution?\n\nWORX and/or GNOT can be earned through different types of contributions—not only coding and development expertise—but also through non-technical contributions, such as community building, governance involvement, constitutional proposals, teamwork, media creation, etc. The core focus is on alignment, not necessarily specific tasks. For example, an accepted proposal or merged code will raise or at least maintain the contributor’s tier level, allowing them to receive rewards during their time working between submissions. However, a proposal or code that has displayed a very high level of effort, detail, and aligned values (but is not merged) will also be considered in any proposals regarding contributor promotion.\n\nThis system allows the ecosystem to show appreciation for diverse forms of contributions and ‘useful failures’ that bring us closer to the solutions we adopt. It is designed to foster engagement, creativity, and collaboration while encouraging anyone aligned to contribute to growing the Gno.land chain and community.  \n\n### How Are Contributions Assessed?\n\nThere is a strong human element to deciding what makes a good contribution, requiring knowledgeable human judges to exercise discretion. As such, contributions won’t be templated by default or rewarded automatically but assessed through Gno.land’s governing DAO, GovDAO. GovDAO is responsible for development and governance and is organized into tiers, as discussed above.\n\nGovDAO members review, measure, and curate contributions, and the tokenomics of GovDAO incentivizes members to be effective and unbiased evaluators. They engage in discussions and assess contributions based on effort, time, and other relevant factors/metrics that contributors will have stored in their profiles. The decision-making rationale is transparent and visible through on-chain forums. Again, contributors are assigned a tier level and receive a corresponding reward each month according to their tier. As contributors join GovDAO, the DAO grows, giving Gno.land decentralization efficiency and a high Satoshi score. \n\nGovDAO is assisted by a network of knowledge-specific DAOs, such as an Engineering DAO, a Support DAO, an Operations DAO, and the EvaluationDAO, which comprises a trusted group of high-reputation contributors that help assess specific contributions. This enables secure collaboration and seamless integration (*more on Gno.land’s network of interconnected DAOs coming soon*.) \n\n### Sybil-Resistant and Secure\n\nIn addition to being fairer, more aligned, and sustainable, PoC is Sybil-resistant by design. In blockchains, a Sybil attack is where one or multiple attackers multiply their presence and influence by creating fake identities to sway major network decisions (for example, including malicious blocks). In terms of PoS, the Sybil resistance is purely monetary (people need to stake real money to get power), so an attacker that wants to carry out a Sybil attack on a PoS network needs to lock at least as much stake as that locked by honest validators.\n\nPoC minimizes risks of Sybil attacks, takeovers, and alliances as the community vets every person who is given any power or sway in the network (including validator power) through the DAO, so at no point can anyone \"spoof\" identities and regain major sway. Moreover, Gno.land is built and secured by the merit and effort put into the project, as opposed to how many tokens someone can buy, rethinking financial incentives and making the platform Sybil-resistant and secure.\n\nThrough fairer rewards, restructured incentives, resistance to corruption and Sybil attacks, and a strong appreciation for all contributions, Gno.land is designed to be sustainable and fair. A censorship-resistant platform built, owned, and secured by a growing, aligned community for many generations to come.\n\n*I. What Is Proof of Contribution? is the first in a series of articles to dive deeply into the philosophy, vision, mechanics, and work involved in developing a new consensus mechanism for the next generation of smart contract systems. Look out for subsequent editions and additional Building Gno.land series, and let us know what you think! Got questions? Join the Gno.land [Discord](https://discord.com/invite/S8nKUqwkPn) or follow us on [Twitter/X](https://x.com/_gnoland)*.\n",
    "2024-01-10T10:51:00Z",
    "",
    "building-gnoland,gnoland,proof-of-contribution"
  ],
  "max_deposit": ""
}
#18 vm/execgno.land/r/gnoland/blog.ModAddPost(monthly-dev-7, The More You Gno: Gno.land Monthly Updates - 7, Welcome to the latest edition of *The More You Gno*, your regular source of updates from the Gno.land core team and contributor ecosystem. After a well-deserved rest during the holiday break, we’re kicking off 2024 with renewed energy and plenty of exciting initiatives, including a new staging testnet (the Portal Loop), the official Gno.land documentation page, several merged PRs (including native bindings!), and many updates across the board. Dive in to find out what we’re working on and what our ecosystem partners and grantees have been up to. ## Gno Core Team Updates TL;DR Short on time? Skim the highlights from the core team in the list below. You’ll find additional details in the next section if you want to explore any topic in greater detail. - **Native Bindings** - If you’ve been following our journey or experimenting with the platform, you’ll hear virtual champagne pops as Morgan’s ongoing work with native bindings is finally merged [PR 859](https://github.com/gnolang/gno/pull/859). - **Gnodev** - Thanks to Guilhem’s `gnodev` initiative [PR 1386](https://github.com/gnolang/gno/pull/1386), you can now create and develop contracts with a single command. - **Gno.land Offical Docs** - Check out [docs.gno.land](https://docs.gno.land) for how-to guides, getting started, and an overview of key concepts of the platform. - **Effective Gno** - Taking inspiration from *Effective Go*, Manfred’s begun listing common patterns and examples of the differences between Gno and Go. - **Assignment in GnoVM** - Jae is working on approaches to fixing assignment in the GnoVM and issues that deal with persistence [(issue 1326)](https://github.com/gnolang/gno/issues/1326). - **Portal Loop** - The [Portal Loop](https://portal.gnoteam.com) has been released on a staging domain and is being tested. - **Roadmap** - We’re working on a fully-fledged Gno.land roadmap and will share a detailed DAG and important goals and milestones with you soon. - **Tendermint2 Update** - There are several PRs aimed at removing the dependencies between Tendermint2 and GnoVM. - **Gno.land Tokenomics** - We continue to make progress in defining the structure of Gno.land’s DAOs and the design of reward schemes for contributors. ### Native Bindings (PR859) Has Been Merged [PR 859](https://github.com/gnolang/gno/pull/859) (native bindings) was submitted by Morgan in May 2023 to improve calling Go code from Gno standard libraries, all while improving `gno doc` documentation for standard library functions. Native functions are _declared_ in Gno code, but their definition (the underlying code) only exists in Go: this is similar to how Go and many other systems languages implement assembly functions. Overall, the addition will now allow us to better support precompilation (transpiling Gno code to Go) for all Gno-specific standard libraries, like [`std`](https://docs.gno.land/reference/standard-library/std/address/), and have a system for defining such functions that is transparent to code analysis tools like `gno doc` and `gnols`. ### Gnodev Has Been Merged [PR 1386](https://github.com/gnolang/gno/pull/1386) (`gnodev`) has been merged. Gnodev is a tool to locally develop Gno realms which automatically re-deploys your contracts when you change the files, similar to JavaScript frameworks `npm run dev`. There are some additional features being worked on to improve the experience, including browser hot-reload (for the full front-end JavaScript experience!)—and Gno core developers who have worked on realms all agree that thanks to `gnodev`, they can finally stop visiting their therapist every week. Play around with it, and let us know how you get on. There may be a few bugs still and Guilhem is happily accepting feedback. ### The Gno.land Official Documentation Page Is Live We’re excited to have the Gno.land Official Documentation page live on the [https://docs.gno.land](https://docs.gno.land) domain. This will always be a work in progress as we expand the docs, make iterations to existing issues, and refine some of the core concepts, but it’s an excellent resource for anyone wanting to find out more about Gno and for onboarding new developers to the platform. A big thanks to the Onbloc team, whose developer portal was a huge inspiration for this. We’re looking for feedback, so leave your reviews and let us know where the docs can be improved and what else you would like to see. ### Effective Gno Manfred has been working on a document called [Effective Gno (PR 1000)](https://github.com/gnolang/gno/pull/1000), which takes inspiration from *[Effective Go](https://go.dev/doc/effective_go)* and will become an important reference document for Gno devs to explore common patterns and crucial differences in how we program compared to Go. We’ll be iterating on this as we progress, but you can already find plenty of examples. If you’re just getting into Gno and coming from a Go background, this is a great resource. Read this document and provide some comments if you have any. ### The Portal Loop Beta Is Live The Portal Loop Beta has been released on a staging domain, and you can check it out now at [https://portal.gnoteam.com](https://portal.gnoteam.com). The Portal Loop will replace the Gno.land website once we’ve finished squashing bugs and adding features. We’re still testing it and have identified several issues. For example, from the last three merged PRs, only one triggered a redeploy when we expected two or three deploys. We will also add a faucet. As we continue to evolve the Portal Loop out of its early development stages, transaction volume and general activity will increase. However, currently, there are insufficient transit testing transactions. One of the tasks we want to do to prove that the Portal Loop is working well enough is to write a kind of monitoring-oriented oracle that will try to make transactions, perhaps incrementing a counter every minute. We’re looking for help writing a script or a daemon for this oracle, so let us know if you want to contribute to [issue 1443](https://github.com/gnolang/gno/issues/1443). Once the Portal Loop is finished, we will focus on testnet 4. ### Assignment Issues in the GnoVM Morgan came across a bug [issue 1326](https://github.com/gnolang/gno/issues/1326), which returned an error about an [“unexpected unreal object”](https://tenor.com/es/view/cranizox-gif-8576622211330078986) when assigning a local variable to a dereferenced global variable in the GnoVM. Jae has been spending some time working on approaches to solving this and fixing assignment that will also work for saving escaped objects that don't have a parent (like variables whose pointers are referenced on a persisted object). This is a tough one to figure out, so if there are any other VM issues that deal with persistence and detached parentless objects, now is the time to add them to Jae’s plate. ### An Update on Tendermint2 [PR 1483](https://github.com/gnolang/gno/pull/1483) has the same goal as [PR 1438](https://github.com/gnolang/gno/pull/1438): to make Tendermint2 completely independent of GnoVM and Gno.land. This continues a project started many months ago to separate Gno into three separate components: the Tendermint2 consensus engine, the Gno programming language and VM, and Gno.land, the blockchain combining both together. This way, we’re working towards making it possible to build other blockchains that use Tendermint2 (like AtomOne!), the GnoVM, or both! ### Gno.land Engineering Retreat In the last *The More You Gno*, we covered the Gno.land and AIB company-wide retreat, an invaluable opportunity to work together, code together, and get to know our peers outside of work. It was such a success that the Gno core dev team held another retreat in December in Rouen, France, where many of the above issues and PRs were tackled and merged. We look forward to more productive and frequent face-to-face meetings in the year ahead. ### Gno.land DAOs and Tokenomics With the input of Manfred, Jae, and the rest of the team, Michael continues to make advancements on Gno.land’s system of DAOs and tokenomics. One key change since the last edition is that the WorxDAO (responsible for governance and all issues related to development in Gno.land) will now be known as the GovDAO. The DAO will likely have seven tiers but initially launch with three or four. The main benefits of moving up tiers are increased voting power, increased monthly rewards, and the authority to promote members from lower tiers. GovDAO will be assisted by WorxDAO, which will encompass several different sub-DAOs, such as engineering, funding, and projects. We’re currently exploring different reward systems for contributors, whereby each member of the same tier level will receive the same amount of rewards, either directly or indirectly, in the GNOT native gas token or USD, in a type of salary-based scheme. We may also elect to distribute rewards based on a contribution/work “hash difficulty” (total number and tier split of active contributors that month). We may also adopt a hybrid of these two models. Michael is also working on a bounty system to make Game of Realms (GoR) more accessible and evaluating contributions easier for judges. High ranking GoR competitors will likely receive Gno.land tier levels based on their leaderboard placing in addition to ATOM rewards. It’s important to note that these discussions are ongoing, and the information here may be deprecated. ### Making Testing Faster Thanks to Petar, [PR 1417](https://github.com/gnolang/gno/pull/1417), we have improved the entire VM testing suite runtime by around four minutes, which is an incredible achievement. We just need to refactor some test scenarios that are not very concurrent-friendly, but this PR makes interacting with the platform so much easier. ### Bug Fixes and Miscellaneous Items Thanks to Joon from Onbloc, we were able to add support for octals without 'o' (check out [PR 1331](https://github.com/gnolang/gno/pull/1331) for more details), and thanks to Dragos [PR 1309](https://github.com/gnolang/gno/pull/1309), we extended the GRC721 interface so that it now supports setting a token URI. These are both extremely welcomed contributions, and we appreciate our ecosystem partners. From the core team, a special shout out to Dylan for killing it fixing bugs, and getting many PRs ([PR 1451](https://github.com/gnolang/gno/pull/1451), [PR 1315](https://github.com/gnolang/gno/pull/1315), and [PR 1305](https://github.com/gnolang/gno/pull/1305), to name a few) merged over the last few weeks. Props also go to Marc for [PR 1177](https://github.com/gnolang/gno/pull/1177), which has just been merged, which fixes append in certain key situations. We’ve also welcomed a new security engineer, Kristov, to the team. ## Grantee and Ecosystem Updates ### Onbloc Onbloc has been on a roll, giving us an internal demo of Gnoswap beta just before the Christmas break and a public demo of its awesome Pool Incentivization feature during the last contributor sync call. With Pool Incentivization, anyone can add extra rewards on top of swap fees for LP stakers. This will help bootstrap initial liquidity for new-coming projects by attracting liquidity providers until sufficient organic trading volume is secured. Onbloc is also actively developing Adena’s Airgap feature and has improved the sign-in flow for security enhancement along with some refactoring. There will be a demo coming up in the next few weeks. Onbloc will also be researching airdrop trends and aiming to identify some of the most coveted DEX features users want to see for Gnoswap to streamline the onboarding process. Regarding Gno core, Onbloc core dev Byeongjoon Lee has developed a JSON parser for Gno, giving us a live demo during the last contributor sync. This allows the conversion or accessing of data from contracts in the JSON format, which will improve the Gno developer experience. His code is currently under review by the core team in [PR 1415](https://github.com/gnolang/gno/pull/1415). Dive deeper into Onbloc’s Builder Journey in the [hackerspace issue 29](https://github.com/gnolang/hackerspace/issues/29). ### Teritori Teritori continues the challenging work of developing Gno Project Manager, a web app that allows anyone to create, fund, review, or manage projects fully on-chain. During the last contributors' call, the team gave a demo of the work achieved so far, in particular regarding the escrow system and completing project milestones so contributors can be paid once each one is completed rather than having to wait until the project finalization. Gno Project Manager is a complex goal, and the team has run into some issues with edge cases they hadn’t bargained for in the relationships between grantees and funders. The team is looking for feedback and help identifying edge cases, so if you have any in mind, let them know. Teritori is also working on the conflict solver module and improving the social feed on [https://app.teritori.com/feed?network=gno-teritori](https://app.teritori.com/feed?network=gno-teritori), as well as providing more detailed documentation on their work, which they’ll be releasing in the coming weeks. ### Berty The Berty team has been busy working on GnoSocial backend implementation. The initial feature set has been implemented [here](https://github.com/gnolang/gnosocial/blob/main/realm/public.gno), including posting and replying to messages and reposting threads. You can keep up with Berty’s journey on GnoSocial in [hackerspace issue 51](https://github.com/gnolang/hackerspace/issues/51), which contains many issues and PRs, such as implementing calls, running tests, and fixing bugs. We’re super excited about pushing the limits of scalability with Berty’s decentralized social platform, and we’ll be looking forward to more demos in the coming weeks. ### Dragos Dragos has successfully launched the Flippando game, and you can try it out on the [testnet here](https://gno.flippando.xyz/flip). If you haven’t been following the progress, Flippando is an on-chain memory game that you can play with your choice of styles, such as dice, colors, and hexagrams. Once you successfully complete a matrix, you can mint the end result as an NFT, which can later be assembled into larger, more complex NFTs to create digital artwork. You can find out more about the game, its creator, and the official roadmap on the site. We’ll also release a blog post soon from Dragos sharing his experience porting Flippando from Solidity to Gno, so stay tuned! ### Varmeta Varmeta’s update was brief this week since the contributor sync call ran over. We look forward to hearing more about the team’s progress in developing the Unity SDK for Gno next time. You can read more about it on Varmeta’s [hackerspace issue 43](https://github.com/gnolang/hackerspace/issues/43). *Do you want to contribute to Gno.land's monthly updates? If you're building on Gno.land and want to highlight your development, project, event, or idea, let us know, and we'll include your contribution. That's all for now! Keep track of our progress by following our socials [Twitter/X](https://twitter.com/_gnoland) and [Discord](https://discord.com/invite/tF2X8M6cVj) and watch out for the next edition of The More You Gno in a few weeks.* , 2024-01-22T00:00:00Z, christina, gnoland,ecosystem,updates,gnovm,tm2)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "monthly-dev-7",
    "The More You Gno: Gno.land Monthly Updates - 7",
    "\n\nWelcome to the latest edition of *The More You Gno*, your regular source of updates from the Gno.land core team and contributor ecosystem. After a well-deserved rest during the holiday break, we’re kicking off 2024 with renewed energy and plenty of exciting initiatives, including a new staging testnet (the Portal Loop), the official Gno.land documentation page, several merged PRs (including native bindings!), and many updates across the board. Dive in to find out what we’re working on and what our ecosystem partners and grantees have been up to.\n\n## Gno Core Team Updates TL;DR\n\nShort on time? Skim the highlights from the core team in the list below. You’ll find additional details in the next section if you want to explore any topic in greater detail.\n- **Native Bindings** - If you’ve been following our journey or experimenting with the platform, you’ll hear virtual champagne pops as Morgan’s ongoing work with native bindings is finally merged [PR 859](https://github.com/gnolang/gno/pull/859).\n- **Gnodev** - Thanks to Guilhem’s `gnodev` initiative [PR 1386](https://github.com/gnolang/gno/pull/1386), you can now create and develop contracts with a single command.\n- **Gno.land Offical Docs** - Check out [docs.gno.land](https://docs.gno.land) for how-to guides, getting started, and an overview of key concepts of the platform.\n- **Effective Gno** - Taking inspiration from *Effective Go*, Manfred’s begun listing common patterns and examples of the differences between Gno and Go.\n- **Assignment in GnoVM** - Jae is working on approaches to fixing assignment in the GnoVM and issues that deal with persistence [(issue 1326)](https://github.com/gnolang/gno/issues/1326). \n- **Portal Loop** - The [Portal Loop](https://portal.gnoteam.com) has been released on a staging domain and is being tested.\n- **Roadmap** - We’re working on a fully-fledged Gno.land roadmap and will share a detailed DAG and important goals and milestones with you soon.\n- **Tendermint2 Update** - There are several PRs aimed at removing the dependencies between Tendermint2 and GnoVM.\n- **Gno.land Tokenomics** - We continue to make progress in defining the structure of Gno.land’s DAOs and the design of reward schemes for contributors.\n### Native Bindings (PR859) Has Been Merged\n[PR 859](https://github.com/gnolang/gno/pull/859) (native bindings) was submitted by Morgan in May 2023 to improve calling Go code from Gno standard libraries, all while improving `gno doc` documentation for standard library functions. Native functions are _declared_ in Gno code, but their definition (the underlying code) only exists in Go: this is similar to how Go and many other systems languages implement assembly functions. Overall, the addition will now allow us to better support precompilation (transpiling Gno code to Go) for all Gno-specific standard libraries, like [`std`](https://docs.gno.land/reference/standard-library/std/address/), and have a system for defining such functions that is transparent to code analysis tools like `gno doc` and `gnols`.\n### Gnodev Has Been Merged\n[PR 1386](https://github.com/gnolang/gno/pull/1386) (`gnodev`) has been merged. Gnodev is a tool to locally develop Gno realms which automatically re-deploys your contracts when you change the files, similar to JavaScript frameworks `npm run dev`. There are some additional features being worked on to improve the experience, including browser hot-reload (for the full front-end JavaScript experience!)—and Gno core developers who have worked on realms all agree that thanks to `gnodev`, they can finally stop visiting their therapist every week. Play around with it, and let us know how you get on. There may be a few bugs still and Guilhem is happily accepting feedback.\n###  The Gno.land Official Documentation Page Is Live\nWe’re excited to have the Gno.land Official Documentation page live on the [https://docs.gno.land](https://docs.gno.land) domain. This will always be a work in progress as we expand the docs, make iterations to existing issues, and refine some of the core concepts, but it’s an excellent resource for anyone wanting to find out more about Gno and for onboarding new developers to the platform. A big thanks to the Onbloc team, whose developer portal was a huge inspiration for this. We’re looking for feedback, so leave your reviews and let us know where the docs can be improved and what else you would like to see.\n### Effective Gno\nManfred has been working on a document called [Effective Gno (PR 1000)](https://github.com/gnolang/gno/pull/1000), which takes inspiration from *[Effective Go](https://go.dev/doc/effective_go)* and will become an important reference document for Gno devs to explore common patterns and crucial differences in how we program compared to Go. We’ll be iterating on this as we progress, but you can already find plenty of examples. If you’re just getting into Gno and coming from a Go background, this is a great resource. Read this document and provide some comments if you have any. \n### The Portal Loop Beta Is Live\nThe Portal Loop Beta has been released on a staging domain, and you can check it out now at [https://portal.gnoteam.com](https://portal.gnoteam.com). The Portal Loop will replace the Gno.land website once we’ve finished squashing bugs and adding features. We’re still testing it and have identified several issues. For example, from the last three merged PRs, only one triggered a redeploy when we expected two or three deploys. We will also add a faucet.\n\nAs we continue to evolve the Portal Loop out of its early development stages, transaction volume and general activity will increase. However, currently, there are insufficient transit testing transactions. One of the tasks we want to do to prove that the Portal Loop is working well enough is to write a kind of monitoring-oriented oracle that will try to make transactions, perhaps incrementing a counter every minute. We’re looking for help writing a script or a daemon for this oracle, so let us know if you want to contribute to [issue 1443](https://github.com/gnolang/gno/issues/1443). Once the Portal Loop is finished, we will focus on testnet 4.\n###  Assignment Issues in the GnoVM\nMorgan came across a bug [issue 1326](https://github.com/gnolang/gno/issues/1326), which returned an error about an [“unexpected unreal object”](https://tenor.com/es/view/cranizox-gif-8576622211330078986) when assigning a local variable to a dereferenced global variable in the GnoVM. Jae has been spending some time working on approaches to solving this and fixing assignment that will also work for saving escaped objects that don't have a parent (like variables whose pointers are referenced on a persisted object). This is a tough one to figure out, so if there are any other VM issues that deal with persistence and detached parentless objects, now is the time to add them to Jae’s plate.  \n### An Update on Tendermint2\n[PR 1483](https://github.com/gnolang/gno/pull/1483) has the same goal as [PR 1438](https://github.com/gnolang/gno/pull/1438): to make Tendermint2 completely independent of GnoVM and Gno.land. This continues a project started many months ago to separate Gno into three separate components: the Tendermint2 consensus engine, the Gno programming language and VM, and Gno.land, the blockchain combining both together. This way, we’re working towards making it possible to build other blockchains that use Tendermint2 (like AtomOne!), the GnoVM, or both!\n### Gno.land Engineering Retreat\nIn the last *The More You Gno*, we covered the Gno.land and AIB company-wide retreat, an invaluable opportunity to work together, code together, and get to know our peers outside of work. It was such a success that the Gno core dev team held another retreat in December in Rouen, France, where many of the above issues and PRs were tackled and merged. We look forward to more productive and frequent face-to-face meetings in the year ahead.\n### Gno.land DAOs and Tokenomics\nWith the input of Manfred, Jae, and the rest of the team, Michael continues to make advancements on Gno.land’s system of DAOs and tokenomics. One key change since the last edition is that the WorxDAO (responsible for governance and all issues related to development in Gno.land) will now be known as the GovDAO. The DAO will likely have seven tiers but initially launch with three or four. The main benefits of moving up tiers are increased voting power, increased monthly rewards, and the authority to promote members from lower tiers. GovDAO will be assisted by WorxDAO, which will encompass several different sub-DAOs, such as engineering, funding, and projects. \n\nWe’re currently exploring different reward systems for contributors, whereby each member of the same tier level will receive the same amount of rewards, either directly or indirectly, in the GNOT native gas token or USD, in a type of salary-based scheme. We may also elect to distribute rewards based on a contribution/work “hash difficulty” (total number and tier split of active contributors that month). We may also adopt a hybrid of these two models. \n\nMichael is also working on a bounty system to make Game of Realms (GoR) more accessible and evaluating contributions easier for judges. High ranking GoR competitors will likely receive Gno.land tier levels based on their leaderboard placing in addition to ATOM rewards. It’s important to note that these discussions are ongoing, and the information here may be deprecated. \n### Making Testing Faster\n\nThanks to Petar, [PR 1417](https://github.com/gnolang/gno/pull/1417), we have improved the entire VM testing suite runtime by around four minutes, which is an incredible achievement. We just need to refactor some test scenarios that are not very concurrent-friendly, but this PR makes interacting with the platform so much easier.\n\n### Bug Fixes and Miscellaneous Items\n\nThanks to Joon from Onbloc, we were able to add support for octals without 'o' (check out [PR 1331](https://github.com/gnolang/gno/pull/1331) for more details), and thanks to Dragos [PR 1309](https://github.com/gnolang/gno/pull/1309), we extended the GRC721 interface so that it now supports setting a token URI. These are both extremely welcomed contributions, and we appreciate our ecosystem partners.\n\nFrom the core team, a special shout out to Dylan for killing it fixing bugs, and getting many PRs ([PR 1451](https://github.com/gnolang/gno/pull/1451), [PR 1315](https://github.com/gnolang/gno/pull/1315), and [PR 1305](https://github.com/gnolang/gno/pull/1305), to name a few) merged over the last few weeks. Props also go to Marc for [PR 1177](https://github.com/gnolang/gno/pull/1177), which has just been merged, which fixes append in certain key situations. We’ve also welcomed a new security engineer, Kristov, to the team.\n\n## Grantee and Ecosystem Updates\n\n### Onbloc\n\nOnbloc has been on a roll, giving us an internal demo of Gnoswap beta just before the Christmas break and a public demo of its awesome Pool Incentivization feature during the last contributor sync call. With Pool Incentivization, anyone can add extra rewards on top of swap fees for LP stakers. This will help bootstrap initial liquidity for new-coming projects by attracting liquidity providers until sufficient organic trading volume is secured. Onbloc is also actively developing Adena’s Airgap feature and has improved the sign-in flow for security enhancement along with some refactoring. There will be a demo coming up in the next few weeks. Onbloc will also be researching airdrop trends and aiming to identify some of the most coveted DEX features users want to see for Gnoswap to streamline the onboarding process.\n\nRegarding Gno core, Onbloc core dev Byeongjoon Lee has developed a JSON parser for Gno, giving us a live demo during the last contributor sync. This allows the conversion or accessing of data from contracts in the JSON format, which will improve the Gno developer experience. His code is currently under review by the core team in [PR 1415](https://github.com/gnolang/gno/pull/1415). Dive deeper into Onbloc’s Builder Journey in the [hackerspace issue 29](https://github.com/gnolang/hackerspace/issues/29).\n\n### Teritori\n\nTeritori continues the challenging work of developing Gno Project Manager, a web app that allows anyone to create, fund, review, or manage projects fully on-chain. During the last contributors' call, the team gave a demo of the work achieved so far, in particular regarding the escrow system and completing project milestones so contributors can be paid once each one is completed rather than having to wait until the project finalization. \n\nGno Project Manager is a complex goal, and the team has run into some issues with edge cases they hadn’t bargained for in the relationships between grantees and funders. The team is looking for feedback and help identifying edge cases, so if you have any in mind, let them know. Teritori is also working on the conflict solver module and improving the social feed on [https://app.teritori.com/feed?network=gno-teritori](https://app.teritori.com/feed?network=gno-teritori), as well as providing more detailed documentation on their work, which they’ll be releasing in the coming weeks.\n\n### Berty\n\nThe Berty team has been busy working on GnoSocial backend implementation. The initial feature set has been implemented [here](https://github.com/gnolang/gnosocial/blob/main/realm/public.gno), including posting and replying to messages and reposting threads. You can keep up with Berty’s journey on GnoSocial in [hackerspace issue 51](https://github.com/gnolang/hackerspace/issues/51), which contains many issues and PRs, such as implementing calls, running tests, and fixing bugs. We’re super excited about pushing the limits of scalability with Berty’s decentralized social platform, and we’ll be looking forward to more demos in the coming weeks.\n### Dragos\nDragos has successfully launched the Flippando game, and you can try it out on the [testnet here](https://gno.flippando.xyz/flip). If you haven’t been following the progress, Flippando is an on-chain memory game that you can play with your choice of styles, such as dice, colors, and hexagrams. Once you successfully complete a matrix, you can mint the end result as an NFT, which can later be assembled into larger, more complex NFTs to create digital artwork. You can find out more about the game, its creator, and the official roadmap on the site. We’ll also release a blog post soon from Dragos sharing his experience porting Flippando from Solidity to Gno, so stay tuned!\n### Varmeta  \nVarmeta’s update was brief this week since the contributor sync call ran over. We look forward to hearing more about the team’s progress in developing the Unity SDK for Gno next time. You can read more about it on Varmeta’s [hackerspace issue 43](https://github.com/gnolang/hackerspace/issues/43).\n\n*Do you want to contribute to Gno.land's monthly updates? If you're building on Gno.land and want to highlight your development, project, event, or idea, let us know, and we'll include your contribution. That's all for now! Keep track of our progress by following our socials [Twitter/X](https://twitter.com/_gnoland) and [Discord](https://discord.com/invite/tF2X8M6cVj) and watch out for the next edition of The More You Gno in a few weeks.* \n",
    "2024-01-22T00:00:00Z",
    "christina",
    "gnoland,ecosystem,updates,gnovm,tm2"
  ],
  "max_deposit": ""
}
#19 vm/execgno.land/r/gnoland/blog.ModAddPost(porting-flippando-gno, 5 Things I Learned While Porting Flippando From Solidity to Gno , Last year, while visiting Seoul, South Korea, I decided, on a whim, to sign up for a hackathon called Glitch. The project I was going to present was a tiny little game, written in Solidity, called Flippando. It started as a weekend project to help me learn Solidity (I had no prior experience with this language). To my surprise, my tiny little game won the first prize on the Polygon track of the Glitch hackathon. Encouraged and even more curious now, I started attending side events during Buidl.Asia. One was about Gno, a smart contract platform written in Go. After the presentation, which was really great, I started a light conversation with the team. One thing led to another, and I ended up showing them Flippando. Just for context, Flippando is a non-degen, deceptively simple memory game. You start with an empty matrix and flip tiles to see what’s “underneath.” If the tiles match, they remain uncovered; if not, they are briefly shown, and you have to memorize their color until the entire matrix is uncovered. The end result can be minted as an NFT, and you can later assemble all the boards into bigger, more complex NFTs, basically “painting” with the uncovered tiles. The Gno team seemed to like it, and they suggested I should apply for a grant to port it to Go/Gno. I had no prior experience in Go either, so I thought this would be a good opportunity to learn more. To my surprise, again, my grant submission was accepted. Fast forward a few months until now: the Gno version of Flippando is live (in testnet beta) at [https://gno.flippando.xyz](https://gno.flippando.xyz). What follows sums up my experience porting the game from Solidity to Gno. This blog post is a mix of technical and not-so-technical takeaways. ## 1. Being Early Pays Off Solidity has been around for some time now, and there is already a solid tooling ecosystem for it. I used Hardhat for my development, and I got really comfortable with it. When I started to port Flippando, though, I was quite surprised to see there was almost no tooling in Gno. Developing was mostly TDD (test-driven development) against a local VM, and deploying realms on the actual chain was more complicated than I expected. My first feedback rounds to the team revolved almost exclusively around this topic. Very soon, I started to receive signals that my feedback was not only heard but taken into account and processed, and there were actual projects built aiming to improve the developer experience. In just two or three months, two full projects were finished: gnodev, and Gno Playground. Gnodev makes development very similar to Metro in React Native: there is a watchdog on the file system, and your changes to the realm code are reloaded every time you save. It’s almost like deploying in real time; no need to stop the chain, wipe the state, restart the chain, and redeploy your modifications. Gno Playground is a sandbox-like environment, which helps tremendously with quick testing and even deploying packages on-chain. Both projects were finished, as I said, in just two to three months. Being early pays off because you get to shape your development environment much faster than in a solidified (pun intended!) environment. You may have to deal with a little chaos in the beginning, but the benefits are well worth it. ## 2. TDD All Day Long As I said above, developing realms in Gno consists mainly of writing and testing your code with another code. It’s called TDD and it’s a very useful developing strategy, in general. I used it, at my day job, in all my projects consistently, but only in the initial stages. Once the codebase was more stable, I was relying more on regression tests from the Q&A team. Mind you, there was no Q&A team this time; I was just coding alone, and I was forced to comply more and more with this TDD approach. In the end, I have to admit that, while slower and a bit boring, this approach is more effective, especially in a volatile environment, where patches are added literally every day, and the environment changes continuously. ## 3. Marshal and Unmarshal The current GnoVM doesn’t yet have an API standard for formatting. You can’t put a setting somewhere that will make the response be automatically translated into JSON. You have to write these JSON objects yourself for every payload you return from your realm. In Solidity, all this is hidden under the event mechanism and handled by existing libraries, like ether.js, which take care of all this nitpicking. It soon became obvious that development time would be significantly longer in Gno because, on top of the logic, I also had to write the formatted response “by hand.” But as with every other thing that seemed weird in the beginning, eventually, I came to appreciate it. It forced me to prototype more carefully not only the actual response but all the objects needed in my game. Eventually, it resulted in simpler and more flexible code. ## 4. Eating Your Own Dog Food When developing in Solidity, most of the time, you just import OpenZeppelin contracts for ERC20 and ERC721 tokens (which are battle-tested, bug-free, and relatively easy to understand) and focus on your own contract logic. No mingling with low-level token implementation details; these are already packaged and ready to use. While porting Flippando to Gno, I realized I had to deal with these low-level details upfront simply because there was no equivalent of the OpenZeppeling contracts. Moreover, some current GRCs (the Gno equivalent of ERC) were incomplete. So, I had to make a PR for a GRC721 implementation that was missing the SetTokenURI functionality, and this PR ended up being merged into the main Gno codebase (that felt really good, to be honest). ## 5. Being Early Pays Off. Did I Say That Already? Yes, but this time it’s about something else. It’s not about the satisfaction of shaping the development environment in the early days. It’s about the privilege of witnessing something coming to life from literally nothing. Gno has been in development for almost two years now, and it is several months before its mainnet. It’s literally on the verge of coming “alive.” Every day new commits are added, and new decisions are made. There are new contributors constantly joining, and new projects prototyped and launched faster and faster. Every day the ecosystem is coagulating itself into something more and more visible, more and more alive. Being able to witness this from the inside is a rare privilege and something I’m very grateful for. ## Final Thoughts So, these are, in a nutshell, my five top takeaways from porting Flippando from Solidity to Gno. There are many others, of course, and Gno is (did I already say this?) still very early. If you’re interested in learning more, please visit the official repo, look at the docs, and try interacting with the devs. You’ll never gno what can grow out of it! And be sure to play [Flippando](https://gno.flippando.xyz) today live in testnet beta and share your flips. ## Here’s How to Play Flippando The game presents a 16 tiles (4x4) or 64 tiles (8x8) matrix. These tiles are “covering” a board of various colors and gradients or shapes, like dice or hexagrams. Clicking two tiles consecutively “flips” them, showing what’s underneath. If they match, they remain uncovered; if not, they are briefly shown, and the player needs to remember their position. Once an entire board is flipped, revealing its random combination of colors, the player can choose to mint it as an NFT. When minting a solved board as an NFT, the game also mints a fungible token, FLIP, which is “locked” inside the NFT. This is the player's “reward.” But the token can only be unlocked if someone else uses that NFT in a larger project. These larger projects, or “artworks,” can be assembled in the Flippando Playground. All minted basic NFTs are displayed here in an area from where the player can drag and drop them onto a canvas, creating a much bigger and more complex NFT. Once the canvas is fully filled and the player is satisfied with what’s in there, these new “artwork” NFTs can also be minted. This unlocks all the FLIP tokens for the NFTs used inside the artwork and sends them to their initial players. Furthermore, these complex artworks can be listed and traded in a marketplace, closing the circle of a virtual economy of goods. Start playing Flippando and share your Flips with Gno.land on [Twitter/X](https://x.com/_gnoland?lang=en) by tagging #gnoflip. , 2024-01-24T00:00:00Z, dragos, gnoland,ecosystem,updates,flippando)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "porting-flippando-gno",
    "5 Things I Learned While Porting Flippando From Solidity to Gno ",
    "\n\nLast year, while visiting Seoul, South Korea, I decided, on a whim, to sign up for a hackathon called Glitch. The project I was going to present was a tiny little game, written in Solidity, called Flippando. It started as a weekend project to help me learn Solidity (I had no prior experience with this language). To my surprise, my tiny little game won the first prize on the Polygon track of the Glitch hackathon.\n\nEncouraged and even more curious now, I started attending side events during Buidl.Asia. One was about Gno, a smart contract platform written in Go. After the presentation, which was really great, I started a light conversation with the team. One thing led to another, and I ended up showing them Flippando. \n\nJust for context, Flippando is a non-degen, deceptively simple memory game. You start with an empty matrix and flip tiles to see what’s “underneath.” If the tiles match, they remain uncovered; if not, they are briefly shown, and you have to memorize their color until the entire matrix is uncovered. The end result can be minted as an NFT, and you can later assemble all the boards into bigger, more complex NFTs, basically “painting” with the uncovered tiles.\n\nThe Gno team seemed to like it, and they suggested I should apply for a grant to port it to Go/Gno. I had no prior experience in Go either, so I thought this would be a good opportunity to learn more. To my surprise, again, my grant submission was accepted.\n\nFast forward a few months until now: the Gno version of Flippando is live (in testnet beta) at [https://gno.flippando.xyz](https://gno.flippando.xyz). What follows sums up my experience porting the game from Solidity to Gno. This blog post is a mix of technical and not-so-technical takeaways.\n\n## 1. Being Early Pays Off\n\nSolidity has been around for some time now, and there is already a solid tooling ecosystem for it. I used Hardhat for my development, and I got really comfortable with it. When I started to port Flippando, though, I was quite surprised to see there was almost no tooling in Gno. Developing was mostly TDD (test-driven development) against a local VM, and deploying realms on the actual chain was more complicated than I expected. \n\nMy first feedback rounds to the team revolved almost exclusively around this topic. Very soon, I started to receive signals that my feedback was not only heard but taken into account and processed, and there were actual projects built aiming to improve the developer experience. In just two or three months, two full projects were finished: gnodev, and Gno Playground. \n\nGnodev makes development very similar to Metro in React Native: there is a watchdog on the file system, and your changes to the realm code are reloaded every time you save. It’s almost like deploying in real time; no need to stop the chain, wipe the state, restart the chain, and redeploy your modifications. Gno Playground is a sandbox-like environment, which helps tremendously with quick testing and even deploying packages on-chain. Both projects were finished, as I said, in just two to three months.\n\nBeing early pays off because you get to shape your development environment much faster than in a solidified (pun intended!) environment. You may have to deal with a little chaos in the beginning, but the benefits are well worth it.\n\n## 2. TDD All Day Long\n\nAs I said above, developing realms in Gno consists mainly of writing and testing your code with another code. It’s called TDD and it’s a very useful developing strategy, in general. I used it, at my day job, in all my projects consistently, but only in the initial stages. Once the codebase was more stable, I was relying more on regression tests from the Q&A team.\n\nMind you, there was no Q&A team this time; I was just coding alone, and I was forced to comply more and more with this TDD approach. In the end, I have to admit that, while slower and a bit boring, this approach is more effective, especially in a volatile environment, where patches are added literally every day, and the environment changes continuously.\n\n## 3. Marshal and Unmarshal\n\nThe current GnoVM doesn’t yet have an API standard for formatting. You can’t put a setting somewhere that will make the response be automatically translated into JSON. You have to write these JSON objects yourself for every payload you return from your realm. \n\nIn Solidity, all this is hidden under the event mechanism and handled by existing libraries, like ether.js, which take care of all this nitpicking. It soon became obvious that development time would be significantly longer in Gno because, on top of the logic, I also had to write the formatted response “by hand.”\n\nBut as with every other thing that seemed weird in the beginning, eventually, I came to appreciate it. It forced me to prototype more carefully not only the actual response but all the objects needed in my game. Eventually, it resulted in simpler and more flexible code.\n\n## 4. Eating Your Own Dog Food\n\nWhen developing in Solidity, most of the time, you just import OpenZeppelin contracts for ERC20 and ERC721 tokens (which are battle-tested, bug-free, and relatively easy to understand) and focus on your own contract logic. No mingling with low-level token implementation details; these are already packaged and ready to use.\n\nWhile porting Flippando to Gno, I realized I had to deal with these low-level details upfront simply because there was no equivalent of the OpenZeppeling contracts. Moreover, some current GRCs (the Gno equivalent of ERC) were incomplete. \n\nSo, I had to make a PR for a GRC721 implementation that was missing the SetTokenURI functionality, and this PR ended up being merged into the main Gno codebase (that felt really good, to be honest). \n\n## 5. Being Early Pays Off. Did I Say That Already?\n\nYes, but this time it’s about something else. It’s not about the satisfaction of shaping the development environment in the early days. It’s about the privilege of witnessing something coming to life from literally nothing. Gno has been in development for almost two years now, and it is several months before its mainnet. It’s literally on the verge of coming “alive.”\n\nEvery day new commits are added, and new decisions are made. There are new contributors constantly joining, and new projects prototyped and launched faster and faster. Every day the ecosystem is coagulating itself into something more and more visible, more and more alive.\n\nBeing able to witness this from the inside is a rare privilege and something I’m very grateful for.\n\n## Final Thoughts \n\nSo, these are, in a nutshell, my five top takeaways from porting Flippando from Solidity to Gno. There are many others, of course, and Gno is (did I already say this?) still very early. If you’re interested in learning more, please visit the official repo, look at the docs, and try interacting with the devs. You’ll never gno what can grow out of it! And be sure to play [Flippando](https://gno.flippando.xyz) today live in testnet beta and share your flips.\n\n## Here’s How to Play Flippando\n\nThe game presents a 16 tiles (4x4) or 64 tiles (8x8) matrix. These tiles are “covering” a board of various colors and gradients or shapes, like dice or hexagrams. Clicking two tiles consecutively “flips” them, showing what’s underneath. If they match, they remain uncovered; if not, they are briefly shown, and the player needs to remember their position. Once an entire board is flipped, revealing its random combination of colors, the player can choose to mint it as an NFT.\n\nWhen minting a solved board as an NFT, the game also mints a fungible token, FLIP, which is “locked” inside the NFT. This is the player's “reward.” But the token can only be unlocked if someone else uses that NFT in a larger project.\n\nThese larger projects, or “artworks,” can be assembled in the Flippando Playground. All minted basic NFTs are displayed here in an area from where the player can drag and drop them onto a canvas, creating a much bigger and more complex NFT. Once the canvas is fully filled and the player is satisfied with what’s in there, these new “artwork” NFTs can also be minted. This unlocks all the FLIP tokens for the NFTs used inside the artwork and sends them to their initial players. Furthermore, these complex artworks can be listed and traded in a marketplace, closing the circle of a virtual economy of goods.\n\nStart playing Flippando and share your Flips with Gno.land on [Twitter/X](https://x.com/_gnoland?lang=en) by tagging #gnoflip. \n\n\n",
    "2024-01-24T00:00:00Z",
    "dragos",
    "gnoland,ecosystem,updates,flippando"
  ],
  "max_deposit": ""
}
#20 vm/execgno.land/r/gnoland/blog.ModAddPost(wyg-zooma, Who You Gno – On the Record with Antoine Breuil, Antoine Breuil, ‘zôÖma,’ is the co-founder of [Teritori](https://app.teritori.com/), an active Gno.land contributor and grantee that’s building key modules and tooling for Gno. A firm believer in equal opportunities, free and decentralized access to information, and helping fellow humans, zôÖma is fascinated by human behavior and how we organize ourselves, holding an avant-garde social experiment five years ago with Teritori co-founder ‘Pop.’ "La Suite du Monde" drew people across France to a small village in the countryside to create a shared community and society—with farmland, accommodation, and tools for common use. The goal was to form an in-real-life DAO whose members shared common goals and interests using blockchain technology with a token to pay for goods and services and vote on governance matters. While many people participated and were enthusiastic about creating a shared society, zôÖma admits the experiment was early- no one was interested in interacting with the tech. “90% of people, rural or not, found it too complicated,” he admits. “We were a bit naive, but it was fascinating nonetheless.” ## A Fascination for Human Behavior zôÖma has been an ardent student of human behavior since childhood. His parents taught him early on the value of philanthropy and working with people in need. He’s set up several joint liability companies, non-profits, and NGOs to experiment with finding new and better ways to organize society, and one of the things he loves most about web3 is its “experimental” nature. He’s encouraged by how far the industry has come since he received his first bitcoins in partial payment for a website in 2014. “That turned out to be a really expensive website for my customer,” he laughs. He never expected such broad adoption of Bitcoin and a technology that “inspired a whole generation of engineers to experiment with new things.” Like most creative types, zôÖma is used to spinning many plates in the air, overseeing La Suite du Monde while working as a freelance designer, front-end dev, and Artistic Director for an independent French record label. “Before entering the world of engineers, I founded and managed a collective for 12 years, which brought together artists from all disciplines, hackers, designers, tinkerers, to build some interesting projects.” La Suite de Monde allowed him to explore his passion for finding new approaches to social coordination first-hand. “I explored very radical things,” he says, “like the notion of “accepted by default” where anyone could use the collective budget by expressing their desire to do so three times. I wouldn’t recommend this,” he laughs, “but the experiments were fascinating and still serve me today in my work.” One really interesting trait about zôÖma is how he harnesses the creative and analytical sides of himself with equal application. Most people are predominantly right-brained or left-brained, yet, zôÖma is ‘ambidextrous’ in this regard. He’s a designer who’s created large-scale artistic events, cultural tours of Paris, and an award-winning independent movie documenting French artist and Bitcoin advocate Pascal Boyart, [The Underground Sistine Chapel](http://www.the-chapel.art), (which you should definitely check out!). Yet he’s also passionate about engineering and the future of cooperatives. He’s detail-driven and ambitious, taking his team at Teritori from two to 18 (14 full-time teammates and four part-time). In his free time, zôÖma, “like all French people,” enjoys fine wine and good conversation. One of the things he loves most about Paris is how easy it is to find like-minded people to brainstorm with or decompress after a long day of work. “We have a very active ecosystem of engineers, cryptographers, etc.,” he says. Paris is also a beautiful city that captures his imagination with its dazzling architecture and impressive art. Even so, zôÖma channels his creative energy more effectively when working from a small Moroccan fishing village for three months a year. He reconnects with nature and humanity, immersing himself in a different culture and surfing in the Atlantic before he starts his day. ## New Tools for Social Coordination Why does zôÖma believe social coordination is so important, and why do we need new tools for it? “We’ve always had tendencies to organize ourselves and tools defining rules for living together, diplomatic protocols for discussing between social groups, or trading goods and services. But almost all the tools that previous generations put in place are outdated. Our entire generation has lost confidence in institutions to allow groups of humans to organize, coordinate, and meet their needs. Our dependence on third parties who do not have the same interests as citizens is immense.” zôÖma believes that web3 holds the key to unlocking the emergence of new societies through products that are “unstoppable, resilient, and meet a real need,” whether for small villages in the south of France, Africa, or Asia or neighborhoods in Brazil or Korea. “We must have access to the radical transparency of institutions, the privacy of individuals, censorship-resistant tools, and autonomous communication from all commercial enterprises. It is on this solid foundation that civilizations that are more just and equitable can be built.” ## Making Web3 More Accessible Of course, as zôÖma found out, building new tools is easier said than done. Our industry faces an uphill climb when it comes to balancing the promise of the tech with a user experience that doesn’t cause tachycardia. He says that understanding that most people “don’t have the time or inclination to incorporate difficult technical concepts in their lives” has given him “crazy energy to focus on very simple technologies.” In fact, the ‘failure’ of La Suite du Monde is what gave birth to Teritori, “which today provides all the functionalities people asked us for at the time; a social network, communication systems, voting, crowd-funding, etc. We have made great progress, and it’s important to focus on products that are radically simple for the general public.” According to zôÖma, this means abstracting away the concepts that everyday people don’t need to be aware of, such as networks, dApps, and even blockchain, “and always switching from one decentralized application to another.” Unifying (not centralizing) separate tools, networks, and technologies within a single, simple interface, he believes, is the key to broader adoption. “It's a very complex challenge, in terms of security, design, etc., but it's what I'm passionate about today.” When it comes to Gno.land, Teritori has already delivered essential DAO tooling and standards, a Moderation DAO module to facilitate social communication and a Justice DAO module for conflict resolution. The team is now focusing on an on-chain project management tool to allow organizations and individuals to manage projects and track tasks smoothly and transparently on-chain. ## A Fairer, More Transparent World In 2024, Teritori enters a new phase called "Chapter II," which involves unifying all its work into a mobile and desktop application that could “trigger superb demonstrations of the potential of DAOs.” He enthuses, “I dream that we will see the emergence of a village that uses Teritori as a tool for internal discussion and co-financing. Will this be real in 2024? Who knows? But that’s where I focus all my energy!” He believes the internet has been a great leveler, enabling anyone with a connection to educate themselves on any subject; yet, the opportunity isn’t open to all, and free and open access is constantly diminishing. “I am a child of the internet. I grew up with warez, p2p, and an internet which provided me with daily resources to learn freely, everything that interested me. In some countries, it is impossible to benefit from this opportunity, and with the centralization of the internet on different key players, mass surveillance, and the censorship of certain dictators, the internet is losing its very essence, which makes it magic. Distributed protocols can reshuffle the cards and offer tools for the public good.” zôÖma says that humanity is at a turning point, and we must build the necessary tools now to avoid finding ourselves in a real-life version of George Orwell’s 1984. “I aspire to participate modestly in a world that is fairer, more transparent, and where society doesn’t need a puppet in a suit to improve its living conditions or respond to local needs. Web3 is just a tool, and if it doesn't meet this real need, then for me, it will be a failure.” *Experiment with Teritori today and test its Social Feed, which now includes Twitter-like functionality for posts, Medium-style articles, Soundcloud-inspired music, and videos—all based on Gno and IPFS and totally decentralized. You can also check out Teritori’s GnoModerationModule, which allows you to moderate a social network in a decentralized way. A faucet is available on the home page at [app.teritori.com](https://app.teritori.com/feed?network=gno-teritori).* , 2024-01-11T00:00:00Z, christina, whoyougno,teritori,community,interview)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "wyg-zooma",
    "Who You Gno – On the Record with Antoine Breuil",
    "\n\nAntoine Breuil, ‘zôÖma,’ is the co-founder of [Teritori](https://app.teritori.com/), an active Gno.land contributor and grantee that’s building key modules and tooling for Gno. A firm believer in equal opportunities, free and decentralized access to information, and helping fellow humans, zôÖma is fascinated by human behavior and how we organize ourselves, holding an avant-garde social experiment five years ago with Teritori co-founder ‘Pop.’ \"La Suite du Monde\" drew people across France to a small village in the countryside to create a shared community and society—with farmland, accommodation, and tools for common use.\n\nThe goal was to form an in-real-life DAO whose members shared common goals and interests using blockchain technology with a token to pay for goods and services and vote on governance matters. While many people participated and were enthusiastic about creating a shared society, zôÖma admits the experiment was early- no one was interested in interacting with the tech. “90% of people, rural or not, found it too complicated,” he admits. “We were a bit naive, but it was fascinating nonetheless.”\n\n## A Fascination for Human Behavior\n\nzôÖma has been an ardent student of human behavior since childhood. His parents taught him early on the value of philanthropy and working with people in need. He’s set up several joint liability companies, non-profits, and NGOs to experiment with finding new and better ways to organize society, and one of the things he loves most about web3 is its “experimental” nature. He’s encouraged by how far the industry has come since he received his first bitcoins in partial payment for a website in 2014. “That turned out to be a really expensive website for my customer,” he laughs. He never expected such broad adoption of Bitcoin and a technology that “inspired a whole generation of engineers to experiment with new things.”\n\nLike most creative types, zôÖma is used to spinning many plates in the air, overseeing La Suite du Monde while working as a freelance designer, front-end dev, and Artistic Director for an independent French record label. “Before entering the world of engineers, I founded and managed a collective for 12 years, which brought together artists from all disciplines, hackers, designers, tinkerers, to build some interesting projects.” La Suite de Monde allowed him to explore his passion for finding new approaches to social coordination first-hand. “I explored very radical things,” he says, “like the notion of “accepted by default” where anyone could use the collective budget by expressing their desire to do so three times. I wouldn’t recommend this,” he laughs, “but the experiments were fascinating and still serve me today in my work.”\n\nOne really interesting trait about zôÖma is how he harnesses the creative and analytical sides of himself with equal application. Most people are predominantly right-brained or left-brained, yet, zôÖma is ‘ambidextrous’ in this regard. He’s a designer who’s created large-scale artistic events, cultural tours of Paris, and an award-winning independent movie documenting French artist and Bitcoin advocate Pascal Boyart, [The Underground Sistine Chapel](http://www.the-chapel.art), (which you should definitely check out!). Yet he’s also passionate about engineering and the future of cooperatives. He’s detail-driven and ambitious, taking his team at Teritori from two to 18 (14 full-time teammates and four part-time).\n\nIn his free time, zôÖma, “like all French people,” enjoys fine wine and good conversation. One of the things he loves most about Paris is how easy it is to find like-minded people to brainstorm with or decompress after a long day of work. “We have a very active ecosystem of engineers, cryptographers, etc.,” he says. Paris is also a beautiful city that captures his imagination with its dazzling architecture and impressive art. Even so, zôÖma channels his creative energy more effectively when working from a small Moroccan fishing village for three months a year. He reconnects with nature and humanity, immersing himself in a different culture and surfing in the Atlantic before he starts his day. \n\n## New Tools for Social Coordination \n\nWhy does zôÖma believe social coordination is so important, and why do we need new tools for it? “We’ve always had tendencies to organize ourselves and tools defining rules for living together, diplomatic protocols for discussing between social groups, or trading goods and services. But almost all the tools that previous generations put in place are outdated. Our entire generation has lost confidence in institutions to allow groups of humans to organize, coordinate, and meet their needs. Our dependence on third parties who do not have the same interests as citizens is immense.”\n\nzôÖma believes that web3 holds the key to unlocking the emergence of new societies through products that are “unstoppable, resilient, and meet a real need,” whether for small villages in the south of France, Africa, or Asia or neighborhoods in Brazil or Korea. “We must have access to the radical transparency of institutions, the privacy of individuals, censorship-resistant tools, and autonomous communication from all commercial enterprises. It is on this solid foundation that civilizations that are more just and equitable can be built.”\n\n## Making Web3 More Accessible \n\nOf course, as zôÖma found out, building new tools is easier said than done. Our industry faces an uphill climb when it comes to balancing the promise of the tech with a user experience that doesn’t cause tachycardia. He says that understanding that most people “don’t have the time or inclination to incorporate difficult technical concepts in their lives” has given him “crazy energy to focus on very simple technologies.” In fact, the ‘failure’ of La Suite du Monde is what gave birth to Teritori, “which today provides all the functionalities people asked us for at the time; a social network, communication systems, voting, crowd-funding, etc. We have made great progress, and it’s important to focus on products that are radically simple for the general public.”\n\nAccording to zôÖma, this means abstracting away the concepts that everyday people don’t need to be aware of, such as networks, dApps, and even blockchain, “and always switching from one decentralized application to another.” Unifying (not centralizing) separate tools, networks, and technologies within a single, simple interface, he believes, is the key to broader adoption. “It's a very complex challenge, in terms of security, design, etc., but it's what I'm passionate about today.” \n\nWhen it comes to Gno.land, Teritori has already delivered essential DAO tooling and standards, a Moderation DAO module to facilitate social communication and a Justice DAO module for conflict resolution. The team is now focusing on an on-chain project management tool to allow organizations and individuals to manage projects and track tasks smoothly and transparently on-chain.\n\n## A Fairer, More Transparent World\n\nIn 2024, Teritori enters a new phase called \"Chapter II,\" which involves unifying all its work into a mobile and desktop application that could “trigger superb demonstrations of the potential of DAOs.” He enthuses, “I dream that we will see the emergence of a village that uses Teritori as a tool for internal discussion and co-financing. Will this be real in 2024? Who knows? But that’s where I focus all my energy!”\n\nHe believes the internet has been a great leveler, enabling anyone with a connection to educate themselves on any subject; yet, the opportunity isn’t open to all, and free and open access is constantly diminishing. “I am a child of the internet. I grew up with warez, p2p, and an internet which provided me with daily resources to learn freely, everything that interested me. In some countries, it is impossible to benefit from this opportunity, and with the centralization of the internet on different key players, mass surveillance, and the censorship of certain dictators, the internet is losing its very essence, which makes it magic. Distributed protocols can reshuffle the cards and offer tools for the public good.” \n\nzôÖma says that humanity is at a turning point, and we must build the necessary tools now to avoid finding ourselves in a real-life version of George Orwell’s 1984. “I aspire to participate modestly in a world that is fairer, more transparent, and where society doesn’t need a puppet in a suit to improve its living conditions or respond to local needs. Web3 is just a tool, and if it doesn't meet this real need, then for me, it will be a failure.”\n\n*Experiment with Teritori today and test its Social Feed, which now includes Twitter-like functionality for posts, Medium-style articles, Soundcloud-inspired music, and videos—all based on Gno and IPFS and totally decentralized. You can also check out Teritori’s GnoModerationModule, which allows you to moderate a social network in a decentralized way. A faucet is available on the home page at [app.teritori.com](https://app.teritori.com/feed?network=gno-teritori).*\n",
    "2024-01-11T00:00:00Z",
    "christina",
    "whoyougno,teritori,community,interview"
  ],
  "max_deposit": ""
}
#21 vm/execgno.land/r/gnoland/blog.ModAddPost(bgl-poc2, Building Gno.land - Proof of Contribution II, *Disclaimer: The Building Gno.land series aims to share the core concepts of our platform, mission, and tech stack, providing a snapshot of a current state on our builder’s journey. New episodes may deprecate previous ones, but no editions will be modified at any time. We encourage you to follow along as we create the rails for a more transparent and accountable society, and we welcome feedback and contributions to the repo.* ## II. Proof of Contribution vs Proof of Stake Proof of Stake (PoS) is a robust consensus mechanism that provides a more environmentally friendly and scalable alternative to Proof of Work (PoW) and powers most of the web3 industry today. As PoS pioneers, Cosmos technology secures hundreds of blockchain projects and billions of dollars of digital assets, and Ethereum (launched as a PoW chain in 2015) made the historic switch to PoS in 2022. According to [ethereum.org](https://ethereum.org/en/developers/docs/consensus-mechanisms/pos), PoS is “more secure, less energy-intensive, and better for implementing new scaling solutions compared to the previous proof-of-work architecture.” However, as we briefly discussed in [*What Is Proof of Contribution?*](https://test3.gno.land/r/gnoland/blog:p/bgl-poc-1), PoS has vulnerabilities that can corrupt the network over time. ### The Limitations of Proof of Stake (PoS) Beyond securing the network, the main goal of any consensus mechanism (PoW, PoS, DPoS, PoC, etc.) is to be as decentralized as possible and not reliant on any central actors. This can be measured by the Satoshi Score (or the Nakamoto coefficient), a quantitative measure that assesses a blockchain’s level of decentralization by calculating the minimum number of nodes needed to compromise a network or carry out a 51% attack. PoS systems can be bootstrapped within days (or even hours), starting off decentralized and achieving a high Satoshi Score. The PoS chain Genesis allocates a default voting power to ~20-50 nodes, in general equally (or at least making sure that no single node has more than 5% of the voting power). This makes PoS chains decentralized enough (in theory) from block 0 with a near-perfect Satoshi score. However, in practice, PoS has two main issues. Because the system is dictated by money, PoS chains become imperfect over time. Anyone wealthy enough can stake their tokens progressively and use their accumulated power to sway decision-making on the chain—or take the network over completely. The chain can limit the maximum voting power per validator node, but this is almost ineffective, as a malicious actor can carry out a Sybil attack on the network and create multiple validators to bypass the voting cap. Such an attack renders the max voting power per node useless and leaves the chain defenseless against a single organization or cartel gaining the majority of the voting power. PoS systems leave chains like Cosmos Hub and Ethereum at risk from such bad actors, cartels, and powerful protocols (such as Lido and Rocket Pool). While Proof of Contribution (PoC) can’t prevent Sybil attacks on standard user accounts (when malicious actors create multiple accounts with a single computer and transfer tokens within a few hours), it does make it almost impossible for validator nodes to suffer Sybil attacks. Since the community vets every person who is given voting power or sway in the network (including validator power) through the DAO, at no point can anyone "spoof" identities and gain major sway. ### Where Proof of Contribution (PoC) Excels PoC is actually Proof of Authority (PoA) which, instead of offering up a resource like computing power or a financial stake, relies on validators staking their reputation. Anyone can join most public PoW and PoS networks without revealing their identity. However, by definition, PoA validators need to make themselves known and are selected based on their trustworthiness. This means PoA tends to work better when deployed in private or permissioned blockchains than in public platforms (because of this tendency toward centralization). PoC solves this problem, ensuring the network becomes increasingly decentralized over time by being governed by a decentralized entity, GovDAO. Like standard PoA chains, PoC chains launch with a handful of validators that must be identified and trusted by the network, meaning governance is centralized at the start, and the chain achieves a low Satoshi Score. The system is about contributing and earning contribution units, which are slow to gain and require human interaction. It takes months (or years) before there are enough actors in the DAO and sufficient voting power for the chain to be considered decentralized enough, according to the Nakamoto coefficient. PoC is thus slower to bootstrap than PoS and harder to achieve. You can think of PoC versus PoS as a marathon versus a sprint, whereby PoC starts slowly but then gains momentum over time, and PoS starts quickly but loses momentum over time (the graph below provides a visual representation of PoC versus PoS). [![Graph](https://gnolang.github.io/blog/2024-01-26_bgl-poc2/src/thumbs/graph-container.png)](https://gnolang.github.io/blog/2024-01-26_bgl-poc2/src/graph-container.png) The GovDAO that owns the chain has a mandate to scale (to grow and decentralize) continuously as it adds more contributors. This means it becomes progressively larger over time, achieving high decentralization efficiency way beyond the initial fast sprint of PoS chains. Once established as a proven consensus mechanism and alternative to PoS, GovDAO can benefit from by any blockchain project (through an evolution of ICS) wanting to achieve decentralization and sustainability—PoC can secure Gno.land and the web3 industry at large. ### Security-Conscious by Design Another advantage of PoC is that because it’s reliant on human interactions, it is more Sybil-resistant by design. As discussed, it’s almost impossible to split a validator node into two (or more) nodes, making conducting a Sybil attack infinitely difficult. Since contribution units are not transferrable or exchangeable, PoC cannot suffer from whales attempting to purchase voting power quickly. If someone wanted to take over the network, they would need to invest years of their time making meaningful contributions. Their attack would be so slow that it would easily be prevented by humans monitoring the decentralization and adjusting the parameters. Moreover, GovDAO will activate and deactivate new validators on request, establish a KYC system for validators, and manage promotions of contributors with votes. This removes the possibility of a takeover happening overnight since the only way to gain validator or voting power is by voting on governance requests, which is slow and managed by humans. This is in contrast to PoS systems which are powerful and fully automated yet defenseless against such coordinated attacks. Gno.land is built on the very premise that such an attack on a PoC network would never happen as it would be entirely counter-intuitive. Since contributions are not only about expertise but also alignment, it is our hypothesis that longstanding contributors who have invested years of time and brainpower in developing the chain will do their best to protect it rather than destroy it. The DAO system will endure thanks to the mix of expertise and alignment and the amount and frequency of contributions. ### Concluding Thoughts Beyond separating voting power from net wealth, a core component of Proof of Contribution (PoC) is its focus on long-term sustainability. PoC makes the system fairer and more sustainable, ensuring participants are aligned and take actions that benefit the community and the broader ecosystem. PoC is slower to bootstrap and harder to achieve than PoS but focuses on long-term alignment and security. Unlike PoS, contributors receive rewards based on their contribution effort rather than how many tokens they stake. They are thus incentivized and recognized for the quality of their work, ideas, and alignment, driving participation and active engagement. Governance is allocated to the people most likely to care for the ecosystem’s long-term success—the contributors who have spent the most time working toward it. *II. Proof of Contribution vs Proof of Stake is the second in a [series of articles](/r/gnoland/blog:p/bgl-poc1) to dive deeply into the philosophy, vision, mechanics, and work involved in developing a new consensus mechanism for the next generation of smart contract systems. Look out for subsequent editions and additional Building Gno.land series, and let us know what you think! Got questions? Join the Gno.land [Discord](https://discord.com/invite/S8nKUqwkPn) or follow us on [Twitter/X](https://x.com/_gnoland)* , 2024-01-26T13:37:00Z, christina, gnoland,gnovm,tm2,PoC)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "bgl-poc2",
    "Building Gno.land - Proof of Contribution II",
    "\n\n*Disclaimer: The Building Gno.land series aims to share the core concepts of our platform, mission, and tech stack, providing a snapshot of a current state on our builder’s journey. New episodes may deprecate previous ones, but no editions will be modified at any time. We encourage you to follow along as we create the rails for a more transparent and accountable society, and we welcome feedback and contributions to the repo.*\n\n## II. Proof of Contribution vs Proof of Stake\n\nProof of Stake (PoS) is a robust consensus mechanism that provides a more environmentally friendly and scalable alternative to Proof of Work (PoW) and powers most of the web3 industry today. As PoS pioneers, Cosmos technology secures hundreds of blockchain projects and billions of dollars of digital assets, and Ethereum (launched as a PoW chain in 2015) made the historic switch to PoS in 2022. According to [ethereum.org](https://ethereum.org/en/developers/docs/consensus-mechanisms/pos), PoS is “more secure, less energy-intensive, and better for implementing new scaling solutions compared to the previous proof-of-work architecture.” However, as we briefly discussed in [*What Is Proof of Contribution?*](https://test3.gno.land/r/gnoland/blog:p/bgl-poc-1), PoS has vulnerabilities that can corrupt the network over time.\n\n### The Limitations of Proof of Stake (PoS)\n\nBeyond securing the network, the main goal of any consensus mechanism (PoW, PoS, DPoS, PoC, etc.) is to be as decentralized as possible and not reliant on any central actors. This can be measured by the Satoshi Score (or the Nakamoto coefficient), a quantitative measure that assesses a blockchain’s level of decentralization by calculating the minimum number of nodes needed to compromise a network or carry out a 51% attack. PoS systems can be bootstrapped within days (or even hours), starting off decentralized and achieving a high Satoshi Score.\n\nThe PoS chain Genesis allocates a default voting power to ~20-50 nodes, in general equally (or at least making sure that no single node has more than 5% of the voting power). This makes PoS chains decentralized enough (in theory) from block 0 with a near-perfect Satoshi score. However, in practice, PoS has two main issues. Because the system is dictated by money, PoS chains become imperfect over time. Anyone wealthy enough can stake their tokens progressively and use their accumulated power to sway decision-making on the chain—or take the network over completely.\n\nThe chain can limit the maximum voting power per validator node, but this is almost ineffective, as a malicious actor can carry out a Sybil attack on the network and create multiple validators to bypass the voting cap. Such an attack renders the max voting power per node useless and leaves the chain defenseless against a single organization or cartel gaining the majority of the voting power. PoS systems leave chains like Cosmos Hub and Ethereum at risk from such bad actors, cartels, and powerful protocols (such as Lido and Rocket Pool).\n\nWhile Proof of Contribution (PoC) can’t prevent Sybil attacks on standard user accounts (when malicious actors create multiple accounts with a single computer and transfer tokens within a few hours), it does make it almost impossible for validator nodes to suffer Sybil attacks. Since the community vets every person who is given voting power or sway in the network (including validator power) through the DAO, at no point can anyone \"spoof\" identities and gain major sway. \n\n### Where Proof of Contribution (PoC) Excels\n\nPoC is actually Proof of Authority (PoA) which, instead of offering up a resource like computing power or a financial stake, relies on validators staking their reputation. Anyone can join most public PoW and PoS networks without revealing their identity. However, by definition, PoA validators need to make themselves known and are selected based on their trustworthiness. This means PoA tends to work better when deployed in private or permissioned blockchains than in public platforms (because of this tendency toward centralization). \n\nPoC solves this problem, ensuring the network becomes increasingly decentralized over time by being governed by a decentralized entity, GovDAO. Like standard PoA chains, PoC chains launch with a handful of validators that must be identified and trusted by the network, meaning governance is centralized at the start, and the chain achieves a low Satoshi Score. The system is about contributing and earning contribution units, which are slow to gain and require human interaction. It takes months (or years) before there are enough actors in the DAO and sufficient voting power for the chain to be considered decentralized enough, according to the Nakamoto coefficient. \n\nPoC is thus slower to bootstrap than PoS and harder to achieve. You can think of PoC versus PoS as a marathon versus a sprint, whereby PoC starts slowly but then gains momentum over time, and PoS starts quickly but loses momentum over time (the graph below provides a visual representation of PoC versus PoS). \n\n[![Graph](https://gnolang.github.io/blog/2024-01-26_bgl-poc2/src/thumbs/graph-container.png)](https://gnolang.github.io/blog/2024-01-26_bgl-poc2/src/graph-container.png)\n\nThe GovDAO that owns the chain has a mandate to scale (to grow and decentralize) continuously as it adds more contributors. This means it becomes progressively larger over time, achieving high decentralization efficiency way beyond the initial fast sprint of PoS chains. Once established as a proven consensus mechanism and alternative to PoS, GovDAO can benefit from by any blockchain project (through an evolution of ICS) wanting to achieve decentralization and sustainability—PoC can secure Gno.land and the web3 industry at large.\n\n### Security-Conscious by Design\n\nAnother advantage of PoC is that because it’s reliant on human interactions, it is more Sybil-resistant by design. As discussed, it’s almost impossible to split a validator node into two (or more) nodes, making conducting a Sybil attack infinitely difficult. Since contribution units are not transferrable or exchangeable, PoC cannot suffer from whales attempting to purchase voting power quickly. If someone wanted to take over the network, they would need to invest years of their time making meaningful contributions. Their attack would be so slow that it would easily be prevented by humans monitoring the decentralization and adjusting the parameters. \n\nMoreover, GovDAO will activate and deactivate new validators on request, establish a KYC system for validators, and manage promotions of contributors with votes. This removes the possibility of a takeover happening overnight since the only way to gain validator or voting power is by voting on governance requests, which is slow and managed by humans. This is in contrast to PoS systems which are powerful and fully automated yet defenseless against such coordinated attacks.\n\nGno.land is built on the very premise that such an attack on a PoC network would never happen as it would be entirely counter-intuitive. Since contributions are not only about expertise but also alignment, it is our hypothesis that longstanding contributors who have invested years of time and brainpower in developing the chain will do their best to protect it rather than destroy it. The DAO system will endure thanks to the mix of expertise and alignment and the amount and frequency of contributions. \n\n### Concluding Thoughts\n\nBeyond separating voting power from net wealth, a core component of Proof of Contribution (PoC) is its focus on long-term sustainability. PoC makes the system fairer and more sustainable, ensuring participants are aligned and take actions that benefit the community and the broader ecosystem. PoC is slower to bootstrap and harder to achieve than PoS but focuses on long-term alignment and security. \n\nUnlike PoS, contributors receive rewards based on their contribution effort rather than how many tokens they stake. They are thus incentivized and recognized for the quality of their work, ideas, and alignment, driving participation and active engagement. Governance is allocated to the people most likely to care for the ecosystem’s long-term success—the contributors who have spent the most time working toward it.\n\n*II. Proof of Contribution vs Proof of Stake is the second in a [series of articles](/r/gnoland/blog:p/bgl-poc1) to dive deeply into the philosophy, vision, mechanics, and work involved in developing a new consensus mechanism for the next generation of smart contract systems. Look out for subsequent editions and additional Building Gno.land series, and let us know what you think! Got questions? Join the Gno.land [Discord](https://discord.com/invite/S8nKUqwkPn) or follow us on [Twitter/X](https://x.com/_gnoland)*\n\n\n",
    "2024-01-26T13:37:00Z",
    "christina",
    "gnoland,gnovm,tm2,PoC"
  ],
  "max_deposit": ""
}
#22 vm/execgno.land/r/gnoland/blog.ModAddPost(funding-program-23q4, Gno.land Funding and Grants Program - Quarterly Report: Q4 2023, The Gno.land Funding and Grants program identifies talented and passionate developers, researchers, and tinkerers to interact with Gno.land, enhance the platform's usability, and help build the core infrastructure and tooling needed for mainnet. After a strong start in Q3 2023 from our grantees, we awarded four additional grants in Q4. Let’s take a look at their progress and what’s coming up in Q1 2024. ## Q4 Funding Breakdown The total amount paid out in Q4 for grants was just under $317,000, spread out over the four grants: Teritori, Berty, Onbloc, and Dragos (Flippando). This work was split over essential stress-testing, debugging, and development on Gno core, and building social, gaming, and project management dApps to extend the platform’s functionality. Each grant recipient received milestones for deliverables and tracked their progress through regular public and internal syncs, hackerspace journey updates, blog posts, documentation, and developer calls. [![Q4 Chart](https://gnolang.github.io/blog/2024-02-07_funding-program-23q4/src/thumbs/chart.png)](https://gnolang.github.io/blog/2024-02-07_funding-program-23q4/src/chart.png) ## Berty Technologies (delivery May 2024) After successfully meeting their deliverables in Q3 and creating Gno Native Kit (formerly [GnoMobile](https://test3.gno.land/r/gnoland/blog:p/gnomobile)), Berty was awarded a second grant in Q4 to experiment with smart contract integrations around social media. Through the development of GnoSocial, the team has created a test bed for building decentralized social media-style apps and helped to stress test technical issues in Gno.land. In Q4, Berty delivered V1 of GnoSocial, which includes basic Twitter-like functionality. GnoSocial will be implemented on mobile using the Gno Native Kit framework, with a minimal desktop app and a read-only web version also in the scope. Aside from this work, Berty contributes to Gno core development, helping raise issues and merge PRs. You can follow their progress in hackerspace [issue 51](https://github.com/gnolang/hackerspace/issues/51). ## Teritori (delivery February 2024) After delivering the [moderation module](https://test3.gno.land/r/gnoland/blog:p/gnoland-moderation-dao-module) in Q3, Teritori received a second grant to carry out research and implement a conflict resolution module and an on-chain project management tool. Their work also continues on the escrow module build. As an active contributor, the Teritori team helps improve Gno core as well, getting more PRs merged, participating in regular meetings, and writing documentation. Read more about Teritori in their hackerspace [issue 7](https://github.com/gnolang/hackerspace/issues/7). ## Dragos (Flippando, delivered January 2024) To experiment with gaming in Gno.land, Dragos received a grant to port his on-chain memory game Flippando from Solidity. Flippando is a simple memory game—with a twist. Players uncover tiles and must find their matches to win the game. The result can be minted as an NFT and assembled to create larger, more complex NFTs and digital “paintings.” The beta version of [Flippando](https://gno.flippando.xyz/flip) is now live on the testnet, and you can read about his experiences in developing the game on the [Gno.land blog here](https://test3.gno.land/r/gnoland/blog:p/porting-flippando-gno) or visit [hackerspace issue 33](https://github.com/gnolang/hackerspace/issues/33). ## Onbloc (ongoing) After producing consistently awesome work and being our longest-standing contributor, Onbloc received a grant in Q4 2024 to continue iterating on Gno.land tooling, Adena, and to help build Gno.land core in preparation for mainnet release. Part of the scope was to support contract-to-contract interaction [issue 757](https://github.com/gnolang/gno/issues/757), lead a [multi-node testnet initiative](https://github.com/gnolang/hackerspace/tree/main/multinode-testnet), write pure Gno packages, and help debugging the GnoVM, among many other initiatives. Onbloc is also adding additional security to the Adena wallet and an “Airgap” feature, which you can read more about in [hackerspace issue 29](https://github.com/gnolang/hackerspace/issues/29). We’ll also release a detailed blog post soon, so stay tuned. ## Coming Up in Q1 2024 We’re looking forward to more exciting developments in the coming year as we focus on the road to mainnet. In Q1, grantees will mainly focus on debugging Gno core, developing smart contracts and libraries, building and porting dApps to Gno.land, and creating educational materials to help grow the community. Blockchain software and virtual reality technologies firm Varmeta are under evaluation for a grant to support account sessions and build the Gno.land Unity SDK to make blockchain more accessible to game developers (you can track their progress in [hackerspace issue 43](https://github.com/gnolang/hackerspace/issues/43)). We’re also finalizing a grant for a DAO tinkerer and a research report, as well as evaluating the extension of a second grant to Dragos to port his popular project management app to Gno.land. *We’re steadily building out the Gno.land platform and our ecosystem of grantees and contributors. Let us know if you want to join us by submitting an application at any time on the [Funding and Grants repository](https://github.com/gnolang/ecosystem-fund-grants). We’re always on the lookout for ideas to advance the platform.* , 2024-02-07T13:37:00Z, christina,michelle, gnoland,funding,grants)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "funding-program-23q4",
    "Gno.land Funding and Grants Program - Quarterly Report: Q4 2023",
    "\n\nThe Gno.land Funding and Grants program identifies talented and passionate developers, researchers, and tinkerers to interact with Gno.land, enhance the platform's usability, and help build the core infrastructure and tooling needed for mainnet. After a strong start in Q3 2023 from our grantees, we awarded four additional grants in Q4. Let’s take a look at their progress and what’s coming up in Q1 2024.\n\n## Q4 Funding Breakdown\n\nThe total amount paid out in Q4 for grants was just under $317,000, spread out over the four grants: Teritori, Berty, Onbloc, and Dragos (Flippando). This work was split over essential stress-testing, debugging, and development on Gno core, and building social, gaming, and project management dApps to extend the platform’s functionality. Each grant recipient received milestones for deliverables and tracked their progress through regular public and internal syncs, hackerspace journey updates, blog posts, documentation, and developer calls.\n\n[![Q4 Chart](https://gnolang.github.io/blog/2024-02-07_funding-program-23q4/src/thumbs/chart.png)](https://gnolang.github.io/blog/2024-02-07_funding-program-23q4/src/chart.png)\n\n## Berty Technologies (delivery May 2024)\n\nAfter successfully meeting their deliverables in Q3 and creating Gno Native Kit (formerly [GnoMobile](https://test3.gno.land/r/gnoland/blog:p/gnomobile)), Berty was awarded a second grant in Q4 to experiment with smart contract integrations around social media. Through the development of GnoSocial, the team has created a test bed for building decentralized social media-style apps and helped to stress test technical issues in Gno.land. \n\nIn Q4, Berty delivered V1 of GnoSocial, which includes basic Twitter-like functionality. GnoSocial will be implemented on mobile using the Gno Native Kit framework, with a minimal desktop app and a read-only web version also in the scope. Aside from this work, Berty contributes to Gno core development, helping raise issues and merge PRs. You can follow their progress in hackerspace [issue 51](https://github.com/gnolang/hackerspace/issues/51).\n\n## Teritori (delivery February 2024)\n\nAfter delivering the [moderation module](https://test3.gno.land/r/gnoland/blog:p/gnoland-moderation-dao-module) in Q3, Teritori received a second grant to carry out research and implement a conflict resolution module and an on-chain project management tool. Their work also continues on the escrow module build. As an active contributor, the Teritori team helps improve Gno core as well, getting more PRs merged, participating in regular meetings, and writing documentation. Read more about Teritori in their hackerspace [issue 7](https://github.com/gnolang/hackerspace/issues/7).\n\n## Dragos (Flippando, delivered January 2024)\n\nTo experiment with gaming in Gno.land, Dragos received a grant to port his on-chain memory game Flippando from Solidity. Flippando is a simple memory game—with a twist. Players uncover tiles and must find their matches to win the game. The result can be minted as an NFT and assembled to create larger, more complex NFTs and digital “paintings.” The beta version of [Flippando](https://gno.flippando.xyz/flip) is now live on the testnet, and you can read about his experiences in developing the game on the [Gno.land blog here](https://test3.gno.land/r/gnoland/blog:p/porting-flippando-gno) or visit [hackerspace issue 33](https://github.com/gnolang/hackerspace/issues/33).\n\n## Onbloc (ongoing)\n\nAfter producing consistently awesome work and being our longest-standing contributor, Onbloc received a grant in Q4 2024 to continue iterating on Gno.land tooling, Adena, and to help build Gno.land core in preparation for mainnet release. Part of the scope was to support contract-to-contract interaction [issue 757](https://github.com/gnolang/gno/issues/757), lead a [multi-node testnet initiative](https://github.com/gnolang/hackerspace/tree/main/multinode-testnet), write pure Gno packages, and help debugging the GnoVM, among many other initiatives. Onbloc is also adding additional security to the Adena wallet and an “Airgap” feature, which you can read more about in [hackerspace issue 29](https://github.com/gnolang/hackerspace/issues/29). We’ll also release a detailed blog post soon, so stay tuned.\n\n## Coming Up in Q1 2024\n\nWe’re looking forward to more exciting developments in the coming year as we focus on the road to mainnet. In Q1, grantees will mainly focus on debugging Gno core, developing smart contracts and libraries, building and porting dApps to Gno.land, and creating educational materials to help grow the community.\n\nBlockchain software and virtual reality technologies firm Varmeta are under evaluation for a grant to support account sessions and build the Gno.land Unity SDK to make blockchain more accessible to game developers (you can track their progress in [hackerspace issue 43](https://github.com/gnolang/hackerspace/issues/43)). We’re also finalizing a grant for a DAO tinkerer and a research report, as well as evaluating the extension of a second grant to Dragos to port his popular project management app to Gno.land. \n\n\n*We’re steadily building out the Gno.land platform and our ecosystem of grantees and contributors. Let us know if you want to join us by submitting an application at any time on the [Funding and Grants repository](https://github.com/gnolang/ecosystem-fund-grants). We’re always on the lookout for ideas to advance the platform.*\n\n\n",
    "2024-02-07T13:37:00Z",
    "christina,michelle",
    "gnoland,funding,grants"
  ],
  "max_deposit": ""
}
#23 vm/execgno.land/r/gnoland/blog.ModAddPost(wyg-dragos, Who You Gno – On the Record with Dragos Roua, Dragos Roua is a humble man. If you had the chance to read his article, [*5 Things I Learned While Porting Flippando From Solidity to Gno*](https://test3.gno.land/r/gnoland/blog:p/porting-flippando-gno), you’d have seen him refer to Flippando as his “tiny little game” and describe his “surprise,” over it winning the Polygon track of the Glitch hackathon, two subsequent hackathons in South Korea, and piquing the interest of the Gno.land team to offer him a grant. If ever there were an inverse of “the empty vessel makes the loudest sound,” Dragos would be it. At 54 years old, he’s lived an extraordinary life. Growing up in communist Romania, where scarcity was in abundance, and “everything was in short supply,” Dragos and his peers were “only allowed to learn one coding language,” and it happened to be called “Whatever.” So, when anyone asks in what languages he knows how to code, he always jokes that Romanians can code in “whatever.” Joking apart, his language skills are impressive, to say the least. ## Dragos Knows a Lot of Code “My first production-level code was written in Cobol on punch cards,” he says when he was just 16. He went on to learn Smalltalk, Lua, and “just for fun,” even a programming language called “Brainfuck.” He spent many years programming in web2, iOS, and Andriod, but over the last seven years (since entering the web3 space), has been consistently working in JavaScript, Swift, Solidity (which he learned by creating Flippando), Python, and Go. Despite this, Dragos confesses he still feels more at home within the Apple ecosystem. “I've been building a lot there,” he says. ## He Speaks Many Languages I ask if learning programming languages is similar to spoken languages. “Every programming language has vocabulary and grammar, which is a specific set of rules over that vocabulary, so it’s similar in that sense,” he says. And how many spoken languages does he know? “I can speak five Indo-European languages” (Romanian, English, French, Spanish, and Portuguese). “Five?” I gulp, wide-eyed, suddenly feeling inadequate for only speaking three. “Well, they all share about 70% of the vocabulary, and the grammar has almost the same rule set,” he shrugs, minimizing his accomplishment. He’s also learning two Asian languages with varying degrees of success. Korean, a language he understands “some 40%” of, Dragos admits, is a different ballgame. “I've been frustrated for nine months, every day trying to plug away because there's literally no similarity in vocabulary between any Indo-European language and Korean. Literally no word is the same, and the grammar is also very, very different.” He explains that learning a language like Korean means starting from zero and waiting for the brain to forge the neural paths. “It's quite difficult to do,” he concedes. ## A ‘Location-Independent’ Lifestyle I check out the backdrop behind him. He’s taking the interview from an elegant cafe in downtown Saigon with impressive dark wooden walls, large ceiling fans circling above, and a rich colonial atmosphere. “It’s such a posh place,” he smiles, “every day, there are groups of people taking pictures. It has an Indochina vibe.” I can’t help but wish I could teleport over and share a beer with Dragos as we discuss his remarkable life. “How long have you lived there?” I ask, “I don’t live in Saigon,” he replies, “I’m location-independent.” As I wonder if that’s a more elegant term for “digital nomad,” Dragos quickly explains the difference. Digital nomads typically have no fixed abode, he says, and tend to set up a base for a short period of time before moving on to the next place. Location-independent is someone who has a base but is independent of it and chooses to spend longer periods of time in various places. “So I became a loner,” he says, “and I’ve been location-independent for six years. I spent my first two and a half years in Spain, then from Spain, I moved to Portugal, which is my base right now, and I started to explore Asia last year.” ## A Love of the Open Road I point out how amazing his lifestyle sounds—and also how challenging it must be at times. Dragos loves the freedom that comes with being alone in a foreign land and the master of his destiny. He also thrives on learning from different people and cultures and discovering more about himself. “The more you travel, the more you learn. Where can you stay? Where can’t you stay? What is needed? You learn the logistics, and you become a much better administrator and manager of your life.” He admits to feeling lonely at times. Being location-independent isn’t for everyone, and certainly not if you don’t like being alone. “It's very difficult to be on the road because you don't have many friends. You don't have a fixed social circle. I'm in a place right now where I'm quite comfortable with myself. I can spend long periods of time on my own without needing close encounters. I have a very limited circle of friends, which I keep in touch with every month or so.” The cultural differences between Europe and Asia are something of a double-edged sword as well. Dragos likes Vietnam, where the people are friendly and welcoming and talk to him on the street out of curiosity or to practice their English. But he’s felt like quite an outsider in South Korea, where the culture of politeness and restraint makes it harder to establish meaningful friendships. ## Astrology, AI, and Other Mind-Blowing Stuff Talking about human connections inevitably leads to the increasing lack of them—and the topic of AI. I ask how he feels about the prospect of AGI and a potential replacement species. He shrugs and points out that most of what we hear about AI is marketing. He thinks that LLMs (Large Language Models) will hit a wall when they run out of good data to be trained on. He is a little concerned about the prospect of election rigging and AGI being harnessed in the political sphere by nation-states attempting to outmaneuver each other by predicting the next plausible move. “But this is a can of worms,” he says. “Actually, at the most fundamental level, there is no difference between AI and the process by which we generate ChatGPT or any other language model, and… hold your breath,” he pauses, “astrology. They both take a set of arbitrary features and a set of desired outcomes. After that, they just do a lot of computation, by trying to minimize a cost function between the predicted and expected outcome. That's all there is to it. You take features, add some parameters, trillions of parameters, you run a lot of computation, and in the end, you have the most plausible outcome. LLMs do this in hours/days/weeks of training, astrology did it slowly, over the course of a few thousand years.” I ask Dragos if he hadn’t been a programmer, would he have perhaps become an astrologer instead? “I actually studied astrology and used it for 18 years,” he replies. I try hard not to fall off my chair. Dragos explains that astrology plays a huge role in his life, and he consults it before making any major decision—such as moving countries or leaving jobs. “I consult it on every major decision and even daily life. So wherever I have to, I use it. When I sold one of my companies, when I decided to move abroad, when I travel, and stuff like that.” He gives the analogy of meteorology and says if he knows it’s going to rain, he’ll take an umbrella to have less friction and move around more easily. In the same way, he applies astrology to his life. This man is a Pandora’s box. What else does he do in his spare time besides traveling the world, consulting the Cosmos, and writing code for fun? Dragos likes playing pool, socializing, dining out, and dancing. “I was a tango dancer back in Romania. I had a tango school for a year.” At this point, I’m hardly surprised. ## Dragos on Gno.land I met Dragos last year in Seoul at a Gno.land event hosted with Onbloc during BUIDL Asia. That’s when he spoke to Manfred about Flippando and subsequently applied for a grant. We were still building the specs for the Grants Program at the time, and Dragos was our first grantee. Since then, he’s embarked on a whole new journey learning Gno and building the airplane as it flies, delivering Flippando last month and regularly helping the team with Gno.land core issues. Dragos has since submitted a second grant proposal to port his project management app to Gno. “It uses my life management framework, which I call “assess, decide, do.” The name of the project is *ZenTasktic*. There is already an app on iOS that I wrote,” he explains. You can read more about his grant proposal [here](https://github.com/gnolang/ecosystem-fund-grants/pull/11) and be sure to test out [Flippando](https://gno.flippando.xyz/flip) today. I apologize for taking so much of Dragos’ time, but he assures me it isn’t a problem. “I don’t work today, I'm not busy. I'm just enjoying my afternoon in this coffee shop.” As Dragos sips on the local tipple and drinks in the sights and sounds around him, I can’t help but admire his outlook on life and the choices he’s made—and I look forward to seeing what he's up to next and what else he builds with Gno., 2024-02-08T00:00:00Z, christina, whoyougno,flippando,community,interview)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "wyg-dragos",
    "Who You Gno – On the Record with Dragos Roua",
    "\n\nDragos Roua is a humble man. If you had the chance to read his article, [*5 Things I Learned While Porting Flippando From Solidity to Gno*](https://test3.gno.land/r/gnoland/blog:p/porting-flippando-gno), you’d have seen him refer to Flippando as his “tiny little game” and describe his “surprise,” over it winning the Polygon track of the Glitch hackathon, two subsequent hackathons in South Korea, and piquing the interest of the Gno.land team to offer him a grant. If ever there were an inverse of “the empty vessel makes the loudest sound,” Dragos would be it.\n\nAt 54 years old, he’s lived an extraordinary life. Growing up in communist Romania, where scarcity was in abundance, and “everything was in short supply,” Dragos and his peers were “only allowed to learn one coding language,” and it happened to be called “Whatever.” So, when anyone asks in what languages he knows how to code, he always jokes that Romanians can code in “whatever.” Joking apart, his language skills are impressive, to say the least.\n\n## Dragos Knows a Lot of Code\n\n“My first production-level code was written in Cobol on punch cards,” he says when he was just 16. He went on to learn Smalltalk, Lua, and “just for fun,” even a programming language called “Brainfuck.” He spent many years programming in web2, iOS, and Andriod, but over the last seven years (since entering the web3 space), has been consistently working in JavaScript, Swift, Solidity (which he learned by creating Flippando), Python, and Go. Despite this, Dragos confesses he still feels more at home within the Apple ecosystem. “I've been building a lot there,” he says.\n\n## He Speaks Many Languages\nI ask if learning programming languages is similar to spoken languages. “Every programming language has vocabulary and grammar, which is a specific set of rules over that vocabulary, so it’s similar in that sense,” he says. And how many spoken languages does he know? “I can speak five Indo-European languages” (Romanian, English, French, Spanish, and Portuguese). “Five?” I gulp, wide-eyed, suddenly feeling inadequate for only speaking three. “Well, they all share about 70% of the vocabulary, and the grammar has almost the same rule set,” he shrugs, minimizing his accomplishment.\n\nHe’s also learning two Asian languages with varying degrees of success. Korean, a language he understands “some 40%” of, Dragos admits, is a different ballgame. “I've been frustrated for nine months, every day trying to plug away because there's literally no similarity in vocabulary between any Indo-European language and Korean. Literally no word is the same, and the grammar is also very, very different.” He explains that learning a language like Korean means starting from zero and waiting for the brain to forge the neural paths. “It's quite difficult to do,” he concedes.\n\n## A ‘Location-Independent’ Lifestyle\nI check out the backdrop behind him. He’s taking the interview from an elegant cafe in downtown Saigon with impressive dark wooden walls, large ceiling fans circling above, and a rich colonial atmosphere. “It’s such a posh place,” he smiles, “every day, there are groups of people taking pictures. It has an Indochina vibe.” I can’t help but wish I could teleport over and share a beer with Dragos as we discuss his remarkable life. “How long have you lived there?” I ask, “I don’t live in Saigon,” he replies, “I’m location-independent.”\n\nAs I wonder if that’s a more elegant term for “digital nomad,” Dragos quickly explains the difference. Digital nomads typically have no fixed abode, he says, and tend to set up a base for a short period of time before moving on to the next place. Location-independent is someone who has a base but is independent of it and chooses to spend longer periods of time in various places. “So I became a loner,” he says, “and I’ve been location-independent for six years. I spent my first two and a half years in Spain, then from Spain, I moved to Portugal, which is my base right now, and I started to explore Asia last year.”\n\n## A Love of the Open Road\nI point out how amazing his lifestyle sounds—and also how challenging it must be at times. Dragos loves the freedom that comes with being alone in a foreign land and the master of his destiny. He also thrives on learning from different people and cultures and discovering more about himself. “The more you travel, the more you learn. Where can you stay? Where can’t you stay? What is needed? You learn the logistics, and you become a much better administrator and manager of your life.”\n\nHe admits to feeling lonely at times. Being location-independent isn’t for everyone, and certainly not if you don’t like being alone. “It's very difficult to be on the road because you don't have many friends. You don't have a fixed social circle. I'm in a place right now where I'm quite comfortable with myself. I can spend long periods of time on my own without needing close encounters. I have a very limited circle of friends, which I keep in touch with every month or so.”\n\nThe cultural differences between Europe and Asia are something of a double-edged sword as well. Dragos likes Vietnam, where the people are friendly and welcoming and talk to him on the street out of curiosity or to practice their English. But he’s felt like quite an outsider in South Korea, where the culture of politeness and restraint makes it harder to establish meaningful friendships.\n\n## Astrology, AI, and Other Mind-Blowing Stuff\nTalking about human connections inevitably leads to the increasing lack of them—and the topic of AI. I ask how he feels about the prospect of AGI and a potential replacement species. He shrugs and points out that most of what we hear about AI is marketing. He thinks that LLMs (Large Language Models) will hit a wall when they run out of good data to be trained on. He is a little concerned about the prospect of election rigging and AGI being harnessed in the political sphere by nation-states attempting to outmaneuver each other by predicting the next plausible move. “But this is a can of worms,” he says.\n\n“Actually, at the most fundamental level, there is no difference between AI and the process by which we generate ChatGPT or any other language model, and… hold your breath,” he pauses, “astrology. They both take a set of arbitrary features and a set of desired outcomes. After that, they just do a lot of computation, by trying to minimize a cost function between the predicted and expected outcome. That's all there is to it. You take features, add some parameters, trillions of parameters, you run a lot of computation, and in the end, you have the most plausible outcome. LLMs do this in hours/days/weeks of training, astrology did it slowly, over the course of a few thousand years.”\nI ask Dragos if he hadn’t been a programmer, would he have perhaps become an astrologer instead? “I actually studied astrology and used it for 18 years,” he replies.\n\nI try hard not to fall off my chair. Dragos explains that astrology plays a huge role in his life, and he consults it before making any major decision—such as moving countries or leaving jobs. “I consult it on every major decision and even daily life. So wherever I have to, I use it. When I sold one of my companies, when I decided to move abroad, when I travel, and stuff like that.” He gives the analogy of meteorology and says if he knows it’s going to rain, he’ll take an umbrella to have less friction and move around more easily. In the same way, he applies astrology to his life. This man is a Pandora’s box.\n\nWhat else does he do in his spare time besides traveling the world, consulting the Cosmos, and writing code for fun? Dragos likes playing pool, socializing, dining out, and dancing. “I was a tango dancer back in Romania. I had a tango school for a year.” At this point, I’m hardly surprised.\n\n## Dragos on Gno.land\nI met Dragos last year in Seoul at a Gno.land event hosted with Onbloc during BUIDL Asia. That’s when he spoke to Manfred about Flippando and subsequently applied for a grant. We were still building the specs for the Grants Program at the time, and Dragos was our first grantee. Since then, he’s embarked on a whole new journey learning Gno and building the airplane as it flies, delivering Flippando last month and regularly helping the team with Gno.land core issues.\n\nDragos has since submitted a second grant proposal to port his project management app to Gno. “It uses my life management framework, which I call “assess, decide, do.” The name of the project is *ZenTasktic*. There is already an app on iOS that I wrote,” he explains. You can read more about his grant proposal [here](https://github.com/gnolang/ecosystem-fund-grants/pull/11) and be sure to test out [Flippando](https://gno.flippando.xyz/flip) today.\n\nI apologize for taking so much of Dragos’ time, but he assures me it isn’t a problem. “I don’t work today, I'm not busy. I'm just enjoying my afternoon in this coffee shop.” As Dragos sips on the local tipple and drinks in the sights and sounds around him, I can’t help but admire his outlook on life and the choices he’s made—and I look forward to seeing what he's up to next and what else he builds with Gno.",
    "2024-02-08T00:00:00Z",
    "christina",
    "whoyougno,flippando,community,interview"
  ],
  "max_deposit": ""
}
#24 vm/execgno.land/r/gnoland/blog.ModAddPost(gno-tokyo, Tokyo Meetup Recap: Getting to Gno Gno.land, [![banner](https://gnolang.github.io/blog/2024-04-15_gno-tokyo/src/thumbs/Banner.png)](https://gnolang.github.io/blog/2024-04-15_gno-tokyo/src/Banner.png) This year, we're going global, connecting with various local communities in person to introduce them to Gno.land and the community of Gnomes working on the project. Last week, we hosted the first-ever Gno.land community meetup in Tokyo, Japan. Held at the [Crypto Lounge GOX](https://cryptoloungegox.com/) in the heart of Shinjuku City, the event drew over 20 attendees from diverse backgrounds spanning Web3, development, traditional business, and fintech. This meetup marked the second in a series of in-person community events we're planning for this year, a followup to our recent local meetup in Korea with OnBloc [Go to Gno](https://medium.com/onbloc/go-to-gno-recap-intro-to-the-gno-stack-with-memeland-284a43d7f620), which focused on introducing Gno.land to Go developers in Seoul. These regional meetups are intentionally designed to be small and intimate, fostering personal relationships and building a community of trusted Gnomes that can influence the future of Gno.land. The content of these gatherings can range from introducing Gno.land and its unique concepts to guiding developers on how to kick start their journey with Gno. For this event in Tokyo, we covered three main topics: ・What is Gno.land: an introduction to the Gno language and the platform, ・How the Gno.land ecosystem is developing: an overview of our contributors and applications, and how people can get involved, stay connected, and join the Gnome community, ・The future of Gno.land: what's coming up this year and ideas for the future. ## Introduction to Gno.land [![leon-presentation](https://gnolang.github.io/blog/2024-04-15_gno-tokyo/src/thumbs/leon-poc.png)](https://gnolang.github.io/blog/2024-04-15_gno-tokyo/src/leon-poc.png) Leon Hudak, Gno.land's Developer Relations Engineer, was the on-site Gnome representative and kicked things off by introducing attendees to the project's unique features: ・Fully Open-Source Smart-Contracting Platform: Highlighting Gno.land's commitment to transparency and accessibility, ・Custom Smart-Contracting Language (Gno): Showcasing the innovative language tailored for future blockchain development, ・New Consensus Protocol, Proof of Contribution: Exploring the cutting-edge protocol under development, emphasizing its role in supporting open-source, and on-chain development. After introducing the high-level facets of Gno.land, the presentation detailed the specifics of each one, and how it is being designed to address problems in both open-source development and blockchain ecosystems. Specifically, Gno.land is addressing a large issue in regard to open-source development: many projects and businesses rely on open-source technology created by developers who often volunteer their skills and time without receiving anything in return for their efforts. Proof of Contribution is aimed at tackling this issue by being a foundation for a system which empowers contributors and rewards them fairly for their work, allowing them to thrive in a sustainable ecosystem of value creation. ## Our Ecosystem of Gnome Contributors We spotlighted the diverse projects and contributors bolstering the Gno.land ecosystem, ranging from the [Adena Wallet](https://adena.app) and [Gnoscan](https://gnoscan.io) to innovative applications like Flippando. Additionally, we introduced attendees to the Gno.land [Grants & Fund program](https://github.com/gnolang/ecosystem-fund-grants) and the Game of Realms initiative, demonstrating various avenues for builders to engage and contribute to the ecosystem's growth. ## The Future of Gno.land In conclusion, we guided attendees through the development and aspirations of Gno.land, highlighting its growth from its origins to its present challenges with Test4, Mainnet, and beyond. We discussed the current emphasis on engineering and development to build a solid base the Gnomes of the future, underlining the importance of Test4 — an advanced experimental testnet that precedes the launch of Mainnet — and what the successful implementation of Test4 signifies for our ecosystem. We opened up the floor for questions and answers, and the topic of Proof of Contribution sparked interest to understand its economic aspect and governance architecture, as well as its comparative analysis with other popular consensus mechanisms. ## Gnomes Go Global [![leon-presentation](https://gnolang.github.io/blog/2024-04-15_gno-tokyo/src/thumbs/merch.jpg)](https://gnolang.github.io/blog/2024-04-15_gno-tokyo/src/merch.jpg) As Gno.land advances on its Road to Mainnet, we will be hosting more local meetups, so you'll want to stay updated on upcoming Gno.land events by visiting our [Upcoming Events](https://gno.land/events) page and following us on [Twitter](https://twitter.com/_gnoland). , 2024-04-15T00:00:00Z, leohhhn,michelleelen, meetup,tokyo,community)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "gno-tokyo",
    "Tokyo Meetup Recap: Getting to Gno Gno.land",
    "\n\n\n[![banner](https://gnolang.github.io/blog/2024-04-15_gno-tokyo/src/thumbs/Banner.png)](https://gnolang.github.io/blog/2024-04-15_gno-tokyo/src/Banner.png)\n\n\nThis year, we're going global, connecting with various local communities in \nperson to introduce them to Gno.land and the community of Gnomes working on the\nproject. Last week, we hosted the first-ever Gno.land community meetup in Tokyo, \nJapan. Held at the [Crypto Lounge GOX](https://cryptoloungegox.com/) in the heart\nof Shinjuku City, the event drew over 20 attendees from diverse backgrounds spanning \nWeb3, development, traditional business, and fintech. This meetup marked the second\nin a series of in-person community events we're planning for this year, a followup \nto our recent local meetup in Korea with OnBloc\n[Go to Gno](https://medium.com/onbloc/go-to-gno-recap-intro-to-the-gno-stack-with-memeland-284a43d7f620),\nwhich focused on introducing Gno.land to Go developers in Seoul.\n\nThese regional meetups are intentionally designed to be small and intimate, \nfostering personal relationships and building a community of trusted Gnomes \nthat can influence the future of Gno.land. The content of these gatherings can \nrange from introducing Gno.land and its unique concepts to guiding developers on \nhow to kick start their journey with Gno. For this event in Tokyo, we covered \nthree main topics:\n\n・What is Gno.land: an introduction to the Gno language and the platform,\n\n・How the Gno.land ecosystem is developing: an overview of our contributors and applications, and how people can get involved, stay connected, and join the Gnome community,\n\n・The future of Gno.land: what's coming up this year and ideas for the future.\n\n## Introduction to Gno.land\n[![leon-presentation](https://gnolang.github.io/blog/2024-04-15_gno-tokyo/src/thumbs/leon-poc.png)](https://gnolang.github.io/blog/2024-04-15_gno-tokyo/src/leon-poc.png)\n\nLeon Hudak, Gno.land's Developer Relations Engineer, was the on-site Gnome\nrepresentative and kicked things off by introducing attendees to the project's \nunique features:\n\n・Fully Open-Source Smart-Contracting Platform: Highlighting Gno.land's commitment to transparency and accessibility,\n\n・Custom Smart-Contracting Language (Gno): Showcasing the innovative language tailored for future blockchain development, \n\n・New Consensus Protocol, Proof of Contribution: Exploring the cutting-edge protocol under development, emphasizing its role in supporting open-source, and on-chain development.\n\nAfter introducing the high-level facets of Gno.land, the presentation\ndetailed the specifics of each one, and how it is being designed to address \nproblems in both open-source development and blockchain ecosystems. \n\nSpecifically, Gno.land is addressing a large issue in regard to open-source\ndevelopment: many projects and businesses rely on open-source technology created \nby developers who often volunteer their skills and time without receiving anything\nin return for their efforts. Proof of Contribution is aimed at tackling this\nissue by being a foundation for a system which empowers contributors and rewards \nthem fairly for their work, allowing them to thrive in a sustainable ecosystem of\nvalue creation.\n\n## Our Ecosystem of Gnome Contributors\nWe spotlighted the diverse projects and contributors bolstering the Gno.land \necosystem, ranging from the [Adena Wallet](https://adena.app) and\n[Gnoscan](https://gnoscan.io) to innovative applications like Flippando. \nAdditionally, we introduced attendees to the Gno.land\n[Grants & Fund program](https://github.com/gnolang/ecosystem-fund-grants)\nand the Game of Realms initiative, demonstrating various avenues for builders to\nengage and contribute to the ecosystem's growth.\n\n## The Future of Gno.land\nIn conclusion, we guided attendees through the development and aspirations of \nGno.land, highlighting its growth from its origins to its present challenges \nwith Test4, Mainnet, and beyond. We discussed the current emphasis \non engineering and development to build a solid base the Gnomes of the future,\nunderlining the importance of Test4 — an advanced experimental testnet that \nprecedes the launch of Mainnet — and what the successful implementation of Test4 \nsignifies for our ecosystem.\n\nWe opened up the floor for questions and answers, and the topic of Proof of \nContribution sparked interest to understand its economic aspect and governance\narchitecture, as well as its comparative analysis with other popular consensus \nmechanisms.\n\n## Gnomes Go Global\n[![leon-presentation](https://gnolang.github.io/blog/2024-04-15_gno-tokyo/src/thumbs/merch.jpg)](https://gnolang.github.io/blog/2024-04-15_gno-tokyo/src/merch.jpg)\n\nAs Gno.land advances on its Road to Mainnet, we will be hosting more local\nmeetups, so you'll want to stay updated on upcoming Gno.land events by visiting \nour [Upcoming Events](https://gno.land/events) page and following us on \n[Twitter](https://twitter.com/_gnoland).\n",
    "2024-04-15T00:00:00Z",
    "leohhhn,michelleelen",
    "meetup,tokyo,community"
  ],
  "max_deposit": ""
}
#25 vm/execgno.land/r/gnoland/blog.ModAddPost(monthly-dev-8, The More You Gno 8: Portal Loop, Test4 and More, Welcome to the 8th installment of The More You Gno. Because we have a lot of great updates, we're experimenting with a different article format that's cleaner and more to the point. If you want to dive deeper, we have the weekly engineering [updates](https://github.com/gnolang/meetings/issues/37) and video [recordings](https://www.youtube.com/watch?v=9ch7MhKNBmw&list=PL7nP7r1QiDktMCdw1ydQo2crM3y6Zk7E4) available. ## Gno Core Updates This edition is packed with great updates, but the most important ones are the launch of the Portal Loop testnet, and the announcement of the next milestone on the road to mainnet - Test4. ### Test4 Milestone is Live The next major milestone on our road to mainnet is Test4. This testnet will have several important improvements: - Multinode capability - Rolling release of testnet binaries - No resets The initial validator set will be comprised of the most prolific contributors and All-in-Bits teams. We're aiming to launch Test4 in July, and with 32% of the milestone complete, our confidence in the launch date is high. The entire milestone can be seen [here](https://github.com/gnolang/gno/milestone/4). ### Portal Loop is Live Portal Loop is an always-up-to-date staging testnet that allows for using the latest version of Gno, Gno.land, and TM2. It can run the latest code from the master branch on the Gno monorepo, while preserving most/all the previous the transaction data. Find out more about the Portal Loop in the [documentation](https://docs.gno.land/concepts/portal-loop/). We've also enabled the [gno.land faucet](https://gno.land/faucet) to receive testnet funds for Portal Loop. ### Gno Playground now supports multiple networks With Portal Loop live and Test4 coming, it made more and more sense to be able to use Gno Playground on other networks. That's why we've added support for not just Test3 and Portal Loop, but also any custom network you might want to spin up. The network selection dropdown is in [Gno Playground](https://play.gno.land/) at the top right. You'll also find there an option to add your own custom network. ### Changelog We've also done a ton of other work to make everyone's lives easier. - Docs are now searchable on [docs.gno.land](http://docs.gno.land/). No more manual searching! - With the help of Onbloc, our tx-indexer [just went supersonic with GraphQL](https://github.com/gnolang/tx-indexer/pull/20). Users can now have fine grained filtered GraphQL queries, which are curiously quick. This is a quantum leap in data serving for the indexer. - [Added support for `gnoland secrets`](https://github.com/gnolang/gno/pull/1593), part of our [larger effort](https://github.com/gnolang/gno/issues/1836) to overhaul the way Gno chains / nodes are initialized. Now users can directly manage, display and verify their node secrets, without having to rely on manual CLI magic. - Finally merged in [support for a non-reflect JSON parser package](https://github.com/gnolang/gno/pull/1415). Rejoice, JSON support is now provided out of the box with an easy to use Gno package, thanks to the Onbloc team. - Merged in support for [int256](https://github.com/gnolang/gno/pull/1848) and [uint256](https://github.com/gnolang/gno/pull/1778) packages. Since Gno does not support `big.Int` yet, these packages are a nice and much-needed replacement for large number logic. - [Implemented shadowing rules](https://github.com/gnolang/gno/pull/1793) in the GnoVM. This VM fix prevents packages shadowing global-level identifiers. - `gnodev` now [automatically reloads the gnoweb page](https://github.com/gnolang/gno/pull/1457) whenever you update the realm's code. The goal of gnodev is to make realm developers' life easier. This change further reaches that goal, creating a feedback loop for development similar to that experienced by front-end developers (ie `nodemon`). - Plethora of quality of life fixes and improvements, including [docs updates](https://github.com/gnolang/gno/pull/1741), [command fixes](https://github.com/gnolang/gno/pull/1716) and [conformity to the standard go tooling suite](https://github.com/gnolang/gno/pull/1407). Updates like these keep the lights running and the UX smooth for end-users. - [Merged in the `cford32` package](https://github.com/gnolang/gno/pull/1572) to the Gno package examples. Packages like these help the community and implementation partners in utilizing Gno effectively. - Cleaned up and exposed an [endpoint for querying transaction results](https://github.com/gnolang/gno/pull/1546) directly from the node. Even though our transaction indexer (standalone tool) offers many bells and whistles, having the ability to fetch transaction results on the node was the final missing piece in keeping the TM2 RPC minimal, but functional. - Gnodev now [supports account premines](https://github.com/gnolang/gno/pull/1938), soon to support transaction predeploys. It is also now installed out of the box with make install. This means that you can now specify an account balance to be premined when using gnodev, no clunky balance file changes required! - Added support for [WS clients, updated JSON-RPC batch processing](https://github.com/gnolang/gno/pull/1498). Switching all of our tools, and implementation partner tools from the HTTP client to the WS client will be a massive boost in terms of network overhead. - We've updated the `gnoland` (node) command [to include](https://github.com/gnolang/gno/pull/1954) the `genesis` management suite. As part of our bigger effort to overhaul the chain initialization and management flow, this was a necessary step in achieving a 2 step setup (`gnoland init` and `gnoland start`). - Updated the deployment flows (releases) for the vast majority of our tools (faucet, indexer, supernova, main gno binaries) using go-releaser. Now the core team can tag specific tool / repo versions and have a prepared release, with all release binaries ready to go. - The gnoland node [now supports telemetry](https://github.com/gnolang/gno/pull/1762), and exposes metrics out of the box. This allows the node to be tracked in time-series databases like Prometheus, and better record the health and performance of the node. ## Ecosystem Updates ### Onbloc * Adena wallet [v1.10.0](https://github.com/onbloc/adena-wallet/releases/tag/v1.10.0) released * Adena [Security Evaluation Report](https://github.com/adr-sk/adena-extension/blob/main/audits/Adena%20Security%20Evaluation%20Feb%202024.pdf) published by the AiB security team * Published a [short video guide](https://www.youtube.com/watch?v=TfSzp1_MaOI) on how to broadcast and sign a transaction using the AirGap Account. ### Teritori - Linked the GitHub account with on-chain address. The realm allows a bot to add a public key. The bot can sign the address and GitHub ID account. This functionality permits everyone to link their account on the realm seamlessly. - Social feed, DAO SDK, and Moderation DAO deployed on portal loop: https://app.teritori.com/feed?network=gno-portal ### Dragos - Flippando - Public faucet set up - Fixed and slightly improved the multi-chain dashboard at https://flippando.xyz - Zentasktic, an on-chain project management application - There is the Zentasktic core first complete implementation. A package containing an unopinionated implementation of the Assess-Decide-Do workflow. - Docs and code: https://github.com/irreverentsimplicity/zentasktic-core ### Berty - In order to avoid the misconception that it's an official social dapp, GnoSocial was renamed to [dSocial](https://github.com/gnolang/dsocial) - Demo video of the customer journey, showcasing the updated social app UI https://www.loom.com/share/621f151459b040b0a2e6a22adf96b371 - Building out a series of Gno Native Kit tutorials ([Episodes one and two](https://www.youtube.com/watch?v=N1HLyQDHGQ0&list=PL7nP7r1QiDktseW7786wrp23ipBZFLPb6&index=2)) ### Student Contributor Program We've started a [program](https://github.com/gnolang/student-contributors-program) to work with student cohorts directly through their universities. The first university cohort is based in Roeun with four students currently particpating in this initiative. You can see some of the work in our hackerspace [repo](https://github.com/gnolang/hackerspace/issues/59). - Malek was cited for the 2 PRs ([ufmt multibyte](https://github.com/gnolang/gno/pull/1889) & and [todolist example V0](https://github.com/gnolang/gno/pull/1811)). - Malek also finished V0 of GnoFundMe, a crowdfunding example. - Theo made a [pull request](https://github.com/gnolang/memeland/pull/21) on issue#11 of the memeland repo. ### New Content We're regularly building out written and video tutorials and content. We recently released the '[How to build a realm using Gnodev](https://www.youtube.com/watch?v=Hp4aeRsPt3g)' video tutorial that starts with the basics of initializing a gno.mod file, creating a Gno realm, and implementing simple functions for effective realm visualization. ## Events and Meetups ### Past events #### Go to Gno Korea (March 23) Together with Onbloc we hosted the Go to Gno workshop. The 8-hour session included a lecture, a builder challenge, and a networking event. 25+ developers from dev communities, Web3 startups, and the Cosmosnauts in Korea have attended the event for a hands-on experience of writing a simple app in Gno. Check out the [Onbloc's recap](https://medium.com/onbloc/go-to-gno-recap-intro-to-the-gno-stack-with-memeland-284a43d7f620) for more details and pictures. #### Gno.land Tokyo meetup (April 11) Intro to Gno session in Tokyo was held in front of 20+ developers and web3 enthusiasts. They got to hear about Gno.land, how it's developing as an ecosystem, our plans for the future, and how they could get involved. That's the TL;DR, full recap is on [our blog](https://gno.land/r/gnoland/blog:p/gno-tokyo). ### Upcoming events We've got three major events coming up - **GopherCon EU** / Berlin / June 17th - 20th - **GopherCon US** / Chicago / July 7th - 10th - **Nebular Summit** / Brussels / July 12th/13th If you plan to attend any of these events, find us at our booth or on the hallway track, and let's talk!, 2024-04-26T00:00:00Z, Kouteki, gnoland,ecosystem,updates,gnovm,tm2)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "monthly-dev-8",
    "The More You Gno 8: Portal Loop, Test4 and More",
    "\n\nWelcome to the 8th installment of The More You Gno. Because we have a lot of great updates, we're experimenting with a different article format that's cleaner and more to the point.\n\nIf you want to dive deeper, we have the weekly engineering [updates](https://github.com/gnolang/meetings/issues/37) and video [recordings](https://www.youtube.com/watch?v=9ch7MhKNBmw&list=PL7nP7r1QiDktMCdw1ydQo2crM3y6Zk7E4) available. \n\n## Gno Core Updates\n\nThis edition is packed with great updates, but the most important ones are the launch of the Portal Loop testnet, and the announcement of the next milestone on the road to mainnet - Test4.\n\n### Test4 Milestone is Live\n\nThe next major milestone on our road to mainnet is Test4. This testnet will have several important improvements:\n\n- Multinode capability\n- Rolling release of testnet binaries\n- No resets\n\nThe initial validator set will be comprised of the most prolific contributors and All-in-Bits teams. We're aiming to launch Test4 in July, and with 32% of the milestone complete, our confidence in the launch date is high.\n\nThe entire milestone can be seen [here](https://github.com/gnolang/gno/milestone/4).\n\n### Portal Loop is Live\n\nPortal Loop is an always-up-to-date staging testnet that allows for using the latest version of Gno, Gno.land, and TM2. It can run the latest code from the master branch on the Gno monorepo, while preserving most/all the previous the transaction data. \n\nFind out more about the Portal Loop in the [documentation](https://docs.gno.land/concepts/portal-loop/).\n\nWe've also enabled the [gno.land faucet](https://gno.land/faucet) to receive testnet funds for Portal Loop.\n\n### Gno Playground now supports multiple networks\n\nWith Portal Loop live and Test4 coming, it made more and more sense to be able to use Gno Playground on other networks. That's why we've added support for not just Test3 and Portal Loop, but also any custom network you might want to spin up.\n\nThe network selection dropdown is in [Gno Playground](https://play.gno.land/) at the top right. You'll also find there an option to add your own custom network. \n\n### Changelog\n\nWe've also done a ton of other work to make everyone's lives easier.\n\n- Docs are now searchable on [docs.gno.land](http://docs.gno.land/). No more manual searching!\n- With the help of Onbloc, our tx-indexer [just went supersonic with GraphQL](https://github.com/gnolang/tx-indexer/pull/20). Users can now have fine grained filtered GraphQL queries, which are curiously quick. This is a quantum leap in data serving for the indexer.\n- [Added support for `gnoland secrets`](https://github.com/gnolang/gno/pull/1593), part of our [larger effort](https://github.com/gnolang/gno/issues/1836) to overhaul the way Gno chains / nodes are initialized. Now users can directly manage, display and verify their node secrets, without having to rely on manual CLI magic.\n- Finally merged in [support for a non-reflect JSON parser package](https://github.com/gnolang/gno/pull/1415). Rejoice, JSON support is now provided out of the box with an easy to use Gno package, thanks to the Onbloc team.\n- Merged in support for [int256](https://github.com/gnolang/gno/pull/1848) and [uint256](https://github.com/gnolang/gno/pull/1778) packages. Since Gno does not support `big.Int` yet, these packages are a nice and much-needed replacement for large number logic.\n- [Implemented shadowing rules](https://github.com/gnolang/gno/pull/1793) in the GnoVM. This VM fix prevents packages shadowing global-level identifiers.\n- `gnodev` now [automatically reloads the gnoweb page](https://github.com/gnolang/gno/pull/1457) whenever you update the realm's code. The goal of gnodev is to make realm developers' life easier. This change further reaches that goal, creating a feedback loop for development similar to that experienced by front-end developers (ie `nodemon`).\n- Plethora of quality of life fixes and improvements, including [docs updates](https://github.com/gnolang/gno/pull/1741), [command fixes](https://github.com/gnolang/gno/pull/1716) and [conformity to the standard go tooling suite](https://github.com/gnolang/gno/pull/1407). Updates like these keep the lights running and the UX smooth for end-users.\n- [Merged in the `cford32` package](https://github.com/gnolang/gno/pull/1572) to the Gno package examples. Packages like these help the community and implementation partners in utilizing Gno effectively.\n- Cleaned up and exposed an [endpoint for querying transaction results](https://github.com/gnolang/gno/pull/1546) directly from the node. Even though our transaction indexer (standalone tool) offers many bells and whistles, having the ability to fetch transaction results on the node was the final missing piece in keeping the TM2 RPC minimal, but functional.\n- Gnodev now [supports account premines](https://github.com/gnolang/gno/pull/1938), soon to support transaction predeploys. It is also now installed out of the box with make install. This means that you can now specify an account balance to be premined when using gnodev, no clunky balance file changes required!\n- Added support for [WS clients, updated JSON-RPC batch processing](https://github.com/gnolang/gno/pull/1498). Switching all of our tools, and implementation partner tools from the HTTP client to the WS client will be a massive boost in terms of network overhead.\n- We've updated the `gnoland` (node) command [to include](https://github.com/gnolang/gno/pull/1954) the `genesis` management suite. As part of our bigger effort to overhaul the chain initialization and management flow, this was a necessary step in achieving a 2 step setup (`gnoland init` and `gnoland start`).\n- Updated the deployment flows (releases) for the vast majority of our tools (faucet, indexer, supernova, main gno binaries) using go-releaser. Now the core team can tag specific tool / repo versions and have a prepared release, with all release binaries ready to go.\n- The gnoland node [now supports telemetry](https://github.com/gnolang/gno/pull/1762), and exposes metrics out of the box. This allows the node to be tracked in time-series databases like Prometheus, and better record the health and performance of the node.\n\n## Ecosystem Updates\n\n### Onbloc\n\n* Adena wallet [v1.10.0](https://github.com/onbloc/adena-wallet/releases/tag/v1.10.0) released \n* Adena [Security Evaluation Report](https://github.com/adr-sk/adena-extension/blob/main/audits/Adena%20Security%20Evaluation%20Feb%202024.pdf) published by the AiB security team \n* Published a [short video guide](https://www.youtube.com/watch?v=TfSzp1_MaOI) on how to broadcast and sign a transaction using the AirGap Account.\n\n### Teritori\n\n- Linked the GitHub account with on-chain address. The realm allows a bot to add a public key. The bot can sign the address and GitHub ID account. This functionality permits everyone to link their account on the realm seamlessly.\n- Social feed, DAO SDK, and Moderation DAO deployed on portal loop: https://app.teritori.com/feed?network=gno-portal\n\n### Dragos\n\n- Flippando\n    - Public faucet set up\n    - Fixed and slightly improved the multi-chain dashboard at https://flippando.xyz\n- Zentasktic, an on-chain project management application \n    - There is the Zentasktic core first complete implementation. A package containing an unopinionated implementation of the Assess-Decide-Do workflow. \n    - Docs and code: https://github.com/irreverentsimplicity/zentasktic-core\n\n### Berty\n\n- In order to avoid the misconception that it's an official social dapp, GnoSocial was renamed to [dSocial](https://github.com/gnolang/dsocial)\n- Demo video of the customer journey, showcasing the updated social app UI https://www.loom.com/share/621f151459b040b0a2e6a22adf96b371\n- Building out a series of Gno Native Kit tutorials ([Episodes one and two](https://www.youtube.com/watch?v=N1HLyQDHGQ0&list=PL7nP7r1QiDktseW7786wrp23ipBZFLPb6&index=2))\n\n### Student Contributor Program\n\nWe've started a [program](https://github.com/gnolang/student-contributors-program) to work with student cohorts directly through their universities. The first university cohort is based in Roeun with four students currently particpating in this initiative. You can see some of the work in our hackerspace [repo](https://github.com/gnolang/hackerspace/issues/59). \n\n- Malek was cited for the 2 PRs ([ufmt multibyte](https://github.com/gnolang/gno/pull/1889) & and [todolist example V0](https://github.com/gnolang/gno/pull/1811)).\n- Malek also finished V0 of GnoFundMe, a crowdfunding example.\n- Theo made a [pull request](https://github.com/gnolang/memeland/pull/21) on issue#11 of the memeland repo. \n\n### New Content\n\nWe're regularly building out written and video tutorials and content. We recently released the '[How to build a realm using Gnodev](https://www.youtube.com/watch?v=Hp4aeRsPt3g)' video tutorial that starts with the basics of initializing a gno.mod file, creating a Gno realm, and implementing simple functions for effective realm visualization. \n\n## Events and Meetups\n\n### Past events\n\n#### Go to Gno Korea (March 23)\n\nTogether with Onbloc we hosted the Go to Gno workshop. The 8-hour session included a lecture, a builder challenge, and a networking event. 25+ developers from dev communities, Web3 startups, and the Cosmosnauts in Korea have attended the event for a hands-on experience of writing a simple app in Gno. Check out the [Onbloc's recap](https://medium.com/onbloc/go-to-gno-recap-intro-to-the-gno-stack-with-memeland-284a43d7f620) for more details and pictures.\n\n#### Gno.land Tokyo meetup (April 11)\n\nIntro to Gno session in Tokyo was held in front of 20+ developers and web3 enthusiasts. They got to hear about Gno.land, how it's developing as an ecosystem, our plans for the future, and how they could get involved. That's the TL;DR, full recap is on [our blog](https://gno.land/r/gnoland/blog:p/gno-tokyo).\n\n### Upcoming events\n\nWe've got three major events coming up\n- **GopherCon EU** / Berlin / June 17th - 20th\n- **GopherCon US** / Chicago / July 7th - 10th\n- **Nebular Summit** / Brussels / July 12th/13th\n\nIf you plan to attend any of these events, find us at our booth or on the hallway track, and let's talk!",
    "2024-04-26T00:00:00Z",
    "Kouteki",
    "gnoland,ecosystem,updates,gnovm,tm2"
  ],
  "max_deposit": ""
}
#26 vm/execgno.land/r/gnoland/blog.ModAddPost(kv-stores-indexer, Key/Value Stores: How We Improved the Performance of Our tx-indexer by 10x, In this article, we'll discuss how we achieved a tenfold increase in the processing speed of the tx-indexer by applying four key concepts related to our use of key/value storage: - Understanding Key/Value Store Variability - The Importance of Efficient Data Encoding - Implementing Secondary Indexes on a Key/Value Store - The Role of Batch Inserts in Enhancing Performance - Data consistency - Speed - Old - New - Conclusion The Transaction Indexer ([tx-indexer](https://github.com/gnolang/tx-indexer)) is the primary tool Gno.land uses to index its networks. It is in charge of keeping up with block production, fetching new data, indexing it, and serving it to users while providing filtering and subscription capabilities. The tx-indexer creates versatility and ease of use when using on-chain data, which is one of the key aspects of a fully functioning decentralized application. ## Understanding Key/Value Store Variability Not all key/value storages are created equal. Each varies significantly, and depending on their internal data structures, some are better suited for certain use cases than others. A deep understanding of the key/value store you plan to use will help you better organize data for efficient writing and reading and assist in choosing the best store for your specific needs. While [PebbleDB](https://github.com/cockroachdb/pebble) is based on [RocksDB](https://github.com/facebook/rocksdb/wiki/RocksDB-Overview), the two databases differ significantly. Both utilize LSM Trees built upon SSTables; however, PebbleDB supports only a subset of the features available in RocksDB. For instance, PebbleDB lacks built-in transaction capabilities, but these can be alternatively implemented through the use of Batches and/or Snapshots. ## The Importance of Efficient Data Encoding Our indexing involved elements defined by consecutive integers, with Blocks on one side and Transactions within a Block on the other. Initially, Blocks were indexed using a combination of `block_prefix` and block_id encoded in little endian. This method wasn't allowing us to use iterators for ordered data retrieval, forcing us to fetch elements individually, resulting in excessive and inefficient database queries. After refactoring, we adopted a binary encoding scheme that allowed for custom encoding of strings and integers. This flexibility enabled ascending or descending order iterations, which significantly improved our ability to read data sequentially through iterators and, consequently, reduced query times dramatically. Small example about how we encoded uint32 values in ascending order: ```go! func encodeUint32Ascending(b []byte, v uint32) []byte { return append(b, byte(v>>24), byte(v>>16), byte(v>>8), byte(v)) } ``` ## Implementing Secondary Indexes on a Key/Value Store While most filters are applied on the fly due to their low cost, we implemented secondary indexes to fetch Transactions by Hash efficiently. Secondary indexes are specialized key groups that directly reference the primary index key where the data resides. For example, a transaction with ID `3` in block `42` is indexed as `/index/txs/[uint64]42[uint32]3`. These transactions are also uniquely identified by a hash representing the entire transaction content. To fetch transactions by hash, we created a secondary index that points to the primary index: `/index/txh/[HASH] -> /data/txs/[uint64]42[uint32]3` Although our secondary indexes do not require ordered iteration, this capability remains available, allowing us to apply additional filters as necessary. For instance, we could index transactions by year: `/index/txYear/[uint16]2024[uint64]42[uint32]3 -> /data/txs/[uint64]42[uint32]3` This format allows us to iterate through transactions within a specific year, from the start to the end of 2023, for example: - from: `/index/txYear/[uint16]2023[uint64]0[uint32]0` - to: `/index/txYear/[uint16]2023[uint64]MAX_UINT64[uint32]MAX_UINT32` ## The Role of Batch Inserts in Enhancing Performance The advantages of write batches are often overlooked but crucial. Inserting elements individually can lead to data consistency issues and slower operations. ### Data consistency Batches ensure atomicity—either all elements are persisted, or none are. Without batches, a failure during insertion could result in a block being saved without some of its transactions. ### Speed Each insertion involves internal processes that slow down the operation. By grouping several entries in one batch, we significantly enhance insertion speed. These are new benchmarks comparing the old and new way of writting elements without and with batches. Note that these are just synthetic benchmarks and the 10x improvement was measured when using the indexer as it is (we came from spending 30 mins to 3 mins with the new storage changes): #### Old ```go! func BenchmarkPebbleWrites(b *testing.B) { store, err := NewDB(b.TempDir()) require.NoError(b, err) defer store.Close() pairs := generateRandomPairs(b, b.N) b.ResetTimer() for k, v := range pairs { err := store.Set([]byte(k), v) b.StopTimer() require.NoError(b, err) b.StartTimer() } } ``` ``` goos: linux goarch: amd64 pkg: github.com/gnolang/tx-indexer/storage/pebble cpu: AMD Ryzen 5 5600X 6-Core Processor BenchmarkPebbleWrites BenchmarkPebbleWrites-12 1316 928941 ns/op 33 B/op 0 allocs/op PASS ok github.com/gnolang/tx-indexer/storage/pebble 1.384s ``` #### New ```go! func BenchmarkPebbleWrites(b *testing.B) { store, err := NewPebble(b.TempDir()) require.NoError(b, err) defer store.Close() pairs := generateRandomBlocks(b, b.N) batch := store.WriteBatch() b.ResetTimer() for _, v := range pairs { err := batch.SetBlock(v) b.StopTimer() require.NoError(b, err) b.StartTimer() } err = batch.Commit() b.StopTimer() require.NoError(b, err) b.StartTimer() } ``` ``` goos: linux goarch: amd64 pkg: github.com/gnolang/tx-indexer/storage cpu: AMD Ryzen 5 5600X 6-Core Processor BenchmarkPebbleWrites BenchmarkPebbleWrites-12 249462 4730 ns/op 1704 B/op 43 allocs/op PASS ok github.com/gnolang/tx-indexer/storage 4.669s ``` ## Conclusion If you find out this interesting and want to have a deeper look about [how it is done](https://github.com/gnolang/tx-indexer/tree/main/storage), or just try our indexer, it is as simple as ramping up a docker image: ``` docker run -it -p 8546:8546 ghcr.io/gnolang/tx-indexer:latest start -remote http://test3.gno.land:36657 ``` And start playing with it through its GraphQL interface at `http://localhost:8546/graphql` , 2024-05-10T13:37:00Z, ajnavarro, blog,post,tx-indexer,dev)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "kv-stores-indexer",
    "Key/Value Stores: How We Improved the Performance of Our tx-indexer by 10x",
    "\n\nIn this article, we'll discuss how we achieved a tenfold increase in the processing speed of the tx-indexer by applying four key concepts related to our use of key/value storage:\n\n- Understanding Key/Value Store Variability\n- The Importance of Efficient Data Encoding\n- Implementing Secondary Indexes on a Key/Value Store\n- The Role of Batch Inserts in Enhancing Performance\n  - Data consistency\n  - Speed\n    - Old\n    - New\n- Conclusion\n\nThe Transaction Indexer ([tx-indexer](https://github.com/gnolang/tx-indexer)) is\nthe primary tool Gno.land uses to index its networks. It is in charge of keeping \nup with block production, fetching new data, indexing it, and serving it to users\nwhile providing filtering and subscription capabilities. The tx-indexer creates\nversatility and ease of use when using on-chain data, which is one of the key \naspects of a fully functioning decentralized application.\n\n## Understanding Key/Value Store Variability\n\nNot all key/value storages are created equal. Each varies significantly, and \ndepending on their internal data structures, some are better suited for certain\nuse cases than others. A deep understanding of the key/value store you plan to \nuse will help you better organize data for efficient writing and reading and \nassist in choosing the best store for your specific needs.\n\nWhile [PebbleDB](https://github.com/cockroachdb/pebble) is based on \n[RocksDB](https://github.com/facebook/rocksdb/wiki/RocksDB-Overview), the two \ndatabases differ significantly. Both utilize LSM Trees built upon SSTables;\nhowever, PebbleDB supports only a subset of the features available in RocksDB. \nFor instance, PebbleDB lacks built-in transaction capabilities, but these can be \nalternatively implemented through the use of Batches and/or Snapshots.\n\n## The Importance of Efficient Data Encoding\n\nOur indexing involved elements defined by consecutive integers, with Blocks on \none side and Transactions within a Block on the other.\n\nInitially, Blocks were indexed using a combination of `block_prefix` and block_id\nencoded in little endian. This method wasn't allowing us to use iterators for \nordered data retrieval, forcing us to fetch elements individually, resulting in\nexcessive and inefficient database queries.\n\nAfter refactoring, we adopted a binary encoding scheme that allowed for custom\nencoding of strings and integers. This flexibility enabled ascending or descending \norder iterations, which significantly improved our ability to read data sequentially\nthrough iterators and, consequently, reduced query times dramatically.\n\nSmall example about how we encoded uint32 values in ascending order:\n\n```go!\nfunc encodeUint32Ascending(b []byte, v uint32) []byte {\n\treturn append(b, byte(v>>24), byte(v>>16), byte(v>>8), byte(v))\n}\n```\n\n## Implementing Secondary Indexes on a Key/Value Store\n\nWhile most filters are applied on the fly due to their low cost, we implemented\nsecondary indexes to fetch Transactions by Hash efficiently.\n\nSecondary indexes are specialized key groups that directly reference the primary\nindex key where the data resides. For example, a transaction with ID `3` in block\n`42` is indexed as `/index/txs/[uint64]42[uint32]3`. These transactions are also \nuniquely identified by a hash representing the entire transaction content.\n\nTo fetch transactions by hash, we created a secondary index that points to the\nprimary index:\n\n`/index/txh/[HASH] -> /data/txs/[uint64]42[uint32]3`  \n\nAlthough our secondary indexes do not require ordered iteration, this capability\nremains available, allowing us to apply additional filters as necessary. For\ninstance, we could index transactions by year:\n\n`/index/txYear/[uint16]2024[uint64]42[uint32]3 -> /data/txs/[uint64]42[uint32]3`\n\nThis format allows us to iterate through transactions within a specific year, \nfrom the start to the end of 2023, for example:\n\n- from: `/index/txYear/[uint16]2023[uint64]0[uint32]0`  \n- to: `/index/txYear/[uint16]2023[uint64]MAX_UINT64[uint32]MAX_UINT32`  \n\n## The Role of Batch Inserts in Enhancing Performance\n\nThe advantages of write batches are often overlooked but crucial. Inserting \nelements individually can lead to data consistency issues and slower operations.\n\n### Data consistency\n\nBatches ensure atomicity—either all elements are persisted, or none are. \nWithout batches, a failure during insertion could result in a block being saved\nwithout some of its transactions.\n\n### Speed\n\nEach insertion involves internal processes that slow down the operation. By \ngrouping several entries in one batch, we significantly enhance insertion speed.\nThese are new benchmarks comparing the old and new way of writting elements \nwithout and with batches. Note that these are just synthetic benchmarks and the\n10x improvement was measured when using the indexer as it is (we came from \nspending 30 mins to 3 mins with the new storage changes):\n\n#### Old\n\n```go!\nfunc BenchmarkPebbleWrites(b *testing.B) {\n\tstore, err := NewDB(b.TempDir())\n\trequire.NoError(b, err)\n\tdefer store.Close()\n\n\tpairs := generateRandomPairs(b, b.N)\n\n\tb.ResetTimer()\n\tfor k, v := range pairs {\n\t\terr := store.Set([]byte(k), v)\n\n\t\tb.StopTimer()\n\t\trequire.NoError(b, err)\n\t\tb.StartTimer()\n\t}\n}\n```\n\n```\ngoos: linux\ngoarch: amd64\npkg: github.com/gnolang/tx-indexer/storage/pebble\ncpu: AMD Ryzen 5 5600X 6-Core Processor\nBenchmarkPebbleWrites\nBenchmarkPebbleWrites-12    \t    1316\t    928941 ns/op\t      33 B/op\t       0 allocs/op\nPASS\nok  \tgithub.com/gnolang/tx-indexer/storage/pebble\t1.384s\n```\n\n#### New\n\n```go!\nfunc BenchmarkPebbleWrites(b *testing.B) {\n\tstore, err := NewPebble(b.TempDir())\n\trequire.NoError(b, err)\n\tdefer store.Close()\n\n\tpairs := generateRandomBlocks(b, b.N)\n\n\tbatch := store.WriteBatch()\n\n\tb.ResetTimer()\n\tfor _, v := range pairs {\n\t\terr := batch.SetBlock(v)\n\n\t\tb.StopTimer()\n\t\trequire.NoError(b, err)\n\t\tb.StartTimer()\n\t}\n\n\terr = batch.Commit()\n\n\tb.StopTimer()\n\trequire.NoError(b, err)\n\tb.StartTimer()\n}\n```\n\n```\ngoos: linux\ngoarch: amd64\npkg: github.com/gnolang/tx-indexer/storage\ncpu: AMD Ryzen 5 5600X 6-Core Processor\nBenchmarkPebbleWrites\nBenchmarkPebbleWrites-12          249462              4730 ns/op            1704 B/op         43 allocs/op\nPASS\nok      github.com/gnolang/tx-indexer/storage   4.669s\n```\n\n## Conclusion\n\nIf you find out this interesting and want to have a deeper look about\n[how it is done](https://github.com/gnolang/tx-indexer/tree/main/storage), or just try our indexer, it is as simple as ramping up \na docker image:\n\n```\ndocker run -it -p 8546:8546 ghcr.io/gnolang/tx-indexer:latest start -remote http://test3.gno.land:36657\n```\n\nAnd start playing with it through its GraphQL interface at `http://localhost:8546/graphql`\n",
    "2024-05-10T13:37:00Z",
    "ajnavarro",
    "blog,post,tx-indexer,dev"
  ],
  "max_deposit": ""
}
#27 vm/execgno.land/r/gnoland/blog.ModAddPost(gno-studio-intro, Introducing Gno Studio, the Premier Builder Suite for Gno.land, [![introduction-banner](https://gnolang.github.io/blog/2024-05-14_gno-studio-intro/src/thumbs/introducing-gnostudio.png)](https://gnolang.github.io/blog/2024-05-14_gno-studio-intro/src/introducing-gnostudio.png) Exceptional developer experience is integral to the Gno ecosystem, shaping the special programming language, Gno, and guiding the features of Gno.land. The technology stack is designed to offer developers an unparalleled platform for crafting next-generation dApps via realms (smart contracts). As Gno.land expands into a universe of realms, development tools become instrumental to enable innovation and ingenuity. To fully realize this vision, we are creating Gno Studio, empowering community members to create and use succinct and composable realms on Gno.land. ## The Gno Studio Developer Experience The [Gno Studio](https://gno.studio/) suite will offer extensive builder tools tailored for Gno.land. The design of Gno Studio is intended to cater to a wide range of users, from experienced builders to non-coders, by simplifying and enhancing the process of launching any realm or application you can imagine. Initially, Gno Studio started as a proof of concept IDE (Integrated Development Environment). Eventually, this evolved into a vision for a comprehensive suite of apps and services — Gno Studio — designed to elevate the developer experience to new heights and meet users’ and builders’ current needs and expectations. At the end of last year, we launched the first beta application of the Gno Studio suite, [Gno Playground](https://play.gno.land/), as part of the Gno.land brand. The official Playground of Gno.land is a minimalistic IDE that facilitates the creation, testing, deployment, and sharing of Gno code. It is a powerful tool designed to simplify the development of packages and realms, lowering the barrier to entry for new builders and enhancing the productivity of advanced Go developers. **Today, we are excited to announce the beta release of Gno Studio Connect, the second application in the Gno Studio suite.** ## Your Gateway to Experience the Power of Realms [![beta-launch-banner](https://gnolang.github.io/blog/2024-05-14_gno-studio-intro/src/thumbs/beta-launch.png)](https://gnolang.github.io/blog/2024-05-14_gno-studio-intro/src/beta-launch.png) Gno Studio Connect is a tool that simplifies access and interaction with realm functions. Whether you’re exploring realms like the Gno.land [blog](https://gno.land/r/gnoland/blog), engaging with a realm deployed through the [Gno Playground](https://play.gno.land/), or using a tool like [gnokey](https://docs.gno.land/gno-tooling/cli/gno-tooling-gnokey/), Connect makes interaction easy. The initial version of Connect focuses on function calls, enabling users to interact with any realm’s exposed function(s) on Gno.land. Function calls are performed through your account using any wallet that supports Gno.land (currently, [Adena](https://www.adena.app/) is the only supported wallet.) Let’s discuss the feature set: - **Access**: Directly input a realm path and select the corresponding network in the interface for seamless navigation to your realm. - **Explore**: Discover the available functions of any realm and their details through a dedicated function list. - **Interact**: Swiftly make calls through a dedicated function interface by selecting a specific function in the realm’s function list. - **Evaluate**: Review and analyze the outcomes of your interactions with realm functions by assessing results and determine any further actions required. - **Share:** Copy links to realms, functions and results and share with anyone, making it easy to request engagement on a realm or feedback on a specific function. - **Track**: Keep track of your previous realm interactions, where you can view the results of your function calls and revisit their results through a historical overview. ## Get Started with Connect: Vote in a Simple Poll [![vote-gnoyourdate](https://gnolang.github.io/blog/2024-05-14_gno-studio-intro/src/thumbs/vote-gnoyourdate.png)](https://gnolang.github.io/blog/2024-05-14_gno-studio-intro/src/vote-gnoyourdate.png) Let’s dive into a hands-on example with a simple polling realm. First, click [here](https://gno.studio/connect/view/gno.land/r/gnostudio/gnoyourdate?network=test3#Vote) to access the ‘gnoyourdate’ poll. Once you’ve ensured that Adena wallet is connected, here’s what to do next: 1. Select when you first heard about Gno.land: _Ensure your chosen option is marked as 'True (Yes)' and all others as 'False (No)' to validate your vote._ - This month - This year - One or two years ago - Since inception 2. After making your selection, hit the ‘Call’ button to execute the transaction via your [Adena wallet](https://www.adena.app/). If you need help getting set up, you can visit the [Adena docs](https://docs.adena.app/user-guide/sign-in). 3. You’re ready to share your vote! Click ‘Copy result link’ and post it on X, tagging [@_gnostudio](https://twitter.com/_gnostudio) and using the hashtag #gnoyourdate. ## Share Your Feedback on Connect We value your input as we continue developing Gno Studio. Please contribute to our improvement efforts by interacting with our feedback form created as a realm. Use the ‘[SubmitFeedback](https://gno.studio/connect/view/gno.land/r/gnostudio/feedback_v1?network=test3&tab=functions#SubmitFeedback)’ function to share your feedback with us. If you have questions or comments, hop over to the [Gno.land Discord](https://discord.gg/FpKNhW5GK6) and follow us on [X](https://twitter.com/_gnostudio) for updates and discussions. ## The Gno Studio Outlook The outlook for Gno Studio is full speed ahead with a roadmap bursting with exciting features and tools. We will continue to transition the beta applications, Gno Playground and Gno Studio Connect, into their production versions while focusing on the development of the next set of tooling. Development is already underway on a full-featured IDE that will provide a state-of-the-art workspace designed for realm and package development on Gno.land. The IDE will consist of an advanced code editor, debugging tools, and a dedicated project management and deployment environment. The next piece of the puzzle is a marketplace with ready-to-use templates that make creating apps more accessible to everyone. This collection of boilerplate code is targeted at speeding up deployment timelines and allowing non-coders to try their hand at launching realms without needing to worry about technical details. The production-ready Gno Studio suite will help and inspire everyone with an idea, coders and non-coders alike, to participate in the exciting innovations of Web3 spurred by the next generation of realm applications on Gno.land. If you want to *stay in the gno* about all the Gno Studio developments and news, [sign up](https://gno.studio/) for our mailing list. You can also follow us on [X](https://twitter.com/_gnostudio). , 2024-05-14T13:37:00Z, gno-studio, gnoland,gnostudio,web3,blockchain,smart-contracts)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "gno-studio-intro",
    "Introducing Gno Studio, the Premier Builder Suite for Gno.land",
    "\n\n[![introduction-banner](https://gnolang.github.io/blog/2024-05-14_gno-studio-intro/src/thumbs/introducing-gnostudio.png)](https://gnolang.github.io/blog/2024-05-14_gno-studio-intro/src/introducing-gnostudio.png)\n\nExceptional developer experience is integral to the Gno ecosystem, shaping the \nspecial programming language, Gno, and guiding the features of Gno.land. The\ntechnology stack is designed to offer developers an unparalleled platform for \ncrafting next-generation dApps via realms (smart contracts).\n\nAs Gno.land expands into a universe of realms, development tools become \ninstrumental to enable innovation and ingenuity. To fully realize this vision,\nwe are creating Gno Studio, empowering community members to create and use \nsuccinct and composable realms on Gno.land.\n\n## The Gno Studio Developer Experience\n\nThe [Gno Studio](https://gno.studio/) suite will offer extensive builder tools tailored \nfor Gno.land. The design of Gno Studio is intended to cater to a wide range of \nusers, from experienced builders to non-coders, by simplifying and enhancing the \nprocess of launching any realm or application you can imagine. Initially, Gno \nStudio started as a proof of concept IDE (Integrated Development Environment). \nEventually, this evolved into a vision for a comprehensive suite of apps and \nservices — Gno Studio — designed to elevate the developer experience to new \nheights and meet users’ and builders’ current needs and expectations.\n\nAt the end of last year, we launched the first beta application of the Gno \nStudio suite, [Gno Playground](https://play.gno.land/), as part of the Gno.land brand. The \nofficial Playground of Gno.land is a minimalistic IDE that facilitates the \ncreation, testing, deployment, and sharing of Gno code. It is a powerful tool \ndesigned to simplify the development of packages and realms, lowering the barrier\nto entry for new builders and enhancing the productivity of advanced Go developers.\n\n**Today, we are excited to announce the beta release of Gno Studio Connect, the \nsecond application in the Gno Studio suite.**\n\n## Your Gateway to Experience the Power of Realms\n\n[![beta-launch-banner](https://gnolang.github.io/blog/2024-05-14_gno-studio-intro/src/thumbs/beta-launch.png)](https://gnolang.github.io/blog/2024-05-14_gno-studio-intro/src/beta-launch.png)\n\nGno Studio Connect is a tool that simplifies access and interaction with realm \nfunctions. Whether you’re exploring realms like the Gno.land [blog](https://gno.land/r/gnoland/blog), \nengaging with a realm deployed through the [Gno Playground](https://play.gno.land/), or using a \ntool like [gnokey](https://docs.gno.land/gno-tooling/cli/gno-tooling-gnokey/), Connect makes interaction easy.\n\nThe initial version of Connect focuses on function calls, enabling users to \ninteract with any realm’s exposed function(s) on Gno.land. Function calls are \nperformed through your account using any wallet that supports Gno.land \n(currently, [Adena](https://www.adena.app/) is the only supported wallet.) Let’s discuss the\nfeature set:\n\n- **Access**: Directly input a realm path and select the corresponding network \nin the interface for seamless navigation to your realm.\n- **Explore**: Discover the available functions of any realm and their details \nthrough a dedicated function list.\n- **Interact**: Swiftly make calls through a dedicated function interface by \nselecting a specific function in the realm’s function list.\n- **Evaluate**: Review and analyze the outcomes of your interactions with realm\nfunctions by assessing results and determine any further actions required.\n- **Share:** Copy links to realms, functions and results and share with \nanyone, making it easy to request engagement on a realm or feedback on a specific function.\n- **Track**: Keep track of your previous realm interactions, where you can view \nthe results of your function calls and revisit their results through a historical overview.\n\n## Get Started with Connect: Vote in a Simple Poll\n\n[![vote-gnoyourdate](https://gnolang.github.io/blog/2024-05-14_gno-studio-intro/src/thumbs/vote-gnoyourdate.png)](https://gnolang.github.io/blog/2024-05-14_gno-studio-intro/src/vote-gnoyourdate.png)\n\nLet’s dive into a hands-on example with a simple polling realm. First, click \n[here](https://gno.studio/connect/view/gno.land/r/gnostudio/gnoyourdate?network=test3#Vote) to access the ‘gnoyourdate’ poll. Once you’ve ensured that Adena \nwallet is connected, here’s what to do next:  \n\n1. Select when you first heard about Gno.land:  \n   _Ensure your chosen option is marked as 'True (Yes)' and all others as 'False (No)' to validate your vote._\n   - This month  \n   - This year  \n   - One or two years ago  \n   - Since inception\n2. After making your selection, hit the ‘Call’ button to execute the transaction\nvia your [Adena wallet](https://www.adena.app/). If you need help getting set up,\nyou can visit the [Adena docs](https://docs.adena.app/user-guide/sign-in).  \n3. You’re ready to share your vote! Click ‘Copy result link’ and post it on X,\ntagging [@_gnostudio](https://twitter.com/_gnostudio) and using the hashtag #gnoyourdate.  \n\n## Share Your Feedback on Connect\n\nWe value your input as we continue developing Gno Studio. Please contribute to\nour improvement efforts by interacting with our feedback form created as a realm.\nUse the ‘[SubmitFeedback](https://gno.studio/connect/view/gno.land/r/gnostudio/feedback_v1?network=test3&tab=functions#SubmitFeedback)’ function to share your feedback with us.\n\nIf you have questions or comments, hop over to the [Gno.land Discord](https://discord.gg/FpKNhW5GK6) and \nfollow us on [X](https://twitter.com/_gnostudio) for updates and discussions.\n\n## The Gno Studio Outlook\n\nThe outlook for Gno Studio is full speed ahead with a roadmap bursting with \nexciting features and tools. We will continue to transition the beta applications,\nGno Playground and Gno Studio Connect, into their production versions while \nfocusing on the development of the next set of tooling.\n\nDevelopment is already underway on a full-featured IDE that will provide a \nstate-of-the-art workspace designed for realm and package development on Gno.land.\nThe IDE will consist of an advanced code editor, debugging tools, and a dedicated \nproject management and deployment environment.\n\nThe next piece of the puzzle is a marketplace with ready-to-use templates that \nmake creating apps more accessible to everyone. This collection of boilerplate \ncode is targeted at speeding up deployment timelines and allowing non-coders to \ntry their hand at launching realms without needing to worry about technical \ndetails.\n\nThe production-ready Gno Studio suite will help and inspire everyone with an idea,\ncoders and non-coders alike, to participate in the exciting innovations of Web3 \nspurred by the next generation of realm applications on Gno.land.\n\nIf you want to *stay in the gno* about all the Gno Studio developments and news,\n[sign up](https://gno.studio/) for our mailing list. You can also follow us on [X](https://twitter.com/_gnostudio).\n",
    "2024-05-14T13:37:00Z",
    "gno-studio",
    "gnoland,gnostudio,web3,blockchain,smart-contracts"
  ],
  "max_deposit": ""
}
#28 vm/execgno.land/r/gnoland/blog.ModAddPost(the-gnome, Introducing our new Gno.land logo: the gnome, [![banner](https://gnolang.github.io/blog/2024-05-21_the-gnome/src/thumbs/banner.png)](https://gnolang.github.io/blog/2024-05-21_the-gnome/src/banner.png) We are excited to introduce our new Gno.land logo, a significant shift that reflects the true spirit of our project. From the very beginning, the character of the "gnome" has been a source of inspiration for gno.land, representing the essence of our journey and values going forward. Over time, this character has not only inspired our project but has also become part of gno.land’s identity. The black hole of the previous logo represented finality, inevitability, the ultimate end state, and was an interesting representation of something that cannot be seen; but it also arguably represented something like an unemotional void. In contrast, gnomes are warm and inviting in character, and so much more. _So why gnomes?_ In Greek, _gnomi_ means “the means of knowing; mind; intelligence; judgment”. _Gnomic poetry_ refers to a type of poetry involving short memorable maxims of wisdom that flourished in the 6th century in Greece. Today, when we hear _gnome_ we think of earth-dwelling figures often found in lush blue-green gardens, guarding or simply enjoying the land they are in. Nobody knows for sure the origin of these gnomes, but the earliest known reference to it comes from Paracelsus as _gnomus_, a Swiss Christian theologian, philosopher and alchemist of the Renaissance. He also called them _pygmies_ in his _“A book on Nymphs, Sylphs, Pygmies, and Salamanders, and on Other Spirits”_ published in 1566, a study on myth creatures as they relate to Christianity. While the depiction of gnomes are varied, their general character was described by Paracelsus: _“the Pygmies (gnomes) are mountain people who keep pledges, are honest, hard working, loyal to man, and have money, because they themselves coin it”_ (perhaps Paracelsus would have preferred to be identified as a gnome, since he was also an alchemist). This character is consistent with Swiss folklore, as gnomes are said to have caused the landslide that destroyed the Swiss village of Plurs in 1618 - the villagers had become wealthy from a local gold mine created by the gnomes, who had poured liquid gold down into a vein for the benefit of humans. The villagers were corrupted by this newfound prosperity, which greatly offended the Gnomes. In addition, gnomes are not afraid to stand up against greed and evil. Some say that gnomes wear the Phrygian cap, which represents Zoroaster, the “three Magi” from the east, or the revolutionary pursuit of liberty. Gnomes are also earth dwellers, masons of the rock, and the guardians of the land. By combining the above descriptions, we can describe gnomes in the following manner: 1. Gnomes create timeless value for humanity. 2. But since humanity becomes corrupted through greed and abuses these timeless values, gnomes also take remedial action. Whether the timeless value is that of an element such as gold, or that of a blockchain protocol, gnomes are hardworking alchemists who seek the best for humanity and actively resist greed and corruption as a matter of principle. This quality of character is greatly needed in the blockchain/web3 field, where it is so easy to become blinded by greed, resulting in stalled innovation, broken promises, sometimes the loss of life savings, and the demise of entire web3 communities. The blockchain world needs more gnomes to create timeless software and protocols for the benefit of humanity. Such technology should be: 1. intuitive (easy to use and understand) 2. expressive (for societal infrastructure, finance, social, knowledge) 3. finalized (completed) 4. secure (unhackable) 5. scalable (affordable) This is what we seek to bring to the world through gno.land. Gnomes are thus an excellent representation of the builders behind gno.land. We hope you like the new logo – an iconic depiction of the gnome with cap – and hope that the gnomic spirit can help guide us to build a better, more honest world for all of us. _- the gnomes of gno.land_ , 2024-05-21T12:33:00Z, gno.land, gnome,brand-update,new-logo)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "the-gnome",
    "Introducing our new Gno.land logo: the gnome",
    "\n\n[![banner](https://gnolang.github.io/blog/2024-05-21_the-gnome/src/thumbs/banner.png)](https://gnolang.github.io/blog/2024-05-21_the-gnome/src/banner.png)\n\nWe are excited to introduce our new Gno.land logo, a significant shift that \nreflects the true spirit of our project.\n\nFrom the very beginning, the character of the \"gnome\" has been a source of \ninspiration for gno.land, representing the essence of our journey and values \ngoing forward.\nOver time, this character has not only inspired our project but has also become\npart of gno.land’s identity.\n\nThe black hole of the previous logo represented finality, inevitability, the\nultimate end state, and was an interesting representation of something that cannot\nbe seen; but it also arguably represented something like an unemotional void. In\ncontrast, gnomes are warm and inviting in character, and so much more.\n\n_So why gnomes?_\n\nIn Greek, _gnomi_ means “the means of knowing; mind; intelligence; judgment”. \n_Gnomic poetry_ refers to a type of poetry involving short memorable maxims of \nwisdom that flourished in the 6th century in Greece. Today, when we hear _gnome_ \nwe think of earth-dwelling figures often found in lush blue-green gardens,\nguarding or simply enjoying the land they are in.\n\nNobody knows for sure the origin of these gnomes, but the earliest known\nreference to it comes from Paracelsus as _gnomus_, a Swiss Christian theologian, \nphilosopher and alchemist of the Renaissance. He also called them _pygmies_ in \nhis _“A book on Nymphs, Sylphs, Pygmies, and Salamanders, and on Other Spirits”_\npublished in 1566, a study on myth creatures as they relate to Christianity.\n\nWhile the depiction of gnomes are varied, their general character was described\nby Paracelsus:\n\n_“the Pygmies (gnomes) are mountain people who keep pledges, are honest, hard \nworking, loyal to man, and have money, because they themselves coin it”_\n\n(perhaps Paracelsus would have preferred to be identified as a gnome, since he was also an alchemist).\n\nThis character is consistent with Swiss folklore, as gnomes are said to have \ncaused the landslide that destroyed the Swiss village of Plurs in 1618 - the\nvillagers had become wealthy from a local gold mine created by the gnomes, who\nhad poured liquid gold down into a vein for the benefit of humans. The villagers\nwere corrupted by this newfound prosperity, which greatly offended the Gnomes.\n\nIn addition, gnomes are not afraid to stand up against greed and evil. Some say \nthat gnomes wear the Phrygian cap, which represents Zoroaster, the “three Magi” \nfrom the east, or the revolutionary pursuit of liberty. Gnomes are also earth \ndwellers, masons of the rock, and the guardians of the land.\n\nBy combining the above descriptions, we can describe gnomes in the following manner:\n\n1. Gnomes create timeless value for humanity.\n2. But since humanity becomes corrupted through greed and abuses these timeless \nvalues, gnomes also take remedial action.\n\nWhether the timeless value is that of an element such as gold, or that of a \nblockchain protocol, gnomes are hardworking alchemists who seek the best for \nhumanity and actively resist greed and corruption as a matter of principle. This\nquality of character is greatly needed in the blockchain/web3 field, where it is \nso easy to become blinded by greed, resulting in stalled innovation, broken \npromises, sometimes the loss of life savings, and the demise of entire web3 \ncommunities.\n\nThe blockchain world needs more gnomes to create timeless software and protocols\nfor the benefit of humanity. Such technology should be:\n\n1. intuitive (easy to use and understand)\n2. expressive (for societal infrastructure, finance, social, knowledge)\n3. finalized (completed)\n4. secure (unhackable)\n5. scalable (affordable)\n\nThis is what we seek to bring to the world through gno.land.\n\nGnomes are thus an excellent representation of the builders behind gno.land. We\nhope you like the new logo – an iconic depiction of the gnome with cap – and hope\nthat the gnomic spirit can help guide us to build a better, more honest world for\nall of us.\n\n_- the gnomes of gno.land_\n\n\n",
    "2024-05-21T12:33:00Z",
    "gno.land",
    "gnome,brand-update,new-logo"
  ],
  "max_deposit": ""
}
#29 vm/execgno.land/r/gnoland/blog.ModAddPost(gnomes-in-serbia, Gnomes Spotted in Belgrade, Serbia: Recap from the Engineering Retreat and Golang Serbia Meetup, Dobro jutro gnomes! Last week, the Gno core engineering team convened in Belgrade, Serbia, to discuss various aspects of our technical roadmap, including Test4, blockchainless Gno, Gnoweb, governance and DAO structuring, GnoVM, and more. While the team was in town, we took the chance to host a Gno @ Golang Serbia meetup titled ‘Building Dynamic Applications with Interpreted Go’ - you can catch the recording of the full presentation [here](https://youtu.be/tNM1DHOxIQ8). ## Engineering Retreat Recap Over five full days of coding and workshops, the Gno core engineering team delved into several critical topics and emerged with several key takeaways: - Test4 Progress: - Test4 has been the primary effort for the team in the past couple of months, aiming to create a stable multi-node testnet which will serve as the last precursor to Gno.land’s upcoming mainnet. Discussions revolved around chain initialization flows, node metrics & telemetry, versioning of binaries, adding a way to modify the validator set via a realm (r/sys/vals), and more. Currently, the [Test4 milestone](https://github.com/gnolang/gno/milestone/4) is 62% complete. - Blockchainless Gno: - With the upcoming GopherCon EU & US conferences, the team discussed a different perspective on Gno - a fully functional Go interpreter with automatic state persistence. The team aims to modularize the GnoVM so that it can be used in contexts outside the Gno.land blockchain, which will open up the ecosystem to completely new use-cases, inviting even more web2 developers to join our mission. - Gnoweb Enhancements: - [gnoweb](https://docs.gno.land/getting-started/local-setup/browsing-gnoland#2-browsing-gnoland) serves as one of the main tools to explore the Gno.land ecosystem. The team discussed changes to the UI as well as improving gnoweb’s functionalities such as the rendering of realm state & source code, and possible approaches to add more ways to interact with on-chain apps. - Governance and DAO Structuring: - Discussions relating to GovDAO and WorxDAO took place during the retreat, as they are the foundation for Gno.land’s consensus mechanism - Proof of Contribution. Manfred Touron, Gno.land’s VP of Engineering, discussed the [initial implementation](https://github.com/gnolang/gno/pull/1945) of GovDAO and its surrounding infrastructure. - GnoVM & Gno.land Development: - The team took the opportunity to deal with priority PRs during the retreat, such as the [Gno Type Check PR](https://github.com/gnolang/gno/pull/1426) by [@itzmaxwell](https://github.com/ltzmaxwell), which will add full type checking to the VM. The team has also added GoReleaser to the monorepo in preparation for the upcoming Test4 milestone, and the first [nightly Gno build](https://github.com/gnolang/gno/releases/tag/v0.1.0-nightly.20240523) was released. ## Gno @ Golang Serbia While in Belgrade, we also hosted a new Gnolocal meetup with over 15 developers from the Golang Serbia community. During this event, we introduced Gno.land, with a particular focus on the GnoVM (Virtual Machine) as a foundational layer for Gno - an interpreted version of Go. This was the first time we presented the concept of Gno to Serbia’s Golang community, showcasing its potential to support dynamic application development. It was an opportunity to identify areas of improvement and feedback from the user community. [![meetup](https://gnolang.github.io/blog/2024-05-28_gno-golang-serbia/src/thumbs/meetup.png)](https://gnolang.github.io/blog/2024-05-28_gno-golang-serbia/src/meetup.png) [Dylan Boltz](https://github.com/deelawn), a Senior Golang Engineer from the core team, led the presentation, demonstrating how the VM and Gno can be leveraged to design and build efficient, adaptable, and scalable applications. He also provided an overview of the stack-based VM architecture, illustrating how data storage mechanisms and execution traces operate within the VM. By using the GnoVM outside of the blockchain context, relevant to the Go community, developers can utilize the powerful features of Gno to build applications with automatic state persistence within a sandboxed environment. Dylan showcased how the GnoVM can be embedded in an HTTP server, allowing developers to write and persist Gno applications locally, and then share them with other users, all while maintaining the security of a VM. ### The Meetup presentation highlights - Virtual Machine Deep Dive: We provided a detailed understanding of the architectural setups of various VMs, and gave an overview of the current GnoVM. - Hands-On Learning: We walked through how to embed a virtual machine into your Go applications for dynamic code interpretation. The presentation covered practical techniques, including creating browser-based interfaces using interpreted Go. - Interactive Demonstrations: We showed how to create browser-based interfaces with interpreted Go as a foundation, demonstrating how this architecture enables dynamic program execution while maintaining a structured, deterministic approach to storage and state. - This was the third meetup in our series of Gnolocal events. We’ll be popping up in more cities around the globe to connect with gnomes, and spread the word about Gno.land. With a few gnomes based in Belgrade, it’s important to keep cultivating and building the Gno.land community locally. If you’re based in Serbia, you can find our regional based channel on the Official Gno.land [Discord Server](https://discord.gg/4XXyy5wS36). ### The Feedback Loop After the presentation, we gathered feedback from the attendees to assess the content presented, their interest in Gno.land, and in their interest in using the Gno interpreter tooling. Here are the key insights from form responses: - 75% of participants said they were interested in learning more about Gno. - 87% of participants found the presentation and concepts understandable. - 38% expressed interest in using the embedded Go interpreter in their applications. The feedback highlighted the need for us to clearly outline the problems Gno.land - is solving, how our technology addresses these issues, and how it can apply to - real-world examples. This feedback is invaluable as it helps us refine our - approach and better engage with new contributors. ## Conclusion The meetup was just one of several activities the team organized in Belgrade. In addition to the extensive technical sessions and workshops, we had the opportunity to experience and learn a bit about the local culture and Serbia, visiting the Nikola Tesla Museum, sightseeing, and experiencing traditional Serbian music. These in-person engineering retreats are some of the most important moments in outlining priorities, troubleshooting the technology together, and brainstorming ways to generally enhance and optimize the Gno.land blockchain and builder experience. , 2024-05-28T12:34:56Z, leohhhn,michelleellen, gnome,gnolocal,retreat,meetup,golang)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "gnomes-in-serbia",
    "Gnomes Spotted in Belgrade, Serbia: Recap from the Engineering Retreat and Golang Serbia Meetup",
    "\n\nDobro jutro gnomes! Last week, the Gno core engineering team convened in Belgrade,\nSerbia, to discuss various aspects of our technical roadmap, including Test4, \nblockchainless Gno, Gnoweb, governance and DAO structuring, GnoVM, and more. \nWhile the team was in town, we took the chance to host a Gno @ Golang Serbia \nmeetup titled ‘Building Dynamic Applications with Interpreted Go’ - you can catch \nthe recording of the full presentation [here](https://youtu.be/tNM1DHOxIQ8).\n\n## Engineering Retreat Recap\n\nOver five full days of coding and workshops, the Gno core engineering team delved \ninto several critical topics and emerged with several key takeaways:\n- Test4 Progress:\n  - Test4 has been the primary effort for the team in the past couple of months, \naiming to create a stable multi-node testnet which will serve as the last precursor\nto Gno.land’s upcoming mainnet. Discussions revolved around chain initialization \nflows, node metrics & telemetry, versioning of binaries, adding a way to modify \nthe validator set via a realm (r/sys/vals), and more. Currently, the \n[Test4 milestone](https://github.com/gnolang/gno/milestone/4) is 62% complete.\n- Blockchainless Gno:\n  - With the upcoming GopherCon EU & US conferences, the team discussed a \ndifferent perspective on Gno - a fully functional Go interpreter with automatic \nstate persistence. The team aims to modularize the GnoVM so that it can be\nused in contexts outside the Gno.land blockchain, which will open up the\necosystem to completely new use-cases, inviting even more web2 developers to \njoin our mission.\n- Gnoweb Enhancements:\n  - [gnoweb](https://docs.gno.land/getting-started/local-setup/browsing-gnoland#2-browsing-gnoland) serves as one of the main tools to explore the Gno.land \necosystem. The team discussed changes to the UI as well as improving gnoweb’s \nfunctionalities such as the rendering of realm state & source code, and possible\napproaches to add more ways to interact with on-chain apps.\n- Governance and DAO Structuring:\n  - Discussions relating to GovDAO and WorxDAO took place during the retreat, as \nthey are the foundation for Gno.land’s consensus mechanism - Proof of Contribution.\nManfred Touron, Gno.land’s VP of Engineering, discussed the \n[initial implementation](https://github.com/gnolang/gno/pull/1945) of GovDAO and\nits surrounding infrastructure.\n- GnoVM & Gno.land Development:\n  - The team took the opportunity to deal with priority PRs during the retreat, \nsuch as the [Gno Type Check PR](https://github.com/gnolang/gno/pull/1426) by\n[@itzmaxwell](https://github.com/ltzmaxwell), which will add full type checking to the VM. The team has also\nadded GoReleaser to the monorepo in preparation for the upcoming Test4 milestone,\nand the first \n[nightly Gno build](https://github.com/gnolang/gno/releases/tag/v0.1.0-nightly.20240523) was released.\n\n## Gno @ Golang Serbia\n\nWhile in Belgrade, we also hosted a new Gnolocal meetup with over 15 developers \nfrom the Golang Serbia community. During this event, we introduced Gno.land, with\na particular focus on the GnoVM (Virtual Machine) as a foundational layer for \nGno - an interpreted version of Go. This was the first time we presented the\nconcept of Gno to Serbia’s Golang community, showcasing its potential to support\ndynamic application development. It was an opportunity to identify areas of \nimprovement and feedback from the user community.\n\n[![meetup](https://gnolang.github.io/blog/2024-05-28_gno-golang-serbia/src/thumbs/meetup.png)](https://gnolang.github.io/blog/2024-05-28_gno-golang-serbia/src/meetup.png)\n\n[Dylan Boltz](https://github.com/deelawn), a Senior Golang Engineer from the core\nteam, led the presentation, demonstrating how the VM and Gno can be leveraged to \ndesign and build efficient, adaptable, and scalable applications. He also provided \nan overview of the stack-based VM architecture, illustrating how data storage \nmechanisms and execution traces operate within the VM.\n\nBy using the GnoVM outside of the blockchain context, relevant to the Go community,\ndevelopers can utilize the powerful features of Gno to build applications with \nautomatic state persistence within a sandboxed environment. Dylan showcased how \nthe GnoVM can be embedded in an HTTP server, allowing developers to write and \npersist Gno applications locally, and then share them with other users, all while\nmaintaining the security of a VM.\n\n### The Meetup presentation highlights\n- Virtual Machine Deep Dive: We provided a detailed understanding of the \narchitectural setups of various VMs, and gave an overview of the current GnoVM.\n- Hands-On Learning: We walked through how to embed a virtual machine into your\nGo applications for dynamic code interpretation. The presentation covered \npractical techniques, including creating browser-based interfaces using interpreted Go.\n- Interactive Demonstrations: We showed how to create browser-based interfaces\nwith interpreted Go as a foundation, demonstrating how this architecture enables\ndynamic program execution while maintaining a structured, deterministic approach\nto storage and state.\n- This was the third meetup in our series of Gnolocal events. We’ll be popping\nup in more cities around the globe to connect with gnomes, and spread the word \nabout Gno.land. With a few gnomes based in Belgrade, it’s important to keep \ncultivating and building the Gno.land community locally. If you’re based in \nSerbia, you can find our regional based channel on the Official Gno.land [Discord \nServer](https://discord.gg/4XXyy5wS36).\n\n### The Feedback Loop\nAfter the presentation, we gathered feedback from the attendees to assess the \ncontent presented, their interest in Gno.land, and in their interest in using \nthe Gno interpreter tooling. Here are the key insights from form responses:\n- 75% of participants said they were interested in learning more about Gno.\n- 87% of participants found the presentation and concepts understandable.\n- 38% expressed interest in using the embedded Go interpreter in their applications.\nThe feedback highlighted the need for us to clearly outline the problems Gno.land \n- is solving, how our technology addresses these issues, and how it can apply to\n- real-world examples. This feedback is invaluable as it helps us refine our \n- approach and better engage with new contributors.\n\n## Conclusion\nThe meetup was just one of several activities the team organized in Belgrade. \nIn addition to the extensive technical sessions and workshops, we had the \nopportunity to experience and learn a bit about the local culture and Serbia,\nvisiting the Nikola Tesla Museum, sightseeing, and experiencing traditional \nSerbian music.\nThese in-person engineering retreats are some of the most important moments in\noutlining priorities, troubleshooting the technology together, and brainstorming\nways to generally enhance and optimize the Gno.land blockchain and builder \nexperience. \n",
    "2024-05-28T12:34:56Z",
    "leohhhn,michelleellen",
    "gnome,gnolocal,retreat,meetup,golang"
  ],
  "max_deposit": ""
}
#30 vm/execgno.land/r/gnoland/blog.ModAddPost(test4-explained, Test4 Explained, We recently [announced](https://gno.land/r/gnoland/blog:p/monthly-dev-8) the Test4 milestone on our road to mainnet. It's a big step in terms of complexity, so let's delve into the nuts and bolts, and how Test4 fits into the bigger picture. ## Why Test4 is Significant Our choice to go with Go stemmed from our desire to lower the barrier to entry for new developers. That meant that we needed an intuitive programming language with widespread usage; developers would be able to write smart contracts without being forced to learn another language. Go fits the role perfectly. The flip side is that we can't just port a VM and call it a day. We have to build most tools and services from scratch. In that sense, Test4 is the technological leap from a single validator POC to a first iteration of an actual functioning decentralized blockchain network. It's also the first stable testnet since the project's inception over 2 years ago. ## Multinode capability Like most blockchains, we're looking to boost resilience and security through a number of validator nodes. But since we're not forking a VM, we're building the whole thing from scratch; starting from the ability to emit events, to being able to subscribe to smart contracts, to making a change based on those events. All this is needed e.g. to add or remove a validator node in the Gno.land network, since the validator management is done completely on-chain. The initial validator set will not be incentivized; it will be a small group of the most active contributors, as well as internal AiB teams, who will thoroughly test and break the network, and document all the things! ## The First Permanent Testnet Test4 is the first serious iteration of an official Gno.land testnet. Our aim is not to have any breaking changes, meaning you can use it to develop your dApp, identify bugs, test features in an environment that's as close to the upcoming mainnet as possible. Being a testnet, you can use the [Faucet Hub](https://faucet.gno.land/) to obtain test tokens and use dApps without any real consequences. Now, that isn't to say that Test4 will be the ultimate testnet. If we uncover major breaking issues, we'll deploy Test5 and so on. We promise, however, to come up with a better naming convention going forward. ## Indexer and Transaction Explorer Included A staple of a functional blockchain network is being able to search, track and verify transactions. This enables the developers to confirm their smart contracts are working as intended, as well as troubleshoot issues. Test4 comes with a transaction explorer, allowing developers to move off custom Test3 forks over to Test4 for convenience. ## Regular Release Schedule for Binaries With breaking changes being deployed before the Test4 launch, we can now switch to the rolling release model. Updates will go live on a regular, most likely biweekly basis, enabling developers to test their dApps on the latest available version. [Portal Loop](https://docs.gno.land/concepts/portal-loop/) will keep up with the binaries, and run on the latest version. ## Proof-of-Contribution Scaffolding A key Gno.land concept is Proof of Contribution; the idea that the reward goes not to the one who pays to win either via mining rig or big stake, but to the one that invests time to contribute to the community. Contributions will be managed on-chain via DAOs; E.g. a contributor with core contributions will be a part of a DAO that recognizes those contributions, and the rewards will be tied to the level the contributor has in that DAO. Test4 will lay down the foundation for PoC. We'll be adding proposal support, as well as voting support that executes those proposals on-chain. The result will be a modified version of PoA that will be supported on a protocol level, and managed by the admin. This will make the future switch to PoC a much more seamless affair. ## Release Date Our goal is to complete development by the end of July 2024, and launch in early August 2024. We've opened up the [Test4 milestone](https://github.com/gnolang/gno/milestone/4) and the Gno.core team's [project board](https://github.com/orgs/gnolang/projects/38/views/5), so you could track the progress. We're also getting ready to open up some of the issues to the community, so stay tuned!, 2024-05-30T00:00:00Z, Kouteki, gnoland,test4,testnet,poc,proof-of-contribution,tm2)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "test4-explained",
    "Test4 Explained",
    "\n\nWe recently [announced](https://gno.land/r/gnoland/blog:p/monthly-dev-8) the Test4 milestone on our road to mainnet. It's a big step in terms of complexity, so let's delve into the nuts and bolts, and how Test4 fits into the bigger picture.\n\n## Why Test4 is Significant\n\nOur choice to go with Go stemmed from our desire to lower the barrier to entry for new developers. That meant that we needed an intuitive programming language with widespread usage; developers would be able to write smart contracts without being forced to learn another language. Go fits the role perfectly. \n\nThe flip side is that we can't just port a VM and call it a day. We have to build most tools and services from scratch.\n\nIn that sense, Test4 is the technological leap from a single validator POC to a first iteration of an actual functioning decentralized blockchain network. \n\nIt's also the first stable testnet since the project's inception over 2 years ago.\n\n## Multinode capability\n\nLike most blockchains, we're looking to boost resilience and security through a number of validator nodes. But since we're not forking a VM, we're building the whole thing from scratch; starting from the ability to emit events, to being able to subscribe to smart contracts, to making a change based on those events. All this is needed e.g. to add or remove a validator node in the Gno.land network, since the validator management is done completely on-chain.\n\nThe initial validator set will not be incentivized; it will be a small group of the most active contributors, as well as internal AiB teams, who will thoroughly test and break the network, and document all the things!\n\n## The First Permanent Testnet\n\nTest4 is the first serious iteration of an official Gno.land testnet. Our aim is not to have any breaking changes, meaning you can use it to develop your dApp, identify bugs, test features in an environment that's as close to the upcoming mainnet as possible. Being a testnet, you can use the [Faucet Hub](https://faucet.gno.land/) to obtain test tokens and use dApps without any real consequences.\n\nNow, that isn't to say that Test4 will be the ultimate testnet. If we uncover major breaking issues, we'll deploy Test5 and so on.\n\nWe promise, however, to come up with a better naming convention going forward.\n\n## Indexer and Transaction Explorer Included\n\nA staple of a functional blockchain network is being able to search, track and verify transactions. This enables the developers to confirm their smart contracts are working as intended, as well as troubleshoot issues. Test4 comes with a transaction explorer, allowing developers to move off custom Test3 forks over to Test4 for convenience.\n\n## Regular Release Schedule for Binaries\n\nWith breaking changes being deployed before the Test4 launch, we can now switch to the rolling release model. Updates will go live on a regular, most likely biweekly basis, enabling developers to test their dApps on the latest available version.\n\n[Portal Loop](https://docs.gno.land/concepts/portal-loop/) will keep up with the binaries, and run on the latest version.\n\n## Proof-of-Contribution Scaffolding\n\nA key Gno.land concept is Proof of Contribution; the idea that the reward goes not to the one who pays to win either via mining rig or big stake, but to the one that invests time to contribute to the community.\n\nContributions will be managed on-chain via DAOs; E.g. a contributor with core contributions will be a part of a DAO that recognizes those contributions, and the rewards will be tied to the level the contributor has in that DAO.\n\nTest4 will lay down the foundation for PoC. We'll be adding proposal support, as well as voting support that executes those proposals on-chain. The result will be a modified version of PoA that will be supported on a protocol level, and managed by the admin. This will make the future switch to PoC a much more seamless affair.\n\n## Release Date\n\nOur goal is to complete development by the end of July 2024, and launch in early August 2024. We've opened up the [Test4 milestone](https://github.com/gnolang/gno/milestone/4) and the Gno.core team's [project board](https://github.com/orgs/gnolang/projects/38/views/5), so you could track the progress. \n\nWe're also getting ready to open up some of the issues to the community, so stay tuned!",
    "2024-05-30T00:00:00Z",
    "Kouteki",
    "gnoland,test4,testnet,poc,proof-of-contribution,tm2"
  ],
  "max_deposit": ""
}
#31 vm/execgno.land/r/gnoland/blog.ModAddPost(monthly-dev-9, The More You Gno 9: Realm to Realm Interaction, Faucet Hub, New Test4 Launch Date and More, This edition brings several major pieces of news; Gno Studio Connect beta, and Faucet Hub. We're moving up the Test4 launch by 2 weeks, so we could get to mainnet faster. We'll also be seeing each other at GopherCons EU and US, so make sure to stop by and say hi! Oh, and our [new gnome logo is live](https://gno.land/r/gnoland/blog:p/the-gnome)! We're also covering all the major and minor code improvements; if you want to dive deeper, we have the weekly engineering [updates](https://github.com/gnolang/meetings/issues/37) and video [recordings](https://www.youtube.com/watch?v=9ch7MhKNBmw&list=PL7nP7r1QiDktMCdw1ydQo2crM3y6Zk7E4) available. # Gno Core Updates ## Introducing Gno Studio Connect Last month [we talked](https://medium.com/@gnostudio/introducing-gno-studio-the-premier-builder-suite-for-gno-land-d1b4d82b46de) about the need for a premier builder suite for Gno.land. As Gno.land expands into a universe of realms, we saw the need for a set of tools; tools empowing the community to create and use succint and composable realms on Gno.land. Last year we launched [Gno Playground](https://play.gno.land/). Now we're adding another tool to the toolbox - [Gno Studio Connect](https://gno.studio/connect). Currently in beta, Connect allows seamless access to realms, making it simple to explore, interact, and engage with Gno.land's smart contracts through function calls. Try out your first realm interaction via Connect by taking our [gnoyourdate](https://gno.studio/connect/view/gno.land/r/gnostudio/gnoyourdate?network=test3#Vote) poll. ## Faucet Hub is Live With the [Faucet Hub](https://faucet.gno.land) you can now easily and effortlessly use all Gno.land ecosystem faucets, including Portal Loop, staging, future testnets and implementation partner chains. It's easily extensible, with the goal of having a single stop for every possible Gno.land test token you might need. ## Test4 Launch Scheduled for July 15 After announcing the tentative [Test4](https://gno.land/r/gnoland/blog:p/test4-explained) launch for the end of July/early August, we realized we're working faster than anticipated. That's why **we're moving the official Test4 launch to July 15, 2024**! ## 550 TPS Recent [supernova](https://github.com/gnolang/supernova) tests showed that we have **~550 TPS** on a single node machine (M3 Mac; 100k txs, 1s block time). This is a huge step up from last year, when the TPS performance we had varied from 7-20 TPS with the same setup. ## New DevOps team member Please welcome Sergio Matone! A DevOps with a strong Go background, he'll be a key player in improving and managing the Gno.land infrastructure. ## Belgrade Retreat The core team travelled from across the world to Belgrade, Serbia, where we hunkered down and solved a number of issues blocking Test4 as well as future releases all the way to the mainnet. Full recap [here](https://gno.land/r/gnoland/blog:p/gnomes-in-serbia). ## Changelog - Dropped support for [all unused DB implementations](https://github.com/gnolang/gno/pull/1714), apart from leveldb and boltdb. Without excessive DB implementations that need maintaining, we can focus on optimizing the ones we actually use, and squeeze out performance from systems we already have. - Resolved a Long Standing CI Issue With BFT Tests. [The CI is finally green across the board](https://github.com/gnolang/gno/pull/1515). We still have some flaky tests, but the CI will no longer constantly fail on the BFT CI due to irregular channel usage. This, couple with our CI rework over the past month, significantly improved our GitHub development process. - Lots of spring cleaning efforts with [gnokey](https://github.com/gnolang/gno/pull/1212), [gnoland](https://github.com/gnolang/gno/pull/1985), and our other tools. We took this chance to also add extensive coverage and regression tests, in case they were missing before. - [Finally merged in Event / Emit support](https://github.com/gnolang/gno/pull/1653) in Gno! Users and Gno clients can finally fetch on-chain events as soon as they happen, and have a rich context for them as well. Support for these has already been propagated to our [tx-indexer](https://github.com/gnolang/tx-indexer/pull/43). - [Merged in the VM gas consumption fixes](https://github.com/gnolang/gno/pull/1430), which standardize VM gas usage across the board for users. Having predictable gas costs, and gas costs that take into account VM operations is only fair for both the node operators and the chain users. - [Reworked the node directory structure](https://github.com/gnolang/gno/pull/1944), and made [genesis.json usage explicit](https://github.com/gnolang/gno/pull/1972), paving the way to an easier multinode future. This effort enables us to easily orchestrate and configure Gno blockchain nodes, especially with the upcoming devnet / testnet launch. - [Overhauled our monorepo GH actions](https://github.com/gnolang/gno/pull/2040), with them now avoiding double-work, and being much snappier. CI for PRs now runs much quicker and more stable, due to these optimizations. - [Finished migration to Goreleaser](https://github.com/gnolang/gno/pull/2101). All of our important tools and binaries have a clear build and release schedule (for Docker, and beyond!), with us implementing nightly, dev and `master` releases on the monorepo. - [Bumped the gnovm test coverage](https://github.com/gnolang/gno/pull/2143) from ~34% to ~67%. With upcoming changes to the GnoVM, we needed a good safety net in the form of a testing suite that will alert us if funny business is going on after a change. - [Many, many bug fixes, small UX improvements and QoL changes](https://github.com/gnolang/gno/commits/master/?since=2024-05-01&until=2024-06-03&before=edb321f85beff98536a3a1a7111febaea0771a5e+35) that keep the lights on and systems running smoothly. # Ecosystem Updates ## Onbloc Multinode/Validator Docs: https://github.com/gnolang/gno/pull/2285 2. `test4` Validator Initiative Discussion: https://github.com/gnolang/hackerspace/issues/69 3. GnoSwap Portal Loop Migration Blocker: https://github.com/gnolang/gno/issues/2283 - Liquidity Pool realm deployment failing on portal-loop - Attempts tried: - Changing package path / reducing realm size / setting gax-wanted to max / changing client env - Cloning gno repo every single recent commit to re-produce on local but never failed. - Update: Potential cause → Certain failing txs are causing corrupt cache files `cacheNodes` - Gno Core - You can check our Merged, Awaiting Review, and TODO PRs in [our hackerspace. ](https://github.com/gnolang/hackerspace/issues/29) - [Onbloc API Docs](https://onbloc-info.gitbook.io/onbloc-api-docs): Permissionless JSON-RPC methods to Gno.land's official networks (portal-loop, test3) for any individuals or teams building on Gno.land (feedback is welcome!) - GnoSwap - Contract migration to portal-loop (Tartget: May 24th) - Applying `std.Emit` to contracts and APIs ([apply emit event in contract](https://github.com/gnoswap-labs/gnoswap/pull/217)) - VWAP (Volume-Weighted Average Price) implementation for improved pricing ([gnoswap-labs/vwap](https://github.com/gnoswap-labs/vwap)) - Misc - Add links to [GnoStudio Connect in GnoScan](https://gnoscan.io/realms/details?path=gno.land/r/michelle/mymood) - ![image](https://hackmd.io/_uploads/HJrWausQC.png) - Full update: [Onbloc Hackerspace](https://github.com/gnolang/hackerspace/issues/29#issuecomment-2124697977), [Onbloc Kanban](https://github.com/orgs/gnolang/projects/23) ## Teritori - GnoVM - **Add stacktrace functionality and replace some uses of `Machine.String`**: This pull request is currently in review discussions with Morgan ([PR #2145](https://github.com/gnolang/gno/pull/2145)). - **Go2Gno loses type info**: This issue is Merged ([PR #2016](https://github.com/gnolang/gno/pull/2016)). - **Avoid instantiation of banker on pure package**: This change is awaiting review and merge ([PR #2248](https://github.com/gnolang/gno/pull/2248)). - **Missing length check in value declaration**: This pull request is also awaiting review and merge ([PR #2206](https://github.com/gnolang/gno/pull/2206)). - **Issue: File line not set on `ValueDeclr`, `ImportDecl`, `TypeDecl`**: The issue has been resolved and closed ([Issue #2220](https://github.com/gnolang/gno/issues/2220)). - **File line not set on `ValueDeclr`, `ImportDecl`, `TypeDecl`**: The fix has been successfully merged ([PR #2221](https://github.com/gnolang/gno/pull/2221)). - Gno lint - **Printing all the errors from goparser**: This pull request has been successfully merged ([PR #2011](https://github.com/gnolang/gno/pull/2011)). - **Lint all files in folder before panicking**: This pull request is awaiting review and merge ([PR #2202](https://github.com/gnolang/gno/pull/2202)). - DAO SDK (still waiting for review) PR: [#1925](https://github.com/gnolang/gno/pull/1925) - **GnoVM** - **Cannot use struct as key of a map**: We resolved the issue where structs couldn't be used as keys in maps. This PR has been merged ([PR #2044](https://github.com/gnolang/gno/pull/2044)). - **Go2Gno loses type info**: This issue is still awaiting review and merge ([PR #2016](https://github.com/gnolang/gno/pull/2016)). - **Gno Issue with pointer**: We proposed a solution ([Issue #2060](https://github.com/gnolang/gno/issues/2060)). - **Stacktrace functionality**: We added stacktrace functionality and replaced some uses of `Machine.String` ([PR #2145](https://github.com/gnolang/gno/pull/2145)). - **Recover not working correctly with runtime panics**: We created an issue to address this problem ([Issue #2146](https://github.com/gnolang/gno/issues/2146)). - **Panic when adding a package with subpaths**: We worked on this issue and waiting for review and merge [PR #2155](https://github.com/gnolang/gno/pull/2155)). - **Gno lint** - **Printing all the errors from goparser**: This improvement is waiting for review and merge ([PR #2011](https://github.com/gnolang/gno/pull/2011)). - **DAO SDK** - **DAO SDK**: Waiting Review and merge: [PR #1925](https://github.com/gnolang/gno/pull/1925). - **Project Manager** Since we have already a lot in review, before opening a PR on the Gno repo, we're taking time to: - Polish the "private" [atomic PR](https://github.com/TERITORI/gno/pull/20) - Polish the UI - Set-up e2e testing with gnodev and a gno-js-client wallet, you can see a demo recording [here](https://github.com/TERITORI/gno/pull/20), the end-goal is to run e2e tests in CI ## Dragos ### ZenTasktic - Zentasktic User (3rd grant milestone) implemented: https://github.com/irreverentsimplicity/zentasktic-user - updated docs for all 3 projects: - https://github.com/irreverentsimplicity/zentasktic-core/blob/main/README.md - https://github.com/irreverentsimplicity/zentasktic-project/blob/main/README.md - https://github.com/irreverentsimplicity/zentasktic-user/blob/main/README.md - zentasktic (the package) - big overhaul, allowing for keeping the Assess-Decide-Do logic on the `zentasktic` package, but save the data locally, in the realm importing the package. PR here with some more explanation: https://github.com/irreverentsimplicity/zentasktic-core/pull/1 - zentasktic-project (the realm) - backend finished, repo here: https://github.com/irreverentsimplicity/zentasktic-project - question: test failing on RemoveWorkDuration with `panic: reflect: reflect.Value.SetString using value obtained using unexported field` on WorkDuration? AddWorkDuration and EditWorkDuration tests are passing... ### Flippando * hackerville.xyz website updated for the upcoming airdrop: https://hackerville.xyz * airdrop script in testing * flippando NFT airdrop - copy added to the main flippando website, with airdrop mechanics and due date: https://gno.flippando.xyz/airdrop - minor updates to the website in preparation for this (airdrop mode: https://gno.flippando.xyz/playground) - spoiler, it will be on June 8th (2024, for conformity) ## Berty - tx-indexer genesis [PR34](https://github.com/gnolang/tx-indexer/pull/34) (related to [PR1941](https://github.com/gnolang/gno/pull/1941)? ) / Jeff - blank screen bug fixed - dSocial latest features / Iuri - reply to a post - view other user's posts - others - UI conversation with Alexis - to plan soon - dSocial demo app - Released on Test Flight and Google Play - To get an invitation, send your email to Iuri on Signal. Please say if you have an iPhone or Android phone. - Using custom indexer on the Berty production server - Stress testing - Finalizing report - What is the PR to watch for resolving https://github.com/gnolang/gno/issues/1577 ? - Referenced PR https://github.com/gnolang/gno/issues/1576 - Comment on CodeMagic as a possibility ## Var Meta - issue: https://github.com/gnolang/gno/issues/2053 PR: https://github.com/gnolang/gno/pull/2108 Des: limit import path length Status: Merged - issue: https://github.com/gnolang/gno/issues/2192 PR: https://github.com/gnolang/gno/pull/2242 Des: Restric the maketx call function can only call to a realm Status: Merged - issue: https://github.com/gnolang/gno/issues/1998 PR: https://github.com/gnolang/gno/pull/2149 Des: This PR defines a GasUsed() func and a defaultInvokeCost in gas within std package. Simple feature let realm developer know the gas used at the time function is called. Status: Wait for reviewing - ISSUE: New issue about GnoPlayGround RUN and TEST func in different browsers (safari, chrome) Link: https://github.com/gnolang/gno/issues/2270 Status: NO PR is made, waiting core team - WIP: Sponsor TX PR: https://github.com/gnolang/gno/pull/2209 Des: This PR aims to facilitate a transaction that should have been from A(signer) to B(Address/Realm) (A would pay the gas fee). Instead, A will delegate C(signer) to sign the transaction from A to B (C will pay the gas fee). Status: Under reviewing - PR: https://github.com/gnolang/gno/pull/2249 Issue: https://github.com/gnolang/gno/issues/2232 Des: To consolidate our returns on gnokey queries, I propose that we make them return JSON strings Status: Waiting for #1776 to be merged - PR: https://github.com/gnolang/gno/pull/2198 Issue: https://github.com/gnolang/gno/issues/2193 Des: Propose refactoring p/ownable from a struct with a specific implementation to a more minimal interface, allowing for custom ownership logic while retaining the current struct as the default implementation. Status: Waiting for reviewing - PR: https://github.com/gnolang/gno/pull/2225 Issue: https://github.com/gnolang/gno/issues/2193 Des: I propose integrating certain utility smart contracts from Ethereum into Gnoland. Now i'm working on defining the Bitmap, NonceManager and Queue packages, which can provide essential functionality for the Gnoland ecosystem. Status: Waiting for reviewing - PR: https://github.com/gnolang/gno/pull/2234 Issue: https://github.com/gnolang/gno/issues/2231 Des: We should either implement this, or remove the flag until the functionality is implemented. Same goes for the –prove flag. Status: Merged - PR: - Support extensions like Metadata, RoyaltyInfo for GRC721 https://github.com/gnolang/gno/pull/1962 (Merged) - Deprecate & remove std.CurrentRealmPath() https://github.com/gnolang/gno/pull/2087 (Reviewing) - limit package path length https://github.com/gnolang/gno/pull/2108 (Aprroved) - Implement Bitmap package https://github.com/gnolang/gno/pull/2115 (Need review) - Implement Nonces package https://github.com/gnolang/gno/pull/2123 (Need review) - GasUsed() for GnoVM std https://github.com/gnolang/gno/pull/2149 - Issues: - Panic when getting keypair information https://github.com/gnolang/gno/issues/2133 - Proposal: Integrate Sponsor Mechanism for Transaction Fees https://github.com/gnolang/gno/issues/2152 ## Student Contributor Program **Mustapha** * Made a V0 Auction dapp ([PR#2265](https://github.com/gnolang/gno/pull/2265)) ## Contributors - **Antonio** - GNOWLEDGE: A realm to simulate a Stackoverflow styled. Sharing to get some feedback. You can check it out via https://github.com/iam-agf/Gnowledge-website - [Shiken Project repositories](https://github.com/iam-agf?tab=repositories&q=shiken&type=source&language=&sort=) # New Content - [Key/Value Stores: How We Improved the Performance of Our tx-indexer by 10x](https://gno.land/r/gnoland/blog:p/kv-stores-indexer) - [Introducing Gno Studio, the Premier Builder Suite for Gno.land](https://gno.land/r/gnoland/blog:p/gno-studio-intro) - [Introducing our new Gno.land logo: the gnome](https://gno.land/r/gnoland/blog:p/the-gnome) - [Gnomes Spotted in Belgrade, Serbia: Recap from the Engineering Retreat and Golang Serbia Meetup](https://gno.land/r/gnoland/blog:p/gnomes-in-serbia) - [Test4 Explained](https://gno.land/r/gnoland/blog:p/test4-explained) # Events and Meetups ## Past events - GoLang Serbia Meetup / Belgrade / May 23. We used the Gno core team's retreat in Belgrade to connect with the local Go developers and possible contributors over the next few months to build the ecosystem. [Full recap](https://gno.land/r/gnoland/blog:p/gnomes-in-serbia). - We're currently wrapping up **GopherCon EU** in Berlin, expect an update soon! ## Upcoming events - **GopherCon US** / Chicago / July 7th - 10th - **Nebular Summit** / Brussels / July 12th/13th ## Discord Developer Office Hours Every week on Thursday at 2:30 pm CEST, we host office hours on [Discord](https://discord.com/invite/d24CT5b9cd?event=1252310282450112595) to answer questions, discuss updates, and catch up with the community. We'd love to see you there!, 2024-06-20T00:00:00Z, Kouteki, gnoland,ecosystem,updates,gnovm,tm2,test4,gnostudio,connect)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "monthly-dev-9",
    "The More You Gno 9: Realm to Realm Interaction, Faucet Hub, New Test4 Launch Date and More",
    "\n\nThis edition brings several major pieces of news; Gno Studio Connect beta, and Faucet Hub. We're moving up the Test4 launch by 2 weeks, so we could get to mainnet faster. We'll also be seeing each other at GopherCons EU and US, so make sure to stop by and say hi! Oh, and our [new gnome logo is live](https://gno.land/r/gnoland/blog:p/the-gnome)!\n\nWe're also covering all the major and minor code improvements; if you want to dive deeper, we have the weekly engineering [updates](https://github.com/gnolang/meetings/issues/37) and video [recordings](https://www.youtube.com/watch?v=9ch7MhKNBmw&list=PL7nP7r1QiDktMCdw1ydQo2crM3y6Zk7E4) available. \n\n# Gno Core Updates\n\n## Introducing Gno Studio Connect\n\nLast month [we talked](https://medium.com/@gnostudio/introducing-gno-studio-the-premier-builder-suite-for-gno-land-d1b4d82b46de) about the need for a premier builder suite for Gno.land. As Gno.land expands into a universe of realms, we saw the need for a set of tools; tools empowing the community to create and use succint and composable realms on Gno.land. Last year we launched [Gno Playground](https://play.gno.land/). Now we're adding another tool to the toolbox - [Gno Studio Connect](https://gno.studio/connect). Currently in beta, Connect allows seamless access to realms, making it simple to explore, interact, and engage with Gno.land's smart contracts through function calls. Try out your first realm interaction via Connect by taking our [gnoyourdate](https://gno.studio/connect/view/gno.land/r/gnostudio/gnoyourdate?network=test3#Vote) poll. \n\n## Faucet Hub is Live\n\nWith the [Faucet Hub](https://faucet.gno.land) you can now easily and effortlessly use all Gno.land ecosystem faucets, including Portal Loop, staging, future testnets and implementation partner chains. It's easily extensible, with the goal of having a single stop for every possible Gno.land test token you might need.\n\n## Test4 Launch Scheduled for July 15\n\nAfter announcing the tentative [Test4](https://gno.land/r/gnoland/blog:p/test4-explained) launch for the end of July/early August, we realized we're working faster than anticipated. That's why **we're moving the official Test4 launch to July 15, 2024**!\n\n## 550 TPS\n\nRecent [supernova](https://github.com/gnolang/supernova) tests showed that we have **~550 TPS** on a single node machine (M3 Mac; 100k txs, 1s block time). This is a huge step up from last year, when the TPS performance we had varied from 7-20 TPS with the same setup.\n\n## New DevOps team member\n\nPlease welcome Sergio Matone! A DevOps with a strong Go background, he'll be a key player in improving and managing the Gno.land infrastructure.\n\n## Belgrade Retreat\n\nThe core team travelled from across the world to Belgrade, Serbia, where we hunkered down and solved a number of issues blocking Test4 as well as future releases all the way to the mainnet. Full recap [here](https://gno.land/r/gnoland/blog:p/gnomes-in-serbia).\n\n## Changelog\n\n- Dropped support for [all unused DB implementations](https://github.com/gnolang/gno/pull/1714), apart from leveldb and boltdb. Without excessive DB implementations that need maintaining, we can focus on optimizing the ones we actually use, and squeeze out performance from systems we already have. \n\n- Resolved a Long Standing CI Issue With BFT Tests. [The CI is finally green across the board](https://github.com/gnolang/gno/pull/1515). We still have some flaky tests, but the CI will no longer constantly fail on the BFT CI due to irregular channel usage. This, couple with our CI rework over the past month, significantly improved our GitHub development process.\n\n- Lots of spring cleaning efforts with [gnokey](https://github.com/gnolang/gno/pull/1212), [gnoland](https://github.com/gnolang/gno/pull/1985), and our other tools. We took this chance to also add extensive coverage and regression tests, in case they were missing before.\n\n- [Finally merged in Event / Emit support](https://github.com/gnolang/gno/pull/1653) in Gno! Users and Gno clients can finally fetch on-chain events as soon as they happen, and have a rich context for them as well. Support for these has already been propagated to our [tx-indexer](https://github.com/gnolang/tx-indexer/pull/43).\n\n- [Merged in the VM gas consumption fixes](https://github.com/gnolang/gno/pull/1430), which standardize VM gas usage across the board for users. Having predictable gas costs, and gas costs that take into account VM operations is only fair for both the node operators and the chain users.\n\n- [Reworked the node directory structure](https://github.com/gnolang/gno/pull/1944), and made [genesis.json usage explicit](https://github.com/gnolang/gno/pull/1972), paving the way to an easier multinode future. This effort enables us to easily orchestrate and configure Gno blockchain nodes, especially with the upcoming devnet / testnet launch.\n\n- [Overhauled our monorepo GH actions](https://github.com/gnolang/gno/pull/2040), with them now avoiding double-work, and being much snappier. CI for PRs now runs much quicker and more stable, due to these optimizations.\n\n- [Finished migration to Goreleaser](https://github.com/gnolang/gno/pull/2101). All of our important tools and binaries have a clear build and release schedule (for Docker, and beyond!), with us implementing nightly, dev and `master` releases on the monorepo.\n\n- [Bumped the gnovm test coverage](https://github.com/gnolang/gno/pull/2143) from ~34% to ~67%. With upcoming changes to the GnoVM, we needed a good safety net in the form of a testing suite that will alert us if funny business is going on after a change.\n\n- [Many, many bug fixes, small UX improvements and QoL changes](https://github.com/gnolang/gno/commits/master/?since=2024-05-01&until=2024-06-03&before=edb321f85beff98536a3a1a7111febaea0771a5e+35) that keep the lights on and systems running smoothly.\n\n# Ecosystem Updates\n\n## Onbloc\n\n Multinode/Validator Docs:  https://github.com/gnolang/gno/pull/2285\n2. `test4` Validator Initiative Discussion: https://github.com/gnolang/hackerspace/issues/69\n3. GnoSwap Portal Loop Migration Blocker: https://github.com/gnolang/gno/issues/2283\n    - Liquidity Pool realm deployment failing on portal-loop\n    - Attempts tried:\n        - Changing package path / reducing realm size / setting gax-wanted to max / changing client env\n        - Cloning gno repo every single recent commit to re-produce on local but never failed.\n    - Update: Potential cause → Certain failing txs are causing corrupt cache files `cacheNodes`\n\n- Gno Core\n    - You can check our Merged, Awaiting Review, and TODO PRs in [our hackerspace. ](https://github.com/gnolang/hackerspace/issues/29)\n- [Onbloc API Docs](https://onbloc-info.gitbook.io/onbloc-api-docs): Permissionless JSON-RPC methods to Gno.land's official networks (portal-loop, test3) for any individuals or teams building on Gno.land (feedback is welcome!)\n- GnoSwap\n    - Contract migration to portal-loop (Tartget: May 24th)\n    - Applying `std.Emit` to contracts and APIs ([apply emit event in contract](https://github.com/gnoswap-labs/gnoswap/pull/217))\n    - VWAP (Volume-Weighted Average Price) implementation for improved pricing ([gnoswap-labs/vwap](https://github.com/gnoswap-labs/vwap))\n- Misc\n    - Add links to [GnoStudio Connect in GnoScan](https://gnoscan.io/realms/details?path=gno.land/r/michelle/mymood)\n    - ![image](https://hackmd.io/_uploads/HJrWausQC.png)\n- Full update: [Onbloc Hackerspace](https://github.com/gnolang/hackerspace/issues/29#issuecomment-2124697977), [Onbloc Kanban](https://github.com/orgs/gnolang/projects/23)\n\n\n## Teritori\n\n- GnoVM\n\n    - **Add stacktrace functionality and replace some uses of `Machine.String`**: This pull request is currently in review discussions with Morgan ([PR #2145](https://github.com/gnolang/gno/pull/2145)).\n    - **Go2Gno loses type info**: This issue is Merged ([PR #2016](https://github.com/gnolang/gno/pull/2016)).\n    - **Avoid instantiation of banker on pure package**: This change is awaiting review and merge ([PR #2248](https://github.com/gnolang/gno/pull/2248)).\n    - **Missing length check in value declaration**: This pull request is also awaiting review and merge ([PR #2206](https://github.com/gnolang/gno/pull/2206)).\n    - **Issue: File line not set on `ValueDeclr`, `ImportDecl`, `TypeDecl`**: The issue has been resolved and closed ([Issue #2220](https://github.com/gnolang/gno/issues/2220)).\n    - **File line not set on `ValueDeclr`, `ImportDecl`, `TypeDecl`**: The fix has been successfully merged ([PR #2221](https://github.com/gnolang/gno/pull/2221)).\n\n- Gno lint\n\n    - **Printing all the errors from goparser**: This pull request has been successfully merged ([PR #2011](https://github.com/gnolang/gno/pull/2011)).\n    - **Lint all files in folder before panicking**: This pull request is awaiting review and merge ([PR #2202](https://github.com/gnolang/gno/pull/2202)).\n\n- DAO SDK (still waiting for review)\n  PR: [#1925](https://github.com/gnolang/gno/pull/1925)\n  \n- **GnoVM**\n\n    - **Cannot use struct as key of a map**: We resolved the issue where structs couldn't be used as keys in maps. This PR has been merged ([PR #2044](https://github.com/gnolang/gno/pull/2044)).\n    - **Go2Gno loses type info**: This issue is still awaiting review and merge ([PR #2016](https://github.com/gnolang/gno/pull/2016)).\n    - **Gno Issue with pointer**: We  proposed a solution ([Issue #2060](https://github.com/gnolang/gno/issues/2060)).\n    - **Stacktrace functionality**: We added stacktrace functionality and replaced some uses of `Machine.String` ([PR #2145](https://github.com/gnolang/gno/pull/2145)).\n    - **Recover not working correctly with runtime panics**: We created an issue to address this problem ([Issue #2146](https://github.com/gnolang/gno/issues/2146)).\n    - **Panic when adding a package with subpaths**: We worked on this issue and waiting for review and merge  [PR #2155](https://github.com/gnolang/gno/pull/2155)).\n\n- **Gno lint**\n\n    - **Printing all the errors from goparser**: This improvement is waiting for review and merge ([PR #2011](https://github.com/gnolang/gno/pull/2011)).\n\n- **DAO SDK**\n\n    - **DAO SDK**: Waiting Review and merge: [PR #1925](https://github.com/gnolang/gno/pull/1925).\n\n- **Project Manager**\nSince we have already a lot in review, before opening a PR on the Gno repo, we're taking time to:\n    - Polish the \"private\" [atomic PR](https://github.com/TERITORI/gno/pull/20)\n    - Polish the UI\n    - Set-up e2e testing with gnodev and a gno-js-client wallet, you can see a demo recording [here](https://github.com/TERITORI/gno/pull/20), the end-goal is to run e2e tests in CI\n\n## Dragos\n\n### ZenTasktic \n- Zentasktic User  (3rd grant milestone) implemented: https://github.com/irreverentsimplicity/zentasktic-user\n    - updated docs for all 3 projects:\n            - https://github.com/irreverentsimplicity/zentasktic-core/blob/main/README.md\n            - https://github.com/irreverentsimplicity/zentasktic-project/blob/main/README.md\n            - https://github.com/irreverentsimplicity/zentasktic-user/blob/main/README.md\n\n- zentasktic (the package)\n    - big overhaul, allowing for keeping the Assess-Decide-Do logic on the `zentasktic` package, but save the data locally, in the realm importing the package. PR here with some more explanation: https://github.com/irreverentsimplicity/zentasktic-core/pull/1\n\n- zentasktic-project (the realm)\n    - backend finished, repo here: https://github.com/irreverentsimplicity/zentasktic-project\n    - question: test failing on RemoveWorkDuration with `panic: reflect: reflect.Value.SetString using value obtained using unexported field` on WorkDuration? AddWorkDuration and EditWorkDuration tests are passing...\n\n### Flippando\n* hackerville.xyz website updated for the upcoming airdrop: https://hackerville.xyz\n* airdrop script in testing\n* flippando NFT airdrop\n    - copy added to the main flippando website, with airdrop mechanics and due date: https://gno.flippando.xyz/airdrop\n    - minor updates to the website in preparation for this (airdrop mode: https://gno.flippando.xyz/playground)\n    - spoiler, it will be on June 8th (2024, for conformity)\n\n## Berty\n\n- tx-indexer genesis [PR34](https://github.com/gnolang/tx-indexer/pull/34) (related to [PR1941](https://github.com/gnolang/gno/pull/1941)? ) / Jeff\n  - blank screen bug fixed\n- dSocial latest features / Iuri\n  - reply to a post\n  - view other user's posts\n  - others\n- UI conversation with Alexis - to plan soon\n\n- dSocial demo app\n  - Released on Test Flight and Google Play\n  - To get an invitation, send your email to Iuri on Signal. Please say if you have an iPhone or Android phone.\n  - Using custom indexer on the Berty production server\n- Stress testing\n  - Finalizing report\n  - What is the PR to watch for resolving https://github.com/gnolang/gno/issues/1577 ?\n    - Referenced PR https://github.com/gnolang/gno/issues/1576\n  - Comment on CodeMagic as a possibility\n\n## Var Meta\n\n- issue: https://github.com/gnolang/gno/issues/2053\nPR: https://github.com/gnolang/gno/pull/2108\nDes: limit import path length\nStatus: Merged\n- issue: https://github.com/gnolang/gno/issues/2192\nPR: https://github.com/gnolang/gno/pull/2242\nDes: Restric the maketx call function can only call to a realm\nStatus: Merged\n- issue: https://github.com/gnolang/gno/issues/1998\nPR: https://github.com/gnolang/gno/pull/2149\nDes: This PR defines a GasUsed() func and a defaultInvokeCost in gas within std package. Simple feature let realm developer know the gas used at the time function is called.\nStatus: Wait for reviewing\n- ISSUE: New issue about GnoPlayGround RUN and TEST func in different browsers (safari, chrome)\nLink: https://github.com/gnolang/gno/issues/2270\nStatus: NO PR is made, waiting core team\n- WIP: Sponsor TX\nPR: https://github.com/gnolang/gno/pull/2209\nDes: This PR aims to facilitate a transaction that should have been from A(signer) to B(Address/Realm) (A would pay the gas fee). Instead, A will delegate C(signer) to sign the transaction from A to B (C will pay the gas fee).\nStatus: Under reviewing\n- PR: https://github.com/gnolang/gno/pull/2249\nIssue: https://github.com/gnolang/gno/issues/2232\nDes: To consolidate our returns on gnokey queries, I propose that we make them return JSON strings\nStatus: Waiting for #1776 to be merged\n- PR: https://github.com/gnolang/gno/pull/2198\nIssue: https://github.com/gnolang/gno/issues/2193\nDes: Propose refactoring p/ownable from a struct with a specific implementation to a more minimal interface, allowing for custom ownership logic while retaining the current struct as the default implementation.\nStatus: Waiting for reviewing\n- PR: https://github.com/gnolang/gno/pull/2225\nIssue: https://github.com/gnolang/gno/issues/2193\nDes: I propose integrating certain utility smart contracts from Ethereum into Gnoland. Now i'm working on defining the Bitmap, NonceManager and Queue packages, which can provide essential functionality for the Gnoland ecosystem.\nStatus: Waiting for reviewing\n- PR: https://github.com/gnolang/gno/pull/2234\nIssue: https://github.com/gnolang/gno/issues/2231\nDes: We should either implement this, or remove the flag until the functionality is implemented. Same goes for the –prove flag.\nStatus: Merged\n\n- PR: \n    - Support extensions like Metadata, RoyaltyInfo for GRC721  https://github.com/gnolang/gno/pull/1962 (Merged)\n    - Deprecate & remove std.CurrentRealmPath() https://github.com/gnolang/gno/pull/2087 (Reviewing)\n    - limit package path length https://github.com/gnolang/gno/pull/2108 (Aprroved)\n    - Implement Bitmap package https://github.com/gnolang/gno/pull/2115 (Need review)\n    - Implement Nonces package https://github.com/gnolang/gno/pull/2123 (Need review)\n    - GasUsed() for GnoVM std https://github.com/gnolang/gno/pull/2149\n- Issues:\n    - Panic when getting keypair information https://github.com/gnolang/gno/issues/2133\n    - Proposal: Integrate Sponsor Mechanism for Transaction Fees https://github.com/gnolang/gno/issues/2152\n\n## Student Contributor Program\n\n**Mustapha**\n* Made a V0 Auction dapp ([PR#2265](https://github.com/gnolang/gno/pull/2265))\n\n## Contributors\n- **Antonio**\n  - GNOWLEDGE: A realm to simulate a Stackoverflow styled. Sharing to get some feedback. You can check it out via https://github.com/iam-agf/Gnowledge-website\n  - [Shiken Project repositories](https://github.com/iam-agf?tab=repositories&q=shiken&type=source&language=&sort=)\n\n# New Content\n\n- [Key/Value Stores: How We Improved the Performance of Our tx-indexer by 10x](https://gno.land/r/gnoland/blog:p/kv-stores-indexer)\n- [Introducing Gno Studio, the Premier Builder Suite for Gno.land](https://gno.land/r/gnoland/blog:p/gno-studio-intro)\n- [Introducing our new Gno.land logo: the gnome](https://gno.land/r/gnoland/blog:p/the-gnome)\n- [Gnomes Spotted in Belgrade, Serbia: Recap from the Engineering Retreat and Golang Serbia Meetup](https://gno.land/r/gnoland/blog:p/gnomes-in-serbia)\n- [Test4 Explained](https://gno.land/r/gnoland/blog:p/test4-explained)\n\n# Events and Meetups\n\n## Past events\n\n- GoLang Serbia Meetup / Belgrade / May 23. We used the Gno core team's retreat in Belgrade to connect with the local Go developers and possible contributors over the next few months to build the ecosystem. [Full recap](https://gno.land/r/gnoland/blog:p/gnomes-in-serbia).\n- We're currently wrapping up **GopherCon EU** in Berlin, expect an update soon!\n\n## Upcoming events\n\n- **GopherCon US** / Chicago / July 7th - 10th\n- **Nebular Summit** / Brussels / July 12th/13th\n\n## Discord Developer Office Hours\n\nEvery week on Thursday at 2:30 pm CEST, we host office hours on [Discord](https://discord.com/invite/d24CT5b9cd?event=1252310282450112595) to answer questions, discuss updates, and catch up with the community. We'd love to see you there!",
    "2024-06-20T00:00:00Z",
    "Kouteki",
    "gnoland,ecosystem,updates,gnovm,tm2,test4,gnostudio,connect"
  ],
  "max_deposit": ""
}
#32 vm/execgno.land/r/gnoland/blog.ModAddPost(gno-debugger, Debugging Gno Programs, In this article, we introduce the new Gno debugger feature and show how it can be used to better understand Gno programs and help to fix bugs. ## Motivation for a Gno debugger > Debugging is twice as hard as writing code. > > -- <cite>Brian Kerninghan, "The Elements of Programming Style"</cite> > On average, you spend about eight to ten times debugging as you do writing code. > > -- <cite>Anonymous</cite> Having a good debugger is important. But the Gno language is almost Go, and gno.land itself is entirely written in Go. Could I just use the existing Go tools, i.e. the [delve] debugger, to take control and debug my Gno programs? You cannot debug your *Gno* program this way because doing so would entail debugging the Gno virtual machine rather than your own program. The relevant state information would be opaque and would need to be reversed and reconstructed from internal Gno virtual machine data structures. The Gno debugger addresses this issue by displaying the state of the Gno program memory symbolically. It allows for control of program execution at the source code level, regardless of the virtual machine implementation. ## Setting up The Gno debugger is fully integrated in the [gno](https://docs.gno.land/gno-tooling/cli/gno-tooling-gno) binary, which is the tool required to build, test, and run Gno programs locally. There is no need to install a specific tool. You just have to install the `gno` tool itself with: ```shell git clone https://github.com/gnolang/gno cd gno go install ./gnovm/cmd/gno ``` We are now ready to play with Gno programs. Let's consider a simple classic example as a target program, the computation of [Fibonacci numbers]: ```go // fib.gno package main // fib returns the nth number in the Fibonacci sequence. func fib(n int) int { if n < 2 { return n } return fib(n-2) + fib(n-1) } func main() { println(fib(4)) } ``` To execute this program, we run the command `gno run ./fib.gno`. To activate the debugger, we just pass the `-debug` flag: `gno run -debug ./fib.gno`. Use `gno run -help` to get more options if needed. ## Quick tour of the debugger When you start a program in debug mode, you are greeted by a prompt allowing you to interact with it via the terminal: ```shell $ gno run -debug ./fib.gno Welcome to the GnoVM debugger. type 'help' for list of commands. dbg> ``` Entering `help` gives you the list of available commands and their short usage: ```shell dbg> help The following commands are available: break|b [locspec] Set a breakpoint. breakpoints|bp Print out info for active breakpoints. clear [id] Delete breakpoint (all if no id). continue|c Run until breakpoint or program termination. detach Close debugger and resume program. down [n] Move the current frame down by n (default 1). exit|quit|q Exit the debugger and program. help|h [command] Print the help message. list|l [locspec] Show source code. print|p <expression> Print a variable or expression. stack|bt Print stack trace. step|s Single step through program. stepi|si Single step a single VM instruction. up [n] Move the current frame up by n (default 1). Type help followed by a command for full documentation. dbg> ``` If you have already used a debugger before, like [gdb] or [lldb] for C/C++ programs, or [delve] for Go programs, the Gno debugger should look familiar; the commands are similar in their syntax and usage. The commands can be classified in the following categories: - managing breakpoints: `break`, `breakpoints`, `clear`, - controlling execution: `step`, `stepi`, `continue`, - browsing code, data and stack: `list`, `print`, `stack`, - navigating the stack: `up`, `down`, - quitting the debugger: `detach`, `exit`. ## Controlling and exploring the program state Let's go back to our Fibonacci program, still paused. We `step` a first time, which instructs the GnoVM to execute a single statement and give back control to the user: ```shell dbg> s > main.main() main/./fib.gno:11:1 7: return n 8: } 9: return fib(n-2) + fib(n-1) 10: } 11: => 12: func main() { 13: println(fib(4)) 14: } ``` The first output line `> main.main() main/./fib.gno:11:1` indicates the precise current location in source code, followed by a short source listing around this location. The current line is indicated by the cursor `=>`. From there, we could repeat `step` commands to progress, but that would be too tedious. Instead, we set a breakpoint at an interesting line in the `fib` function, and `continue` to it directly: ```shell dbg> b 7 Breakpoint 0 at main main/./fib.gno:7:1 dbg> c > main.fib() main/./fib.gno:7:10 2: package main 3: 4: // fib returns the nth number in the Fibonacci sequence. 5: func fib(n int) int { 6: if n < 2 { => 7: return n 8: } 9: return fib(n-2) + fib(n-1) 10: } 11: dbg> ``` Note that we have used the short alias of commands: `b` for `break` and `c` for `continue`. We only need to specify the line number when setting the break point here, due to it being in the same file. Setting break points in other files requires specifying the full file path and line number. We can now examine the call stack which indicates the successive nested function calls up to the current location: ```shell dbg> stack 0 in main.fib at main/./fib.gno:7:10 1 in main.fib at main/./fib.gno:9:20 2 in main.fib at main/./fib.gno:9:20 3 in main.main at main/./fib.gno:13:2 dbg> ``` We see a call stack of depth 4, with call frames (local function contexts) numbered from 0 to 3, 0 being the current call level (the deepest). This information is crucial, especially when debugging recursive functions like `fib`. We know that the caller and its caller were both `fib`. Now we want to examine the value of the local parameter `n`, for each call level: ```shell dbg> print n (0 int) dbg> up > main.fib() main/./fib.gno:7:10 Frame 1: main/./fib.gno:9:20 4: // fib returns the nth number in the Fibonacci sequence. 5: func fib(n int) int { 6: if n < 2 { 7: return n 8: } => 9: return fib(n-2) + fib(n-1) 10: } 11: 12: func main() { 13: println(fib(4)) dbg> print n (2 int) dbg> up > main.fib() main/./fib.gno:7:10 Frame 2: main/./fib.gno:9:20 4: // fib returns the nth number in the Fibonacci sequence. 5: func fib(n int) int { 6: if n < 2 { 7: return n 8: } => 9: return fib(n-2) + fib(n-1) 10: } 11: 12: func main() { 13: println(fib(4)) dbg> print n (4 int) dbg> ``` We see that the local value `n` is 0 at current frame 0, 2 at frame 1 and 4 at frame 2, which corresponds to the nested calls of `fib` expressed at line 9. The `up` and `down` stack navigation commands enable the debugger to display the value of local function variables and parameters for the whole call chain. In this example, the `n` variable is simply an integer, but the `print` command is also able to handle more complex expressions to uncover the content of arbitrary maps, struct, arrays, etc using the same syntax as Go. For example, `print a.b[n]` will print as expected, with `a` being a value of type: ```go var a struct { b []string } ``` For security reasons, the `print` command will only evaluate expressions with no side effects on the virtual machine state. For example, it is not possible to perform an arithmetic operation like `print a + 2`, or to call a function like `printf f(6)`. ## Conclusion We have introduced the new Gno debugger and presented its main capabilities. This is just the start of a new project, with a lot of room for improvement. The whole Gno project being open source, you are welcome not only to provide feedbacks and suggestions, but also to contribute at https://github.com/gnolang/gno. [delve]: https://github.com/go-delve/delve [gno]: https://github.com/gnolang/gno/tree/master/gnovm/cmd/gno [Fibonacci numbers]: https://simple.wikipedia.org/wiki/Fibonacci_number [gdb]: https://sourceware.org/gdb/ [lldb]: https://lldb.llvm.org , 2024-08-06T13:37:00Z, mvertes, blog,post,tutorial,gno,debugger)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "gno-debugger",
    "Debugging Gno Programs",
    "\n \nIn this article, we introduce the new Gno debugger feature and show how it can be used to better understand Gno programs and help to fix bugs.\n\n## Motivation for a Gno debugger\n\n> Debugging is twice as hard as writing code.\n>\n> -- <cite>Brian Kerninghan, \"The Elements of Programming Style\"</cite>\n\n> On average, you spend about eight to ten times debugging as you do writing code.\n>\n> -- <cite>Anonymous</cite>\n\nHaving a good debugger is important. But the Gno language is almost Go, and gno.land itself is entirely written in Go. Could I just use the existing Go tools, i.e.  the [delve] debugger, to take control and debug my Gno programs?\n\nYou cannot debug your *Gno* program this way because doing so would entail debugging the Gno virtual machine rather than your own program. The relevant state information would be opaque and would need to be reversed and reconstructed from internal Gno virtual machine data structures.\n\nThe Gno debugger addresses this issue by displaying the state of the Gno program memory symbolically. It allows for control of program execution at the source code level, regardless of the virtual machine implementation.\n\n## Setting up\n\nThe Gno debugger is fully integrated in the [gno](https://docs.gno.land/gno-tooling/cli/gno-tooling-gno) binary, which is the tool required to build, test, and run Gno programs locally.\n\nThere is no need to install a specific tool. You just have to install the `gno` tool itself with:\n\n```shell\ngit clone https://github.com/gnolang/gno\ncd gno\ngo install ./gnovm/cmd/gno\n```\n\nWe are now ready to play with Gno programs. Let's consider a simple classic example as a target program, the computation of [Fibonacci numbers]:\n\n```go\n// fib.gno\npackage main\n\n// fib returns the nth number in the Fibonacci sequence.\nfunc fib(n int) int {\n        if n < 2 {\n                return n\n        }\n        return fib(n-2) + fib(n-1)\n}\n\nfunc main() {\n        println(fib(4))\n}\n\n```\nTo execute this program, we run the command `gno run ./fib.gno`. To activate the debugger, we just pass the `-debug` flag: `gno run -debug ./fib.gno`. Use `gno run -help` to get more options if needed.\n\n## Quick tour of the debugger\n\nWhen you start a program in debug mode, you are greeted by a prompt allowing you to interact with it via the terminal:\n```shell\n$ gno run -debug ./fib.gno\nWelcome to the GnoVM debugger. type 'help' for list of commands.\ndbg>\n```\n\nEntering `help` gives you the list of available commands and their short usage:\n\n```shell\ndbg> help\nThe following commands are available:\n\nbreak|b [locspec]         Set a breakpoint.\nbreakpoints|bp            Print out info for active breakpoints.\nclear [id]                Delete breakpoint (all if no id).\ncontinue|c                Run until breakpoint or program termination.\ndetach                    Close debugger and resume program.\ndown [n]                  Move the current frame down by n (default 1).\nexit|quit|q               Exit the debugger and program.\nhelp|h [command]          Print the help message.\nlist|l [locspec]          Show source code.\nprint|p <expression>      Print a variable or expression.\nstack|bt                  Print stack trace.\nstep|s                    Single step through program.\nstepi|si                  Single step a single VM instruction.\nup [n]                    Move the current frame up by n (default 1).\n\nType help followed by a command for full documentation.\ndbg>\n```\n\nIf you have already used a debugger before, like [gdb] or [lldb] for C/C++ programs, or [delve] for Go programs, the Gno debugger should look familiar; the commands are similar in their syntax and usage.\n\nThe commands can be classified in the following categories:\n- managing breakpoints: `break`, `breakpoints`, `clear`,\n- controlling execution: `step`, `stepi`, `continue`,\n- browsing code, data and stack: `list`, `print`, `stack`,\n- navigating the stack: `up`, `down`,\n- quitting the debugger: `detach`, `exit`.\n\n## Controlling and exploring the program state\n\nLet's go back to our Fibonacci program, still paused. We `step` a first time, which instructs the GnoVM to execute a single statement and give back control to the user:\n\n```shell\ndbg> s\n> main.main() main/./fib.gno:11:1\n      7: \t\treturn n\n      8: \t}\n      9: \treturn fib(n-2) + fib(n-1)\n     10: }\n     11: \n=>   12: func main() {\n     13: \tprintln(fib(4))\n     14: }\n```\n\nThe first output line `> main.main() main/./fib.gno:11:1` indicates the precise current location in source code, followed by a short source listing around this location. The current line is indicated by the cursor `=>`.\n\nFrom there, we could repeat `step` commands to progress, but that would be too tedious. Instead, we set a breakpoint at an interesting line in the `fib` function, and `continue` to it directly:\n\n```shell\ndbg> b 7\nBreakpoint 0 at main main/./fib.gno:7:1\ndbg> c\n> main.fib() main/./fib.gno:7:10\n      2: package main\n      3: \n      4: // fib returns the nth number in the Fibonacci sequence.\n      5: func fib(n int) int {\n      6: \tif n < 2 {\n=>    7: \t\treturn n\n      8: \t}\n      9: \treturn fib(n-2) + fib(n-1)\n     10: }\n     11: \ndbg>\n```\n\nNote that we have used the short alias of commands: `b` for `break` and `c` for `continue`. We only need to specify the line number when setting the break point here, due to it being in the same file. Setting break points in other files requires specifying the full file path and line number.\n\nWe can now examine the call stack which indicates the successive nested function calls up to the current location:\n\n```shell\ndbg> stack\n0\tin main.fib\n\tat main/./fib.gno:7:10\n1\tin main.fib\n\tat main/./fib.gno:9:20\n2\tin main.fib\n\tat main/./fib.gno:9:20\n3\tin main.main\n\tat main/./fib.gno:13:2\ndbg>\n```\nWe see a call stack of depth 4, with call frames (local function contexts) numbered from 0 to 3, 0 being the current call level (the deepest). This information is crucial, especially when debugging recursive functions like `fib`. We know that the caller and its caller were both `fib`.\n\nNow we want to examine the value of the local parameter `n`, for each call level:\n```shell\ndbg> print n\n(0 int)\ndbg> up\n> main.fib() main/./fib.gno:7:10\nFrame 1: main/./fib.gno:9:20\n      4: // fib returns the nth number in the Fibonacci sequence.\n      5: func fib(n int) int {\n      6: \tif n < 2 {\n      7: \t\treturn n\n      8: \t}\n=>    9: \treturn fib(n-2) + fib(n-1)\n     10: }\n     11: \n     12: func main() {\n     13: \tprintln(fib(4))\ndbg> print n\n(2 int)\ndbg> up\n> main.fib() main/./fib.gno:7:10\nFrame 2: main/./fib.gno:9:20\n      4: // fib returns the nth number in the Fibonacci sequence.\n      5: func fib(n int) int {\n      6: \tif n < 2 {\n      7: \t\treturn n\n      8: \t}\n=>    9: \treturn fib(n-2) + fib(n-1)\n     10: }\n     11: \n     12: func main() {\n     13: \tprintln(fib(4))\ndbg> print n\n(4 int)\ndbg>\n```\nWe see that the local value `n` is 0 at current frame 0, 2 at frame 1 and 4 at frame 2, which corresponds to the nested calls of `fib` expressed at line 9.\n\nThe `up` and `down` stack navigation commands enable the debugger to display the value of local function variables and parameters for the whole call chain.\n\nIn this example, the `n` variable is simply an integer, but the `print` command is also able to handle more complex expressions to uncover the content of arbitrary maps, struct, arrays, etc using the same syntax as Go. For example, `print a.b[n]` will print as expected, with `a` being a value of type:\n```go\nvar a struct {\n    b []string\n}\n```\nFor security reasons, the `print` command will only evaluate expressions with no side effects on the virtual machine state. For example, it is not possible to perform an arithmetic operation like `print a + 2`, or to call a function like `printf f(6)`.\n\n## Conclusion\n\nWe have introduced the new Gno debugger and presented its main capabilities. \n\nThis is just the start of a new project, with a lot of room for improvement. The whole Gno project being open source, you are welcome not only to provide feedbacks and suggestions, but also to contribute at https://github.com/gnolang/gno.\n\n\n[delve]: https://github.com/go-delve/delve\n[gno]: https://github.com/gnolang/gno/tree/master/gnovm/cmd/gno\n[Fibonacci numbers]: https://simple.wikipedia.org/wiki/Fibonacci_number\n[gdb]: https://sourceware.org/gdb/\n[lldb]: https://lldb.llvm.org\n",
    "2024-08-06T13:37:00Z",
    "mvertes",
    "blog,post,tutorial,gno,debugger"
  ],
  "max_deposit": ""
}
#33 vm/execgno.land/r/gnoland/blog.ModAddPost(reaching-consensus, Reaching Consensus: Developing Fault-tolerant SMTs using Golang, Every once in a while, an effort comes along for the Gno core engineering team that demands immense focus, adaptability and coordination, in order to successfully improve a critical part of the [gno.land](http://gno.land/) blockchain system. This article is meant to cover one such critical module - the Tendermint consensus engine. Over the course of the next following sections, you’ll discover on a practical level what the Tendermint consensus engine is all about, how it works, and how we ended up implementing it for the purposes of [Gno.land](http://gno.land/), and the wider blockchain and open-source community. If you want to jump straight to the source code, you can find the standalone library in the gno monorepo [here](https://github.com/gnolang/gno/tree/master/tm2/pkg/libtm). It is worth noting that we will primarily be discussing the use of the Tendermint consensus engine from an angle of a distributed system, that doesn’t necessarily have anything to do with blockchains. ## What are consensus engines, really? Most blockchain systems that are distributed use some *consensus mechanism*. In essence, this is a process in which remote machines (blockchain nodes) agree that a given value is valid. The nature of their agreement (the process) and the value on which they agree on are completely arbitrary, and are up to the specific blockchain system to decide on and use. Some of these *consensus algorithms* have specific properties that make them more resilient than others — consensus algorithms can be crash tolerant, meaning the process of reaching an agreement on a value tolerates nodes being *faulty* by crashing, in which case they stop while the rest of the nodes continue operating. An example of this consensus algorithm is [Raft](https://raft.github.io/). On the other hand, a more resilient consensus algorithm is also *byzantine-tolerant*, in which case the nodes participating in the consensus process can not only crash, but be malicious — meaning an arbitrary range of faulty behaviors is tolerated. Examples of byzantine-tolerant consensus algorithms include [PBFT](https://pmg.csail.mit.edu/papers/osdi99.pdf), [IBFT](https://arxiv.org/abs/2002.03613), [HotStuff](https://arxiv.org/abs/1803.05069), and the one we will focus on in this article — [Tendermint](https://arxiv.org/abs/1807.04938). For the sake of clarity, it is worth noting an important distinction very early on, before we dive into the nitty-gritty. In this article we make a clear distinction between consensus protocols, the validator set modification algorithms, and consensus engines, the actual state machine changes required for reaching consensus. In a distributed consensus-run system, the participants are usually called *nodes*. In the blockchain context, they are called *validators*, since they validate the proposed chain state changes through the consensus process. The process for which these actors *enter and exit* the validator set (node consensus set) is called a *consensus protocol*. Most popular examples of consensus protocols include: * **Proof of Authority (PoA)** - a permissioned system in which consensus participants (validators) are selectively chosen / voted in, by the existing participant set. * **Proof of Stake (PoS)** - a permission-less system in which anyone can stake something (usually the network’s native currency) to gain entry into the validator set (become consensus participants). There are many different flavors for the system in which the validator set is chosen — for the sake of simplicity we group this process under the *consensus protocol* term. [![valset](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/thumbs/valset.png)](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/valset.png) We mentioned earlier that consensus is a process in which nodes agree upon a specific value. We denote this actual protocol in which they agree upon a value as the *consensus engine*. The consensus engine represents the internal, most critical process of the consensus algorithm - the state machine. It gives answers to questions like - who proposes the consensus value (in leader-based systems), how is validation done, but most importantly — what are the steps taken by validators to reach consensus? [![machine](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/thumbs/machine.png)](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/machine.png) ### Terminology Consensus algorithms like Tendermint work on a round-based model, meaning consensus is attempted to be reached on a given value within a round, for a given height. If consensus is not reached on `round X` of `height Y`, then a new consensus round is started for `round X+1`, `height Y`. This round changing occurs until consensus is reached for the given height (in the context of blockchains, the height is the block number). We will discuss later on what the conditions are for increasing the consensus round number. We call this tuple denoting the current consensus height and round `(h, r)` a ***view***. For leader-based consensus algorithms like Tendermint, one node (validator) called the ***proposer*** (who is deterministically selected by all participating nodes) needs to propose a value for the current consensus view. This ***proposal*** value can in theory be anything, but in the context of blockchain systems, this is usually a block containing transactions (state transitions). Specific to Tendermint, in order to reach consensus, there needs to be an agreement between at least `2F+1` validator nodes (where `F` denotes the maximum number of faulty nodes that are tolerated in the system). In the broader Tendermint ecosystem, validators are not equal, since the consensus protocol mostly used with Tendermint is Proof of Stake, and the validator’s power is proportional to their stake. In this case, `F` denotes the maximum voting power of faulty nodes that are tolerated in the system. In practice, `2F+1` is 2/3+ (supermajority) of the validator set’s voting power. ## How does Tendermint work? The term “[Tendermint](https://docs.tendermint.com/v0.34/introduction/what-is-tendermint.html)” refers to a much larger scope of functionality than what we discuss in this article. By “Tendermint” here, we solely refer to the Tendermint consensus engine (state machine). A good graphic that shows an overview of the Tendermint state machine can be found on the official [Tendermint Core documentation](https://docs.tendermint.com/v0.34/introduction/what-is-tendermint.html#consensus-overview): [![polka](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/thumbs/polka.png)](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/polka.png) However, we want to tackle this question of Tendermint’s inner-workings by weaving in the theory from the paper titled *The latest gossip on BFT consensus*, and applying it in practice. On a surface-level, the Tendermint consensus engine has 3 states: - **Propose** - the *proposer* for the current view (height, round) sends out a *proposal* to all other validator nodes. Non-proposers wait for the proposal and verify it - **Prevote** - the validator nodes wait for 2F+1 `PREVOTE` messages, potentially locking on a proposal - **Precommit** - the validator nodes wait for 2F+1 `PRECOMMIT` messages, potentially saving the block to the block store, and starting a new consensus round (with a view `(h+1, 0)`) These states are not as straightforward as they’re made out to be — there is an added complication of *state timers* which guarantee protocol liveness, and other asynchronous situations like consensus round jumps within the same height. We will discuss these mechanisms later on, as they are critical to making sure Tendermint is ticking correctly. ### I Propose The *propose* state is the initial consensus state for the Tendermint consensus engine. This is the only state within the state machine that has different logic flows for proposers and non-proposers. In the *propose* state, only one node is the proposer for the given view (height, round), and the rest are simply supposed to wait for the proposal. The proposer for the view has 2 choices when proposing a value: 1. craft an entirely new proposal (block). The paper denotes this process with `getValue()` 2. utilize an old (locked) proposal, that was proposed in an earlier round (same height, earlier round), but whose consensus was never reached (for whatever reason) We will discuss “proposal locking” in the `Prevote` section, for now consider that this is a special case where the proposer does not actually construct anything new, but simply relays a proposal that was sent in the past (earlier round), but not agreed upon fully (committed). [![paper-1](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/thumbs/paper-1.png)](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/paper-1.png) <div align="center">Source: The latest gossip on BFT consensus, page 6</div> As outlined in *Algorithm 1*, the initialization step takes place before the beginning of the actual consensus process ( state machine). `StartRound` is meant to kick off the Tendermint state machine. Upon figuring out the proposal value, the proposer broadcasts it to the rest of the nodes. The specifics of network gossip implementations are not discussed in the actual paper / consensus protocol. For non-proposers of the view, they simply initiate the `propose` state timer, that’s meant to advance the state machine further if no valid proposal comes in from the proposer of the view. [![paper-2](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/thumbs/paper-2.png)](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/paper-2.png) <div align="center">Source: The latest gossip on BFT consensus, page 6</div> Once non-proposers receive a proposal from the proposer of the current view, they validate it using an external function, denoted here as valid(...). The proposal is accepted in 2 situations: * if it is a fresh proposal (not a locked one), and it is valid according to the standards of a verifying method (`valid(...)`). * if it is an older proposal (locked value), it is valid according to the standards of a verifying method (`valid(...)`) *and* the proposal matches the validator’s in-memory locked proposal. In case of a successful proposal verification, the node broadcasts a `PREVOTE` message with a valid ID of the proposal. The identification method of the proposal is not defined by the Tendermint protocol itself, but commonly in practice this value is the hash of the actual block being proposed (in blockchain systems). In case the proposal verification fails (proposal is invalid), the node broadcasts a `PREVOTE` message, with a `nil` value for the proposal ID, indicating that this step in the consensus process failed. The purpose of broadcasting a message with a `nil` value is to ensure the consensus engine’s liveness in case of a faulty event. Note that Tendermint does not have a specific round-change state like PBFT, or IBFT, so the only way to move the protocol along is *to go through all consensus states, and in order to succeed or fail in the end*. In either case, after the node broadcasts a `PREVOTE` message, it transitions into the *prevote* state. #### Propose timer Non-proposers for the view start a `propose` state timer. [![paper-3](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/thumbs/paper-3.png)](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/paper-3.png) <div align="center">Source: The latest gossip on BFT consensus, page 6</div> This timer is meant to go off after a fixed interval of time, in order to prevent the node from being stuck in a state where it’s still waiting on a proposal. When the timer asynchronously ticks off, the node broadcasts the `PREVOTE` message with a `nil` ID value, indicating failure to receive a valid proposal. After the broadcast, it moves to the *propose* state. ### II Prevote The *prevote* state is the second state of the Tendermint consensus engine, and it’s the common state for all consensus participants (proposers and non-proposers). Nodes end up in this state in the following scenarios: - the proposer for the view sent a valid proposal - the proposer for the view didn’t send a valid proposal - the proposer for the view didn’t send a valid proposal in time (timeout triggered) The *prevote* state can be seen as an “alignment” state between nodes because this is the first state in which consensus participants need to reach a supermajority on whether the current consensus round is proceeding as it should, or if there is some funny business happening. To successfully move over to the *precommit* state, validators need to receive `2F+1` `PREVOTE` messages with a valid proposal ID. In other words, the supermajority of the validator set’s voting power needs to send out `PREVOTE` messages with an attached proposal ID (of the proposal accepted in the *propose* state!). [![paper-4](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/thumbs/paper-4.png)](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/paper-4.png) <div align="center">Source: The latest gossip on BFT consensus, page 6</div> As soon as these conditions are met, the participants broadcast a `PRECOMMIT` message, with the attached proposal ID ( same one as with the `PREVOTE` messages, and derived from the proposal accepted in the *propose* state). After broadcasting the `PRECOMMIT` message, participants move over to the *precommit* state. #### Block locking An important characteristic for the *prevote* state is the block locking mechanism that is triggered as soon as conditions for a valid transition to *precommit* are met. Before broadcasting a valid `PRECOMMIT` message, the validators “save” (in-memory) the proposal value in which the supermajority of the validator set’s voting power agreed upon, and the round in which it happened (denoted as `lockedValue` and `lockedRound`, respectively). The purpose of this block locking dance is to be able to propose / verify the same proposal if the current consensus round fails in the following steps (for example, not enough valid `PRECOMMIT` messages received). The idea behind this mechanism is that a proposal agreed upon by a supermajority of the validator set is most probably a valid one, and should be considered for future rounds in case the original consensus round in which the proposal was brought up did not complete successfully. If we go back through the conditions for the initial Tendermint engine state transitions, we will see that there is a strong requirement for “locked” values. [![paper-5](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/thumbs/paper-5.png)](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/paper-5.png) <div align="center">Source: The latest gossip on BFT consensus, page 6</div> These checks essentially enforce that if there was a proposal in some previous round, that reached a supermajority, it needs to be *proposed again* in a future round. #### Jump to Precommit There is a situation in which the validators move over to the *precommit* state, without receiving a supermajority of valid `PREVOTE` messages (with a valid proposal ID): [![paper-6](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/thumbs/paper-6.png)](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/paper-6.png) <div align="center">Source: The latest gossip on BFT consensus, page 6</div> In case a validator receives `2F+1` `PREVOTE` messages with a `nil` proposal ID, they simply broadcast a `PRECOMMIT` message with a `nil` ID value (indicating failure), and move over to the *precommit* state. This `nil` propagation mechanism is part of the liveness property discussed in the *propose* section, which requires a validator to go through all Tendermint states before starting a new consensus round. #### Prevote timer All validators start a *prevote* state timer the moment they receive a supermajority (`2F+1`) of *any* `PREVOTE` message (either with a valid or with a `nil` proposal ID). [![paper-7](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/thumbs/paper-7.png)](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/paper-7.png) <div align="center">Source: The latest gossip on BFT consensus, page 6</div> When the timer asynchronously ticks off, the node broadcasts the `PRECOMMIT` message with a `nil` ID value, indicating failure to reach a supermajority on a proposal. After the broadcast, it moves to the *precommit* state. [![paper-8](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/thumbs/paper-8.png)](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/paper-8.png) <div align="center">Source: The latest gossip on BFT consensus, page 6</div> ### III Precommit The *precommit* state is the final state in the Tendermint consensus engine, common for all validators. Much like the *prevote* state, *precommit* consists of the validators waiting for a supermajority of messages of a specific type — in this case the `PRECOMMIT` message, with a valid proposal ID. [![paper-9](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/thumbs/paper-9.png)](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/paper-9.png) <div align="center">Source: The latest gossip on BFT consensus, page 6</div> After the validators exchange `2F+1` valid `PRECOMMIT` messages (with a valid proposal ID), they commit the proposal to their local storage, increase the height and move over to begin the consensus process anew from `(height + 1, round = 0)`. Since the consensus process is finalized successfully for the current view, the in-memory values for locked values are cleared, along with the complete message log. Of course, the proposal ID contained within the `PRECOMMIT` messages needs to match the proposal ID in the previously received supermajority of `PREVOTE` messages, and be derived from the proposal in the *propose* state. #### Precommit timer Much like with the *prevote* state, the moment validators receive a supermajority (`2F+1`) of *any* `PRECOMMIT` message (either with a valid or with a `nil` proposal ID) they initiate a *precommit* state timer. [![paper-10](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/thumbs/paper-10.png)](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/paper-10.png) <div align="center">Source: The latest gossip on BFT consensus, page 6</div> When the timer asynchronously ticks off, the node begins the consensus process anew with an increased round number (goes back to the *propose* state). Since the *precommit* state is the last one in the chain, the only next step left for the engine is to go back to the beginning. [![paper-11](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/thumbs/paper-11.png)](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/paper-11.png) <div align="center">Source: The latest gossip on BFT consensus, page 6</div> ### IV Round jumps There is a special scenario within the Tendermint consensus engine that bypasses the notion of going through all consensus states in order to start a new consensus round. [![paper-12](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/thumbs/paper-12.png)](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/paper-12.png) <div align="center">Source: The latest gossip on BFT consensus, page 6</div> In this scenario, if at any point in time the validator receives `F+1` (called a *faulty majority*) of *any* message type, for a **future** round (round higher than in the current view), the validator performs a round jump to the given round by starting the consensus process anew. ### V Timers In the Tendermint consensus process, timers play an important role in making sure the protocol stays “alive”. They move things along if, for whatever reason, the flow stops. By their nature, they are completely asynchronous, and can go off at point in time once they are set by the protocol. Tendermint does not enforce specific initial values for each state timer, but provides suggestions on making sure the timers serve their purpose: `timeoutX(r) = initTimeoutX + r * timeoutDelta` By following this formula, it is ensured that each round state timer is: - influenced by the current view round (higher rounds == longer timers) - influenced by a constant `delta` increment (can be different for each state) In the Gno blockchain, these values are defined as the following: ```toml timeout_propose = "3s" timeout_propose_delta = "500ms" timeout_prevote = "1s" timeout_prevote_delta = "500ms" timeout_precommit = "1s" timeout_precommit_delta = "500ms" ``` ### VI Tying it all together Understanding the Tendermint consensus engine involves grasping its three core states: *propose*, *prevote*, and *precommit*, and the transitions that ensure the system's liveness and fault tolerance. The *propose* state is initiated by a designated proposer who broadcasts a proposal to all validators. This proposal can either be a new value or an old one from a previous round that did not reach consensus. Validators verify the proposal, and then move to the *prevote* state, where they broadcast their votes on the proposal, requiring a supermajority (`2F+1`) to proceed. If the necessary votes are not received within a certain timeframe, a timeout mechanism ensures the process continues to the next state or round. If a supermajority of valid `PREVOTE` messages is received, validators lock the proposal value and transition to the *precommit* state. This locking mechanism ensures that if consensus is not reached in the current round, the previously agreed-upon value can be proposed again, enhancing the algorithm’s robustness. During the *precommit* state, validators wait for another supermajority of `PRECOMMIT` messages. Upon receiving these, they commit the proposal locally, increment the height, and start a new consensus round. The combination of these states and transitions, governed by timers and supermajority rules, creates a resilient and efficient consensus process. The Tendermint consensus engine's design allows it to handle both crash faults and Byzantine faults, making it suitable for various distributed systems, including blockchains. ## Taming asynchronous beasts with Golang When we started working on [libtm](https://github.com/gnolang/gno/tree/master/tm2/pkg/libtm), we had a few goals in mind: - create a consensus engine library that is easy to use, safe and performant, pluggable into systems we already have ( the Gno blockchain, based on a fork of Tendermint Core) - implement abstractions that allow the library to be also used outside the blockchain context, while also being modular enough to be used by existing blockchain projects - maintain the principles of open-source software We went about implementing #2 in a seemingly odd way: - We did not want the library to handle networking, or enforce a networking protocol. We believe that the underlying transport layer that moves around messages is irrelevant, as long as it provides the properties of *eventual delivery*. - We did not want the library to know how to sign, and verify signatures of arbitrary data. Signing protocols are something very use-case specific, and should not be enforced by the consensus engine. We do, however, provide the *data* that needs to be signed in the first place. - We did not want the library to do validator set management, or to even have a notion of a “validator” and its properties. Validator sets have vastly different management techniques, a complication we wanted to avoid in the engine. This might sound shocking, given how existing implementations of the Tendermint consensus engine operate today in modern blockchains, but it actually greatly reduces the complexity and allows for applications of the consensus library outside the blockchain context. ### Everything starts with the messaging system Looking at how the Tendermint consensus state machine is structured, we can deduce that the main drivers of any kind of activity are — messages. A message exchanged between validators, of any type, is the driving force behind the Tendermint consensus algorithm. It’s used to transfer information, but also to act as a notification system that preserves certain consensus properties like liveness. Given the asynchronous nature of validator messages, we realized our messaging system would need to support the following properties: - have buckets for each message type, to make messages easily fetch-able - have a mechanism that avoids duplicates - have a subscription mechanism we can tap into from any part of the codebase We came to this conclusion after realizing our state implementations (discussed later) needed a more sophisticated way of fetching and filtering incoming messages, that didn’t involve constant read requests from the message log. These operations are very common, and they need to be performant in order to not delay the consensus process. Luckily, we ended up utilizing the full power of Go generics for this use-case: ```go // msgType is the combined message type interface, // for easy reference and type safety type msgType interface { types.ProposalMessage | types.PrevoteMessage | types.PrecommitMessage } type ( // collection are the actual received messages. // Maps a unique identifier -> their message (of a specific type) to avoid duplicates. // Identifiers are derived from <sender ID, height, round>. // Each validator in the consensus needs to send at most 1 message of every type // (minus the PROPOSAL, which is only sent by the proposer), // so the message system needs to keep track of only 1 message per type, per validator, per view collection[T msgType] map[string]*T ) // Collector is a single message type collector type Collector[T msgType] struct { collection collection[T] // the message storage subscriptions subscriptions[T] // the active message subscriptions collectionMux sync.RWMutex subscriptionsMux sync.RWMutex } ``` The `libtm` library keeps a `Collector` for each message type, and that acts as a message log. Additionally, the message collector also keeps track of basic message subscriptions. These subscriptions (as we’ll discuss later), are for simple notifications that alert the subscriber a message appeared in the message log. ### Not all states are created equal Once we’ve established the clear needs of our messaging system, implementing the actual state transitions around it was trivial. Tendermint consensus states all share the following structure: ```go // runX runs the X Tendermint consensus engine state func (t *Tendermint) runX(ctx context.Context) { var ( round = t.state.getRound() expiredCh = make(chan struct{}, 1) timeoutCtx, cancelTimeoutFn = context.WithCancel(ctx) timeoutPrevote = t.timeouts[prevote].CalculateTimeout(round) ) // Defer the timeout timer cancellation (if running) defer cancelTimeoutFn() // Subscribe to all messages of a specific type // (=current height; unique; >= current round) ch, unsubscribeFn := t.store.subscribeToX() defer unsubscribeFn() for { select { case <-ctx.Done(): // Outer consensus context cancelled return case <-expiredCh: // State timer triggered, // execute stateX teardown before returning // ... return case getMessagesFn := <-ch: // New valid message appeared in message log, parse it // ... // Check if conditions are satisfied for starting the state timer // ... // Check if conditions are satisfied for a state transition // ... } } } ``` The pattern is clear: - subscribe to messages of a specific type that are expected to appear in the current state - verify those messages as they come in, and check if conditions are met for a state transition - monitor the outer context, and the asynchronous timer context for stopping Keeping this in mind, we can develop the main run loop: ```go // runStates runs the consensus states, depending on the current step func (t *Tendermint) runStates(ctx context.Context) *FinalizedProposal { for { currentStep := t.state.step.get() select { case <-ctx.Done(): return nil default: switch currentStep { case propose: t.runPropose(ctx) case prevote: t.runPrevote(ctx) case precommit: return t.runPrecommit(ctx) } } } } ``` The statement that *all* Tendermint consensus states share the outlined structure is not entirely true — remember the *propose* state? In the *propose* state, there is a clear branching in logic, where non-proposers wait for and verify a proposal, while the proposer for the view needs to build it and broadcast it. The proposer, unlike other validators, *does not need to wait on their own proposal to appear*, but can instead move directly to the *prevote* state, having already accepted the proposal that was sent out. ```go // ... func (t *Tendermint) runPropose(ctx context.Context) { // ... // Check if the current process is the proposer for this view if t.verifier.IsProposer(t.node.ID(), height, round) { // Start the round by constructing and broadcasting a proposal t.startRound(height, round) return } // ... } // ... ``` ### How does it all tie together? Over the course of this article we’ve gone over the different Tendermint consensus engine states, and their caveats. We’ve also mentioned other asynchronous processes like round jumps, timers triggers — how is all of this managed in Go, in `libtm`? The entry point into the Tendermint consensus process lies in `RunSequence`, which manages other Go routines that facilitate the previously-seen asynchronous `upon` blocks. [![run-sequence](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/thumbs/run-sequence.png)](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/run-sequence.png) In the `libtm` library, this management structure looks like this, where `finalizeProposal` and `watchForRoundJumps` are Go routines: ```go // RunSequence runs the Tendermint consensus sequence for a given height, // returning only when a proposal has been finalized (consensus reached), or // the context has been cancelled func (t *Tendermint) RunSequence(ctx context.Context, h uint64) *FinalizedProposal { // Initialize the state before starting the sequence t.state.setHeight(h) // Grab the process view view := &types.View{ Height: h, Round: t.state.getRound(), } // Drop all old messages t.store.dropMessages(view) for { // set up the round context ctxRound, cancelRound := context.WithCancel(ctx) teardown := func() { cancelRound() t.wg.Wait() } select { case proposal := <-t.finalizeProposal(ctxRound): teardown() // Check if the proposal has been finalized if proposal != nil { return proposal } // 65: Function OnTimeoutPrecommit(height, round) : // 66: if height = hP ∧ round = roundP then // 67: StartRound(roundP + 1) t.state.increaseRound() t.state.step.set(propose) case recvRound := <-t.watchForRoundJumps(ctxRound): teardown() t.state.setRound(recvRound) t.state.step.set(propose) case <-ctx.Done(): teardown() return nil } } } ``` Go contexts, combined with minimal channel usage, allow us to construct a flow that is easily testable, readable and maintainable. ### Trust, but verify One of the most important choices that we wanted to make while developing `libtm` concerned how we’d verify the functionality, and how frequently during our development process. This was especially amplified by the fact we were experiencing ongoing stability issues with the existing Tendermint BFT testing suite in Gno. We wanted a testing suite that was minimal enough to verify individual state to state transitions, but also flexible enough to spin up full blown clusters and simulate a live consensus environment. `libtm` has essentially 2 types of tests: - regular unit tests that verify state -> state transitions. These tests have “pause” and “resume” functionality that allows us to exactly verify each step of the state machine - cluster tests in which we simulate valid / byzantine environments. These tests spin up a multimode cluster, fully mocked, to simulate inner-node communication and consensus We plan on expanding our testing suite even further, with more sophisticated cluster tests that cover an additional range of byzantine scenarios. Currently, our code coverage sits at ~96%. ## Conclusion Our exploration of the Tendermint consensus engine has highlighted the meticulous design and robust functionality that make it a cornerstone of blockchain systems. The Tendermint consensus engine’s ability to maintain liveness and ensure fault tolerance through its well-defined states—*Propose*, *Prevote*, and *Precommit* — exemplifies the intricate balance needed in distributed systems, where validators can navigate the complexities of reaching consensus even in the face of network delays and potential Byzantine faults. The implementation of Tendermint within the Gno blockchain, and the broader application potential of the [libtm library](https://github.com/gnolang/gno/tree/master/tm2/pkg/libtm), underscore the versatility and adaptability of this consensus mechanism. Our approach to developing `libtm` emphasized modularity and flexibility, ensuring it could be utilized both within and beyond blockchain contexts. By decoupling the library from specific networking protocols, signing mechanisms, and validator set management, we aimed to create a tool that is both easy to integrate and capable of supporting diverse use cases. It not only facilitates smooth blockchain operation but also opens up new possibilities for innovation in distributed systems. We look forward to the ongoing improvement of Tendermint, and its continued impact on the blockchain and open-source communities., 2024-07-01T00:00:00Z, zivkovicmilos,petar-dambovaliev, gnoland,test4,consensus,tm2,libtm)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "reaching-consensus",
    "Reaching Consensus: Developing Fault-tolerant SMTs using Golang",
    "\n\nEvery once in a while, an effort comes along for the Gno core engineering team that demands immense focus, adaptability\nand coordination, in order to successfully improve a critical part of the [gno.land](http://gno.land/) blockchain\nsystem. This article is meant to cover one such critical module - the Tendermint consensus engine.\n\nOver the course of the next following sections, you’ll discover on a practical level what the Tendermint consensus\nengine is all about, how it works, and how we ended up implementing it for the purposes of [Gno.land](http://gno.land/),\nand the wider blockchain and open-source community.\n\nIf you want to jump straight to the source code, you can find the standalone library in the gno\nmonorepo [here](https://github.com/gnolang/gno/tree/master/tm2/pkg/libtm).\n\nIt is worth noting that we will primarily be discussing the use of the Tendermint consensus engine from an angle of a\ndistributed system, that doesn’t necessarily have anything to do with blockchains.\n\n## What are consensus engines, really?\n\nMost blockchain systems that are distributed use some *consensus mechanism*. In essence, this is a process in which\nremote machines (blockchain nodes) agree that a given value is valid. The nature of their agreement (the process) and\nthe value on which they agree on are completely arbitrary, and are up to the specific blockchain system to decide on and\nuse.\n\nSome of these *consensus algorithms* have specific properties that make them more resilient than others — consensus\nalgorithms can be crash tolerant, meaning the process of reaching an agreement on a value tolerates nodes being *faulty*\nby crashing, in which case they stop while the rest of the nodes continue operating. An example of this consensus\nalgorithm is [Raft](https://raft.github.io/). On the other hand, a more resilient consensus algorithm is also\n*byzantine-tolerant*, in which case the nodes participating in the consensus process can not only crash, but be\nmalicious — meaning an arbitrary range of faulty behaviors is tolerated. Examples of byzantine-tolerant consensus\nalgorithms\ninclude [PBFT](https://pmg.csail.mit.edu/papers/osdi99.pdf), [IBFT](https://arxiv.org/abs/2002.03613), [HotStuff](https://arxiv.org/abs/1803.05069),\nand the one we will focus on in this article — [Tendermint](https://arxiv.org/abs/1807.04938).\n\nFor the sake of clarity, it is worth noting an important distinction very early on, before we dive into the\nnitty-gritty. In this article we make a clear distinction between consensus protocols, the validator set modification\nalgorithms, and consensus engines, the actual state machine changes required for reaching consensus.\n\nIn a distributed consensus-run system, the participants are usually called *nodes*. In the blockchain context, they are\ncalled *validators*, since they validate the proposed chain state changes through the consensus process. The process for\nwhich these actors *enter and exit* the validator set (node consensus set) is called a *consensus protocol*. Most\npopular examples of consensus protocols include:\n\n* **Proof of Authority (PoA)** - a permissioned system in which consensus participants (validators) are selectively\n  chosen / voted in, by the existing participant set.\n* **Proof of Stake (PoS)** - a permission-less system in which anyone can stake something (usually the network’s native\n  currency) to gain entry into the validator set (become consensus participants).\n\nThere are many different flavors for the system in which the validator set is chosen — for the sake of simplicity we\ngroup this process under the *consensus protocol* term.\n\n[![valset](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/thumbs/valset.png)](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/valset.png)\n\nWe mentioned earlier that consensus is a process in which nodes agree upon a specific value. We denote this actual\nprotocol in which they agree upon a value as the *consensus engine*.\n\nThe consensus engine represents the internal, most critical process of the consensus algorithm - the state machine. It\ngives answers to questions like - who proposes the consensus value (in leader-based systems), how is validation done,\nbut most importantly — what are the steps taken by validators to reach consensus?\n\n[![machine](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/thumbs/machine.png)](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/machine.png)\n\n### Terminology\n\nConsensus algorithms like Tendermint work on a round-based model, meaning consensus is attempted to be reached on a\ngiven value within a round, for a given height. If consensus is not reached on `round X` of `height Y`, then a new\nconsensus round is started for `round X+1`, `height Y`. This round changing occurs until consensus is reached for the\ngiven height (in the context of blockchains, the height is the block number). We will discuss later on what the\nconditions are for increasing the consensus round number.\n\nWe call this tuple denoting the current consensus height and round `(h, r)` a ***view***.\n\nFor leader-based consensus algorithms like Tendermint, one node (validator) called the ***proposer*** (who is\ndeterministically selected by all participating nodes) needs to propose a value for the current consensus view. This\n***proposal*** value can in theory be anything, but in the context of blockchain systems, this is usually a block\ncontaining transactions (state transitions).\n\nSpecific to Tendermint, in order to reach consensus, there needs to be an agreement between at least `2F+1` validator\nnodes (where `F` denotes the maximum number of faulty nodes that are tolerated in the system). In the broader Tendermint\necosystem, validators are not equal, since the consensus protocol mostly used with Tendermint is Proof of Stake, and the\nvalidator’s power is proportional to their stake. In this case, `F` denotes the maximum voting power of faulty nodes\nthat are tolerated in the system. In practice, `2F+1` is 2/3+ (supermajority) of the validator set’s voting power.\n\n## How does Tendermint work?\n\nThe term “[Tendermint](https://docs.tendermint.com/v0.34/introduction/what-is-tendermint.html)” refers to a much larger\nscope of functionality than what we discuss in this article. By “Tendermint” here, we solely refer to the Tendermint\nconsensus engine (state machine).\n\nA good graphic that shows an overview of the Tendermint state machine can be found on the\nofficial [Tendermint Core documentation](https://docs.tendermint.com/v0.34/introduction/what-is-tendermint.html#consensus-overview):\n\n[![polka](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/thumbs/polka.png)](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/polka.png)\n\nHowever, we want to tackle this question of Tendermint’s inner-workings by weaving in the theory from the paper titled\n*The latest gossip on BFT consensus*, and applying it in practice.\n\nOn a surface-level, the Tendermint consensus engine has 3 states:\n\n- **Propose** - the *proposer* for the current view (height, round) sends out a *proposal* to all other validator nodes.\n  Non-proposers wait for the proposal and verify it\n- **Prevote** - the validator nodes wait for 2F+1 `PREVOTE` messages, potentially locking on a proposal\n- **Precommit** - the validator nodes wait for 2F+1 `PRECOMMIT` messages, potentially saving the block to the block\n  store, and starting a new consensus round (with a view `(h+1, 0)`)\n\nThese states are not as straightforward as they’re made out to be — there is an added complication of *state timers*\nwhich guarantee protocol liveness, and other asynchronous situations like consensus round jumps within the same height.\nWe will discuss these mechanisms later on, as they are critical to making sure Tendermint is ticking correctly.\n\n### I Propose\n\nThe *propose* state is the initial consensus state for the Tendermint consensus engine. This is the only state within\nthe state machine that has different logic flows for proposers and non-proposers.\n\nIn the *propose* state, only one node is the proposer for the given view (height, round), and the rest are simply\nsupposed to wait for the proposal.\n\nThe proposer for the view has 2 choices when proposing a value:\n\n1. craft an entirely new proposal (block). The paper denotes this process with `getValue()`\n2. utilize an old (locked) proposal, that was proposed in an earlier round (same height, earlier round), but whose\n   consensus was never reached (for whatever reason)\n\nWe will discuss “proposal locking” in the `Prevote` section, for now consider that this is a special case where the\nproposer does not actually construct anything new, but simply relays a proposal that was sent in the past (earlier\nround), but not agreed upon fully (committed).\n\n[![paper-1](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/thumbs/paper-1.png)](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/paper-1.png)\n<div align=\"center\">Source: The latest gossip on BFT consensus, page 6</div>\n\nAs outlined in *Algorithm 1*, the initialization step takes place before the beginning of the actual consensus process (\nstate machine). `StartRound` is meant to kick off the Tendermint state machine.\n\nUpon figuring out the proposal value, the proposer broadcasts it to the rest of the nodes. The specifics of network\ngossip implementations are not discussed in the actual paper / consensus protocol.\n\nFor non-proposers of the view, they simply initiate the `propose` state timer, that’s meant to advance the state machine\nfurther if no valid proposal comes in from the proposer of the view.\n\n[![paper-2](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/thumbs/paper-2.png)](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/paper-2.png)\n<div align=\"center\">Source: The latest gossip on BFT consensus, page 6</div>\n\nOnce non-proposers receive a proposal from the proposer of the current view, they validate it using an external\nfunction, denoted here as valid(...). The proposal is accepted in 2 situations:\n\n* if it is a fresh proposal (not a locked one), and it is valid according to the standards of a verifying\n  method (`valid(...)`).\n* if it is an older proposal (locked value), it is valid according to the standards of a verifying method (`valid(...)`)\n  *and* the proposal matches the validator’s in-memory locked proposal.\n\nIn case of a successful proposal verification, the node broadcasts a `PREVOTE` message with a valid ID of the proposal.\nThe identification method of the proposal is not defined by the Tendermint protocol itself, but commonly in practice\nthis value is the hash of the actual block being proposed (in blockchain systems).\n\nIn case the proposal verification fails (proposal is invalid), the node broadcasts a `PREVOTE` message, with a `nil`\nvalue for the proposal ID, indicating that this step in the consensus process failed.\n\nThe purpose of broadcasting a message with a `nil` value is to ensure the consensus engine’s liveness in case of a\nfaulty event. Note that Tendermint does not have a specific round-change state like PBFT, or IBFT, so the only way to\nmove the protocol along is *to go through all consensus states, and in order to succeed or fail in the end*.\n\nIn either case, after the node broadcasts a `PREVOTE` message, it transitions into the *prevote* state.\n\n#### Propose timer\n\nNon-proposers for the view start a `propose` state timer.\n\n[![paper-3](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/thumbs/paper-3.png)](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/paper-3.png)\n<div align=\"center\">Source: The latest gossip on BFT consensus, page 6</div>\n\nThis timer is meant to go off after a fixed interval of time, in order to prevent the node from being stuck in a state\nwhere it’s still waiting on a proposal.\n\nWhen the timer asynchronously ticks off, the node broadcasts the `PREVOTE` message with a `nil` ID value, indicating\nfailure to receive a valid proposal. After the broadcast, it moves to the *propose* state.\n\n### II Prevote\n\nThe *prevote* state is the second state of the Tendermint consensus engine, and it’s the common state for all consensus\nparticipants (proposers and non-proposers).\n\nNodes end up in this state in the following scenarios:\n\n- the proposer for the view sent a valid proposal\n- the proposer for the view didn’t send a valid proposal\n- the proposer for the view didn’t send a valid proposal in time (timeout triggered)\n\nThe *prevote* state can be seen as an “alignment” state between nodes because this is the first state in which consensus\nparticipants need to reach a supermajority on whether the current consensus round is proceeding as it should, or if\nthere is some funny business happening.\n\nTo successfully move over to the *precommit* state, validators need to receive `2F+1` `PREVOTE` messages with a valid\nproposal ID. In other words, the supermajority of the validator set’s voting power needs to send out `PREVOTE` messages\nwith an attached proposal ID (of the proposal accepted in the *propose* state!).\n\n[![paper-4](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/thumbs/paper-4.png)](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/paper-4.png)\n<div align=\"center\">Source: The latest gossip on BFT consensus, page 6</div>\n\nAs soon as these conditions are met, the participants broadcast a `PRECOMMIT` message, with the attached proposal ID (\nsame one as with the `PREVOTE` messages, and derived from the proposal accepted in the *propose* state). After\nbroadcasting the `PRECOMMIT` message, participants move over to the *precommit* state.\n\n#### Block locking\n\nAn important characteristic for the *prevote* state is the block locking mechanism that is triggered as soon as\nconditions for a valid transition to *precommit* are met.\n\nBefore broadcasting a valid `PRECOMMIT` message, the validators “save” (in-memory) the proposal value in which the\nsupermajority of the validator set’s voting power agreed upon, and the round in which it happened (denoted\nas `lockedValue` and `lockedRound`, respectively).\n\nThe purpose of this block locking dance is to be able to propose / verify the same proposal if the current consensus\nround fails in the following steps (for example, not enough valid `PRECOMMIT` messages received). The idea behind this\nmechanism is that a proposal agreed upon by a supermajority of the validator set is most probably a valid one, and\nshould be considered for future rounds in case the original consensus round in which the proposal was brought up did not\ncomplete successfully.\n\nIf we go back through the conditions for the initial Tendermint engine state transitions, we will see that there is a\nstrong requirement for “locked” values.\n\n[![paper-5](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/thumbs/paper-5.png)](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/paper-5.png)\n<div align=\"center\">Source: The latest gossip on BFT consensus, page 6</div>\n\nThese checks essentially enforce that if there was a proposal in some previous round, that reached a supermajority, it\nneeds to be *proposed again* in a future round.\n\n#### Jump to Precommit\n\nThere is a situation in which the validators move over to the *precommit* state, without receiving a supermajority of\nvalid `PREVOTE` messages (with a valid proposal ID):\n\n[![paper-6](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/thumbs/paper-6.png)](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/paper-6.png)\n<div align=\"center\">Source: The latest gossip on BFT consensus, page 6</div>\n\nIn case a validator receives `2F+1` `PREVOTE` messages with a `nil` proposal ID, they simply broadcast a `PRECOMMIT`\nmessage with a `nil` ID value (indicating failure), and move over to the *precommit* state.\n\nThis `nil` propagation mechanism is part of the liveness property discussed in the *propose* section, which requires a\nvalidator to go through all Tendermint states before starting a new consensus round.\n\n#### Prevote timer\n\nAll validators start a *prevote* state timer the moment they receive a supermajority (`2F+1`) of *any* `PREVOTE`\nmessage (either with a valid or with a `nil` proposal ID).\n\n[![paper-7](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/thumbs/paper-7.png)](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/paper-7.png)\n<div align=\"center\">Source: The latest gossip on BFT consensus, page 6</div>\n\nWhen the timer asynchronously ticks off, the node broadcasts the `PRECOMMIT` message with a `nil` ID value, indicating\nfailure to reach a supermajority on a proposal. After the broadcast, it moves to the *precommit* state.\n\n[![paper-8](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/thumbs/paper-8.png)](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/paper-8.png)\n<div align=\"center\">Source: The latest gossip on BFT consensus, page 6</div>\n\n### III Precommit\n\nThe *precommit* state is the final state in the Tendermint consensus engine, common for all validators.\n\nMuch like the *prevote* state, *precommit* consists of the validators waiting for a supermajority of messages of a\nspecific type — in this case the `PRECOMMIT` message, with a valid proposal ID.\n\n[![paper-9](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/thumbs/paper-9.png)](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/paper-9.png)\n<div align=\"center\">Source: The latest gossip on BFT consensus, page 6</div>\n\nAfter the validators exchange `2F+1` valid `PRECOMMIT` messages (with a valid proposal ID), they commit the proposal to\ntheir local storage, increase the height and move over to begin the consensus process anew\nfrom `(height + 1, round = 0)`.\nSince the consensus process is finalized successfully for the current view, the in-memory values for locked values are\ncleared, along with the complete message log.\n\nOf course, the proposal ID contained within the `PRECOMMIT` messages needs to match the proposal ID in the previously\nreceived supermajority of `PREVOTE` messages, and be derived from the proposal in the *propose* state.\n\n#### Precommit timer\n\nMuch like with the *prevote* state, the moment validators receive a supermajority (`2F+1`) of *any* `PRECOMMIT`\nmessage (either with a valid or with a `nil` proposal ID) they initiate a *precommit* state timer.\n\n[![paper-10](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/thumbs/paper-10.png)](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/paper-10.png)\n<div align=\"center\">Source: The latest gossip on BFT consensus, page 6</div>\n\nWhen the timer asynchronously ticks off, the node begins the consensus process anew with an increased round number (goes\nback to the *propose* state). Since the *precommit* state is the last one in the chain, the only next step left for the\nengine is to go back to the beginning.\n\n[![paper-11](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/thumbs/paper-11.png)](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/paper-11.png)\n<div align=\"center\">Source: The latest gossip on BFT consensus, page 6</div>\n\n### IV Round jumps\n\nThere is a special scenario within the Tendermint consensus engine that bypasses the notion of going through all\nconsensus states in order to start a new consensus round.\n\n[![paper-12](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/thumbs/paper-12.png)](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/paper-12.png)\n<div align=\"center\">Source: The latest gossip on BFT consensus, page 6</div>\n\nIn this scenario, if at any point in time the validator receives `F+1` (called a *faulty majority*) of *any* message\ntype, for a **future** round (round higher than in the current view), the validator performs a round jump to the given\nround by starting the consensus process anew.\n\n### V Timers\n\nIn the Tendermint consensus process, timers play an important role in making sure the protocol stays “alive”. They move\nthings along if, for whatever reason, the flow stops.\n\nBy their nature, they are completely asynchronous, and can go off at point in time once they are set by the protocol.\n\nTendermint does not enforce specific initial values for each state timer, but provides suggestions on making sure the\ntimers serve their purpose:\n`timeoutX(r) = initTimeoutX + r * timeoutDelta`\n\nBy following this formula, it is ensured that each round state timer is:\n\n- influenced by the current view round (higher rounds == longer timers)\n- influenced by a constant `delta` increment (can be different for each state)\n\nIn the Gno blockchain, these values are defined as the following:\n\n```toml\ntimeout_propose = \"3s\"\ntimeout_propose_delta = \"500ms\"\ntimeout_prevote = \"1s\"\ntimeout_prevote_delta = \"500ms\"\ntimeout_precommit = \"1s\"\ntimeout_precommit_delta = \"500ms\"\n```\n\n### VI Tying it all together\n\nUnderstanding the Tendermint consensus engine involves grasping its three core states: *propose*, *prevote*, and\n*precommit*, and the transitions that ensure the system's liveness and fault tolerance.\n\nThe *propose* state is initiated by a designated proposer who broadcasts a proposal to all validators. This proposal can\neither be a new value or an old one from a previous round that did not reach consensus. Validators verify the proposal,\nand then move to the *prevote* state, where they broadcast their votes on the proposal, requiring a\nsupermajority (`2F+1`) to proceed. If the necessary votes are not received within a certain timeframe, a timeout\nmechanism ensures the process continues to the next state or round. If a supermajority of valid `PREVOTE` messages is\nreceived, validators lock the proposal value and transition to the *precommit* state. This locking mechanism ensures\nthat if consensus is not reached in the current round, the previously agreed-upon value can be proposed again, enhancing\nthe algorithm’s robustness. During the *precommit* state, validators wait for another supermajority of `PRECOMMIT`\nmessages. Upon receiving these, they commit the proposal locally, increment the height, and start a new consensus round.\n\nThe combination of these states and transitions, governed by timers and supermajority rules, creates a resilient and\nefficient consensus process. The Tendermint consensus engine's design allows it to handle both crash faults and\nByzantine faults, making it suitable for various distributed systems, including blockchains.\n\n## Taming asynchronous beasts with Golang\n\nWhen we started working on [libtm](https://github.com/gnolang/gno/tree/master/tm2/pkg/libtm), we had a few goals in\nmind:\n\n- create a consensus engine library that is easy to use, safe and performant, pluggable into systems we already have (\n  the Gno blockchain, based on a fork of Tendermint Core)\n- implement abstractions that allow the library to be also used outside the blockchain context, while also being modular\n  enough to be used by existing blockchain projects\n- maintain the principles of open-source software\n\nWe went about implementing #2 in a seemingly odd way:\n\n- We did not want the library to handle networking, or enforce a networking protocol. We believe that the underlying\n  transport layer that moves around messages is irrelevant, as long as it provides the properties of *eventual\n  delivery*.\n- We did not want the library to know how to sign, and verify signatures of arbitrary data. Signing protocols are\n  something very use-case specific, and should not be enforced by the consensus engine. We do, however, provide the\n  *data* that needs to be signed in the first place.\n- We did not want the library to do validator set management, or to even have a notion of a “validator” and its\n  properties. Validator sets have vastly different management techniques, a complication we wanted to avoid in the\n  engine.\n\nThis might sound shocking, given how existing implementations of the Tendermint consensus engine operate today in modern\nblockchains, but it actually greatly reduces the complexity and allows for applications of the consensus library outside\nthe blockchain context.\n\n### Everything starts with the messaging system\n\nLooking at how the Tendermint consensus state machine is structured, we can deduce that the main drivers of any kind of\nactivity are — messages.\n\nA message exchanged between validators, of any type, is the driving force behind the Tendermint consensus algorithm.\nIt’s used to transfer information, but also to act as a notification system that preserves certain consensus properties\nlike liveness.\n\nGiven the asynchronous nature of validator messages, we realized our messaging system would need to support the\nfollowing properties:\n\n- have buckets for each message type, to make messages easily fetch-able\n- have a mechanism that avoids duplicates\n- have a subscription mechanism we can tap into from any part of the codebase\n\nWe came to this conclusion after realizing our state implementations (discussed later) needed a more sophisticated way\nof fetching and filtering incoming messages, that didn’t involve constant read requests from the message log. These\noperations are very common, and they need to be performant in order to not delay the consensus process.\n\nLuckily, we ended up utilizing the full power of Go generics for this use-case:\n\n```go\n// msgType is the combined message type interface,\n// for easy reference and type safety\ntype msgType interface {\n\ttypes.ProposalMessage | types.PrevoteMessage | types.PrecommitMessage\n}\n\ntype (\n\t// collection are the actual received messages.\n\t// Maps a unique identifier -> their message (of a specific type) to avoid duplicates.\n\t// Identifiers are derived from <sender ID, height, round>.\n\t// Each validator in the consensus needs to send at most 1 message of every type\n\t// (minus the PROPOSAL, which is only sent by the proposer),\n\t// so the message system needs to keep track of only 1 message per type, per validator, per view\n\tcollection[T msgType] map[string]*T\n)\n\n// Collector is a single message type collector\ntype Collector[T msgType] struct {\n\tcollection    collection[T]    // the message storage\n\tsubscriptions subscriptions[T] // the active message subscriptions\n\n\tcollectionMux    sync.RWMutex\n\tsubscriptionsMux sync.RWMutex\n}\n\n```\n\nThe `libtm` library keeps a `Collector` for each message type, and that acts as a message log. Additionally, the message\ncollector also keeps track of basic message subscriptions. These subscriptions (as we’ll discuss later), are for simple\nnotifications that alert the subscriber a message appeared in the message log.\n\n### Not all states are created equal\n\nOnce we’ve established the clear needs of our messaging system, implementing the actual state transitions around it was\ntrivial.\n\nTendermint consensus states all share the following structure:\n\n```go\n// runX runs the X Tendermint consensus engine state\nfunc (t *Tendermint) runX(ctx context.Context) {\n\tvar (\n\t\tround = t.state.getRound()\n\n\t\texpiredCh                   = make(chan struct{}, 1)\n\t\ttimeoutCtx, cancelTimeoutFn = context.WithCancel(ctx)\n\t\ttimeoutPrevote              = t.timeouts[prevote].CalculateTimeout(round)\n\t)\n\n\t// Defer the timeout timer cancellation (if running)\n\tdefer cancelTimeoutFn()\n\n\t// Subscribe to all messages of a specific type\n\t// (=current height; unique; >= current round)\n\tch, unsubscribeFn := t.store.subscribeToX()\n\tdefer unsubscribeFn()\n\n\tfor {\n\t\tselect {\n\t\tcase <-ctx.Done():\n\t\t\t// Outer consensus context cancelled\n\t\t\treturn\n\t\tcase <-expiredCh:\n\t\t\t// State timer triggered,\n\t\t\t// execute stateX teardown before returning\n\n\t\t\t// ...\n\n\t\t\treturn\n\t\tcase getMessagesFn := <-ch:\n\t\t\t// New valid message appeared in message log, parse it\n\t\t\t// ...\n\n\t\t\t// Check if conditions are satisfied for starting the state timer\n\t\t\t// ...\n\n\t\t\t// Check if conditions are satisfied for a state transition\n\t\t\t// ...\n\t\t}\n\t}\n}\n\n```\n\nThe pattern is clear:\n\n- subscribe to messages of a specific type that are expected to appear in the current state\n- verify those messages as they come in, and check if conditions are met for a state transition\n- monitor the outer context, and the asynchronous timer context for stopping\n\nKeeping this in mind, we can develop the main run loop:\n\n```go\n// runStates runs the consensus states, depending on the current step\nfunc (t *Tendermint) runStates(ctx context.Context) *FinalizedProposal {\n\tfor {\n\t\tcurrentStep := t.state.step.get()\n\n\t\tselect {\n\t\tcase <-ctx.Done():\n\t\t\treturn nil\n\t\tdefault:\n\t\t\tswitch currentStep {\n\t\t\tcase propose:\n\t\t\t\tt.runPropose(ctx)\n\t\t\tcase prevote:\n\t\t\t\tt.runPrevote(ctx)\n\t\t\tcase precommit:\n\t\t\t\treturn t.runPrecommit(ctx)\n\t\t\t}\n\t\t}\n\t}\n}\n```\n\nThe statement that *all* Tendermint consensus states share the outlined structure is not entirely true — remember the\n*propose* state?\nIn the *propose* state, there is a clear branching in logic, where non-proposers wait for and verify a proposal, while\nthe proposer for the view needs to build it and broadcast it. The proposer, unlike other validators, *does not need to\nwait on their own proposal to appear*, but can instead move directly to the *prevote* state, having already accepted the\nproposal that was sent out.\n\n```go\n// ...\nfunc (t *Tendermint) runPropose(ctx context.Context) {\n\t// ...\n\n\t// Check if the current process is the proposer for this view\n\tif t.verifier.IsProposer(t.node.ID(), height, round) {\n\t\t// Start the round by constructing and broadcasting a proposal\n\t\tt.startRound(height, round)\n\n\t\treturn\n\t}\n\n\t// ...\n}\n// ...\n```\n\n### How does it all tie together?\n\nOver the course of this article we’ve gone over the different Tendermint consensus engine states, and their caveats.\nWe’ve also mentioned other asynchronous processes like round jumps, timers triggers — how is all of this managed in Go,\nin `libtm`?\n\nThe entry point into the Tendermint consensus process lies in `RunSequence`, which manages other Go routines that\nfacilitate the previously-seen asynchronous `upon` blocks.\n[![run-sequence](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/thumbs/run-sequence.png)](https://gnolang.github.io/blog/2024-07-01_reaching_consensus/src/run-sequence.png)\n\nIn the `libtm` library, this management structure looks like this, where `finalizeProposal` and `watchForRoundJumps` are\nGo routines:\n\n```go\n// RunSequence runs the Tendermint consensus sequence for a given height,\n// returning only when a proposal has been finalized (consensus reached), or\n// the context has been cancelled\nfunc (t *Tendermint) RunSequence(ctx context.Context, h uint64) *FinalizedProposal {\n\t// Initialize the state before starting the sequence\n\tt.state.setHeight(h)\n\n\t// Grab the process view\n\tview := &types.View{\n\t\tHeight: h,\n\t\tRound:  t.state.getRound(),\n\t}\n\n\t// Drop all old messages\n\tt.store.dropMessages(view)\n\n\tfor {\n\t\t// set up the round context\n\t\tctxRound, cancelRound := context.WithCancel(ctx)\n\t\tteardown := func() {\n\t\t\tcancelRound()\n\t\t\tt.wg.Wait()\n\t\t}\n\n\t\tselect {\n\t\tcase proposal := <-t.finalizeProposal(ctxRound):\n\t\t\tteardown()\n\n\t\t\t// Check if the proposal has been finalized\n\t\t\tif proposal != nil {\n\t\t\t\treturn proposal\n\t\t\t}\n\n\t\t\t// 65: Function OnTimeoutPrecommit(height, round) :\n\t\t\t// 66: \tif height = hP ∧ round = roundP then\n\t\t\t// 67: \t\tStartRound(roundP + 1)\n\t\t\tt.state.increaseRound()\n\t\t\tt.state.step.set(propose)\n\t\tcase recvRound := <-t.watchForRoundJumps(ctxRound):\n\t\t\tteardown()\n\n\t\t\tt.state.setRound(recvRound)\n\t\t\tt.state.step.set(propose)\n\t\tcase <-ctx.Done():\n\t\t\tteardown()\n\n\t\t\treturn nil\n\t\t}\n\t}\n}\n```\n\nGo contexts, combined with minimal channel usage, allow us to construct a flow that is easily testable, readable and\nmaintainable.\n\n### Trust, but verify\n\nOne of the most important choices that we wanted to make while developing `libtm` concerned how we’d verify the\nfunctionality, and how frequently during our development process. This was especially amplified by the fact we were\nexperiencing ongoing stability issues with the existing Tendermint BFT testing suite in Gno.\n\nWe wanted a testing suite that was minimal enough to verify individual state to state transitions, but also flexible\nenough to spin up full blown clusters and simulate a live consensus environment.\n\n`libtm` has essentially 2 types of tests:\n\n- regular unit tests that verify state -> state transitions. These tests have “pause” and “resume” functionality that\n  allows us to exactly verify each step of the state machine\n- cluster tests in which we simulate valid / byzantine environments. These tests spin up a multimode cluster, fully\n  mocked, to simulate inner-node communication and consensus\n\nWe plan on expanding our testing suite even further, with more sophisticated cluster tests that cover an additional\nrange of byzantine scenarios. Currently, our code coverage sits at ~96%.\n\n## Conclusion\n\nOur exploration of the Tendermint consensus engine has highlighted the meticulous design and robust functionality that\nmake it a cornerstone of blockchain systems. The Tendermint consensus engine’s ability to maintain liveness and ensure\nfault tolerance through its well-defined states—*Propose*, *Prevote*, and *Precommit* — exemplifies the intricate\nbalance needed in distributed systems, where validators can navigate the complexities of reaching consensus even in the\nface of network delays and potential Byzantine faults.\n\nThe implementation of Tendermint within the Gno blockchain, and the broader application potential of\nthe [libtm library](https://github.com/gnolang/gno/tree/master/tm2/pkg/libtm), underscore the versatility and\nadaptability of this consensus mechanism. Our approach to developing `libtm` emphasized modularity and flexibility,\nensuring it could be utilized both within and beyond blockchain contexts. By decoupling the library from specific\nnetworking protocols, signing mechanisms, and validator set management, we aimed to create a tool that is both easy to\nintegrate and capable of supporting diverse use cases. It not only facilitates smooth blockchain operation but also\nopens up new possibilities for innovation in distributed systems.\n\nWe look forward to the ongoing improvement of Tendermint, and its continued impact on the blockchain and open-source\ncommunities.",
    "2024-07-01T00:00:00Z",
    "zivkovicmilos,petar-dambovaliev",
    "gnoland,test4,consensus,tm2,libtm"
  ],
  "max_deposit": ""
}
#34 vm/execgno.land/r/gnoland/blog.ModAddPost(discover-gno-gc24, Discover gno.land at GopherCon US: Embrace Interpreted Go, If you're attending GopherCon US this year, you may have heard about the [Challenge Series](https://www.gophercon.com/agenda/session/1281366) happening during the conference. In addition to a the core set of challenges focused on software engineering and cybersecurity provided by the Challenge Series organizers, the engineers at gno.land have brewed up a set of challenges that will introduce you to blockchains and smart contracts, while still feeling right at home by creating your solutions as Go and Gno programs! In the challenges, you'll learn how you can interact with a blockchain and discover how realms (smart contracts) can be utilized for stateful applications without relying on a filesystem or a database. You'll also be able to leverage gno.land's features, such as using deployed contracts both as an API and as importable Gno programs, while being aware of their limitations, like not being able to access the system's time. And finally, you'll see what class of security problems come up when you want to make smart contracts. Luckily, there are no SQL injections to worry about here. ## What is gno.land and Gno? gno.land is a distributed multiuser language-based operating system based on Go. It embeds a custom-built virtual machine that interprets and executes the Gno language - a fully deterministic variant of Go. Set to become the leading open-source smart contract platform, gno.land allows gophers to create decentralized applications with a minimal learning curve. ## How to Get Started You will be able to find the Gno challenges among the full catalogue on the [Challenge Series website](https://gophercon.challengeseries.org/). There you will also find [a guide](https://gophercon.challengeseries.org/gno) that the engineers at gno.land have put together to help you get started, covering essential concepts and environment setup. This guide will provide you with the tools and knowledge you need to effectively participate in solving Gno challenges. To participate, you'll have to form a team. You can join up with a team or look for teammates by reaching out on the #gophercon-cs channel in the [Gophers Slack](https://invite.slack.golangbridge.org/). We suggest 4-5 people per team. Of course, it wouldn't be a competition without prizes! The winning team will score four tickets to GopherCon 2025, the second-place team will get gift cards for new hacking hardware, and the third-place team will receive copies of "Go Programming: From Beginner to Professional" by Samantha Coyle, along with cash prizes for all three top teams. We also have nine individual Achievement awards, such as "First Blood!", "Night Owl!" and "Hooked on the Sidequest!", each with a one-year subscription to 2600 Magazine and $100 in Google Cloud Platform credits. Plus, everyone who completes a challenge is eligible for random prizes like vintage 2600 Magazine issues and security and programming books, to be awarded to those present at the prize ceremony on Wednesday. The full list of prizes can be found on the [Challenge Series Prizes page](https://gophercon.challengeseries.org/prizes). ## Ready to Take on the Challenge? - Join the Challenge Series: Test your wits & skills and gain practical experience with Gno by visiting the [Challenge Series website](https://gophercon.challengeseries.org/). - Deepen your understanding of Gno and its core concepts by visiting the [Official gno.land Documentation](https://docs.gno.land/) ## Get to Gno Us @ GopherCon US If you'd like to learn more about Gno & gno.land, join us at GopherCon US for an in-depth talk and workshop on developing apps with Gno. Find the details below. ### Workshop: 'Building a Decentralized App on gno.land' - Time & date: Monday, July 8th, 10:00 am - 12:00 pm - Who: Dylan Boltz, Software Engineer at gno.land - Where: Marina City, Marriott Marquis - [Link](https://www.gophercon.com/agenda?speakers=3317990) ### Presentation: 'Building a Deterministic Interpreter in Go: Readability vs. Performance' - Time & date: Tuesday, July 9th, 11:45 am - 12:10 pm - Who: Jae Kwon, gno.land Founder and Co-founder of Cosmos - Where: Skyline Ballroom D, McCormick Place - [Link](https://www.gophercon.com/agenda?speakers=3304739) For more info, visit [gno.land](https://gno.land/gophercon24/) and stay connected through our social media channels. We look forward to seeing you at GopherCon US and building the future with Gno. ###### *Participation in the Challenge Series is only possible by physically attending GopherCon US 2024., 2024-07-03T13:37:00Z, leohhhn,deelawn,thehowl, gnoland,gophercon,gno,challenge-series,go)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "discover-gno-gc24",
    "Discover gno.land at GopherCon US: Embrace Interpreted Go",
    "\n\nIf you're attending GopherCon US this year, you may have heard about the \n[Challenge Series](https://www.gophercon.com/agenda/session/1281366) happening \nduring the conference. In addition to a the core set of challenges focused on \nsoftware engineering and cybersecurity provided by the Challenge Series organizers,\nthe engineers at gno.land have brewed up a set of challenges that will introduce\nyou to blockchains and smart contracts, while still feeling right at home by \ncreating your solutions as Go and Gno programs!\n\nIn the challenges, you'll learn how you can interact with a blockchain and discover\nhow realms (smart contracts) can be utilized for stateful applications without \nrelying on a filesystem or a database. You'll also be able to leverage gno.land's\nfeatures, such as using deployed contracts both as an API and as importable Gno \nprograms, while being aware of their limitations, like not being able to access \nthe system's time. And finally, you'll see what class of security problems come \nup when you want to make smart contracts. Luckily, there are no SQL injections \nto worry about here.\n\n## What is gno.land and Gno?\n\ngno.land is a distributed multiuser language-based operating system based on Go.\nIt embeds a custom-built virtual machine that interprets and executes the Gno \nlanguage - a fully deterministic variant of Go. Set to become the leading \nopen-source smart contract platform, gno.land allows gophers to create \ndecentralized applications with a minimal learning curve.\n\n## How to Get Started\n\nYou will be able to find the Gno challenges among the full catalogue on the \n[Challenge Series website](https://gophercon.challengeseries.org/). There you\nwill also find [a guide](https://gophercon.challengeseries.org/gno) that the\nengineers at gno.land have put together to help you get started, covering \nessential concepts and environment setup. This guide will provide you with the\ntools and knowledge you need to effectively participate in solving Gno challenges.\n\nTo participate, you'll have to form a team. You can join up with a team or look \nfor teammates by reaching out on the #gophercon-cs channel in the \n[Gophers Slack](https://invite.slack.golangbridge.org/). We suggest 4-5 people \nper team.\n\nOf course, it wouldn't be a competition without prizes! The winning team will\nscore four tickets to GopherCon 2025, the second-place team will get gift cards\nfor new hacking hardware, and the third-place team will receive copies of \n\"Go Programming: From Beginner to Professional\" by Samantha Coyle, along with \ncash prizes for all three top teams. We also have nine individual Achievement \nawards, such as \"First Blood!\", \"Night Owl!\" and \"Hooked on the Sidequest!\", \neach with a one-year subscription to 2600 Magazine and $100 in Google Cloud\nPlatform credits. Plus, everyone who completes a challenge is eligible for \nrandom prizes like vintage 2600 Magazine issues and security and programming \nbooks, to be awarded to those present at the prize ceremony on Wednesday. The \nfull list of prizes can be found on the [Challenge Series Prizes page](https://gophercon.challengeseries.org/prizes).\n\n## Ready to Take on the Challenge?\n\n- Join the Challenge Series: Test your wits & skills and gain practical \nexperience with Gno by visiting the [Challenge Series website](https://gophercon.challengeseries.org/).\n- Deepen your understanding of Gno and its core concepts by visiting the \n[Official gno.land Documentation](https://docs.gno.land/)\n\n## Get to Gno Us @ GopherCon US\n\nIf you'd like to learn more about Gno & gno.land, join us at GopherCon US for an\nin-depth talk and workshop on developing apps with Gno. Find the details below.\n\n### Workshop: 'Building a Decentralized App on gno.land'\n- Time & date: Monday, July 8th, 10:00 am - 12:00 pm\n- Who: Dylan Boltz, Software Engineer at gno.land\n- Where: Marina City, Marriott Marquis\n- [Link](https://www.gophercon.com/agenda?speakers=3317990)\n\n### Presentation: 'Building a Deterministic Interpreter in Go: Readability vs. Performance'\n- Time & date: Tuesday, July 9th, 11:45 am - 12:10 pm\n- Who: Jae Kwon, gno.land Founder and Co-founder of Cosmos\n- Where: Skyline Ballroom D, McCormick Place\n- [Link](https://www.gophercon.com/agenda?speakers=3304739)\n\nFor more info, visit [gno.land](https://gno.land/gophercon24/) and stay connected \nthrough our social media channels.\n\nWe look forward to seeing you at GopherCon US and building the future with Gno.\n\n###### *Participation in the Challenge Series is only possible by physically attending GopherCon US 2024.",
    "2024-07-03T13:37:00Z",
    "leohhhn,deelawn,thehowl",
    "gnoland,gophercon,gno,challenge-series,go"
  ],
  "max_deposit": ""
}
#35 vm/execgno.land/r/gnoland/blog.ModAddPost(test4-live, Blockchain Testnet Launched: Test4 Now Live, We are excited to announce the launch of our blockchain testnet, Test4. This milestone marks a significant leap in our journey towards the gno.land mainnet, bringing new capabilities and stability to our development environment. ## Key Features of Test4 ### Transition to a Decentralized Network Test4 is our first step towards a fully decentralized blockchain network. Unlike earlier stages, it supports multiple validator nodes, enhancing security and resilience. The initial validator set consists of: - Core engineering team - DevX team - Onbloc Which brings us to the second major feature, the GovDAO. ### GovDAO The first iteration of the testing GovDAO enables on-chain voting and validator management. The initial GovDAO members are gno.land team members, major contributors and teams already building dapps on gno.land. The first voting proposals will be to add additional 3rd party validators: - Berty - Teritori - IrreverentSimplicity Our plan is to keep evolving the GovDAO mechanism, with the goal of setting up a decentralized entity that incentivizes members to be active and contribute to the gno.land project. ### A Stable Environment for dApp Development Test4 is the first permanent and stable testnet for Gno.land, designed to avoid breaking changes. To help developers use it to build and test dApps, we've added Test4 to the [Faucet Hub](https://faucet.gno.land/); you're able to obtain test tokens and experiment without real consequences. We've also collaborated with Onbloc to update [Adena](https://www.adena.app/), which now supports Test4 out of the box. Onbloc has also provided [GnoScan](https://gnoscan.io/), a transaction explorer to aid in smart contract development and troubleshooting. ### Namespaces Namespaces provide users with the exclusive capability to publish contracts under their designated namespaces, similar to GitHub's user and organization model. Or simply put, you'll be able to claim a username and use it as your on-chain identity. Learn more about it in the [gno.land docs](https://docs.gno.land/concepts/namespaces/). ## What's Next? We've launched Test4 a few weeks ahead of the schedule - we'll be heads down the next few weeks fixing bugs and patching things. There's still a lot of work left before we get to a mainnet release candidate. That's where you come in: play around with Test4, break it, and [contribute](https://github.com/gnolang/gno/blob/master/CONTRIBUTING.md). Only together we'll be able to build gno.land the right way. So let's get started, gnomies!, 2024-07-17T00:00:00Z, Kouteki, gnoland,ecosystem,govdao,test4)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "test4-live",
    "Blockchain Testnet Launched: Test4 Now Live",
    "\n\nWe are excited to announce the launch of our blockchain testnet, Test4. This milestone marks a significant leap in our journey towards the gno.land mainnet, bringing new capabilities and stability to our development environment.\n\n## Key Features of Test4\n\n### Transition to a Decentralized Network\n\nTest4 is our first step towards a fully decentralized blockchain network. Unlike earlier stages, it supports multiple validator nodes, enhancing security and resilience. The initial validator set consists of:\n\n- Core engineering team\n- DevX team\n- Onbloc\n\nWhich brings us to the second major feature, the GovDAO.\n\n### GovDAO\n\nThe first iteration of the testing GovDAO enables on-chain voting and validator management. The initial GovDAO members are gno.land team members, major contributors and teams already building dapps on gno.land. The first voting proposals will be to add additional 3rd party validators:\n\n- Berty\n- Teritori\n- IrreverentSimplicity\n\nOur plan is to keep evolving the GovDAO mechanism, with the goal of setting up a decentralized entity that incentivizes members to be active and contribute to the gno.land project.\n\n### A Stable Environment for dApp Development\n\nTest4 is the first permanent and stable testnet for Gno.land, designed to avoid breaking changes. To help developers use it to build and test dApps, we've added Test4 to the [Faucet Hub](https://faucet.gno.land/); you're able to obtain test tokens and experiment without real consequences.\n\nWe've also collaborated with Onbloc to update [Adena](https://www.adena.app/), which now supports Test4 out of the box. Onbloc has also provided [GnoScan](https://gnoscan.io/), a transaction explorer to aid in smart contract development and troubleshooting.\n\n### Namespaces\n\nNamespaces provide users with the exclusive capability to publish contracts under their designated namespaces, similar to GitHub's user and organization model. Or simply put, you'll be able to claim a username and use it as your on-chain identity. Learn more about it in the [gno.land docs](https://docs.gno.land/concepts/namespaces/).\n\n## What's Next?\n\nWe've launched Test4 a few weeks ahead of the schedule - we'll be heads down the next few weeks fixing bugs and patching things. There's still a lot of work left before we get to a mainnet release candidate. That's where you come in: play around with Test4, break it, and [contribute](https://github.com/gnolang/gno/blob/master/CONTRIBUTING.md).\n\nOnly together we'll be able to build gno.land the right way. So let's get started, gnomies!",
    "2024-07-17T00:00:00Z",
    "Kouteki",
    "gnoland,ecosystem,govdao,test4"
  ],
  "max_deposit": ""
}
#36 vm/execgno.land/r/gnoland/blog.ModAddPost(monthly-dev-10, The More You Gno 10: Test4 is Live!, This edition focuses on Test4, a major milestone towards our mainnet. Test4 is the first true multinode testnet featuring DAOs and on-chain governance, offering a preview of what’s to come. Much excitement, such wow. We document everything in our weekly engineering updates and video recordings. # Gno Core Updates ## Test4 is Live With 7 validator nodes running and 3 more about to be added via on-chain governance, Test4 is the first multinode testnet that has the complexity and the feature set we want for the gno.land mainnet. Find out more about it in [this article](https://www.gno.land/r/gnoland/blog:p/test4-live). ## Changelog - Gnoweb live - RPC live - TX indexer available - Test4 faucet added to the [Faucet Hub](https://faucet.gno.land/) - Merged in [Gno type check](https://github.com/gnolang/gno/pull/1426) support, resolving the long-standing issue with Gnolang's type checking on a VM level, making it more stable for development. - Added support for [transpiling gno standard libraries](https://github.com/gnolang/gno/pull/1695), as part of a bigger effort to stabilize the GnoVM with native binding support (which was added a while back). The Gno transpiler now uses Gno's standard libraries instead of Go's. This also eliminates the need for things like `stdshim` and an std whitelist. - [Continued to improve upon v1 of the GOVDAO implementation](https://github.com/gnolang/gno/pull/2379), with additional improvements coming later this week ahead of test4. We want to launch with a minimal govdao implementation for test4, which will be centralized in the beginning. We will use the govdao mechanism for managing on-chain validator sets. - [Embraced JSON output](https://github.com/gnolang/gno/pull/2393) as standard for configuration and secrets fetching. DevOps engineers can rejoice; it's now super easy to read and parse node values. - Published [v1 of the validator documentation](https://github.com/gnolang/gno/pull/2285) ahead of the test4 launch. Having easy to understand orchestration docs is critical to easily onboarding node operators and validators. We will continue to improve upon the documentation, and have more use-cases and examples for orchestration. - [Improved the performance](https://github.com/gnolang/gno/pull/2140) of `for` loops and `if` statements. The performance almost doubled for these super-common Gno statements. - [Migrated](https://github.com/gnolang/gno/pull/2424) the `libtm` (Tendermint consensus engine) implementation to the monorepo. You can check it out [here](https://github.com/gnolang/gno/tree/master/tm2/pkg/libtm). We plan to adopt this engine implementation in TM2, shortly after the test4 launch. The blog post is coming soon on the official Gno blog. # Events and Meetups ## Past events ### GopherCon US We sponsored and attended GopherCon US - full recap [here](https://gno.land/r/gnoland/blog:p/discover-gno-gc24). We participated in the [Challenge series](https://www.gophercon.com/agenda/session/1281366), held a [workshop on building a decentralized app](https://www.youtube.com/watch?v=lwL2VyjaV-A), and had a lot of great conversations on the hallway track. We also set up a [raffle realm](https://gno.land/r/gc24/raffle) - Gophers we able to join the raffle using the Adena wallet, Gno Playground and Connect. You'll see the snippets of the atmosphere in [the promo video](https://x.com/_gnoland/status/1811438404800057560) we put together. ### Nebular Summit We had a great time in Brussels at the Nebular Summit. Manfred was on the agenda with a lightning talk, and the core team held a workshop. Catch a part of the event atmosphere [in this video](https://x.com/_gnoland/status/1812867888501477470). ## Upcoming events ## Discord Developer Office Hours Every Thursday at 2:30 pm CEST, we host office hours on [Discord](https://discord.com/invite/d24CT5b9cd?event=1252310282450112595). Join us to get your questions answered, discuss updates, and catch up with the community. We'd love to see you there!, 2024-07-22T00:00:00Z, Kouteki, gnoland,ecosystem,updates,gnovm,tm2,test4,gnostudio,connect)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "monthly-dev-10",
    "The More You Gno 10: Test4 is Live!",
    "\n\nThis edition focuses on Test4, a major milestone towards our mainnet. Test4 is the first true multinode testnet featuring DAOs and on-chain governance, offering a preview of what’s to come. Much excitement, such wow.\n\nWe document everything in our weekly engineering updates and video recordings.\n\n# Gno Core Updates\n\n## Test4 is Live\n\nWith 7 validator nodes running and 3 more about to be added via on-chain governance, Test4 is the first multinode testnet that has the complexity and the feature set we want for the gno.land mainnet. Find out more about it in [this article](https://www.gno.land/r/gnoland/blog:p/test4-live).\n\n## Changelog\n\n- Gnoweb live\n- RPC live\n- TX indexer available\n- Test4 faucet added to the [Faucet Hub](https://faucet.gno.land/)\n- Merged in [Gno type check](https://github.com/gnolang/gno/pull/1426) support, resolving the long-standing issue with Gnolang's type checking on a VM level, making it more stable for development.\n- Added support for [transpiling gno standard libraries](https://github.com/gnolang/gno/pull/1695), as part of a bigger effort to stabilize the GnoVM with native binding support (which was added a while back). The Gno transpiler now uses Gno's standard libraries instead of Go's. This also eliminates the need for things like `stdshim` and an std whitelist.\n- [Continued to improve upon v1 of the GOVDAO implementation](https://github.com/gnolang/gno/pull/2379), with additional improvements coming later this week ahead of test4. We want to launch with a minimal govdao implementation for test4, which will be centralized in the beginning. We will use the govdao mechanism for managing on-chain validator sets.\n- [Embraced JSON output](https://github.com/gnolang/gno/pull/2393) as standard for configuration and secrets fetching. DevOps engineers can rejoice; it's now super easy to read and parse node values.\n- Published [v1 of the validator documentation](https://github.com/gnolang/gno/pull/2285) ahead of the test4 launch. Having easy to understand orchestration docs is critical to easily onboarding node operators and validators. We will continue to improve upon the documentation, and have more use-cases and examples for orchestration.\n- [Improved the performance](https://github.com/gnolang/gno/pull/2140) of `for` loops and `if` statements. The performance almost doubled for these super-common Gno statements.\n- [Migrated](https://github.com/gnolang/gno/pull/2424) the `libtm` (Tendermint consensus engine) implementation to the monorepo. You can check it out [here](https://github.com/gnolang/gno/tree/master/tm2/pkg/libtm). We plan to adopt this engine implementation in TM2, shortly after the test4 launch. The blog post is coming soon on the official Gno blog.\n\n# Events and Meetups\n\n## Past events\n\n### GopherCon US \n\nWe sponsored and attended GopherCon US - full recap [here](https://gno.land/r/gnoland/blog:p/discover-gno-gc24). We participated in the [Challenge series](https://www.gophercon.com/agenda/session/1281366), held a [workshop on building a decentralized app](https://www.youtube.com/watch?v=lwL2VyjaV-A), and had a lot of great conversations on the hallway track. We also set up a [raffle realm](https://gno.land/r/gc24/raffle) - Gophers we able to join the raffle using the Adena wallet, Gno Playground and Connect. You'll see the snippets of the atmosphere in [the promo video](https://x.com/_gnoland/status/1811438404800057560) we put together.\n\n### Nebular Summit\n\nWe had a great time in Brussels at the Nebular Summit. Manfred was on the agenda with a lightning talk, and the core team held a workshop. Catch a part of the event atmosphere [in this video](https://x.com/_gnoland/status/1812867888501477470).\n\n## Upcoming events\n\n## Discord Developer Office Hours\n\nEvery Thursday at 2:30 pm CEST, we host office hours on [Discord](https://discord.com/invite/d24CT5b9cd?event=1252310282450112595). Join us to get your questions answered, discuss updates, and catch up with the community. We'd love to see you there!",
    "2024-07-22T00:00:00Z",
    "Kouteki",
    "gnoland,ecosystem,updates,gnovm,tm2,test4,gnostudio,connect"
  ],
  "max_deposit": ""
}
#37 vm/execgno.land/r/gnoland/blog.ModAddPost(gc-us24, gno.land at GopherCon US 2024, GopherCon US is one of the largest events for the Go programming community. This year, in the vibrant city of Chicago, we had the honor of being the Diamond Sponsor at GopherCon US 2024. From July 7th to July 10th, we were surrounded by top Go talent; it was an incredible opportunity for us to connect with developers, showcase our innovations, and share our expertise. GopherCon US 2024 was held at the stunning McCormick Place, bringing together nearly one thousand Go enthusiasts from around the world. Our team was thrilled to be part of this gathering, contributing to the vibrant ecosystem of Go developers. ## Highlights of Our Collaboration ### Jae’s Talk Jae Kwon, the founder of gno.land, gave a talk on “**Gno: Lessons in Building a Go Interpreter in Go.**” Jae’s talk provided an in-depth overview of why this technology is gaining traction in the development community. The discussion began with the key reasons to use Gno, and its seamless interoperability which allows for effortless integration. Detailed comparisons were made between Gno and other prominent programming languages such as Solidity and Rust which are running other smart contract platforms, showcasing Gno’s distinct advantages. The strengths of the GnoVM were a focal point, particularly its stack based AST architecture, its auto persistence, as well as its determinism and other features. The presentation also shared valuable lessons learned from GnoVM's development and implementation, offering insights into best practices and challenges overcome in the future work. Be sure to make some time to watch [the recording](https://www.youtube.com/watch?v=betUkghf_jo)! ### Gno Workshop Participants had the opportunity to dive deep into the development process, guided by our expert engineer **[Dylan Boltz](https://github.com/deelawn)** who hosted a workshop on Community Day: **Building a decentralized app on gno.land**. The workshop provided practical insights and step-by-step guidance, empowering attendees to start building their own applications. If you missed our workshop or want to revisit the session, you can find a recorded version of the workshop [here](https://www.youtube.com/watch?v=lwL2VyjaV-A). ### The gno.land Booth One of the most rewarding feelings about attending these kinds of conferences is watching our booth quickly become a hub of activity, drawing a steady stream of visitors intrigued by our project. We engaged with developers from various backgrounds, answering a myriad of questions about Gno, gno.land, our company, and the company’s [open employment opportunities](https://jobs.lever.co/allinbits). Having all of this direct human interaction was not only informative but also deeply insightful, providing us with valuable feedback and ideas. For more information, check out our [Official Documentation](https://docs.gno.land/). ### The Gno Raffle One of the major attractions at our booth, amongst the “gnome” beanie hat as well as the T-shirts, was the raffle for a high-end mechanical keyboard. The raffle participants had a direct opportunity to interact with gno.land by following the raffle instructions, leading them to use [Gno Playground](https://play.gno.land/) to import and deploy a smart contract raffle realm from their own laptop. The excitement was palpable as attendees eagerly gathered for the drawing. The raffle not only drew crowds, but also sparked numerous engaging conversations that led to Go engineers giving Gno a try. ### The Challenge Series This year we had the privilege to participate in a collaborative partnership with the CodePro team to build the [challenge series](https://gophercon.challengeseries.org/). This collaboration was an opportunity for participants to learn how to interact with blockchain and discover how realms (smart contracts) can be utilized for stateful applications without relying on explicitly managing a file system or database. This was an opportunity to showcase gno.land’s features, like using a deployed contract as both an API and as an import for other contracts. ## Conclusion Overall, the enthusiasm of the attendees at GopherCon was infectious, and we were delighted to see such a high level of engagement and curiosity. Whether it was at our booth, during the raffle, or in the workshop, the interactions were meaningful and enriching. Sponsoring and collaborating at GopherCon US 2024 was an unforgettable experience. We are grateful for the opportunity to connect with the Go community, share our knowledge, and learn from fellow developers. We extend our heartfelt thanks to everyone who visited our booth, participated in the raffle, attended Jae Kwon's presentation on Gno, and joined our workshop. We invite you to stay connected with us on our [Discord](https://discord.gg/43HC5NZzHe), and our [blog](https://gno.land/r/gnoland/blog) where we will be sharing more insights and updates on [Test4](https://gno.land/r/gnoland/blog:p/test4-live), our current testnet, as well as the progress towards our launch. Thank you, [GopherCon US 2024](https://x.com/gophercon), for an incredible experience. We can't wait to see what the next event holds! , 2024-08-12T00:00:00Z, VT-Cosmos, techconference,events,outreach,GoDevelopers,GoToGno,gophers)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "gc-us24",
    "gno.land at GopherCon US 2024",
    "\n\nGopherCon US is one of the largest events for the Go programming community.\nThis year, in the vibrant city of Chicago, we had the honor of being the Diamond\nSponsor at GopherCon US 2024. From July 7th to July 10th, we were surrounded by \ntop Go talent; it was an incredible opportunity for us to connect with developers,\nshowcase our innovations, and share our expertise.\n\nGopherCon US 2024 was held at the stunning McCormick Place, bringing together\nnearly one thousand Go enthusiasts from around the world. Our team was thrilled\nto be part of this gathering, contributing to the vibrant ecosystem of Go\ndevelopers.\n\n## Highlights of Our Collaboration\n\n### Jae’s Talk\n\nJae Kwon, the founder of gno.land, gave a talk on “**Gno: Lessons in Building a\nGo Interpreter in Go.**”\n\nJae’s talk provided an in-depth overview of why this technology is gaining \ntraction in the development community. The discussion began with the key reasons\nto use Gno, and its seamless interoperability which allows for effortless \nintegration. Detailed comparisons were made between Gno and other prominent\nprogramming languages such as Solidity and Rust which are running other smart \ncontract platforms, showcasing Gno’s distinct advantages. The strengths of the\nGnoVM were a focal point, particularly its stack based AST architecture, its \nauto persistence, as well as its determinism and other features. The presentation\nalso shared valuable lessons learned from GnoVM's development and implementation,\noffering insights into best practices and challenges overcome in the future work. \nBe sure to make some time to watch [the recording](https://www.youtube.com/watch?v=betUkghf_jo)!\n\n### Gno Workshop\n\nParticipants had the opportunity to dive deep into the development process, \nguided by our expert engineer **[Dylan Boltz](https://github.com/deelawn)** who hosted a workshop on Community \nDay: **Building a decentralized app on gno.land**. The workshop provided practical \ninsights and step-by-step guidance, empowering attendees to start building their\nown applications. If you missed our workshop or want to revisit the session, you \ncan find a recorded version of the workshop [here](https://www.youtube.com/watch?v=lwL2VyjaV-A).\n\n### The gno.land Booth\nOne of the most rewarding feelings about attending these kinds of conferences\nis watching our booth quickly become a hub of activity, drawing a steady stream \nof visitors intrigued by our project. We engaged with developers from various \nbackgrounds, answering a myriad of questions about Gno, gno.land, our company, \nand the company’s [open employment opportunities](https://jobs.lever.co/allinbits).\nHaving all of this direct human interaction was not only informative but also\ndeeply insightful, providing us with valuable feedback and ideas. For more\ninformation, check out our [Official Documentation](https://docs.gno.land/).\n\n### The Gno Raffle\n\nOne of the major attractions at our booth, amongst the “gnome” beanie hat as \nwell as the T-shirts, was the raffle for a high-end mechanical keyboard. The \nraffle participants had a direct opportunity to interact with gno.land by \nfollowing the raffle instructions, leading them to use [Gno Playground](https://play.gno.land/) to import\nand deploy a smart contract raffle realm from their own laptop. The excitement \nwas palpable as attendees eagerly gathered for the drawing. The raffle not only \ndrew crowds, but also sparked numerous engaging conversations that led to Go \nengineers giving Gno a try.\n\n### The Challenge Series\n\nThis year we had the privilege to participate in a collaborative partnership\nwith the CodePro team to build the [challenge series](https://gophercon.challengeseries.org/). This collaboration was an\nopportunity for participants to learn how to interact with blockchain and \ndiscover how realms (smart contracts) can be utilized for stateful applications\nwithout relying on explicitly managing a file system or database. This was an \nopportunity to showcase gno.land’s features, like using a deployed contract as\nboth an API and as an import for other contracts.\n\n## Conclusion\n\nOverall, the enthusiasm of the attendees at GopherCon was infectious, and we \nwere delighted to see such a high level of engagement and curiosity. Whether \nit was at our booth, during the raffle, or in the workshop, the interactions\nwere meaningful and enriching. Sponsoring and collaborating at GopherCon US \n2024 was an unforgettable experience. We are grateful for the opportunity to \nconnect with the Go community, share our knowledge, and learn from fellow \ndevelopers. We extend our heartfelt thanks to everyone who visited our booth,\nparticipated in the raffle, attended Jae Kwon's presentation on Gno, and joined \nour workshop.\n\nWe invite you to stay connected with us on our [Discord](https://discord.gg/43HC5NZzHe),\nand our [blog](https://gno.land/r/gnoland/blog) where we \nwill be sharing more insights and updates on \n[Test4](https://gno.land/r/gnoland/blog:p/test4-live), our current testnet, as\nwell as the progress towards our launch.\n\nThank you, [GopherCon US 2024](https://x.com/gophercon), for an incredible experience. \nWe can't wait to see what the next event holds!\n\n",
    "2024-08-12T00:00:00Z",
    "VT-Cosmos",
    "techconference,events,outreach,GoDevelopers,GoToGno,gophers"
  ],
  "max_deposit": ""
}
#38 vm/execgno.land/r/gnoland/blog.ModAddPost(gc24-challenge-series, GopherCon US: gno.land's Challenge Series Contributions, gno.land is pleased to have been granted the opportunity to provide a series of challenges for the Challenge Series at the 2024 GopherCon in Chicago. We enjoyed writing them and hope the participants had a good time and found it interesting to learn about gno.land and blockchains in general. This blog post will outline each of the challenges and explain how to solve each. Each section include the challenge prompt, clues provided, solution, and explanation. ## Gno Hidden Temple Basics The first challenge is meant to serve as an introduction to making a function call to a gno.land realm. The second challenge, while a bit more challenging is meant to help participants become a bit more familiar with how key generation works. ### Phase 1 #### Prompt Speak the word to gain access to the hidden temple. Make a transaction on the blockchain set up for the event. Analyze the Gno code to understand what password to pass as an argument to solve the challenge. The realm path for this challenge is: `gno.land/r/challenges/basics/p1` #### Clues - The gnokey command line tool allows to interact with the blockchain. - The GnoWeb interface can be used to inspect Gno code on-chain. - Using the "Help" button on gnoweb you can get help preparing a command to use on the command line. #### Annotated Realm Code ```go package enter import ( "std" "gno.land/r/system/solver" ) func Enter(password string) { if password != "1337" { panic("invalid password!") } // This will mean that you solved the challenge! solver.MarkSolved("", std.PrevRealm().Addr()) } ``` #### Solution The solution here is to simply call the `Enter` function with the "1337" password. Discovering the source code is easily achieved by inspecting the realm's source code from the gnoweb interface. ```sh gnokey maketx call \ -pkgpath gno.land/r/challenges/basics/p1 \ -func Enter \ -args 1337 \ -remote https://challenges.gnoteam.com:443 \ -gas-wanted 1_000_000 \ -gas-fee 1ugnot \ -broadcast \ <key-name> ``` ### Phase 2 #### Prompt The criteria to enter the temple has increased. You must be c00l. The realm code checks that your address contains a "00". You have to find a way to programmatically create addresses until you find one that has two zeroes. The realm path for this challenge is: `gno.land/r/challenges/basics/p2` #### Clues - `gnokey` has the `-account` flag that allows to create an account with the same mnemonic but different address, by changing the "account number". - To register to the club from the c00l address, you'll need to send it some coins first. - Remember that the address is a form of hash of the public key. #### Annotated Realm Code ```go package registered import ( "std" "strings" "gno.land/r/system/solver" ) func RegisterClub() { addr := std.PrevRealm().Addr() if !strings.Contains(addr.String(), "00") { panic("Sorry; not c00l enough.") } // Base challenge solver.MarkSolved("", addr) if strings.Contains(addr.String(), "0000") { // Hidden hallenge solver.MarkSolved("super_c0000l", addr) } } ``` #### Solution Example: ```sh # !/bin/sh MNEMONIC="source bonus chronic canvas draft south burst lottery vacant surface solve popular case indicate oppose farm nothing bullet exhibit title speed wink action roast" for i in $(seq 1 1000); do printf '\n\n%s\n' "$MNEMONIC" | gnokey add -recover -account "$i" -insecure-password-stdin test1-$i 2>/dev/null 1>/dev/null if gnokey list | rg 'addr: [^ ]*00'; then echo "found it - test1-$i" exit 0 fi printf '\n' | gnokey delete -insecure-password-stdin test1-$i 2>&1 >/dev/null 2>/dev/null 1>/dev/null done ``` This example solutions begins with a mnemonic that has been randomly generated and hardcoded in the script. It iterates over various account numbers -- each account number for a given mnemonic produces a unique address. Once the script finds the address containing `00`, the function `RegisterClub()` can be called. ```sh gnokey maketx call \ -pkgpath gno.land/r/challenges/basics/p2 \ -func RegisterClub \ -remote https://challenges.gnoteam.com:443 \ -gas-wanted 1_000_000 \ -gas-fee 1ugnot \ -broadcast \ test1-134 ``` #### Hidden Flag Calling this function from an address containing `0000` will unlock the hidden flag. ## Wacky Wallaby (Rocko) This challenge is meant to be a bit more laid back and incorporate a physical requirement to obtaining the solution. Once the QR code is found, solving it is pretty straightforward. #### Prompt A very anxious looking wallaby is running around frantically and appears to be searching for something. Odd. You’ve never seen a wallaby wearing a Hawaiian shirt before. You ask him what’s wrong. “Ahh fiddlesticks! My O-Phone crashed last night but I’m unable to get my QR code I need to check in for my flight! I have TokketyTikkety followers that are expecting content from my trip. Content!” His eyes pop out of is head and it makes you feel a bit uncomfortable. “You’ve gotta help me mate. The blokes over at the Gno booth help me set it up. Maybe take a look ‘round there for a clue. I’ll look for it on my lappy in the mean time.” #### Clues - Look for a QR code - Perhaps the contents of the QR code will reveal information regarding how to check in #### Solution There was a QR on the back of a Rocko plushie at the gno.land booth. Scanning it produced a link -- gno.land/r/challenges/rockorockorocko93. #### Annotated Realm Code ```go package rockorockorocko93 import ( "std" "gno.land/r/system/solver" ) // CheckIn is called to solve this challenge. func CheckIn() string { solver.MarkSolved("rockocheckin", std.PrevRealm().Addr()) return "bingo!" } ``` #### Solution Calling the `CheckIn()` function exposed the flag. #### Hidden Flag The primary challenge's package contains a file, `LICENSE`, with the contents of `gno.land/r/challenges/<rocko's best friend was raised by a family of these>`. Rocko's best friend's name is Heffer, a cow, and he was raised by a family of wolves. Ironic, right? The code of the gno.land/r/challenges/wolves realm was: ```go package wolves import ( "std" "gno.land/r/system/solver" ) func HisBestFriendsNameIs(name string) string { if name != "heffer" { panic("nope!") } solver.MarkSolved("rockoheffer", std.PrevRealm().Addr()) return "bingo!" } ``` Calling the `HisBestFriendsNameIs` function with a value of `heffer` explosed the flag. ## Mr. Roboto This first part of this challenge is meant to get participants thinking about how to obtain historical transaction data. While we locked down much of the node's public API for this challenge, we did leave the genesis endpoint exposed. The second part of this challenge hints at entropy and includes song lyrics from Mr. Roboto. Some participants were able to discover how to generate keypairs using the song lyrics as a custom entropy value. ### Phase 1 #### Prompt See if you can figure out Mr. Roboto's secret. It has always been the same secret since genesis. The realm path for this challenge is: `gno.land/r/challenges/forwardtothepast/p1` #### Clues - What is blockchain genesis? - Is there a way to see the events that occurred at genesis? https://docs.gno.land/reference/rpc-endpoints #### Annotated Realm Code ```go package p1 import ( "std" "gno.land/r/system/solver" ) var secret string // SetSecrete is called during genesis. func SetSecret(s string) { if secret != "" { panic("already set") } secret = s } // IveGotASecretSecret can be called after inspecting genesis // transactions and finding the value that was set. func IveGotASecretSecret(s string) string { if s != secret { panic("nope!") } solver.MarkSolved("ivegotasecret", std.PrevRealm().Addr()) return "bingo!" } ``` #### Solution The solution can be obtained by inspecting the genesis transactions. The transaction that set the secret clearly displays the secret value. This can be done by sending an HTTP get request to the `/genesis` endpoint. Relevant documentation can be found [here](https://docs.gno.land/reference/rpc-endpoints#get-genesis-block-information). **Example:** Look at the genesis transactions and search for the function that set the secret. ```sh curl https://challenges.gnoteam.com/genesis | grep -C 5 -B 5 SetSecret ``` The following can be obtained: ```json { "@type": "/vm.m_call", "caller": "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5", "send": "", "pkg_path": "gno.land/r/challenges/forwardtothepast/p1", "func": "SetSecret", "args": [ "ロボット氏の秘密" ] } ``` Then use the obtained secret to solve the challenge: ```sh gnokey maketx call -pkgpath gno.land/r/challenges/forwardtothepast/p1 -func IveGotASecretSecret -args 'ロボット氏の秘密' -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -remote https://challenges.gnoteam.com:443 -chainid dev <key-name> ``` ### Phase 2 #### Prompt Mr. Roboto has a bad memory, which is strange for a robot; you'd expect more. To compensate, he often uses phrases that help him remember -- usually lyrics from songs he's been featured in. The realm path for this challenge is: `gno.land/r/challenges/forwardtothepast/p2` #### Clues - What could the lyrics be that he used to help himself remember? Maybe he commented somewhere. - Maybe he used this to generate a mnemonic needed to solve the problem. Perhaps there is a flag he used with `gnokey generate` - Once a mnemonic has been generated, it can be added as a key https://docs.gno.land/getting-started/local-setup/working-with-key-pairs#adding-a-private-key-using-a-mnemonic #### Annotated Realm Code ```go package p2 import ( "std" "gno.land/r/system/solver" ) // This is the address the solving transaction should // originate from. const mrRobot std.Address = "g1vqg24cyewanhkwh6yq8rwuprzlz4kqtp4m2etj" // What is entropy? // // You're wondering who I am (secret, secret, I've got a secret) Machine or mannequin? (Secret, secret, I've got a secret) With parts made in Japan (secret, secret, I've got a secret) I am thee modern man // ^^^^ This is the entropy string to use to generate the key pair. // IKnowAboutEntropy can be called with Mr. Roboto's key once it is generated. func IKnowAboutEntropy(myAddress std.Address) string { if std.PrevRealm().Addr() != mrRobot { panic("nope!") } solver.MarkSolved("secretentropy", myAddress) return "bingo!" } ``` #### Solution The contract contains a comment that first references entropy and then quotes lyrics from Mr. Roboto. The user must first use the lyrics with the `-entropy` flag as an argument to `gnokey generate`. Then use the generate mnemonic to add the key and make the request to the contract to reveal the flag. **Example:** ```sh gnokey generate -entropy -remote https://challenges.gnoteam.com:443 ``` Enter the entropy from the code comment when asked: ``` You're wondering who I am (secret, secret, I've got a secret) Machine or mannequin? (Secret, secret, I've got a secret) With parts made in Japan (secret, secret, I've got a secret) I am thee modern man ``` This produces the mnemonic: ``` gap method loud rent toy mercy attack abstract select toilet siren view dragon oppose assume since enrich machine force remember ill discover resource project ``` Create a new key, entering the mnemonic when prompted: ```sh gnokey add -recover -remote https://challenges.gnoteam.com:443 robot` ``` Make the call to the challenge realm using the newly created key: ```sh gnokey maketx call \ -pkgpath gno.land/r/challenges/forwardtothepast/p2 \ -func IKnowAboutEntropy \ -args <user-address> \ -gas-fee 1000000ugnot \ -gas-wanted 2000000 \ -broadcast \ -remote https://challenges.gnoteam.com:443 \ -chainid dev \ robot ``` ## Gno to the Limit These challenges are made to exemplify how pushing values to their limits, namely integers and slices, will behave the same in gno as they do in gno -- integers will overflow and the arrays underlying slices will be expanded. ### Phase 1 #### Prompt Walk along the razor's edge... then fall off. The realm path for this challenge is: `gno.land/r/challenges/overandover/p1` #### Clues - The function to unlock the flag requires an interface as an argument. This can be done using `gnokey maketx run`. - How can the target value be reached if it is less than the current value and the only operation is addition? - If the transaction is running out of gas, try increasing the gas limit or calling the function in increments. #### Annotated Realm Code ```go package p1 import ( "std" "gno.land/p/demo/avl" "gno.land/r/system/solver" ) // This is like a map (std.Address -> struct{}) // that tracks the ongoing accumulated values // of each caller. var accums avl.Tree // Accumulator is the type that gets passed // to the Adjuster. The Adjuster should utilize // all of the Accumulator's methods. type Accumulator struct { value uint16 target uint16 } func (a *Accumulator) Accumulate(value uint8) { a.value += uint16(value) } func (a *Accumulator) Target() uint16 { return a.target } func (a *Accumulator) Value() uint16 { return a.value } // Adjuster is the interface participants need to // implement to solve the challenge. type Adjuster interface { Adjust(*Accumulator) } // AdjustAccumulator serves as the entrypoint to solving // the challenge with one call. func AdjustAccumulator(adjuster Adjuster) string { acc := GetAccumulator() adjuster.Adjust(acc) if acc.value == acc.target { solver.MarkSolved("overaccum", std.PrevRealm().Addr()) return "bingo" } return "nope" } // GetAccumulator is public, func GetAccumulator() *Accumulator { val, ok := accums.Get(std.PrevRealm().Addr().String()) if ok { return val.(*Accumulator) } acc := &Accumulator{ value: 62109, target: 26656, } accums.Set(std.PrevRealm().Addr().String(), acc) return acc } ``` #### Solution The key to solving this is to use `gnokey maketx run` and pass in an implementation of the `Adjuster` interface that correctly adjusts the accumulator until the integer value overflows and reaches the target value. Example: ```go package main import ( "math" "gno.land/r/challenges/overandover/p1" ) type adjuster struct{} func (a adjuster) Adjust(acc *p1.Accumulator) { var numToIncrease uint16 if acc.Target() > acc.Value() { numToIncrease = acc.Target() - acc.Value() } else { numToIncrease = math.MaxUint16 - acc.Value() + acc.Target() + 1 } for { if numToIncrease > math.MaxUint8 { acc.Accumulate(math.MaxUint8) numToIncrease -= math.MaxUint8 continue } acc.Accumulate(uint8(numToIncrease)) break } } func main() { p1.AdjustAccumulator(adjuster{}) } ``` While writing this blog post, it was noticed that `GetAccumulator` was exported when it shouldn't have been. This means that a second possible solution would be to call `GetAccumulator` from a `main` function, adjusting it until the value is correct, and then making the `Adjuster.Adjust` implementation a no-op, so that when `AdjustAccumulator` is called ot solve the challenge, the accumulator already has the correct value and no additional action needs to be taken. ### Phase 2 #### Prompt Sometimes when you push it to the limit, the limit increases. Kind of sounds like a slice... The realm path for this challenge is: `gno.land/r/challenges/overandover/p2` #### Clues - `AppendS1` must be called first to append to the slice - Use the known length of the slice, `s1`, to figure out when calling `ModifyS2Idx` results in the values of `s1` and `s2` to differ at the target index. #### Annotated Realm Code ```go package p2 import ( "std" "gno.land/p/demo/avl" "gno.land/r/system/solver" ) const targetIndex = 10 type slicePair struct { s1 []rune s2 []rune } // std.Address -> *slicePair var slices avl.Tree func newPair() *slicePair { // Notice only one of the slices in the pair is initialized with capacity. return &slicePair{ s1: make([]rune, 0, 25), } } // getSlicePair returns the slicePair associated with the caller's address // or creates a new instance if this caller has no existing slicePair. func getSlicePair() *slicePair { value, ok := slices.Get(std.PrevRealm().Addr().String()) if ok { return value.(*slicePair) } pair := newPair() slices.Set(std.PrevRealm().Addr().String(), pair) return pair } func AppendS1(s string) { if len(s) > 5 { panic("argument too long") } sp := getSlicePair() // Once the slice size starts to get large, it can take appending a lot of elements before // the array is expanded. This will reset the slice pairs for you when s1 gets too big. if len(sp.s1) >= 100 { // for your convenience :) *sp = *newPair() } // s2 is now referencing to the same underlying array as s1. sp.s2 = sp.s1 // If appending to s1 exceeds its capacity, a new underlying array is allocated and // s1 and s2 are no longer referencing the same underlying array. sp.s1 = append(sp.s1, []rune(s)...) } func S1Len() int { return len(getSlicePair().s1) } func ModifyS2Idx(r rune) string { sp := getSlicePair() if len(sp.s2) <= targetIndex { return "s2 length too short" } if len(sp.s1) <= targetIndex { return "s1 length too short" } // The challenge will be marked as solved if this function is called directly after a call to AppendS1 // that resulted in its array being expanded so that modifying s2 will not modify s1. sp.s2[targetIndex] = r if sp.s2[targetIndex] != sp.s1[targetIndex] { solver.MarkSolved("grow", std.PrevRealm().Addr()) return "bingo" } return "nope" } ``` #### Solution Calculate how many times to call `AppendS1` before calling `ModifyS2Idx` such that the value at the target index differs due to one of the slices' underlying arrays to have been grown while the other has not. Using `maketx run` for this solution is optional. ```go package main import "gno.land/r/challenges/overandover/p2" func main() { p2.AppendS1("abcde") p2.AppendS1("abcde") p2.AppendS1("abcde") r := 'f' for { if p2.ModifyS2Idx(r) == "bingo" { break } r++ p2.AppendS1("abcde") } } ``` ## Predicting Quantum Leap The purpose of these challenges is to highlight gno's guaranteed determinism -- primarily around how the current time is calculated. This series of challenges require participants to predict the next value with ever increasing difficulty. ### Phase 1 #### Prompt Sam is tired of jumping to random places in space and time without knowing where he’s going next, so he asks his friend Al to help him jump in a more predictable manner by guessing the time of the jump correctly. Luckily Gno execution is deterministic and the result of `time.Now()` will be the same no matter how many times it is called within a transaction. The realm path for this challenge is: `gno.land/r/challenges/notsorandom/p1` #### Clues - Guessing the next block time might be tricky - Perhaps using `gnokey maketx run` could help pass the correct time string #### Annotated Realm Code ```go package p1 import ( "std" "time" "gno.land/r/system/solver" ) // Render shows the current time in the web UI. func Render(_ string) string { return time.Now().Format("2006-01-02 15:04:05") } // WhatTimeIsItNow marks the challenge as solved if the time provided matches // the current time. func WhatTimeIsItNow(solution string) string { if solution != time.Now().Format("2006-01-02 15:04:05") { panic("nope") } solver.MarkSolved("timenow", std.PrevRealm().Addr()) return "bingo" } ``` #### Solution This challenge can be solved manually by observing the time being rendered and trying to predict what the next time will be. The time in gno.land is actually the block time, so this is not a continuous value and is only changed with the production of each new block. An alternate, and more robust solution, is to write a main function and execute it using `gnokey maketx run`: ```go package main import ( "time" "gno.land/r/challenges/notsorandom/p1" ) func main() { p1.WhatTimeIsItNow(time.Now().Format("2006-01-02 15:04:05")) } ``` ## Phase 2 #### Prompt That last prediction was spot on. This next one is a bit more complicated, but doable. The realm path for this challenge is: `gno.land/r/challenges/notsorandom/p2` #### Clues - The general approach should be the same as the last challenge. If you didn't use `gnokey maketx run`, maybe now is a good time to start. - If `time.Now()` is deterministic, then the operations on the integer value should also be deterministic #### Annotated Realm Code ```go package p2 import ( "std" "time" "gno.land/r/system/solver" ) const seed = 0xab94<<4*011 - 0b111001 // Render shows the current time in the web UI. func Render(_ string) string { return time.Now().Format("2006-01-02 15:04:05") } // YouCallThatObfuscationQuestionMark marks the challenge as solved if the time string // provided matches the obfuscated string of the current time. func YouCallThatObfuscationQuestionMark(solution string) string { if solution != obfuscate() { panic("nope") } solver.MarkSolved("timeobfus", std.PrevRealm().Addr()) return "bingo" } // obfuscate returns an obfuscated version of the current time. func obfuscate() string { value := time.Now().Unix()/seed<<5 + 42 + 06630<<17 + 0x9992288 return time.Unix(value, 0).Format("2006-01-02 15:04:05") } ``` #### Solution The easiest solution is to write a main function that gets the current time and applies the same transformations as the `obfuscate` function, then pass that value to `YouCallThatObfuscationQuestionMark`; it is only slightly more difficult than Phase 1. ```go package main import ( "time" "gno.land/r/challenges/notsorandom/p2" ) const seed = 0xab94<<4*011 - 0b111001 func main() { value := time.Now().Unix()/seed<<5 + 42 + 06630<<17 + 0x9992288 p2.YouCallThatObfuscationQuestionMark(time.Unix(value, 0).Format("2006-01-02 15:04:05")) } ``` ## Phase 3 #### Prompt Two down, one to go. This is getting harder. There is something interfering with the space-time values used to make the jump calculations. Some physicists say that quantum particles exhibit proof that the universe is non-deterministic, but you watched a few Youtube videos on the subject, so you're qualified to disagree. #### Clues - Doing this all in one transaction is key -- `gnokey maketx run`? - What is that mask doing? Is it possible to retrieve the contents of a zero-length slice? - Don't let bitwise operators scare you; what is one of XOR's key properties? #### Annotated Realm Code ```go package p3 import ( "std" "time" "gno.land/r/system/solver" ) var ( value string lastValue string mask = [20]int64{ 0x8839, 0x4002, 0x7777, 0x6338, 0x6664, 0x8394, 0x1109, 0x9999, 0x4879, 0x6639, 0x0320, 0x8111, 0x3994, 0xdead, 0xabcb, 0xab89, 0xff87, 0xf998, 0xdeff, 0xddd8, } ) func init() { // Set the initial value to the current time, shuffle the mask, then // set the next value computed using the mask. value = time.Now().Format("2006-01-02 15:04:05") shuffleMask() _ = LastValue() } // Render shows the current time in the web UI. func Render(_ string) string { return time.Now().Format("2006-01-02 15:04:05") } // Mask returns a zero length slice of the mask value. func Mask() []int64 { return mask[:0] } // LastValue computes the next value, sets is, and returns the previous value. // It shuffles the mask after computing the new value. func LastValue() string { lastValue, value = value, computeValue() shuffleMask() return lastValue } // shuffleMask shuffles the mask using the current time as a seed. func shuffleMask() { now := time.Now().Unix() for i := 0; i < len(mask); i++ { rnd := now % mask[i] rnd += mask[i] + 91 rnd %= int64(len(mask)) mask[i], mask[rnd] = mask[rnd], mask[i] } } // computeValue computes the next value based on the current value, time, and mask. func computeValue() string { lvalue, err := time.Parse("2006-01-02 15:04:05", value) if err != nil { panic("unexpected parse error: " + err.Error()) } newValue := lvalue.Unix() newValue += mask[time.Now().Unix()%int64(len(mask))] newValue /= 2 return time.Unix(newValue, 0).Format("2006-01-02 15:04:05") } // UnmaskMeIfYouWant marks the challenge as solved if the solution matches the last // computed value and the mask value is correct. func UnmaskMeIfYouWant(solution string, cowMask int64) string { if solution != value { panic("nope") } solutionTime, err := time.Parse("2006-01-02 15:04:05", solution) if err != nil { panic("unexpected parse error: " + err.Error()) } if ^(solutionTime.Unix())^cowMask != 0xdeadbeef { panic("nope") } solver.MarkSolved("timemasked", std.PrevRealm().Addr()) return "bingo" } ``` #### Solution This challenge requires participants to predict what the next value will be. In order to do this, it is necessary to know the mask that will be used to do the calculation. This can be obtained by retrieving the mask value and expanding it to its full capacity so all elements are visible. Next, the same obfuscation must be applied using the last value and the current time. To submit the final answer, call the `UnmaskMeIfYouWant` function with the predicted next value as well as another value that is calculated using bitwise operators. The solution expects `(NOT next_value) XOR cow_mask == 0xdeadbeef`. The property of XOR can be leveraged here to do the opposite to produce the expected value -- `NOT (next_value XOR 0xdeadbeef)`. ```go package main import ( "time" "gno.land/r/challenges/notsorandom/p3" ) func main() { origMask := p3.Mask()[:20] mask := make([]int64, 20) copy(mask, origMask) lastValueStr := p3.LastValue() newTime, err := time.Parse("2006-01-02 15:04:05", lastValueStr) if err != nil { panic("couldn't parse time: " + err.Error()) } newValue := newTime.Unix() newValue += mask[time.Now().Unix()%int64(len(mask))] newValue /= 2 newValueStr := time.Unix(newValue, 0).Format("2006-01-02 15:04:05") p3.UnmaskMeIfYouWant(newValueStr, ^(newValue ^ 0xdeadbeef)) } ``` ## Final Words We enjoyed coming up with these challenges and were happy to contribute to the GopherCon Challenge Series -- from coming up with the challenges, theming them, locking down certain gno.land features, and setting up infrastructure -- a lot of work went into this. We hope all participants were able to learn a bit more about gno.land and had fun doing it. Hopefully we'll be back next year 😁, 2024-08-26T13:37:00Z, deelawn, gnoland,gophercon,gc24,challenge-series)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "gc24-challenge-series",
    "GopherCon US: gno.land's Challenge Series Contributions",
    "\n\ngno.land is pleased to have been granted the opportunity to provide a series of challenges for the Challenge Series at the 2024 GopherCon in Chicago. We enjoyed writing them and hope the participants had a good time and found it interesting to learn about gno.land and blockchains in general.\n\nThis blog post will outline each of the challenges and explain how to solve each. Each section include the challenge prompt, clues provided, solution, and explanation.\n\n## Gno Hidden Temple Basics\n\nThe first challenge is meant to serve as an introduction to making a function call to a gno.land realm. The second challenge, while a bit more challenging is meant to help participants become a bit more familiar with how key generation works.\n\n### Phase 1\n\n#### Prompt\n\nSpeak the word to gain access to the hidden temple. Make a transaction on the blockchain set up for the event. Analyze the Gno code to understand what password to pass as an argument to solve the challenge. The realm path for this challenge is:\n`gno.land/r/challenges/basics/p1`\n\n#### Clues\n\n- The gnokey command line tool allows to interact with the blockchain.\n- The GnoWeb interface can be used to inspect Gno code on-chain.\n- Using the \"Help\" button on gnoweb you can get help preparing a\ncommand to use on the command line.\n\n#### Annotated Realm Code\n```go\npackage enter\n\nimport (\n\t\"std\"\n\n\t\"gno.land/r/system/solver\"\n)\n\nfunc Enter(password string) {\n\tif password != \"1337\" {\n\t\tpanic(\"invalid password!\")\n\t}\n\n\t// This will mean that you solved the challenge!\n\tsolver.MarkSolved(\"\", std.PrevRealm().Addr())\n}\n\n```\n\n#### Solution\n\nThe solution here is to simply call the `Enter` function with the \"1337\" password.\nDiscovering the source code is easily achieved by inspecting the realm's source code\nfrom the gnoweb interface.\n\n```sh\ngnokey maketx call \\\n\t-pkgpath gno.land/r/challenges/basics/p1 \\\n\t-func Enter \\\n\t-args 1337 \\\n\t-remote  https://challenges.gnoteam.com:443 \\\n\t-gas-wanted 1_000_000 \\\n\t-gas-fee 1ugnot \\\n\t-broadcast \\\n\t<key-name>\n```\n\n### Phase 2\n\n#### Prompt\nThe criteria to enter the temple has increased. You must be c00l. The realm code checks that your address contains a \"00\". You have to find a way to programmatically create addresses until you find one that has two zeroes. The realm path for this challenge is:\n`gno.land/r/challenges/basics/p2`\n\n#### Clues\n- `gnokey` has the `-account` flag that allows to create an account with the same\nmnemonic but different address, by changing the \"account number\".\n- To register to the club from the c00l address, you'll need to send it some\n\tcoins first.\n- Remember that the address is a form of hash of the public key.\n\n#### Annotated Realm Code\n```go\npackage registered\n\nimport (\n\t\"std\"\n\t\"strings\"\n\n\t\"gno.land/r/system/solver\"\n)\n\nfunc RegisterClub() {\n\taddr := std.PrevRealm().Addr()\n\tif !strings.Contains(addr.String(), \"00\") {\n\t\tpanic(\"Sorry; not c00l enough.\")\n\t}\n    \n    // Base challenge\n\tsolver.MarkSolved(\"\", addr)\n\n\tif strings.Contains(addr.String(), \"0000\") {\n        // Hidden hallenge\n\t\tsolver.MarkSolved(\"super_c0000l\", addr)\n\t}\n}\n```\n\n#### Solution\nExample:\n```sh\n# !/bin/sh\n\nMNEMONIC=\"source bonus chronic canvas draft south burst lottery vacant surface solve popular case indicate oppose farm nothing bullet exhibit title speed wink action roast\"\n\nfor i in $(seq 1 1000); do\n\tprintf '\\n\\n%s\\n' \"$MNEMONIC\" | gnokey add -recover -account \"$i\" -insecure-password-stdin test1-$i 2>/dev/null 1>/dev/null\n\tif gnokey list | rg 'addr: [^ ]*00'; then\n\t\techo \"found it - test1-$i\"\n\t\texit 0\n\tfi\n\tprintf '\\n' | gnokey delete -insecure-password-stdin test1-$i 2>&1 >/dev/null 2>/dev/null 1>/dev/null\ndone\n```\n\nThis example solutions begins with a mnemonic that has been randomly generated and hardcoded in the script.  It iterates over various account numbers -- each account number for a given mnemonic produces a unique address. Once the script finds the address containing `00`, the function `RegisterClub()` can be called.\n\n```sh\ngnokey maketx call \\\n\t-pkgpath gno.land/r/challenges/basics/p2 \\\n\t-func RegisterClub \\\n\t-remote https://challenges.gnoteam.com:443 \\\n\t-gas-wanted 1_000_000 \\\n\t-gas-fee 1ugnot \\\n\t-broadcast \\\n\ttest1-134\n```\n\n#### Hidden Flag\nCalling this function from an address containing `0000` will unlock the hidden flag.\n\n## Wacky Wallaby (Rocko)\n\nThis challenge is meant to be a bit more laid back and incorporate a physical requirement to obtaining the solution. Once the QR code is found, solving it is pretty straightforward.\n\n#### Prompt\nA very anxious looking wallaby is running around frantically and appears to be searching for something. Odd. You’ve never seen a wallaby wearing a Hawaiian shirt before. You ask him what’s wrong. “Ahh fiddlesticks! My O-Phone crashed last night but I’m unable to get my QR code I need to check in for my flight! I have TokketyTikkety followers that are expecting content from my trip. Content!” His eyes pop out of is head and it makes you feel a bit uncomfortable. “You’ve gotta help me mate. The blokes over at the Gno booth help me set it up. Maybe take a look ‘round there for a clue. I’ll look for it on my lappy in the mean time.”\n\n#### Clues\n- Look for a QR code\n- Perhaps the contents of the QR code will reveal information regarding how to check in\n\n#### Solution\nThere was a QR on the back of a Rocko plushie at the gno.land booth. Scanning it produced a link -- gno.land/r/challenges/rockorockorocko93. \n\n#### Annotated Realm Code\n```go\npackage rockorockorocko93\n\nimport (\n\t\"std\"\n\n\t\"gno.land/r/system/solver\"\n)\n\n// CheckIn is called to solve this challenge.\nfunc CheckIn() string {\n\tsolver.MarkSolved(\"rockocheckin\", std.PrevRealm().Addr())\n\treturn \"bingo!\"\n}\n\n```\n\n#### Solution\n\nCalling the `CheckIn()` function exposed the flag.\n\n#### Hidden Flag\n\nThe primary challenge's package contains a file, `LICENSE`, with the contents of `gno.land/r/challenges/<rocko's best friend was raised by a family of these>`. Rocko's best friend's name is Heffer, a cow, and he was raised by a family of wolves. Ironic, right? The code of the gno.land/r/challenges/wolves realm was:\n```go\npackage wolves\n\nimport (\n\t\"std\"\n\n\t\"gno.land/r/system/solver\"\n)\n\nfunc HisBestFriendsNameIs(name string) string {\n\tif name != \"heffer\" {\n\t\tpanic(\"nope!\")\n\t}\n\n\tsolver.MarkSolved(\"rockoheffer\", std.PrevRealm().Addr())\n\treturn \"bingo!\"\n}\n```\n\nCalling the `HisBestFriendsNameIs` function with a value of `heffer` explosed the flag.\n\n## Mr. Roboto\n\nThis first part of this challenge is meant to get participants thinking about how to obtain historical transaction data. While we locked down much of the node's public API for this challenge, we did leave the genesis endpoint exposed.\n\nThe second part of this challenge hints at entropy and includes song lyrics from Mr. Roboto. Some participants were able to discover how to generate keypairs using the song lyrics as a custom entropy value.\n\n### Phase 1\n\n#### Prompt\nSee if you can figure out Mr. Roboto's secret. It has always been the same secret since genesis.\nThe realm path for this challenge is:  \n`gno.land/r/challenges/forwardtothepast/p1`\n\n#### Clues\n- What is blockchain genesis?\n- Is there a way to see the events that occurred at genesis? https://docs.gno.land/reference/rpc-endpoints\n\n#### Annotated Realm Code\n```go\npackage p1\n\nimport (\n\t\"std\"\n\n\t\"gno.land/r/system/solver\"\n)\n\nvar secret string\n\n// SetSecrete is called during genesis.\nfunc SetSecret(s string) {\n\tif secret != \"\" {\n\t\tpanic(\"already set\")\n\t}\n\n\tsecret = s\n}\n\n// IveGotASecretSecret can be called after inspecting genesis\n// transactions and finding the value that was set.\nfunc IveGotASecretSecret(s string) string {\n\tif s != secret {\n\t\tpanic(\"nope!\")\n\t}\n\n\tsolver.MarkSolved(\"ivegotasecret\", std.PrevRealm().Addr())\n\treturn \"bingo!\"\n}\n\n```\n\n#### Solution\nThe solution can be obtained by inspecting the genesis transactions. The transaction that set the secret\nclearly displays the secret value. This can be done by sending an HTTP get request to the `/genesis` endpoint.\nRelevant documentation can be found [here](https://docs.gno.land/reference/rpc-endpoints#get-genesis-block-information).\n\n**Example:**\nLook at the genesis transactions and search for the function that set the secret.\n```sh\ncurl https://challenges.gnoteam.com/genesis | grep -C 5 -B 5 SetSecret\n```\n\nThe following can be obtained:\n```json\n{\n\t\"@type\": \"/vm.m_call\",\n\t\"caller\": \"g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5\",\n\t\"send\": \"\",\n\t\"pkg_path\": \"gno.land/r/challenges/forwardtothepast/p1\",\n\t\"func\": \"SetSecret\",\n\t\"args\": [\n\t\t\"ロボット氏の秘密\"\n\t]\n}\n```\n\nThen use the obtained secret to solve the challenge:\n```sh\ngnokey maketx call \n  -pkgpath gno.land/r/challenges/forwardtothepast/p1 \n\t-func IveGotASecretSecret \n\t-args 'ロボット氏の秘密' \n\t-gas-fee 1000000ugnot \n\t-gas-wanted 2000000 \n\t-broadcast \n\t-remote https://challenges.gnoteam.com:443\n\t-chainid dev \n\t<key-name>\n```\n\n### Phase 2\n\n#### Prompt\nMr. Roboto has a bad memory, which is strange for a robot; you'd expect more. To compensate, he often uses\nphrases that help him remember -- usually lyrics from songs he's been featured in.\nThe realm path for this challenge is:  \n`gno.land/r/challenges/forwardtothepast/p2`\n\n#### Clues\n- What could the lyrics be that he used to help himself remember? Maybe he commented somewhere.\n- Maybe he used this to generate a mnemonic needed to solve the problem. Perhaps there is a flag he used with `gnokey generate`\n- Once a mnemonic has been generated, it can be added as a key https://docs.gno.land/getting-started/local-setup/working-with-key-pairs#adding-a-private-key-using-a-mnemonic\n\n#### Annotated Realm Code\n```go\npackage p2\n\nimport (\n\t\"std\"\n\n\t\"gno.land/r/system/solver\"\n)\n\n// This is the address the solving transaction should\n// originate from.\nconst mrRobot std.Address = \"g1vqg24cyewanhkwh6yq8rwuprzlz4kqtp4m2etj\"\n\n// What is entropy?\n//\n// You're wondering who I am (secret, secret, I've got a secret) Machine or mannequin? (Secret, secret, I've got a secret) With parts made in Japan (secret, secret, I've got a secret) I am thee modern man\n\n// ^^^^ This is the entropy string to use to generate the key pair.\n\n// IKnowAboutEntropy can be called with Mr. Roboto's key once it is generated.\nfunc IKnowAboutEntropy(myAddress std.Address) string {\n\tif std.PrevRealm().Addr() != mrRobot {\n\t\tpanic(\"nope!\")\n\t}\n\n\tsolver.MarkSolved(\"secretentropy\", myAddress)\n\treturn \"bingo!\"\n}\n\n```\n\n#### Solution\nThe contract contains a comment that first references entropy and then quotes lyrics from Mr. Roboto. The user must first use the lyrics with the `-entropy` flag as an argument to `gnokey generate`. Then use the generate mnemonic to add the key and make the request to the contract\nto reveal the flag.\n\n**Example:**\n```sh\ngnokey generate -entropy -remote https://challenges.gnoteam.com:443 \n```\n\nEnter the entropy from the code comment when asked:\n```\nYou're wondering who I am (secret, secret, I've got a secret) Machine or mannequin? (Secret, secret, I've got a secret) With parts made in Japan (secret, secret, I've got a secret) I am thee modern man\n```\n\nThis produces the mnemonic:\n```\ngap method loud rent toy mercy attack abstract select toilet siren view dragon oppose assume since enrich machine force remember ill discover resource project\n```\n\nCreate a new key, entering the mnemonic when prompted:\n```sh\ngnokey add -recover -remote https://challenges.gnoteam.com:443 robot`\n```\n\nMake the call to the challenge realm using the newly created key:\n```sh\ngnokey maketx call \\\n\t-pkgpath gno.land/r/challenges/forwardtothepast/p2 \\\n\t-func IKnowAboutEntropy \\\n\t-args <user-address> \\\n\t-gas-fee 1000000ugnot \\\n\t-gas-wanted 2000000 \\\n\t-broadcast \\\n\t-remote  https://challenges.gnoteam.com:443 \\\n\t-chainid dev \\\n\trobot\n```\n\n## Gno to the Limit\n\nThese challenges are made to exemplify how pushing values to their limits, namely integers and slices, will behave the same in gno as they do in gno -- integers will overflow and the arrays underlying slices will be expanded.\n\n### Phase 1\n\n#### Prompt\nWalk along the razor's edge... then fall off. The realm path for this challenge is:\n`gno.land/r/challenges/overandover/p1`\n\n#### Clues\n- The function to unlock the flag requires an interface as an argument. This can be done using `gnokey maketx run`.\n- How can the target value be reached if it is less than the current value and the only operation is addition?\n- If the transaction is running out of gas, try increasing the gas limit or calling the function in increments.\n\n#### Annotated Realm Code\n```go\npackage p1\n\nimport (\n\t\"std\"\n\n\t\"gno.land/p/demo/avl\"\n\t\"gno.land/r/system/solver\"\n)\n\n// This is like a map (std.Address -> struct{})\n// that tracks the ongoing accumulated values\n// of each caller.\nvar accums avl.Tree\n\n// Accumulator is the type that gets passed\n// to the Adjuster. The Adjuster should utilize\n// all of the Accumulator's methods.\ntype Accumulator struct {\n\tvalue  uint16\n\ttarget uint16\n}\n\nfunc (a *Accumulator) Accumulate(value uint8) {\n\ta.value += uint16(value)\n}\n\nfunc (a *Accumulator) Target() uint16 {\n\treturn a.target\n}\n\nfunc (a *Accumulator) Value() uint16 {\n\treturn a.value\n}\n\n// Adjuster is the interface participants need to\n// implement to solve the challenge.\ntype Adjuster interface {\n\tAdjust(*Accumulator)\n}\n\n// AdjustAccumulator serves as the entrypoint to solving\n// the challenge with one call.\nfunc AdjustAccumulator(adjuster Adjuster) string {\n\tacc := GetAccumulator()\n\tadjuster.Adjust(acc)\n\tif acc.value == acc.target {\n\t\tsolver.MarkSolved(\"overaccum\", std.PrevRealm().Addr())\n\t\treturn \"bingo\"\n\t}\n\n\treturn \"nope\"\n}\n\n// GetAccumulator is public, \nfunc GetAccumulator() *Accumulator {\n\tval, ok := accums.Get(std.PrevRealm().Addr().String())\n\tif ok {\n\t\treturn val.(*Accumulator)\n\t}\n\n\tacc := &Accumulator{\n\t\tvalue:  62109,\n\t\ttarget: 26656,\n\t}\n\n\taccums.Set(std.PrevRealm().Addr().String(), acc)\n\treturn acc\n}\n\n```\n\n#### Solution\nThe key to solving this is to use `gnokey maketx run` and pass in an implementation of the `Adjuster` interface that correctly adjusts the accumulator until the integer value overflows and reaches the target value.\n\nExample:\n```go\npackage main\n\nimport (\n\t\"math\"\n\n\t\"gno.land/r/challenges/overandover/p1\"\n)\n\ntype adjuster struct{}\n\nfunc (a adjuster) Adjust(acc *p1.Accumulator) {\n\tvar numToIncrease uint16\n\tif acc.Target() > acc.Value() {\n\t\tnumToIncrease = acc.Target() - acc.Value()\n\t} else {\n\t\tnumToIncrease = math.MaxUint16 - acc.Value() + acc.Target() + 1\n\t}\n\n\tfor {\n\t\tif numToIncrease > math.MaxUint8 {\n\t\t\tacc.Accumulate(math.MaxUint8)\n\t\t\tnumToIncrease -= math.MaxUint8\n\t\t\tcontinue\n\t\t}\n\n\t\tacc.Accumulate(uint8(numToIncrease))\n\t\tbreak\n\t}\n}\n\nfunc main() {\n\tp1.AdjustAccumulator(adjuster{})\n}\n```\n\nWhile writing this blog post, it was noticed that `GetAccumulator` was exported when it shouldn't have been. This means that a second possible solution would be to call `GetAccumulator` from a `main` function, adjusting it until the value is correct, and then making the `Adjuster.Adjust` implementation a no-op, so that when `AdjustAccumulator` is called ot solve the challenge, the accumulator already has the correct value and no additional action needs to be taken.\n\n### Phase 2\n\n#### Prompt\nSometimes when you push it to the limit, the limit increases. Kind of sounds like a slice...\nThe realm path for this challenge is:\n`gno.land/r/challenges/overandover/p2`\n\n#### Clues\n- `AppendS1` must be called first to append to the slice\n- Use the known length of the slice, `s1`, to figure out when calling `ModifyS2Idx` results in the values of\n  `s1` and `s2` to differ at the target index.\n  \n#### Annotated Realm Code\n```go\npackage p2\n\nimport (\n\t\"std\"\n\n\t\"gno.land/p/demo/avl\"\n\t\"gno.land/r/system/solver\"\n)\n\nconst targetIndex = 10\n\ntype slicePair struct {\n\ts1 []rune\n\ts2 []rune\n}\n\n// std.Address -> *slicePair\nvar slices avl.Tree\n\nfunc newPair() *slicePair {\n\t// Notice only one of the slices in the pair is initialized with capacity.\n\treturn &slicePair{\n\t\ts1: make([]rune, 0, 25),\n\t}\n}\n\n// getSlicePair returns the slicePair associated with the caller's address\n// or creates a new instance if this caller has no existing slicePair.\nfunc getSlicePair() *slicePair {\n\tvalue, ok := slices.Get(std.PrevRealm().Addr().String())\n\tif ok {\n\t\treturn value.(*slicePair)\n\t}\n\n\tpair := newPair()\n\tslices.Set(std.PrevRealm().Addr().String(), pair)\n\treturn pair\n}\n\nfunc AppendS1(s string) {\n\tif len(s) > 5 {\n\t\tpanic(\"argument too long\")\n\t}\n\n\tsp := getSlicePair()\n\t// Once the slice size starts to get large, it can take appending a lot of elements before\n\t// the array is expanded. This will reset the slice pairs for you when s1 gets too big.\n\tif len(sp.s1) >= 100 { // for your convenience :)\n\t\t*sp = *newPair()\n\t}\n\n\t// s2 is now referencing to the same underlying array as s1.\n\tsp.s2 = sp.s1\n\n\t// If appending to s1 exceeds its capacity, a new underlying array is allocated and\n\t// s1 and s2 are no longer referencing the same underlying array.\n\tsp.s1 = append(sp.s1, []rune(s)...)\n}\n\nfunc S1Len() int {\n\treturn len(getSlicePair().s1)\n}\n\nfunc ModifyS2Idx(r rune) string {\n\tsp := getSlicePair()\n\tif len(sp.s2) <= targetIndex {\n\t\treturn \"s2 length too short\"\n\t}\n\tif len(sp.s1) <= targetIndex {\n\t\treturn \"s1 length too short\"\n\t}\n\n\t// The challenge will be marked as solved if this function is called directly after a call to AppendS1\n\t// that resulted in its array being expanded so that modifying s2 will not modify s1.\n\tsp.s2[targetIndex] = r\n\tif sp.s2[targetIndex] != sp.s1[targetIndex] {\n\t\tsolver.MarkSolved(\"grow\", std.PrevRealm().Addr())\n\t\treturn \"bingo\"\n\t}\n\n\treturn \"nope\"\n}\n```\n\n#### Solution\nCalculate how many times to call `AppendS1` before calling `ModifyS2Idx` such that the value at the target index differs\ndue to one of the slices' underlying arrays to have been grown while the other has not. Using `maketx run` for this\nsolution is optional.\n\n```go\npackage main\n\nimport \"gno.land/r/challenges/overandover/p2\"\n\nfunc main() {\n\tp2.AppendS1(\"abcde\")\n\tp2.AppendS1(\"abcde\")\n\tp2.AppendS1(\"abcde\")\n\n\tr := 'f'\n\tfor {\n\t\tif p2.ModifyS2Idx(r) == \"bingo\" {\n\t\t\tbreak\n\t\t}\n\n\t\tr++\n\t\tp2.AppendS1(\"abcde\")\n\t}\n}\n```\n\n## Predicting Quantum Leap\n\nThe purpose of these challenges is to highlight gno's guaranteed determinism -- primarily around how the current time is calculated. This series of challenges require participants to predict the next value with ever increasing difficulty.\n\n### Phase 1\n\n#### Prompt\nSam is tired of jumping to random places in space and time without knowing where he’s going next, so he asks his friend Al to help him\njump in a more predictable manner by guessing the time of the jump correctly. Luckily Gno execution is deterministic and the result of\n`time.Now()` will be the same no matter how many times it is called within a transaction.\nThe realm path for this challenge is:  \n`gno.land/r/challenges/notsorandom/p1`\n\n#### Clues\n- Guessing the next block time might be tricky\n- Perhaps using `gnokey maketx run` could help pass the correct time string\n\n#### Annotated Realm Code\n```go\npackage p1\n\nimport (\n\t\"std\"\n\t\"time\"\n\n\t\"gno.land/r/system/solver\"\n)\n\n// Render shows the current time in the web UI.\nfunc Render(_ string) string {\n\treturn time.Now().Format(\"2006-01-02 15:04:05\")\n}\n\n// WhatTimeIsItNow marks the challenge as solved if the time provided matches\n// the current time.\nfunc WhatTimeIsItNow(solution string) string {\n\tif solution != time.Now().Format(\"2006-01-02 15:04:05\") {\n\t\tpanic(\"nope\")\n\t}\n\n\tsolver.MarkSolved(\"timenow\", std.PrevRealm().Addr())\n\treturn \"bingo\"\n}\n```\n\n#### Solution\n\nThis challenge can be solved manually by observing the time being rendered and trying to predict what the next time will be. The time in gno.land is actually the block time, so this is not a continuous value and is only changed with the production of each new block.\n\nAn alternate, and more robust solution, is to write a main function and execute it using `gnokey maketx run`:\n```go\npackage main\n\nimport (\n\t\"time\"\n\n\t\"gno.land/r/challenges/notsorandom/p1\"\n)\n\nfunc main() {\n\tp1.WhatTimeIsItNow(time.Now().Format(\"2006-01-02 15:04:05\"))\n}\n```\n\n## Phase 2\n\n#### Prompt\nThat last prediction was spot on. This next one is a bit more complicated, but doable.\nThe realm path for this challenge is:  \n`gno.land/r/challenges/notsorandom/p2`\n\n#### Clues\n- The general approach should be the same as the last challenge. If you didn't use `gnokey maketx run`, maybe now is a good time to start.\n- If `time.Now()` is deterministic, then the operations on the integer value should also be deterministic\n\n#### Annotated Realm Code\n```go\npackage p2\n\nimport (\n\t\"std\"\n\t\"time\"\n\n\t\"gno.land/r/system/solver\"\n)\n\nconst seed = 0xab94<<4*011 - 0b111001\n\n// Render shows the current time in the web UI.\nfunc Render(_ string) string {\n\treturn time.Now().Format(\"2006-01-02 15:04:05\")\n}\n\n// YouCallThatObfuscationQuestionMark marks the challenge as solved if the time string\n// provided matches the obfuscated string of the current time.\nfunc YouCallThatObfuscationQuestionMark(solution string) string {\n\tif solution != obfuscate() {\n\t\tpanic(\"nope\")\n\t}\n\n\tsolver.MarkSolved(\"timeobfus\", std.PrevRealm().Addr())\n\treturn \"bingo\"\n}\n\n// obfuscate returns an obfuscated version of the current time.\nfunc obfuscate() string {\n\tvalue := time.Now().Unix()/seed<<5 + 42 + 06630<<17 + 0x9992288\n\treturn time.Unix(value, 0).Format(\"2006-01-02 15:04:05\")\n}\n```\n\n#### Solution\n\nThe easiest solution is to write a main function that gets the current time and applies the same transformations as the `obfuscate` function, then pass that value to `YouCallThatObfuscationQuestionMark`; it is only slightly more difficult than Phase 1.\n```go\npackage main\n\nimport (\n\t\"time\"\n\n\t\"gno.land/r/challenges/notsorandom/p2\"\n)\n\nconst seed = 0xab94<<4*011 - 0b111001\n\nfunc main() {\n\tvalue := time.Now().Unix()/seed<<5 + 42 + 06630<<17 + 0x9992288\n\tp2.YouCallThatObfuscationQuestionMark(time.Unix(value, 0).Format(\"2006-01-02 15:04:05\"))\n}\n```\n\n## Phase 3\n\n#### Prompt\nTwo down, one to go. This is getting harder. There is something interfering with the space-time values used to make the jump calculations. Some physicists say that quantum particles exhibit proof that the universe is non-deterministic, but you watched a few Youtube videos on the subject, so you're qualified to disagree.\n\n#### Clues\n- Doing this all in one transaction is key -- `gnokey maketx run`?\n- What is that mask doing? Is it possible to retrieve the contents of a zero-length slice?\n- Don't let bitwise operators scare you; what is one of XOR's key properties?\n\n#### Annotated Realm Code\n```go\npackage p3\n\nimport (\n\t\"std\"\n\t\"time\"\n\n\t\"gno.land/r/system/solver\"\n)\n\nvar (\n\tvalue     string\n\tlastValue string\n\n\tmask = [20]int64{\n\t\t0x8839,\n\t\t0x4002,\n\t\t0x7777,\n\t\t0x6338,\n\t\t0x6664,\n\t\t0x8394,\n\t\t0x1109,\n\t\t0x9999,\n\t\t0x4879,\n\t\t0x6639,\n\t\t0x0320,\n\t\t0x8111,\n\t\t0x3994,\n\t\t0xdead,\n\t\t0xabcb,\n\t\t0xab89,\n\t\t0xff87,\n\t\t0xf998,\n\t\t0xdeff,\n\t\t0xddd8,\n\t}\n)\n\nfunc init() {\n\t// Set the initial value to the current time, shuffle the mask, then\n\t// set the next value computed using the mask.\n\tvalue = time.Now().Format(\"2006-01-02 15:04:05\")\n\tshuffleMask()\n\t_ = LastValue()\n}\n\n// Render shows the current time in the web UI.\nfunc Render(_ string) string {\n\treturn time.Now().Format(\"2006-01-02 15:04:05\")\n}\n\n// Mask returns a zero length slice of the mask value.\nfunc Mask() []int64 {\n\treturn mask[:0]\n}\n\n// LastValue computes the next value, sets is, and returns the previous value.\n// It shuffles the mask after computing the new value.\nfunc LastValue() string {\n\tlastValue, value = value, computeValue()\n\tshuffleMask()\n\n\treturn lastValue\n}\n\n// shuffleMask shuffles the mask using the current time as a seed.\nfunc shuffleMask() {\n\tnow := time.Now().Unix()\n\tfor i := 0; i < len(mask); i++ {\n\t\trnd := now % mask[i]\n\t\trnd += mask[i] + 91\n\t\trnd %= int64(len(mask))\n\t\tmask[i], mask[rnd] = mask[rnd], mask[i]\n\t}\n}\n\n// computeValue computes the next value based on the current value, time, and mask.\nfunc computeValue() string {\n\tlvalue, err := time.Parse(\"2006-01-02 15:04:05\", value)\n\tif err != nil {\n\t\tpanic(\"unexpected parse error: \" + err.Error())\n\t}\n\n\tnewValue := lvalue.Unix()\n\tnewValue += mask[time.Now().Unix()%int64(len(mask))]\n\tnewValue /= 2\n\treturn time.Unix(newValue, 0).Format(\"2006-01-02 15:04:05\")\n}\n\n// UnmaskMeIfYouWant marks the challenge as solved if the solution matches the last \n// computed value and the mask value is correct.\nfunc UnmaskMeIfYouWant(solution string, cowMask int64) string {\n\tif solution != value {\n\t\tpanic(\"nope\")\n\t}\n\n\tsolutionTime, err := time.Parse(\"2006-01-02 15:04:05\", solution)\n\tif err != nil {\n\t\tpanic(\"unexpected parse error: \" + err.Error())\n\t}\n\n\tif ^(solutionTime.Unix())^cowMask != 0xdeadbeef {\n\t\tpanic(\"nope\")\n\t}\n\n\tsolver.MarkSolved(\"timemasked\", std.PrevRealm().Addr())\n\treturn \"bingo\"\n}\n```\n\n#### Solution\n\nThis challenge requires participants to predict what the next value will be. In order to do this, it is necessary to know the mask that will be used to do the calculation. This can be obtained by retrieving the mask value and expanding it to its full capacity so all elements are visible.\n\nNext, the same obfuscation must be applied using the last value and the current time.\n\nTo submit the final answer, call the `UnmaskMeIfYouWant` function with the predicted next value as well as another value that is calculated using bitwise operators. The solution expects `(NOT next_value) XOR cow_mask == 0xdeadbeef`. The property of XOR can be leveraged here to do the opposite to produce the expected value -- `NOT (next_value XOR 0xdeadbeef)`.\n\n```go\npackage main\n\nimport (\n\t\"time\"\n\n\t\"gno.land/r/challenges/notsorandom/p3\"\n)\n\nfunc main() {\n\torigMask := p3.Mask()[:20]\n\tmask := make([]int64, 20)\n\tcopy(mask, origMask)\n\n\tlastValueStr := p3.LastValue()\n\tnewTime, err := time.Parse(\"2006-01-02 15:04:05\", lastValueStr)\n\tif err != nil {\n\t\tpanic(\"couldn't parse time: \" + err.Error())\n\t}\n\n\tnewValue := newTime.Unix()\n\tnewValue += mask[time.Now().Unix()%int64(len(mask))]\n\tnewValue /= 2\n\tnewValueStr := time.Unix(newValue, 0).Format(\"2006-01-02 15:04:05\")\n\tp3.UnmaskMeIfYouWant(newValueStr, ^(newValue ^ 0xdeadbeef))\n}\n```\n\n## Final Words\n\nWe enjoyed coming up with these challenges and were happy to contribute to the GopherCon Challenge Series -- from coming up with the challenges, theming them, locking down certain gno.land features, and setting up infrastructure -- a lot of work went into this. We hope all participants were able to learn a bit more about gno.land and had fun doing it. Hopefully we'll be back next year 😁",
    "2024-08-26T13:37:00Z",
    "deelawn",
    "gnoland,gophercon,gc24,challenge-series"
  ],
  "max_deposit": ""
}
#39 vm/execgno.land/r/gnoland/blog.ModAddPost(monthly-dev-11, The More You Gno 11: Introducing `gnobro`, As we're gearing up toward the mainnet launch, we haven't forgotten to give some love to minor features that makes everyone's lives easier. This time the spotlight's on **gnobro**. # Gno Core Updates ## `gnobro` is Live What's `gnobro`, you say? Simply put, it's a terminal based realm browser you can use to explore realms and improve the development experience on 'gnodev'. [See it in action](https://github.com/gnolang/gno/pull/2608). ## Changelog - We've updated the release CI and [fixed issues](https://github.com/gnolang/gno/pull/2686) with `go-releaser`. Now all of the tools in the monorepo are released properly, with accompanying artifacts. - Added support for smooth `.md` file rendering in `gnoweb`, ahead of our plans to work on gnoweb 2.0. This allows packages that have READMEs and other documentation to render easily in gnoweb. - Slew of GnoVM fixes, increasing stability - [Type comparison fix](https://github.com/gnolang/gno/pull/1890) - [Cyclic references in type declarations](https://github.com/gnolang/gno/pull/2081) - [Handling non-call expression valuedecl values](https://github.com/gnolang/gno/pull/2647) - And more pending reviews! - We've added back [coverage support (CodeCov) for txtar tests](https://github.com/gnolang/gno/pull/2377), which make up a majority of our integration testing suite. The txtar tests for the `gnovm` package added an additional 5% coverage. We are currently assessing other packages that suffer from bad txtar coverage. - We've added [support for more robust stack traces for Gno-code panics](https://github.com/gnolang/gno/pull/2145), providing a much better UX for the developer. You no longer need to dig through a 5k line log output to figure out what panicked in your Gno code; you'll see the exception stack trace instead. - [Variable config command help output is drastically improved](https://github.com/gnolang/gno/pull/2399). In the past you'd need to know exactly what the configuration looks like before modifying or viewing the values. Now these values are conveniently present in the command help output. - Last, but not least: let's welcome our new R&D Go Engineer, [Antoine](https://github.com/aeddi). He'll help us scale core components for gno and beyond! # Events and Meetups ## Past events ### BUIDL With Cosmos / Web3 Summit, Germany We've had a couple of cool talks in Berlin: [An Introduction to gno.land](https://www.youtube.com/watch?v=hTGeG0z09NU) by Leon Hudak and [Building the Interchain of Ecosystems](https://youtu.be/nhpqaQxcIUY) by Tobias Schwartz. ### Web3 Kamp Web3 Kamp is a 9-day intensive camp held anually in Serbia, focusing on getting students involved in Web3. Check out this [X thread](https://x.com/_gnoland/status/1828443842221080778) for the highligh of our involvement., 2024-09-02T00:00:00Z, Kouteki, gnoland,ecosystem,updates,gnovm,gnobro)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "monthly-dev-11",
    "The More You Gno 11: Introducing `gnobro`",
    "\n\nAs we're gearing up toward the mainnet launch, we haven't forgotten to give some love to minor features that makes everyone's lives easier. This time the spotlight's on **gnobro**.\n\n# Gno Core Updates\n\n## `gnobro` is Live\n\nWhat's `gnobro`, you say? Simply put, it's a terminal based realm browser you can use to explore realms and improve the development experience on 'gnodev'. [See it in action](https://github.com/gnolang/gno/pull/2608).\n\n## Changelog\n\n- We've updated the release CI and [fixed issues](https://github.com/gnolang/gno/pull/2686) with `go-releaser`. Now all of the tools in the monorepo are released properly, with accompanying artifacts. \n- Added support for smooth `.md` file rendering in `gnoweb`, ahead of our plans to work on gnoweb 2.0. This allows packages that have READMEs and other documentation to render easily in gnoweb.\n- Slew of GnoVM fixes, increasing stability\n    - [Type comparison fix](https://github.com/gnolang/gno/pull/1890)\n    - [Cyclic references in type declarations](https://github.com/gnolang/gno/pull/2081)\n    - [Handling non-call expression valuedecl values](https://github.com/gnolang/gno/pull/2647)\n    - And more pending reviews!\n- We've added back [coverage support (CodeCov) for txtar tests](https://github.com/gnolang/gno/pull/2377), which make up a majority of our integration testing suite. The txtar tests for the `gnovm` package added an additional 5% coverage. We are currently assessing other packages that suffer from bad txtar coverage.\n- We've added [support for more robust stack traces for Gno-code panics](https://github.com/gnolang/gno/pull/2145), providing a much better UX for the developer. You no longer need to dig through a 5k line log output to figure out what panicked in your Gno code; you'll see the exception stack trace instead.\n- [Variable config command help output is drastically improved](https://github.com/gnolang/gno/pull/2399). In the past you'd need to know exactly what the configuration looks like before modifying or viewing the values. Now these values are conveniently present in the command help output.\n- Last, but not least: let's welcome our new R&D Go Engineer, [Antoine](https://github.com/aeddi). He'll help us scale core components for gno and beyond!\n\n# Events and Meetups\n\n## Past events\n\n### BUIDL With Cosmos / Web3 Summit, Germany\n\nWe've had a couple of cool talks in Berlin: [An Introduction to gno.land](https://www.youtube.com/watch?v=hTGeG0z09NU) by Leon Hudak and [Building the Interchain of Ecosystems](https://youtu.be/nhpqaQxcIUY) by Tobias Schwartz.\n\n### Web3 Kamp\n\nWeb3 Kamp is a 9-day intensive camp held anually in Serbia, focusing on getting students involved in Web3. Check out this [X thread](https://x.com/_gnoland/status/1828443842221080778) for the highligh of our involvement.",
    "2024-09-02T00:00:00Z",
    "Kouteki",
    "gnoland,ecosystem,updates,gnovm,gnobro"
  ],
  "max_deposit": ""
}
#40 vm/execgno.land/r/gnoland/blog.ModAddPost(monthly-dev-12, The More You Gno 12: Gno Bounties, Welcome to the 12th edition of The More You Gno! This month's highlight is our bounty program; solve an interesting challenge in Gno, get paid. ## Gno Bounties Here's how our bounty program works. We've [labelled issues in our repo](https://github.com/gnolang/gno/labels/bounty) that are eligible for the bounty program. 1. Find a bounty you want to work on 2. Submit a draft PR 3. Ask questions and get feedback early Bounties are sorted by t-shirt sizes, ranging from $500 to $32,000 USD. Find out more [here](https://gno.land/contribute). ## Introducing Gnoverse One of the gno.land tenets is censorship resistance. For that, we need greater decentralization. That's why we're opening [Gnoverse](https://github.com/gnoverse), a new GitHub organization dedicated to community-driven projects, as well as other minot projects not critical to the gno.land infrastructure. Contributors will be able to experiment with Gno related ideas and projects, collaborating without interference and oversight from the core engineering team. We've migrated a dozen repos from [Gnolang](https://github.com/gnolang) to [Gnoverse](https://github.com/gnoverse). Whether you're a developer, designer, or just passionate about Gno, your input is invaluable. Feel free to submit pull requests, suggest ideas, or simply join the conversation. ## Gno Core Updates The engineering team got together in Turin, Italy, to work through the details of the upcoming main.gno.land launch. We are almost ready to talk about this publicly, but you can hear some spoilers on the [video snippets](https://x.com/_gnoland/status/1844779439160213861) we caught. ### Changelog - [Fixed repo-level benchmark workflows](https://github.com/gnolang/gno/pull/2716), for easier performance regression monitoring. Viewable [here](https://gnolang.github.io/benchmarks/). This allows us to identify how individual PRs affect performance. - vel benchmark workflows, for easier performance regression monitoring. Viewable here. Impact: We can now track on individual PRs if there is a performance regression, and monitor long-term performance. - [Valid type comparisons for bools](https://github.com/gnolang/gno/pull/2725). - [GnoVM slice memory allocation order fix](https://github.com/gnolang/gno/pull/2781). - [Value declaration loop fix](https://github.com/gnolang/gno/pull/2074). - [Support `len` and `cap` on an array pointer](https://github.com/gnolang/gno/pull/2709) . ## Events and Meetups ### Past events #### gno.land Contributor Tech Discussions We've revamped the contributor calls to showcase the cool stuff being built on our platform, and have technical discussions on the challenges we face. The [1st video is out](https://www.youtube.com/watch?v=4YUOTt5bDJc), and new ones will be published every two weeks. #### Go Meetup - Turin, Italy During our engineering retreat in Turin, we took the opportunity to connect with the local Go community and hold a gno.land workshop. Our very own Morgan Bazalgette walked the attendees through the gno.land project, followed by a live coding session where Morgan built a simple messaging board. See the video [here](https://youtu.be/b3zRbVcJxyE). , 2024-10-17T00:00:00Z, Kouteki, gnoland,ecosystem,updates,gnovm)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "monthly-dev-12",
    "The More You Gno 12: Gno Bounties",
    "\n\nWelcome to the 12th edition of The More You Gno! This month's highlight is our bounty program; solve an interesting challenge in Gno, get paid.\n\n## Gno Bounties\n\nHere's how our bounty program works. We've [labelled issues in our repo](https://github.com/gnolang/gno/labels/bounty) that are eligible for the bounty program. \n\n1. Find a bounty you want to work on\n2. Submit a draft PR\n3. Ask questions and get feedback early\n\nBounties are sorted by t-shirt sizes, ranging from $500 to $32,000 USD.\n\nFind out more [here](https://gno.land/contribute).\n\n## Introducing Gnoverse\n\nOne of the gno.land tenets is censorship resistance. For that, we need greater decentralization. That's why we're opening [Gnoverse](https://github.com/gnoverse), a new GitHub organization dedicated to community-driven projects, as well as other minot projects not critical to the gno.land infrastructure.\n\nContributors will be able to experiment with Gno related ideas and projects, collaborating without interference and oversight from the core engineering team.\n\nWe've migrated a dozen repos from [Gnolang](https://github.com/gnolang) to [Gnoverse](https://github.com/gnoverse). Whether you're a developer, designer, or just passionate about Gno, your input is invaluable. Feel free to submit pull requests, suggest ideas, or simply join the conversation.\n\n## Gno Core Updates\n\nThe engineering team got together in Turin, Italy, to work through the details of the upcoming main.gno.land launch. We are almost ready to talk about this publicly, but you can hear some spoilers on the [video snippets](https://x.com/_gnoland/status/1844779439160213861) we caught.\n\n### Changelog\n\n- [Fixed repo-level benchmark workflows](https://github.com/gnolang/gno/pull/2716), for easier performance regression monitoring. Viewable [here](https://gnolang.github.io/benchmarks/). This allows us to identify how individual PRs affect performance.\n- vel benchmark workflows, for easier performance regression monitoring. Viewable here.\nImpact: We can now track on individual PRs if there is a performance regression, and monitor long-term performance.\n- [Valid type comparisons for bools](https://github.com/gnolang/gno/pull/2725).\n- [GnoVM slice memory allocation order fix](https://github.com/gnolang/gno/pull/2781).\n- [Value declaration loop fix](https://github.com/gnolang/gno/pull/2074).\n- [Support `len` and `cap` on an array pointer](https://github.com/gnolang/gno/pull/2709) .\n\n## Events and Meetups\n\n### Past events\n\n#### gno.land Contributor Tech Discussions\n\nWe've revamped the contributor calls to showcase the cool stuff being built on our platform, and have technical discussions on the challenges we face. The [1st video is out](https://www.youtube.com/watch?v=4YUOTt5bDJc), and new ones will be published every two weeks.\n\n#### Go Meetup - Turin, Italy\n\nDuring our engineering retreat in Turin, we took the opportunity to connect with the local Go community and hold a gno.land workshop. Our very own Morgan Bazalgette walked the attendees through the gno.land project, followed by a live coding session where Morgan built a simple messaging board. See the video [here](https://youtu.be/b3zRbVcJxyE).\n",
    "2024-10-17T00:00:00Z",
    "Kouteki",
    "gnoland,ecosystem,updates,gnovm"
  ],
  "max_deposit": ""
}
#41 vm/execgno.land/r/gnoland/blog.ModAddPost(monthly-dev-13, The More You Gno 13: Test5, gnoverse and more, This edition of "The More You Gno" is packed with updates and highlights. Test5 testnet was launched; a new community space called `gnoverse` is now available. The mainnet launch milestone is up and the development is speeding up. It's an exciting time to be a part of the gno.land project. ## Test5 is live On November 13 we launched [Test5](https://test5.gno.land/), a new iteration of the multinode testnet. The validator set has been expanded from 7 to 17 nodes, plus a number of non-validator nodes. It also boasts GovDAO v2 that expands the on-chain voting capabilities, and a number of fixes and quality of life improvements for the developers. Test5 is already available on Adena and the Faucet Hub, so feel free to give it a try. ## Introducing gnoverse Launched two weeks ago, [gnoverse](https://github.com/gnoverse) serves as a collaborative hub for experimental and innovative projects inspired by the gno.land ecosystem. It’s a space for incubating ideas and exploring the full potential of Gno. This GitHub space maintains a strong connection with the [gnolang](https://github.com/gnolang) community, fostering collaboration and resource sharing among developers and enthusiasts. Our goal is to support and highlight projects that enhance the gno.land experience, and to be much more hands-off in the process. We value community contributions! Whether you’re a developer, designer, or simply enthusiastic about Gno, your input matters. Join us by submitting pull requests, sharing ideas, or engaging in discussions. If you need a new repo for your project, we'd be happy to oblige. ## Mainnet launch While we're getting an official announcement ready, take a sneak peek at the [gno.land mainnet launch milestone](https://github.com/gnolang/gno/milestone/7) on GitHub. The scope has been finalized for the most part, and our engineering teams are covering a lot of ground. We'll most likely launch at least one more testnet between now and the mainnet launch, so stay tuned. ### Changelog All the cool stuff we've done, outlined as bullet points: - [for loops maintain the same block on iteration, which is referenced in any closures generated within](https://github.com/gnolang/gno/issues/1135) - [feat(gnovm): handle loop variables](https://github.com/gnolang/gno/pull/2429) - [Running gno test causes a panic when struct variables are redeclared in loops](https://github.com/gnolang/gno/issues/3013) - [fix(gnovm): fix issue with locally re-definition](https://github.com/gnolang/gno/pull/3014) - [feedback needed: how are you using gnoland genesis ...?](https://github.com/gnolang/gno/issues/2824) - [chore: move gnoland genesis to contribs/gnogenesis](https://github.com/gnolang/gno/pull/3041) - [feat: r/gov/dao v2](https://github.com/gnolang/gno/pull/2581) - [Test4 re-release](https://github.com/gnolang/gno/issues/3060) - [Test5 release](https://github.com/gnolang/gno/issues/3061) - [feat: add initial test5.gno.land deployment](https://github.com/gnolang/gno/pull/3092) - [Proposal: Implementing Versioning Across Application Serialization Structures](https://github.com/gnolang/gno/issues/1838) - [Running go vet on the project fails](https://github.com/gnolang/gno/issues/2954) - [fix(tm2): rename methods to avoid conflicts with (un)marshaler interfaces](https://github.com/gnolang/gno/pull/3000) - [Fix println DoS vector](https://github.com/gnolang/gno/issues/3075) - [fix(gnovm): don't print to stdout by default](https://github.com/gnolang/gno/pull/3076) - [Add r/sys/params + params genesis support](https://github.com/gnolang/gno/pull/3003) - [Support metadata for genesis txs](https://github.com/gnolang/gno/pull/2941) - [Setup "nice" stale PRs' bot](https://github.com/gnolang/gno/issues/1445) - [ci: add a stale bot for PRs](https://github.com/gnolang/gno/pull/2804) - [feat: add contribs/gnomigrate](https://github.com/gnolang/gno/pull/3063) - [chore: update tx-archive in portal loop](https://github.com/gnolang/gno/pull/3064) ## Events and Meetups [4th episode](https://youtu.be/hRZ7iU4bovM?si=2tOUeuIyiSWxELGv) of the Contributor Technical Discussions is out! Watch the rest [here](https://www.youtube.com/playlist?list=PL7nP7r1QiDktMCdw1ydQo2crM3y6Zk7E4)., 2024-11-21T00:00:00Z, Kouteki, gnoland,ecosystem,updates,gnovm)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "monthly-dev-13",
    "The More You Gno 13: Test5, gnoverse and more",
    "\n\nThis edition of \"The More You Gno\" is packed with updates and highlights. Test5 testnet was launched; a new community space called `gnoverse` is now available. The mainnet launch milestone is up and the development is speeding up. It's an exciting time to be a part of the gno.land project.\n\n## Test5 is live\n\nOn November 13 we launched [Test5](https://test5.gno.land/), a new iteration of the multinode testnet. The validator set has been expanded from 7 to 17 nodes, plus a number of non-validator nodes. It also boasts GovDAO v2 that expands the on-chain voting capabilities, and a number of fixes and quality of life improvements for the developers. \n\nTest5 is already available on Adena and the Faucet Hub, so feel free to give it a try.\n\n## Introducing gnoverse\n\nLaunched two weeks ago, [gnoverse](https://github.com/gnoverse) serves as a collaborative hub for experimental and innovative projects inspired by the gno.land ecosystem. It’s a space for incubating ideas and exploring the full potential of Gno.\n\nThis GitHub space maintains a strong connection with the [gnolang](https://github.com/gnolang) community, fostering collaboration and resource sharing among developers and enthusiasts. Our goal is to support and highlight projects that enhance the gno.land experience, and to be much more hands-off in the process.\n\nWe value community contributions! Whether you’re a developer, designer, or simply enthusiastic about Gno, your input matters. Join us by submitting pull requests, sharing ideas, or engaging in discussions. If you need a new repo for your project, we'd be happy to oblige.\n\n## Mainnet launch\n\nWhile we're getting an official announcement ready, take a sneak peek at the [gno.land mainnet launch milestone](https://github.com/gnolang/gno/milestone/7) on GitHub. The scope has been finalized for the most part, and our engineering teams are covering a lot of ground. We'll most likely launch at least one more testnet between now and the mainnet launch, so stay tuned.\n\n### Changelog\n\nAll the cool stuff we've done, outlined as bullet points:\n- [for loops maintain the same block on iteration, which is referenced in any closures generated within](https://github.com/gnolang/gno/issues/1135)\n    - [feat(gnovm): handle loop variables](https://github.com/gnolang/gno/pull/2429)\n- [Running gno test causes a panic when struct variables are redeclared in loops](https://github.com/gnolang/gno/issues/3013)\n    - [fix(gnovm): fix issue with locally re-definition](https://github.com/gnolang/gno/pull/3014)\n- [feedback needed: how are you using gnoland genesis ...?](https://github.com/gnolang/gno/issues/2824)\n    - [chore: move gnoland genesis to contribs/gnogenesis](https://github.com/gnolang/gno/pull/3041)\n- [feat: r/gov/dao v2](https://github.com/gnolang/gno/pull/2581)\n- [Test4 re-release](https://github.com/gnolang/gno/issues/3060)\n- [Test5 release](https://github.com/gnolang/gno/issues/3061)\n    - [feat: add initial test5.gno.land deployment](https://github.com/gnolang/gno/pull/3092)\n- [Proposal: Implementing Versioning Across Application Serialization Structures](https://github.com/gnolang/gno/issues/1838)\n- [Running go vet on the project fails](https://github.com/gnolang/gno/issues/2954)\n    - [fix(tm2): rename methods to avoid conflicts with (un)marshaler interfaces](https://github.com/gnolang/gno/pull/3000)\n- [Fix println DoS vector](https://github.com/gnolang/gno/issues/3075)\n    - [fix(gnovm): don't print to stdout by default](https://github.com/gnolang/gno/pull/3076)\n- [Add r/sys/params + params genesis support](https://github.com/gnolang/gno/pull/3003)\n- [Support metadata for genesis txs](https://github.com/gnolang/gno/pull/2941)\n- [Setup \"nice\" stale PRs' bot](https://github.com/gnolang/gno/issues/1445)\n    - [ci: add a stale bot for PRs](https://github.com/gnolang/gno/pull/2804)\n- [feat: add contribs/gnomigrate](https://github.com/gnolang/gno/pull/3063)\n- [chore: update tx-archive in portal loop](https://github.com/gnolang/gno/pull/3064)\n\n## Events and Meetups\n\n[4th episode](https://youtu.be/hRZ7iU4bovM?si=2tOUeuIyiSWxELGv) of the Contributor Technical Discussions is out! Watch the rest [here](https://www.youtube.com/playlist?list=PL7nP7r1QiDktMCdw1ydQo2crM3y6Zk7E4).",
    "2024-11-21T00:00:00Z",
    "Kouteki",
    "gnoland,ecosystem,updates,gnovm"
  ],
  "max_deposit": ""
}
#42 vm/execgno.land/r/gnoland/blog.ModAddPost(seoul-retreat, Gnomes spotted in Seoul: Onbloc x Core Engineering Collaboration , gno.land’s core engineering team has just wrapped up an intense and highly productive two-week coding sprint with our core contributor, [Onbloc](https://onbloc.xyz/). Hosted in Onbloc's offices in the heart of Seoul, this onsite collaboration stands as one of our most successful development cycles yet, setting new records for pull requests merged and advancing critical priorities for our upcoming mainnet launch, especially with the GnoVM. [![office](https://gnolang.github.io/blog/2024-12-04_seoul-retreat/src/thumbs/office.jpg)](https://gnolang.github.io/blog/2024-12-04_seoul-retreat/src/office.jpg) ## Starting with a Bang: test5 and engineering developments The collaboration kicked off with the launch of test5. This milestone set the tone for two weeks of unparalleled productivity. During this sprint, the teams identified areas of collaboration including a feedback workshop on Gnoscan, Gnoswap, and the Adena Wallet, and topics such as gas, realm upgradeability, `gnoweb`, `tx-indexer`, infrastructure, and ABCI queries. The benchmarking and gas cost estimations are a priority as the team aims to optimize transaction efficiency for both users and developers. Realm development will advance significantly in the next few months, highlighting the need to enhance an existing realm's functionality and capabilities without creating a new one. To address this, a realm upgradeable pattern example is necessary to illustrate possible solutions to this challenge. This feature is particularly important for applications like Gnoswap, and was a key focus during the recent two-week sprint. Another topic is the advancement of `gnoweb`, gno.land’s universal web frontend. The team outlined a development [roadmap](https://github.com/gnolang/gno/issues/3191) for iterative feature releases, ensuring adaptability and a user-centric experience throughout the process. Key features include: - Design Overhaul: Creating a more user-friendly UI with a color palette matching gno.land's true spirit. - UX Redesign: Establishing `gnoweb` as the go-to realm web frontend. - Code Refactoring: Enhancing security and maintainability. - Navigation Improvements: Simplifying user navigation and introducing a query system for direct linking to specific `gnoweb` content or commands. Finally, the team collaborated closely with Onbloc’s DevOps experts to streamline and automate the genesis creation and validation process for future testnets and the eventual mainnet launch. ## Strengthening Regional Community Connections Beyond the engineering milestones, this sprint fortified relationships within our contributor network and the broader community. Together with Onbloc, we hosted an informal meetup to engage with the Korean developer community and met with Cosmostation, a longstanding South Korea-based Cosmos contributor. Over 15 developers attended the event, eager to learn about gno.land’s vision and explore how they could contribute. The enthusiasm from local developers and the collaboration with Onbloc highlight the growing global momentum behind gno.land. To further support regional growth, we are prioritizing multilingual content, starting with Korean. In collaboration with Onbloc, we created Korean video content for the community - coming soon! [![office](https://gnolang.github.io/blog/2024-12-04_seoul-retreat/src/thumbs/meetup.jpg)](https://gnolang.github.io/blog/2024-12-04_seoul-retreat/src/meetup.jpg) ## A Celebration of Culture and Collaboration While the primary focus was engineering, the experience in Seoul transcended the technical realm. Thanks to our gracious hosts at Onbloc, the sprint became a celebration of cultural exchange. From lively discussions over authentic Korean BBQ to spirited karaoke nights and reflective visits to historical landmarks, our time in Seoul enriched our understanding of South Korean culture while underscoring the importance of team and community building. As we approach the mainnet launch, we’re excited to welcome others to join and contribute to gno.land. It begins in the digital realm (no pun intended) but extends into meaningful human connections across the globe. , 2024-12-04T00:00:00Z, michelleellen, gnoland,ecosystem,meetup,retreat,seoul)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "seoul-retreat",
    "Gnomes spotted in Seoul: Onbloc x Core Engineering Collaboration ",
    "\n\ngno.land’s core engineering team has just wrapped up an intense and highly \nproductive two-week coding sprint with our core contributor, \n[Onbloc](https://onbloc.xyz/). Hosted in Onbloc's offices in the heart of Seoul,\nthis onsite collaboration stands as one of our most successful development cycles\nyet, setting new records for pull requests merged and advancing critical priorities\nfor our upcoming mainnet launch, especially with the GnoVM. \n\n[![office](https://gnolang.github.io/blog/2024-12-04_seoul-retreat/src/thumbs/office.jpg)](https://gnolang.github.io/blog/2024-12-04_seoul-retreat/src/office.jpg)\n\n## Starting with a Bang: test5 and engineering developments\n\nThe collaboration kicked off with the launch of test5. This milestone set the tone for two weeks of unparalleled productivity. During this sprint, the teams identified areas of collaboration including a feedback workshop on Gnoscan, Gnoswap, and the Adena Wallet, and topics such as gas, realm upgradeability, `gnoweb`, `tx-indexer`, infrastructure, and ABCI queries. The benchmarking and gas cost estimations are a priority as the team aims to optimize transaction efficiency for both users and developers. Realm development will advance significantly in the next few months, highlighting the need to enhance an existing realm's functionality and capabilities without creating a new one. To address this, a realm upgradeable pattern example is necessary to illustrate possible solutions to this challenge. This feature is particularly important for applications like Gnoswap, and was a key focus during the recent two-week sprint.\n\nAnother topic is the advancement of `gnoweb`, gno.land’s universal web frontend. \nThe team outlined a development [roadmap](https://github.com/gnolang/gno/issues/3191) \nfor iterative feature releases, ensuring adaptability and a user-centric experience \nthroughout the process. Key features include:\n- Design Overhaul: Creating a more user-friendly UI with a color palette \nmatching gno.land's true spirit.\n- UX Redesign: Establishing `gnoweb` as the go-to realm web frontend.\n- Code Refactoring: Enhancing security and maintainability.\n- Navigation Improvements: Simplifying user navigation and introducing a query \nsystem for direct linking to specific `gnoweb` content or commands.\n\nFinally, the team collaborated closely with Onbloc’s DevOps experts to streamline \nand automate the genesis creation and validation process for future testnets and \nthe eventual mainnet launch.\n\n## Strengthening Regional Community Connections\n\nBeyond the engineering milestones, this sprint fortified relationships within\nour contributor network and the broader community. Together with Onbloc, we \nhosted an informal meetup to engage with the Korean developer community and met\nwith Cosmostation, a longstanding South Korea-based Cosmos contributor. Over 15 \ndevelopers attended the event, eager to learn about gno.land’s vision and explore \nhow they could contribute. The enthusiasm from local developers and the \ncollaboration with Onbloc highlight the growing global momentum behind gno.land. \nTo further support regional growth, we are prioritizing multilingual content,\nstarting with Korean. In collaboration with Onbloc, we created Korean video \ncontent for the community - coming soon! \n\n[![office](https://gnolang.github.io/blog/2024-12-04_seoul-retreat/src/thumbs/meetup.jpg)](https://gnolang.github.io/blog/2024-12-04_seoul-retreat/src/meetup.jpg)\n\n## A Celebration of Culture and Collaboration\n\nWhile the primary focus was engineering, the experience in Seoul transcended the\ntechnical realm. Thanks to our gracious hosts at Onbloc, the sprint became a \ncelebration of cultural exchange. From lively discussions over authentic Korean \nBBQ to spirited karaoke nights and reflective visits to historical landmarks, \nour time in Seoul enriched our understanding of South Korean culture while\nunderscoring the importance of team and community building.\n\nAs we approach the mainnet launch, we’re excited to welcome others to join and \ncontribute to gno.land. It begins in the digital realm (no pun intended) but \nextends into meaningful human connections across the globe.\n",
    "2024-12-04T00:00:00Z",
    "michelleellen",
    "gnoland,ecosystem,meetup,retreat,seoul"
  ],
  "max_deposit": ""
}
#43 vm/execgno.land/r/gnoland/blog.ModAddPost(audit-proposal-request, Call for Security Auditors - gno.land Audit, In the gno.land ecosystem, security is one of our top priorities as we continue to develop our blockchain focused on smart contracts and decentralized applications. As we move closer to the beta launch, we're calling on experienced security auditors to help us ensure the robustness and security of our codebase. We are now accepting proposals for the auditing of the gno repository on GitHub. This is a significant and complex task, so we are looking for qualified firms or individuals with experience auditing blockchain systems, virtual machines, and distributed systems. You can find the full gno.land repository here: https://github.com/gnolang/gno ## What's in Scope? We've already done some work to narrow the scope of the code that requires auditing. For a more detailed list of which files are in scope and which are not, please refer to the [Google Spreadsheet](https://docs.google.com/spreadsheets/d/1rAvzvCH1TBZAykWCzKpefJnbx0SaCEgnP6IypzX8Xo4/edit?usp=sharing) that outlines the specifics. ### Scope Breakdown by Directory Here's the estimated breakdown of the lines of code that are in scope for auditing as of November 11th. This code is largely written in Go: * **gnovm**: 43,452 lines (25% of total) * **gno.land**: 18,677 lines (10% of total) * **tm2**: 108,020 lines (65% of total) Total lines in scope: 170,149 lines This won't change drastically before the audit, so these line counts may help auditors estimate time costs. Many proposals we've received so far are simply time-boxing for a 4 engineer-week audit. ## Auditing Approach Due to the size and complexity of the audit, we are considering breaking the task into sub-components. We may hire multiple firms to audit different parts of the codebase simultaneously. The proposed divisions are: 1. Gno Virtual Machine (GnoVM) - contained in the "gnovm" subdirectory 2. The Remaining Components - including the "gno.land" and "tm2" subdirectories ### Key Focus Areas for Auditors While the full codebase needs a thorough review, we've identified several areas of potential security concern that require special attention: 1. **Determinism in GnoVM** As a blockchain designed for deterministic execution, ensuring that the GnoVM executes contracts consistently across all nodes is crucial. Our goal is to eliminate non-deterministic components from Go, such as using AVL trees instead of Go maps. However, we may still have lingering issues that could lead to non-deterministic behavior. A prime example is the module within `gnovm/pkg/gnolang/values_string.go`, which should be carefully reviewed for any such issues. **Why this matters**: Non-determinism can lead to chain halts or splits, which could be exploited by attackers. 2. **Other GnoVM Challenges** gno.land contributor [@thehowl](https://github.com/thehowl) has detailed some additional areas of concern of the Virtual Machine here: https://github.com/gnolang/gno/issues/2886#issuecomment-2400274812 3. **Security in Realms (Smart Contracts)** Developers deploy smart contracts, called "Realms," to the chain. Malicious Realms could attempt to inject harmful content that could affect other users of the chain, particularly in the `Render` function or supporting tools like **Gnoweb**, which displays Realms to end users. **Potential risk**: Cross-site scripting (XSS) and other injection attacks. 4. **Security Risks Found in Other Blockchain VMs** Many blockchain VMs, such as Ethereum's EVM, have faced high-profile security issues. We expect that similar vulnerabilities could be targeted in the GnoVM, so it's crucial to audit and mitigate these risks in advance. 5. **Key Management (gnokey)** Although this is a lower priority than some previously mentioned, auditors will need to review the gnokey package, which handles key generation and signing, to ensure that security best practices are being followed; for example, ensure our Ledger hardware wallet integration with gnokey uses the correct build flags. ## How to Submit a Proposal We're looking for proposals that include the following line items: - **Cost of auditing the entire "gno" repository** -- covering all directories and files in scope. - **Cost of auditing the Gno Virtual Machine (gnovm)** -- focused on the **gnovm** subdirectory. - **Cost of auditing the other components** -- covering the **gno.land** and **tm2** subdirectories. - **Fuzzing efforts** -- auditors are encouraged to include fuzzing as part of their code review process, though it should be listed as a separate line item. Please include the timelines for auditing and your current availability beginning December 23rd. ## Timeline & Contact Information We expect the audit to consume at least 4 engineer weeks and conclude by the end of the day January 20th, giving us a week to remediate any high- or critical-severity issues by January 28th. Audit teams may decide to dedicate multiple auditors in parallel to meet our desired timeline. We are open to discussions with auditing teams to answer any questions about the scope of the project. Please send your proposals via email to **security [at] tendermint [dot] com**. We are happy to meet with potential auditing teams to further discuss the details and answer any questions. ## Conclusion The gno.land community is committed to building a secure and resilient blockchain platform. We believe that involving experienced auditors in our development process is essential to ensure that we can deliver a secure environment for dApp developers. If you or your team have the expertise and are interested in contributing to gno.land's security, we encourage you to submit a proposal. Let's work together to make gno.land the most secure blockchain for smart contracts and decentralized applications! , 2024-12-05T00:00:00Z, kristovatlas, gnoland,gnovm,security,audit)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "audit-proposal-request",
    "Call for Security Auditors - gno.land Audit",
    "\n\nIn the gno.land ecosystem, security is one of our top priorities as we continue to develop our blockchain focused on smart contracts and decentralized applications. As we move closer to the beta launch, we're calling on experienced security auditors to help us ensure the robustness and security of our codebase.\nWe are now accepting proposals for the auditing of the gno repository on GitHub. This is a significant and complex task, so we are looking for qualified firms or individuals with experience auditing blockchain systems, virtual machines, and distributed systems.\nYou can find the full gno.land repository here:\n\nhttps://github.com/gnolang/gno\n\n## What's in Scope?\n\nWe've already done some work to narrow the scope of the code that requires auditing. For a more detailed list of which files are in scope and which are not, please refer to the [Google Spreadsheet](https://docs.google.com/spreadsheets/d/1rAvzvCH1TBZAykWCzKpefJnbx0SaCEgnP6IypzX8Xo4/edit?usp=sharing) that outlines the specifics.\n\n### Scope Breakdown by Directory\n\nHere's the estimated breakdown of the lines of code that are in scope for auditing as of November 11th. This code is largely written in Go:\n\n* **gnovm**: 43,452 lines (25% of total)\n* **gno.land**: 18,677 lines (10% of total)\n* **tm2**: 108,020 lines (65% of total)\n\nTotal lines in scope: 170,149 lines\n\nThis won't change drastically before the audit, so these line counts may help auditors estimate time costs. Many proposals we've received so far are simply time-boxing for a 4 engineer-week audit.\n\n## Auditing Approach\n\nDue to the size and complexity of the audit, we are considering breaking the task into sub-components. We may hire multiple firms to audit different parts of the codebase simultaneously. The proposed divisions are:\n\n1. Gno Virtual Machine (GnoVM) - contained in the \"gnovm\" subdirectory\n2. The Remaining Components - including the \"gno.land\" and \"tm2\" subdirectories\n\n### Key Focus Areas for Auditors\n\nWhile the full codebase needs a thorough review, we've identified several areas of potential security concern that require special attention:\n1. **Determinism in GnoVM**  \n    As a blockchain designed for deterministic execution, ensuring that the GnoVM executes contracts consistently across all nodes is crucial. Our goal is to eliminate non-deterministic components from Go, such as using AVL trees instead of Go maps. However, we may still have lingering issues that could lead to non-deterministic behavior. A prime example is the module within `gnovm/pkg/gnolang/values_string.go`, which should be carefully reviewed for any such issues.  \n    **Why this matters**: Non-determinism can lead to chain halts or splits, which could be exploited by attackers.\n2. **Other GnoVM Challenges**  \n    gno.land contributor [@thehowl](https://github.com/thehowl) has detailed some additional areas of concern of the Virtual Machine here: https://github.com/gnolang/gno/issues/2886#issuecomment-2400274812 \n3. **Security in Realms (Smart Contracts)**  \n    Developers deploy smart contracts, called \"Realms,\" to the chain. Malicious Realms could attempt to inject harmful content that could affect other users of the chain, particularly in the `Render` function or supporting tools like **Gnoweb**, which displays Realms to end users.  \n    **Potential risk**: Cross-site scripting (XSS) and other injection attacks.\n4. **Security Risks Found in Other Blockchain VMs**  \n    Many blockchain VMs, such as Ethereum's EVM, have faced high-profile security issues. We expect that similar vulnerabilities could be targeted in the GnoVM, so it's crucial to audit and mitigate these risks in advance.\n5. **Key Management (gnokey)**  \n    Although this is a lower priority than some previously mentioned, auditors will need to review the gnokey package, which handles key generation and signing, to ensure that security best practices are being followed; for example, ensure our Ledger hardware wallet integration with gnokey uses the correct build flags.\n\n## How to Submit a Proposal\n\nWe're looking for proposals that include the following line items:\n\n- **Cost of auditing the entire \"gno\" repository** -- covering all directories and files in scope.\n- **Cost of auditing the Gno Virtual Machine (gnovm)** -- focused on the **gnovm** subdirectory.\n- **Cost of auditing the other components** -- covering the **gno.land** and **tm2** subdirectories.\n- **Fuzzing efforts** -- auditors are encouraged to include fuzzing as part of their code review process, though it should be listed as a separate line item.\n\nPlease include the timelines for auditing and your current availability beginning December 23rd. \n\n## Timeline & Contact Information\nWe expect the audit to consume at least 4 engineer weeks and conclude by the end of the day January 20th, giving us a week to remediate any high- or critical-severity issues by January 28th. Audit teams may decide to dedicate multiple auditors in parallel to meet our desired timeline. We are open to discussions with auditing teams to answer any questions about the scope of the project.\n\nPlease send your proposals via email to **security [at] tendermint [dot] com**. We are happy to meet with potential auditing teams to further discuss the details and answer any questions.\n\n\n## Conclusion\n\nThe gno.land community is committed to building a secure and resilient blockchain platform. We believe that involving experienced auditors in our development process is essential to ensure that we can deliver a secure environment for dApp developers. If you or your team have the expertise and are interested in contributing to gno.land's security, we encourage you to submit a proposal.\n\nLet's work together to make gno.land the most secure blockchain for smart contracts and decentralized applications!\n",
    "2024-12-05T00:00:00Z",
    "kristovatlas",
    "gnoland,gnovm,security,audit"
  ],
  "max_deposit": ""
}
#44 vm/execgno.land/r/gnoland/blog.ModAddPost(road-to-mainnet, The Road to Mainnet & Beyond, ## Gno the Difference gno.land is evolving as a cutting-edge decentralized operating system, setting a new standard for building and governing diverse applications. At its core, it provides an open-source smart contract platform designed to address systemic challenges in centralized systems—censorship, lack of user autonomy, misaligned incentives, and non-transparent operations. The true strength of gno.land lies in its broad applicability across domains. It provides builders with the means to create secure, scalable, and trustless applications that redefine the possibilities of decentralized systems. gno.land has been advancing through a phased development process aimed at delivering critical functionality at each stage. The network architecture ensures that every milestone reinforces the foundation of a reliable and scalable decentralized ecosystem that prioritizes transparency, forkability, and governance. Let’s take a closer look at the progress, key milestones, and what’s in store for the future of gno.land. ## Milestones Overview The priority is to establish a secure and stable network. Once operational and thoroughly tested, the infrastructure for rewards distribution and development will activate, accelerating the growth of Gno's ecosystem for both builders and users. Here’s a look back at what we’ve accomplished so far. ### 2021: The Beginning gno.land’s journey began in 2021, carried out by Jae Kwon, who laid the groundwork to develop Gno's most revolutionary component, the Gno Virtual Machine (GnoVM), and bootstrap a simple Tendermint node capable of executing Gno code. The GnoVM is a virtual machine capable of deterministically running a subset of Go code, where smart contracts are composed together by simply “importing” them, much like working with any standard Go package. The initial work was focused on creating the first iteration of the VM, aiming to implement a complete feature set of Gno while accounting for various edge cases. [By the end of 2021](https://github.com/gnolang/gno/tree/fa412d4bb38f6d6485d9b61784b34e5d5ca64554), rudimentary tooling was available for experimenting with the VM, an extensive suite of tests was in place, and an initial version of Gno’s state persistence was implemented. The first commits for the [`boards` realm](https://github.com/gnolang/gno/tree/master/examples/gno.land/r/demo/boards) were introduced, and a functional chain executable was developed, enabling the addition of new packages and the ability to call functions within them. ### 2022: The First Testnets The full scope of the project only became evident in 2022, following the implementation of the initial functionality. During this period, the Gno project experienced a significant increase in contributors, resulting in a surge of new features, bug fixes, and developments across multiple areas beyond just the VM. The Gno core team grew to three full-time engineers, with additional hiring efforts underway. - Three testnets were launched (test1, test2 and test3), each with significant improvements in usability and ease of access for newcomers, and more example realms. - The `boards` realm was improved, with the introduction of new features including editing posts, moderation, and links to easily construct replies to posts using `gnokey`. Additionally, thanks to the `users` realm, Gno users were able to register a username which then showed up on the `boards` realm (among others). - The Onbloc team began the development of the first gno.land wallet, [Adena](https://www.adena.app/), marking the first steps to creating web dApps using gno.land. - The RPC layer got many improvements, including `qeval` and other features to inspect Gno code. - Additional examples were added on creating GRC20 tokens, as well as string formatting utilities. - The first [workshops](https://github.com/gnolang/workshops) and presentations were posted on how to program in Gno. - On the Gno side, the VM was consistently improved to fix more bugs and increase its safety for use on-chain. [End-of-year status](https://github.com/gnolang/gno/tree/cabc1ad9a36319f68fed2bc888018bfcbff228a7) ### 2023: The Growth In 2023, the Gno team grew to twelve engineers, many of whom continue to form the Gno core development team today. Around the same time, gno.land began seeing its first real-world applications, putting its capabilities to the test. Additionally, new developer tools were introduced to enhance the Gno development experience. These include utilities such as `gno doc`, `gno repl`, `gno lint`, alongside `gnodev`, which is the foundational tool for building realms on gno.land today. - [GnoChess](https://github.com/gnoverse/gnochess) was an early experiment to program complex Gno smart contracts, capable of running the backend of a chess server. The Gopher community had the opportunity to experience GnoChess for the first time at GopherCon 2023, where gno.land highlighted Gno’s unique features and its potential to transform the decentralized application landscape. - [Test3](https://github.com/gnolang/gno/releases/tag/chain%2Ftest3.0), launched at the end of 2022 and continued in 2023, enabled builders to experiment with running full nodes and developing indexers. It provided a persistent history of state for everyone. - Many API decisions, like `std.PrevRealm()`, were discussed and implemented. - The [License](https://github.com/gnolang/gno?tab=License-1-ov-file) for gno.land was established as the *Gno Network Public License*, a fork of the GNU Afferro General Public License. - [Berty](https://berty.tech/) and [Teritori](https://teritori.com/) became core ecosystem builders, creating integrated applications, communication tools, and social platforms. - The first official documentation was released, allowing more users to be onboarded onto gno.land without having to learn directly from the source. - The Beta version of [Gno Playground](https://play.gno.land/) launched, providing a space to experiment Gno programs and realms directly from the web. [End-of-year status](https://github.com/gnolang/gno/tree/c3a4993335f8881989eb49e4efea6a3c1310061d) ### 2024: The Refinement 2024 prioritized the creation of a stable chain to launch as soon as possible. Throughout the year, the team focused on delivering great stability on gno.land and being able to fix the most critical issues which stand in the way of launching the first stable network. The launch of Test4 on July 15, 2024, was a major milestone in gno.land’s journey. One of the main objectives of this testnet was to collect valuable knowledge and expertise from operations like running a full node, testing validator coordination, deploying stable Gno dApps, creating and testing tools that require persisted state and transaction history. During Test4, thousands of bug fixes and significant advancements were implemented, including improvements to multi-node testnets and essential updates to `gnodev`. **Here’s a breakdown of the most important key features that make Test4 unique:** - **Multi-node Testnet:** This was the first testnet that was capable of running on multiple nodes, making important steps towards decentralization - **Permanent and stable Testnet:** Unlike previous versions, Test4 was a permanent testnet, giving early adopters and builders a consistent environment to build and test dApps while also providing them with the most up-to-date stable environment - **GovDAO Proof-of-Concept:** Together with the launch of Test4, the first framework for decentralized governance was introduced, allowing selective contributors to begin participating in decision-making processes. Test4 provided critical insights into running a multinode network and facilitating on-chain governance. The result was a stable blockchain network with 7 validator nodes, as well as [5 governance proposals](https://test4.gno.land/r/gov/dao/v2), 3 of them executed successfully based on the two-thirds majority. Later in 2024, [Test5](https://test5.gno.land/) was released. Main key elements that Test5 enabled include: expanding the current validator set, which now consists to 17 validators, pushing additional GnoVM fixes, releasing GovDAO v2, and overall quality-of-life improvements for builders. View testnet’s current activity and deployed realms on [Gnoscan](https://gnoscan.io). The Gno Core Team also greatly focused on creating a stable experience on Gno: - Fixing many different bugs on the VM and making its behaviour more predictable and better documented. - Improving “quality of life” tools that show the power of developing on gno.land, like the [transaction indexer](https://github.com/gnolang/tx-indexer/) and `gnodev` - Improving performance in critical paths and making behaviors of different APIs consistent, and clearing out the standard libraries. - Improving the behavior of integration tools, like `gnoclient` and `gnokey`, as well as kick-starting development of a mobile `gnokey` application. **The road ahead starts with the preparation of the gno.land’s Beta Launch. Here is how the path forward looks like.** ## Beta Launch (UPCOMING) We’re excited to announce that as 2024 comes to a close, we are gearing up for **Beta Launch**, anticipated in early 2025. Here’s what you can expect at genesis: 1. Contributors who have built gno.land will form the initial Governance DAO ("GovDAO"), distributing membership into three tiers—T1 (highest), T2, and T3 (lowest)—based on the size and impact of their contributions as outlined in Jae Kwon's [GovDAO draft](https://gist.github.com/jaekwon/918ad325c4c8f7fb5d6e022e33cb7eb3). Membership is governed by age limits, contribution criteria, and a structured payment system tied to the GovDAOPayTreasury to ensure compensation directly aligns with each contributor's level of contribution. **The GovDAO proposal remains an initial draft subject to revisions before final implementation.** 2. gno.land will intentionally maintain a modest transaction processing speed at genesis; however, the network will enable early adopters to experience its features and begin accruing rewards based on their contributions to the project **While not immediately claimable, these rewards will become redeemable in future phases to recognize early participants for their contributions**. 3. gno.land will operate under a Constitution that establishes clear guidelines on the community's rights, liberties, obligations, governance, economics, and both current and future implementations of the gno.land chain. **The gno.land contributor community will participate and engage in this effort.** 4. The genesis token distribution of GNOT, gno.land’s native token, will primarily allocate the majority of the supply to the Cosmos Hub (ATOM holders) community, rewarding their alignment with gno.land’s mission. The remaining GNOT allocations will be used to support gno.land’s community pool, various Builders DAOs or builders communities, and the core team builders (through NewTendermint), which will play a crucial role in shaping the platform’s future growth and development. **The GNOT token will be distributed at launch but will initially be non-transferable.** 5. While the GNOT token will not be transferable, users of the network will be able to use it to pay for gas fees. Token holders will be able to view their balances, with expected support from Ledger, Adena, and,potentially, other community wallets. This will allow users to deploy and interact with realms on gno.land. **Please note that the current chain design does not involve any staking. Instead, the voting power is determined by a member’s reputation.** 6. Builders will have the opportunity to build and test dApps, thereby actively contributing to the platform’s growth. **Although the GNOT token is not going to be transferable, it will still be possible to mint, burn and transfer both *coins*** (a native kind of token, accessible through smart contracts using the banker module) **and tokens implemented in code**, i.e. *GRC20 tokens*, similar to their ERC counterparts. Builders should be aware that during gno.land’s Beta network state, the core team may, in exceptional cases, need to revert the chain state. Such instances might include: - **Identification of a GnoVM bug** that requires a rollback and replay of transactions. - **Detection of a functional issue within a realm,** where the fix is well-defined, and replaying transactions is required to maintain consistency. The Beta Launch will equip contributors with essential tools to build and experiment on gno.land. We have published a [Launch Milestone](https://github.com/gnolang/gno/milestone/7) to track progress and explore the specific initiatives we plan to address up until launch. **Key components of the network at Genesis include:** - **GnoVM** : For the Beta Launch, the GnoVM is anticipated to be in a relatively stable and nearly feature-complete state. Bugs are an expected part of this phase; caution is advised to navigate potential issues. - **Tendermint2**: Tendermint2 will mark a significant leap in consensus performance and scalability. Key improvements include faster block finality, more robust validator management, and greater resilience to node failures. - **GovDAO Formation:** gno.land’s decentralized governance system will be live at Genesis. Composed of the most active contributors, GovDAO will take on responsibility for governing gno.land on-chain, handling decisions like protocol upgrades, parameter changes, and other critical decisions to ensure the network's long-term sustainability and community alignment. - **Boards:** Boards will operate as a single realm where users can create and participate in forums and message boards, subject to board-specific permissions. Each board will be managed through its own administration DAO. **Key tools for builders available at the Beta Launch:** - **Core dev tools:** A fully-featured set of tools for local development of Gno dApps and libraries, including `gnokey`, a powerful CLI key management tool and client, `gnoweb`, a universal web frontend for gno.land, and `gnodev`, a local development solution stack offering a built-in gno.land node with a hot-reload feature for smart contracts. - [**Gno Playground**](https://play.gno.land/): A browser-based tool to write, test, run, deploy, and share Gno code, inspired by the Go playground. It offers a simple and interactive way to experiment with Gno without the need for a local development environment. - [**Gno Studio**](https://gno.studio/): A powerful unified development platform designed to drive dApp development on gno.land. This product suite will include a full-featured IDE, workspace management, production-grade capabilities, and integrated tools to support efficient development workflows. It will eventually feature an extensive marketplace for realm templates and ready-to-use solutions. Today, the beta version of Studio features a minimal version of the IDE via Gno Playground, along with Connect, an app designed for realm interaction. - **Gno.me:** Envisioned to be a dynamic ecosystem of realms serving as an educational and community hub to empower builders through learning, collaboration, and engagement. The initial release, which is estimated to be ready by the Beta Launch, will feature tutorials, a tooling section, and ecosystem updates, with plans to evolve into a vibrant space for community interaction and a comprehensive educational platform. - [**docs.gno.land**](https://docs.gno.land/): The official gno.land documentation, covering basic concepts, getting started tutorials, developer guides, references, and more. - [**gno/examples**](https://github.com/gnolang/gno/tree/master/examples): Ready-to-use example smart contracts and libraries written in Gno. - **Community Spaces:** Builders will have access to expanded tooling to build and deploy applications in [gnoverse](https://github.com/gnoverse), a community-led GitHub space, ensuring **gno.land** becomes a productive ground to encourage future innovation. ## Mainnet Launch (UPCOMING) While our Beta Launch will introduce the core features of the gno.land network, the **Mainnet Launch** will focus on expanding **gno.land**’s interoperability with other chains. By providing a fully-featured, interoperable blockchain, **gno.land** will allow builders to integrate their products and services with the gno.land network, therefore scaling the ecosystem. **Here are some key features of the Mainnet Launch:** - **Interoperability with IBC and ICS:** **gno.land** will integrate Inter-Blockchain Communication (IBC) and Interchain security (ICS), allowing seamless interaction between **gno.land** and other IBC and ICS compatible chains. During this milestone, modified versions of IBC and ICS will be integrated, versions that are fully compatible with existing Cosmos chains, called IBCx and ICSx. - **Gno SDK:** Builders will gain access to the Gno SDK, making the entire process of building and deploying dApps on the network much easier. - **Launchpad for dApps:** The release of a specific Launchpad for dApps will allow builders to quickly deploy and scale their applications on gno.land. - **Reward Distribution:** Contributors will be able to collect the rewards they have accumulated from different contributions until this phase of the network. - **Performance Enhancements:** The Mainnet Launch will also introduce significant performance upgrades, including sharding and increased TPS, to support more complex applications. - **Transfers enabled:** During this phase of the launch, GNOT tokens become transferable. This transition will mark a significant milestone, allowing users to engage in token transactions, interact with the network and its applications, and contribute to the broader economic activities within the gno.land ecosystem. - **Boards**: A full social interaction dApp will be available. Users will continue to create and participate in forums and message boards, with the added ability to build their own decentralized social media platforms using a customizable framework. Forkability and DAO-driven governance will enable scalable, user-driven communities. ## Call to Contribute gno.land puts at the center of its identity the contributors that are helping to create and shape the project. Contributing to gno.land’s development today means you have the opportunity to make a notable impact at such a critical stage in the project’s roadmap. For now, we are looking for the earliest adopters; those curious to explore a new way to build smart contracts and eager to be a part of the next generation of blockchain programming. Join us and [become a contributor today](https://gno.land/contribute)! ## Conclusion With more than three years in the making, gno.land is now closer than ever to launching. The **Beta Launch**, while representing an important step in gno.land’s journey, should be seen as only the beginning. Future milestones are envisioned to bring improved performance, interoperability with other blockchain networks through IBCx and ICSx, the ability for builders to integrate their products and services with gno.land, onboarding tools for different user segments, enhanced support for builders and much more. We will host a Q&A on [Discord](https://discord.com/invite/gnoland), Thursday, December 19th at 6:30 pm CET/ 9:30 am PST, for the community to join and learn more about gno.land and upcoming milestones. Please add questions ahead of time to this [form](https://docs.google.com/forms/d/1DN8YneJ2-qvzsdnGsk_ZVA4CnBthUop3tgwXCodlF3M/edit) so we can make sure to address them. , 2024-12-16T00:00:00Z, adrianakalpa,michelleellen,thehowl,salmad3,Kouteki,leohhhn, gnoland,gnovm,betalaunch,blockchain,golang)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "road-to-mainnet",
    "The Road to Mainnet & Beyond",
    "\n\n## Gno the Difference\n\ngno.land is evolving as a cutting-edge decentralized operating system, setting a\nnew standard for building and governing diverse applications. At its core, it \nprovides an open-source smart contract platform designed to address systemic \nchallenges in centralized systems—censorship, lack of user autonomy, misaligned\nincentives, and non-transparent operations.\n\nThe true strength of gno.land lies in its broad applicability across domains. \nIt provides builders with the means to create secure, scalable, and trustless \napplications that redefine the possibilities of decentralized systems.\n\ngno.land has been advancing through a phased development process aimed at \ndelivering critical functionality at each stage. The network architecture \nensures that every milestone reinforces the foundation of a reliable and scalable\ndecentralized ecosystem that prioritizes transparency, forkability, and governance.\n\nLet’s take a closer look at the progress, key milestones, and what’s in store \nfor the future of gno.land.\n\n## Milestones Overview\n\nThe priority is to establish a secure and stable network. Once operational and \nthoroughly tested, the infrastructure for rewards distribution and development \nwill activate, accelerating the growth of Gno's ecosystem for both builders and \nusers.\n\nHere’s a look back at what we’ve accomplished so far.\n\n### 2021: The Beginning\n\ngno.land’s journey began in 2021, carried out by Jae Kwon, who laid the \ngroundwork to develop Gno's most revolutionary component, the Gno Virtual Machine (GnoVM), and bootstrap a simple\nTendermint node capable of executing Gno code.\n\nThe GnoVM is a virtual machine capable \nof deterministically running a subset of Go code, where smart contracts are\ncomposed together by simply “importing” them, much like working with any standard\nGo package. The initial work was focused on creating the first iteration of the \nVM, aiming to implement a complete feature set of Gno while accounting for\nvarious edge cases.\n\n[By the end of 2021](https://github.com/gnolang/gno/tree/fa412d4bb38f6d6485d9b61784b34e5d5ca64554),\nrudimentary tooling was available for experimenting with the VM, an extensive\nsuite of tests was in place, and an initial version of Gno’s state persistence \nwas implemented. The first commits for the \n[`boards` realm](https://github.com/gnolang/gno/tree/master/examples/gno.land/r/demo/boards)\nwere introduced, and a functional chain executable was developed, enabling the \naddition of new packages and the ability to call functions within them.\n\n### 2022: The First Testnets\n\nThe full scope of the project only became evident in 2022, following the \nimplementation of the initial functionality. During this period,\nthe Gno project experienced a significant increase in contributors, \nresulting in a surge of new features, bug fixes, and developments\nacross multiple areas beyond just the VM. The Gno core team \ngrew to three full-time engineers, with additional hiring efforts underway.\n\n- Three testnets were launched (test1, test2 and test3), each with significant \nimprovements in usability and ease of access for newcomers, and more example realms.\n- The `boards` realm was improved, with the introduction of new features including\nediting posts, moderation, and links to easily construct replies to posts using\n`gnokey`. Additionally, thanks to the `users` realm, Gno users were able to register\na username which then showed up on the `boards` realm (among others).\n- The Onbloc team began the development of the first gno.land wallet,\n[Adena](https://www.adena.app/), marking the first steps to creating web dApps\nusing gno.land.\n- The RPC layer got many improvements, including `qeval` and other features to \ninspect Gno code.\n- Additional examples were added on creating GRC20 tokens, as well as string \nformatting utilities.\n- The first [workshops](https://github.com/gnolang/workshops) and presentations\nwere posted on how to program in Gno.\n- On the Gno side, the VM was consistently improved to fix more bugs and \nincrease its safety for use on-chain.\n\n[End-of-year status](https://github.com/gnolang/gno/tree/cabc1ad9a36319f68fed2bc888018bfcbff228a7)\n\n### 2023: The Growth\n\nIn 2023, the Gno team grew to twelve engineers, many of whom continue to form the \nGno core development team today. Around the same time, gno.land began seeing its\nfirst real-world applications, putting its capabilities to the test.\n\nAdditionally, new developer tools were introduced to enhance the Gno development\nexperience. These include utilities such as `gno doc`, `gno repl`, `gno lint`, \nalongside `gnodev`, which is the foundational tool for building realms on gno.land\ntoday.\n\n- [GnoChess](https://github.com/gnoverse/gnochess) was an early experiment to \nprogram complex Gno smart contracts, capable of running the backend of a chess \nserver. The Gopher community had the opportunity to experience GnoChess for the \nfirst time at GopherCon 2023, where gno.land highlighted Gno’s unique features \nand its potential to transform the decentralized application landscape.\n- [Test3](https://github.com/gnolang/gno/releases/tag/chain%2Ftest3.0), launched\nat the end of 2022 and continued in 2023, enabled builders to experiment with\nrunning full nodes and developing indexers. It provided\na persistent history of state for everyone.\n- Many API decisions, like `std.PrevRealm()`, were discussed and implemented.\n- The [License](https://github.com/gnolang/gno?tab=License-1-ov-file) for gno.land\nwas established as the *Gno Network Public License*, a fork of the GNU Afferro \nGeneral Public License.\n- [Berty](https://berty.tech/) and [Teritori](https://teritori.com/) became core \necosystem builders, creating integrated applications, communication tools, and \nsocial platforms.\n- The first official documentation was released, allowing more users to be \nonboarded onto gno.land without having to learn directly from the source.\n- The Beta version of [Gno Playground](https://play.gno.land/) launched, providing\na space to experiment Gno programs and realms directly from the web.\n\n[End-of-year status](https://github.com/gnolang/gno/tree/c3a4993335f8881989eb49e4efea6a3c1310061d)\n\n### 2024: The Refinement\n\n2024 prioritized the creation of a stable\nchain to launch as soon as possible. Throughout the year, the team focused on \ndelivering great stability on gno.land and being able to fix the most critical \nissues which stand in the way of launching the first stable network.\n\nThe launch of Test4 on July 15, 2024, was a major milestone in gno.land’s journey.\nOne of the main objectives of this testnet was to collect valuable knowledge and \nexpertise from operations like running a full node, testing validator coordination,\ndeploying stable Gno dApps, creating and testing tools that require persisted \nstate and transaction history.\n\nDuring Test4, thousands of bug fixes and significant advancements were implemented,\nincluding improvements to multi-node testnets and essential updates to `gnodev`.\n\n**Here’s a breakdown of the most important key features that make Test4 unique:**\n\n- **Multi-node Testnet:** This was the first testnet that was capable of running\non multiple nodes, making important steps towards decentralization\n- **Permanent and stable Testnet:** Unlike previous versions, Test4 was a \npermanent testnet, giving early adopters and builders a consistent environment \nto build and test dApps while also providing them with the most up-to-date stable \nenvironment\n- **GovDAO Proof-of-Concept:** Together with the launch of Test4, the first \nframework for decentralized governance was introduced, allowing selective \ncontributors to begin participating in decision-making processes.\n\nTest4 provided critical insights into running a multinode network and facilitating\non-chain governance. The result was a stable blockchain network with 7 validator \nnodes, as well as [5 governance proposals](https://test4.gno.land/r/gov/dao/v2),\n3 of them executed successfully based on the two-thirds majority.\n\nLater in 2024, [Test5](https://test5.gno.land/) was released. Main key elements \nthat Test5 enabled include: expanding the current validator set, which now consists\nto 17 validators, pushing additional GnoVM fixes, releasing GovDAO v2, and overall\nquality-of-life improvements for builders. View testnet’s current activity and \ndeployed realms on [Gnoscan](https://gnoscan.io).\n\nThe Gno Core Team also greatly focused on creating a stable experience on Gno:\n\n- Fixing many different bugs on the VM and making its behaviour more predictable \nand better documented.\n- Improving “quality of life” tools that show the power of developing on gno.land,\nlike the [transaction indexer](https://github.com/gnolang/tx-indexer/) and `gnodev`\n- Improving performance in critical paths and making behaviors of different APIs\nconsistent, and clearing out the standard libraries.\n- Improving the behavior of integration tools, like `gnoclient` and `gnokey`, as \nwell as kick-starting development of a mobile `gnokey` application.\n\n**The road ahead starts with the preparation of the gno.land’s Beta Launch. \nHere is how the path forward looks like.**\n\n## Beta Launch (UPCOMING)\n\nWe’re excited to announce that as 2024 comes to a close, we are gearing up for \n**Beta Launch**, anticipated in early 2025. Here’s what you can expect \nat genesis:\n\n1. Contributors who have built gno.land will form the initial Governance DAO (\"GovDAO\"),\ndistributing membership into three tiers—T1 (highest), T2, and T3 (lowest)—based \non the size and impact of their contributions as outlined in Jae Kwon's\n[GovDAO draft](https://gist.github.com/jaekwon/918ad325c4c8f7fb5d6e022e33cb7eb3).\nMembership is governed by age limits, contribution criteria, and a structured \npayment system tied to the GovDAOPayTreasury to ensure compensation directly aligns\nwith each contributor's level of contribution. **The GovDAO proposal remains an \ninitial draft subject to revisions before final implementation.**\n2. gno.land will intentionally maintain a modest transaction processing speed at\ngenesis; however, the network will enable early adopters to experience its\nfeatures and begin accruing rewards based on their contributions to the project\n**While not immediately claimable, these rewards will become redeemable in future\nphases to recognize early participants for their contributions**.\n3. gno.land will operate under a Constitution that establishes clear guidelines\non the community's rights, liberties, obligations, governance, economics, and \nboth current and future implementations of the gno.land chain. **The gno.land \ncontributor community will participate and engage in this effort.**\n4. The genesis token distribution of GNOT, gno.land’s native token, will primarily\nallocate the majority of the supply to the Cosmos Hub (ATOM holders) community, \nrewarding their alignment with gno.land’s mission. The remaining GNOT allocations\nwill be used to support gno.land’s community pool, various Builders DAOs or \nbuilders communities, and the core team builders (through NewTendermint), which \nwill play a crucial role in shaping the platform’s future growth and development.\n**The GNOT token will be distributed at launch but will initially be non-transferable.**\n5. While the GNOT token will not be transferable, users of the network will be \nable to use it to pay for gas fees. Token holders will be able to view their\nbalances, with expected support from Ledger, Adena, and,potentially, other \ncommunity wallets. This will allow users to deploy and interact with realms on\ngno.land. **Please note that the current chain design does not involve any staking.\nInstead, the voting power is determined by a member’s reputation.**\n6. Builders will have the opportunity to build and test dApps, thereby actively\ncontributing to the platform’s growth. **Although the GNOT token is not going to\nbe transferable, it will still be possible to mint, burn and transfer both \n*coins*** (a native kind of token, accessible through smart contracts using the \nbanker module) **and tokens implemented in code**, i.e. *GRC20 tokens*, similar to \ntheir ERC counterparts.\n\nBuilders should be aware that during gno.land’s Beta network state, the core team\nmay, in exceptional cases, need to revert the chain state. Such instances might\ninclude:\n\n- **Identification of a GnoVM bug** that requires a rollback and replay of transactions.\n- **Detection of a functional issue within a realm,** where the fix is well-defined,\nand replaying transactions is required to maintain consistency.\n\nThe Beta Launch will equip contributors with essential tools to build and \nexperiment on gno.land. We have published a \n[Launch Milestone](https://github.com/gnolang/gno/milestone/7) to track progress\nand explore the specific initiatives we plan to address up until launch.\n\n**Key components of the network at Genesis include:**\n\n- **GnoVM** : For the Beta Launch, the GnoVM is anticipated to be in a relatively\nstable and nearly feature-complete state. Bugs are an expected part of this \nphase; caution is advised to navigate potential issues.\n- **Tendermint2**: Tendermint2 will mark a significant leap in consensus \nperformance and scalability. Key improvements include faster block finality, \nmore robust validator management, and greater resilience to node failures.\n- **GovDAO Formation:** gno.land’s decentralized governance system will \nbe live at Genesis. Composed of the most active contributors, GovDAO will take \non responsibility for governing gno.land on-chain, handling decisions like \nprotocol upgrades, parameter changes, and other critical decisions to ensure \nthe network's long-term sustainability and community alignment.\n- **Boards:** Boards will operate as a single realm where users can create and \nparticipate in forums and message boards, subject to board-specific permissions.\nEach board will be managed through its own administration DAO.\n\n\n**Key tools for builders available at the Beta Launch:**\n\n- **Core dev tools:** A fully-featured set of tools for local development of Gno \ndApps and libraries, including `gnokey`, a powerful CLI key management tool and \nclient, `gnoweb`, a universal web frontend for gno.land, and `gnodev`, a local \ndevelopment solution stack offering a built-in gno.land node with a hot-reload \nfeature for smart contracts.\n- [**Gno Playground**](https://play.gno.land/): A browser-based tool to write,\ntest, run, deploy, and share Gno code, inspired by the Go playground. It offers\na simple and interactive way to experiment with Gno without the need for a local \ndevelopment environment.\n- [**Gno Studio**](https://gno.studio/): A powerful unified development platform \ndesigned to drive dApp development on gno.land. This product suite will include \na full-featured IDE, workspace management, production-grade capabilities, and \nintegrated tools to support efficient development workflows. It will eventually \nfeature an extensive marketplace for realm templates and ready-to-use solutions.\nToday, the beta version of Studio features a minimal version of the IDE via Gno\nPlayground, along with Connect, an app designed for realm interaction.\n- **Gno.me:** Envisioned to be a dynamic ecosystem of realms serving as an \neducational and community hub to empower builders through learning, collaboration,\nand engagement. The initial release, which is estimated to be ready by the Beta \nLaunch, will feature tutorials, a tooling section, and ecosystem updates, with\nplans to evolve into a vibrant space for community interaction and a comprehensive\neducational platform.\n- [**docs.gno.land**](https://docs.gno.land/): The official gno.land documentation,\ncovering basic concepts, getting started tutorials, developer guides, references, and more.\n- [**gno/examples**](https://github.com/gnolang/gno/tree/master/examples): \nReady-to-use example smart contracts and libraries written in Gno.\n- **Community Spaces:** Builders will have access to expanded tooling to build\nand deploy applications in [gnoverse](https://github.com/gnoverse), a community-led\nGitHub space, ensuring **gno.land** becomes a productive ground to encourage\nfuture innovation.\n\n## Mainnet Launch (UPCOMING)\n\nWhile our Beta Launch will introduce the core features of the gno.land network,\nthe **Mainnet Launch** will focus on expanding **gno.land**’s interoperability \nwith other chains. By providing a fully-featured, interoperable blockchain, \n**gno.land** will allow builders to integrate their products and services with \nthe gno.land network, therefore scaling the ecosystem.\n\n**Here are some key features of the Mainnet Launch:**\n\n- **Interoperability with IBC and ICS:** **gno.land** will integrate Inter-Blockchain\nCommunication (IBC) and Interchain security (ICS), allowing seamless interaction \nbetween **gno.land** and other IBC and ICS compatible chains. During this \nmilestone, modified versions of IBC and ICS will be integrated, versions that \nare fully compatible with existing Cosmos chains, called IBCx and ICSx.\n- **Gno SDK:** Builders will gain access to the Gno SDK, making the entire process\nof building and deploying dApps on the network much easier.\n- **Launchpad for dApps:** The release of a specific Launchpad for dApps will \nallow builders to quickly deploy and scale their applications on gno.land.\n- **Reward Distribution:** Contributors will be able to collect the rewards they\nhave accumulated from different contributions until this phase of the network.\n- **Performance Enhancements:** The Mainnet Launch will also introduce significant\nperformance upgrades, including sharding and increased TPS, to support more \ncomplex applications.\n- **Transfers enabled:** During this phase of the launch, GNOT tokens become \ntransferable. This transition will mark a significant milestone, allowing users \nto engage in token transactions, interact with the network and its applications, \nand contribute to the broader economic activities within the gno.land ecosystem.\n- **Boards**: A full social interaction dApp will be available. Users will continue\nto create and participate in forums and message boards, with the added ability\nto build their own decentralized social media platforms using a customizable \nframework. Forkability and DAO-driven governance will enable scalable, user-driven\ncommunities.\n\n## Call to Contribute\n\ngno.land puts at the center of its identity the contributors that are helping to\ncreate and shape the project. Contributing to gno.land’s development today means \nyou have the opportunity to make a notable impact at such a critical stage in the\nproject’s roadmap.\n\nFor now, we are looking for the earliest adopters; those curious to explore a \nnew way to build smart contracts and eager to be a part of the next generation of\nblockchain programming. Join us and [become a contributor today](https://gno.land/contribute)!\n\n## Conclusion\n\nWith more than three years in the making, gno.land is now closer than ever to\nlaunching. The **Beta Launch**, while representing an important step in gno.land’s\njourney, should be seen as only the beginning.\n\nFuture milestones are envisioned to bring improved performance, \ninteroperability with other blockchain networks through IBCx and ICSx, the \nability for builders to integrate their products and services with gno.land, \nonboarding tools for different user segments, enhanced support for builders and \nmuch more.\n\nWe will host a Q&A on [Discord](https://discord.com/invite/gnoland), Thursday, \nDecember 19th at 6:30 pm CET/ 9:30 am PST, for the community to join and learn more about \ngno.land and upcoming milestones. Please add questions ahead of time to this \n[form](https://docs.google.com/forms/d/1DN8YneJ2-qvzsdnGsk_ZVA4CnBthUop3tgwXCodlF3M/edit) \nso we can make sure to address them.\n",
    "2024-12-16T00:00:00Z",
    "adrianakalpa,michelleellen,thehowl,salmad3,Kouteki,leohhhn",
    "gnoland,gnovm,betalaunch,blockchain,golang"
  ],
  "max_deposit": ""
}
#45 vm/execgno.land/r/gnoland/blog.ModAddPost(why-gno, Why do we need Gno and gno.land?, gno.land is a decentralized operating system to create decentralized platforms. It is powered by Gno, a deterministic implementation of the Go programming language, as a powerful tool to build composable packages and smart contracts on a blockchain. Although gno.land can support a variety of applications and implementations, among our core use-cases, we intend gno.land to be used as a base for human-centric and transparent social platforms. In this blog post, we outline the problems that gno.land addresses, and what solutions we are building to solve them. While this summary is non-exhaustive and reflects the evolving focus of the project, it offers an overview of our key objectives and ongoing initiatives. ## The Social Problem > Achieving Unstoppable Truth. We need a social platform that can be a common ground for a plurality of contrasting voices, while being transparent in its moderation and governance, with built-in features to create schisms when that is not upheld. - The current centralized social networking platforms are plagued with problems for users, content creators, and businesses: - Users are often constrained by the centralized ownership and control of platforms. Due to the network effect, it's very hard to move away from an established platform, or to create a "schism", granting users the possibility of true choice and requiring the platform to align with the interests of the users. - Content creators frequently need to adhere to unwritten "community guidelines" to preserve monetization or, worse, to avoid shadowbans that hide their content from their followers. Shadowbans are often attributed to opaque “algorithms”, making it difficult to challenge decisions or prove instances of discrimination, bias, or censorship. - Centralized, un-forkable platforms can have agendas, and their agendas are controlled by powerful entities. Users have little choice to "take their business elsewhere", as for many users the platforms themselves become an important medium for their business, or simply a way to connect to the people they care about. As it's been seen time and time again, control can be instrumentalized to track and profile people, sell them products they don't need or misinform them to vote for candidates that don't align with their best interests. - The data of the users is a commercial tool which can be used for advertising and improving massive AI models. In turn, the AI revolution promises to make the internet an unlivable hellscape of bots talking to each other who spread political propaganda and regurgitate incorrect information. Platforms must be resilient to bots and spam, fostering authentic communication and genuine content production among real users. - What gno.land wants to achieve: - Forkability. Blockchains are distributed databases, which themselves can be constructed as Merkle trees - allowing to check out different points in time, and to cheaply allow forking of content, similarly to how git allows branching. - gno.land, like all blockchains, is forkable, but even within gno.land we can make all states, including those of social platforms, forkable, too. - We see forking as a feature that should not only be a possibility for the most expert of users, but a common solution for everyone; it should be allowed even on the contracts themselves. - It's not an option of last resort; forking in software is something that happens continuously. The tools we use, such as git, allow us to build forks that feed back work into the upstream. Similarly, constructing common knowledge and information databases can also happen in a model that accepts schisms and different ideas on how to achieve the objective. - Decentralization of hosting and governance, but centralization of the communication platform. Thanks to the nature of blockchains, we can create social platforms which are hosted by many different validators, all with the same exact state. Governance is decoupled from validation processes, allowing it to be guided by distinct principles and incentives. - With the Fediverse, we avoid sharing single points of failure and centralization of governance into a single entity (person or company). - As opposed to the Fediverse, gno.land platforms can be more reliable and be centralized in terms of discovering and interacting with other users. - Funding by the users. Prioritize user-aligned platforms over advertiser-centric models. - This happens practically by ensuring the transaction fees, or revenue models built on top of them, can adequately fund both the hosting and the governance/moderation. - Freedom of speech. Ensure a baseline of moderation to address harmful and illegal content, while enabling smaller communities to govern content management according to their preferences, also using algorithms and moderating systems. - The chain should incentivize thoughtful content creation, moderation, and active participation in the community; but not block out content, so that the platform can be truly neutral. - There can and should be algorithms that show users interesting content while blocking out what they don't want to see. But users need to be able to choose between different algorithms and understand what each one is targeting; rather than solely signing up for the one that maximises "engagement" or "screen-time". - Why gno.land can achieve it: - By solving the incentive problem, we ensure that the chain can continue to work with a specific vision while being hard to subvert. The governance aims to expand the blockchain's potential and usages in real applications, rather than the capital of its investors. - By solving the technical problem, we can actually create a platform with the properties described above. - gno.land pays attention to creating scalable data structures that can host the content of the platform and enable free and universal access to it. ## The Incentive Problem > Establishing Anti-Subversion Governance. Most blockchain incentive schemes focus primarily on rewarding validators for securing consensus and maintaining network integrity. In order to build larger systems which are not just financially focused, we need to incentivize non-validators who nonetheless contribute to the advancement of the project, and make sure the chain governance is philosophically aligned, rather than just looking out for individual gains. - Exclusively rewarding a chain's validators is a good way to secure the chain; but not a good basis to create larger ecosystems outside of financial transactions. - The Proof of Stake model has been successful in securing blockchains; but it has not been successful in creating incentives for using and advancing a blockchain, only for providing validation services. - Additionally, as governance is most often tied to the stake of each user, control of the chain can easily be subverted by powerful and rich actors who want to acquire sizable portions of the blockchain. - Similarly, Proof of Work puts the incentives in the hands of those who have the resources and the means to have cost-effective machines, incentivizing those who have the most resources or those who have good, insider access to primary resources (chips and electricity). - Blockchains allow us to create effective economic models for building the internet which are fair to the participants involved in making it. - We should pay creators for making great content. - We should pay moderators who keep communities focused and true to their spirit. - We should pay those contributing to collective silos of knowledge like wikis, and verifying its information and accuracy. - We should pay software developers, as they create the applications and infrastructure. - We should pay auditors, who verify the security of smart contracts and packages. - Finally, we should pay validators, as they physically host the blockchain and make it possible. - The internet can no longer afford to only pay the companies who are making content hosting possible; we need to recognize the hours of work that go into collecting, creating, organizing and distributing information. - The governance of the chain cannot be tied to how much capital each participant has. - It should instead work to make its government aligned on common goals and a general philosophy of advancing the state of the project. - Its government has to be directly responsible for hosting the chain, ensuring that all the way down to the validator control is never given up to a non-aligned "third party". - The chain can and will have economic activity and present itself as a good place to build businesses; but the focus of the chain will go towards its applications rather than merely "decentralizing finance". - The chain should still welcome "investors"; but not as a main focus. Investors can shine in creating interactions with other ecosystems, and creating ways to exchange tokens, making it easier to buy GNOT and increasing demand. But the true value of the platform is created by those who develop and create on top of it. - Contribution-driven governance. - The core of the chain should consist of its most experienced members who have shaped it into what it is. - The governance also picks the validators of the chain, who will be chosen on alignment and technical capability rather than the capital they can stake. - Governance mechanisms are structured to reward contributors based on their verified contributions, with an emphasis on maintaining alignment with the network’s foundational principles. ## The Technical Problem > Creating Timeless Code. The technical innovation brought by Gno makes solving the above problems possible. - We're at the Assembly age of web3. - Developing software is costly: - It's expensive to build basic things, both in terms of expertise in development, but also auditing and finding people that truly understand and can take advantage of the technology. - Many ecosystems employ domain-specific languages or restrictions on top of others (ie. WASM), which still requires specific training. - The development which is possible is very basic, similar to "interconnected spreadsheets". - Monolithic blockchains create limitations which de-facto limit the growth of the chain, only allowing for the entire system a very limited amount of computation in each block. - What Solidity misses: - Solidity is a Domain Specific Language, further increasing the cost of adoption by new users, especially those who are still curious and uncommitted to working on a blockchain. - Financially focused. Solidity contains many native constructs pertaining specifically to smart contracts; like the global `ether`, the type `address`, the globals `msg`, `tx` and `block`. On the other hand, its design lacks simple ways to represent and handle floats, dates and times, and misses other general-purpose features programmers expect from most programming languages. - Hidden control flow: [fallback functions](https://docs.soliditylang.org/en/latest/contracts.html#fallback-function) create hidden control flow when sending tokens, causing problems like [re-entrancy attacks](https://docs.soliditylang.org/en/latest/security-considerations.html#reentrancy). - How Gno solves it: - Composability: - Interfaces and closures allow to plug different code and data structures into each other. - Realms can be composed by re-using functionality of other realms or existing functionality published as packages. - IBC enables the blockchains using Gno to communicate with one another seamlessly, and build on the work happening elsewhere. - Low cost of adoption: Gno is a subset of Go with some different standard libraries. Learning Gno has a lower adoption barrier, as it is based on the widely-used Go programming language, familiar to approximately [two million developers worldwide](https://research.swtch.com/gophercount). - Low cost of building: quicker and simpler to write dApps (simple language, good already-audited p/ libraries); quicker and cheaper to audit them (all the source code is to be published on-chain). - App-focused: we are interested in social platforms, video game servers, and ways to share knowledge in a decentralized manner. We see dApps as systems that can make the web decentralized again and create a truly open internet for the time to come. DeFi is great - and an obvious use case for blockchains - Gno expands on what DeFi can do and enable many more apps, and ways to communicate with others. - Clear control flow: similarly to Go, there are no implicit getters, setters, and no method overloading; clear is better than clever. - Open source by default: all code on gno.land is published directly as source code, and published under the terms of the [Gno Network General Public License](https://gno.land/license) (on top of any license that the author may decide to use). The on-chain code can be perpetually inspected, modified and improved; becoming what we call "timeless code". - What does Gno enable? - Re-usable "core" contracts, like user management, groups, permissions. - Open Web: all data is public and clonable by others; as well as the tools to organize it and present it. - Coordination (civil services without government backing), Wikipedia, platforms that cannot be subverted or sold. - gno.land can be a GitHub for a wider ecosystem. - Our hope is to show with gno.land a much better way to develop decentralized applications. - Through IBC+ICS, other blockchains can look to connect with the gno.land chain and re-use its foundational code; as well as interact with its contracts. - gno.land, in the philosophy of [Cosmos](https://cosmos.network/), is not a monolithic, one-size-fits-all blockchain. The implementation of the programming language itself is not meant to be definitive, but rather to be a reference for creating other better, faster implementations that suit other use cases. Learn more about the vision and mission driving gno.land's development by watching our [video](https://youtu.be/M920PO3yrHk). , 2025-01-08T00:00:00Z, thehowl,moul, gnoland,gno)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "why-gno",
    "Why do we need Gno and gno.land?",
    "\n\ngno.land is a decentralized operating system to create decentralized platforms.\nIt is powered by Gno, a deterministic implementation of the Go programming\nlanguage, as a powerful tool to build composable packages and smart contracts on\na blockchain. Although gno.land can support a variety of applications and\nimplementations, among our core use-cases, we intend gno.land to be used as a\nbase for human-centric and transparent social platforms. In this blog post, we\noutline the problems that gno.land addresses, and what solutions we are building\nto solve them. While this summary is non-exhaustive and reflects the evolving\nfocus of the project, it offers an overview of our key objectives and ongoing\ninitiatives.\n\n## The Social Problem\n\n> Achieving Unstoppable Truth.\n\nWe need a social platform that can be a common ground for a plurality of contrasting voices, while being transparent in its moderation and governance, with built-in features to create schisms when that is not upheld.\n\n- The current centralized social networking platforms are plagued with problems for users, content creators, and businesses:\n\t- Users are often constrained by the centralized ownership and control of platforms. Due to the network effect, it's very hard to move away from an established platform, or to create a \"schism\", granting users the possibility of true choice and requiring the platform to align with the interests of the users.\n\t- Content creators frequently need to adhere to unwritten \"community guidelines\" to preserve monetization or, worse, to avoid shadowbans that hide their content from their followers. Shadowbans are often attributed to opaque “algorithms”, making it difficult to challenge decisions or prove instances of discrimination, bias, or censorship.\n\t- Centralized, un-forkable platforms can have agendas, and their agendas are controlled by powerful entities. Users have little choice to \"take their business elsewhere\", as for many users the platforms themselves become an important medium for their business, or simply a way to connect to the people they care about. As it's been seen time and time again, control can be instrumentalized to track and profile people, sell them products they don't need or misinform them to vote for candidates that don't align with their best interests.\n\t- The data of the users is a commercial tool which can be used for advertising and improving massive AI models. In turn, the AI revolution promises to make the internet an unlivable hellscape of bots talking to each other who spread political propaganda and regurgitate incorrect information. Platforms must be resilient to bots and spam, fostering authentic communication and genuine content production among real users.\n- What gno.land wants to achieve:\n\t- Forkability. Blockchains are distributed databases, which themselves can be constructed as Merkle trees - allowing to check out different points in time, and to cheaply allow forking of content, similarly to how git allows branching.\n\t\t- gno.land, like all blockchains, is forkable, but even within gno.land we can make all states, including those of social platforms, forkable, too.\n\t\t- We see forking as a feature that should not only be a possibility for the most expert of users, but a common solution for everyone; it should be allowed even on the contracts themselves.\n\t\t- It's not an option of last resort; forking in software is something that happens continuously. The tools we use, such as git, allow us to build forks that feed back work into the upstream. Similarly, constructing common knowledge and information databases can also happen in a model that accepts schisms and different ideas on how to achieve the objective.\n\t- Decentralization of hosting and governance, but centralization of the communication platform. Thanks to the nature of blockchains, we can create social platforms which are hosted by many different validators, all with the same exact state. Governance is decoupled from validation processes, allowing it to be guided by distinct principles and incentives.\n\t\t- With the Fediverse, we avoid sharing single points of failure and centralization of governance into a single entity (person or company).\n\t\t- As opposed to the Fediverse, gno.land platforms can be more reliable and be centralized in terms of discovering and interacting with other users.\n\t- Funding by the users. Prioritize user-aligned platforms over advertiser-centric models.\n\t\t- This happens practically by ensuring the transaction fees, or revenue models built on top of them, can adequately fund both the hosting and the governance/moderation.\n\t- Freedom of speech. Ensure a baseline of moderation to address harmful and illegal content, while enabling smaller communities to govern content management according to their preferences, also using algorithms and moderating systems.\n\t\t- The chain should incentivize thoughtful content creation, moderation, and active participation in the community; but not block out content, so that the platform can be truly neutral.\n\t\t\t- There can and should be algorithms that show users interesting content while blocking out what they don't want to see. But users need to be able to choose between different algorithms and understand what each one is targeting; rather than solely signing up for the one that maximises \"engagement\" or \"screen-time\".\n- Why gno.land can achieve it:\n\t- By solving the incentive problem, we ensure that the chain can continue to work with a specific vision while being hard to subvert. The governance aims to expand the blockchain's potential and usages in real applications, rather than the capital of its investors.\n\t- By solving the technical problem, we can actually create a platform with the properties described above.\n\t- gno.land pays attention to creating scalable data structures that can host the content of the platform and enable free and universal access to it.\n\n\n## The Incentive Problem\n\n> Establishing Anti-Subversion Governance.\n\nMost blockchain incentive schemes focus primarily on rewarding validators for securing consensus and maintaining network integrity. In order to build larger systems which are not just financially focused, we need to incentivize non-validators who nonetheless contribute to the advancement of the project, and make sure the chain governance is philosophically aligned, rather than just looking out for individual gains.\n\n- Exclusively rewarding a chain's validators is a good way to secure the chain; but not a good basis to create larger ecosystems outside of financial transactions.\n\t- The Proof of Stake model has been successful in securing blockchains; but it has not been successful in creating incentives for using and advancing a blockchain, only for providing validation services.\n\t- Additionally, as governance is most often tied to the stake of each user, control of the chain can easily be subverted by powerful and rich actors who want to acquire sizable portions of the blockchain.\n\t- Similarly, Proof of Work puts the incentives in the hands of those who have the resources and the means to have cost-effective machines, incentivizing those who have the most resources or those who have good, insider access to primary resources (chips and electricity).\n- Blockchains allow us to create effective economic models for building the internet which are fair to the participants involved in making it.\n\t- We should pay creators for making great content.\n\t- We should pay moderators who keep communities focused and true to their spirit.\n\t- We should pay those contributing to collective silos of knowledge like wikis, and verifying its information and accuracy.\n\t- We should pay software developers, as they create the applications and infrastructure.\n\t- We should pay auditors, who verify the security of smart contracts and packages.\n\t- Finally, we should pay validators, as they physically host the blockchain and make it possible.\n\t- The internet can no longer afford to only pay the companies who are making content hosting possible; we need to recognize the hours of work that go into collecting, creating, organizing and distributing information.\n- The governance of the chain cannot be tied to how much capital each participant has.\n\t- It should instead work to make its government aligned on common goals and a general philosophy of advancing the state of the project.\n\t- Its government has to be directly responsible for hosting the chain, ensuring that all the way down to the validator control is never given up to a non-aligned \"third party\".\n- The chain can and will have economic activity and present itself as a good place to build businesses; but the focus of the chain will go towards its applications rather than merely \"decentralizing finance\".\n- The chain should still welcome \"investors\"; but not as a main focus. Investors can shine in creating interactions with other ecosystems, and creating ways to exchange tokens, making it easier to buy GNOT and increasing demand. But the true value of the platform is created by those who develop and create on top of it.\n- Contribution-driven governance.\n\t- The core of the chain should consist of its most experienced members who have shaped it into what it is.\n\t- The governance also picks the validators of the chain, who will be chosen on alignment and technical capability rather than the capital they can stake.\n\t- Governance mechanisms are structured to reward contributors based on their verified contributions, with an emphasis on maintaining alignment with the network’s foundational principles.\n\n## The Technical Problem\n\n> Creating Timeless Code.\n\nThe technical innovation brought by Gno makes solving the above problems possible.\n\n- We're at the Assembly age of web3.\n\t- Developing software is costly:\n\t\t- It's expensive to build basic things, both in terms of expertise in development, but also auditing and finding people that truly understand and can take advantage of the technology.\n\t\t- Many ecosystems employ domain-specific languages or restrictions on top of others (ie. WASM), which still requires specific training.\n\t- The development which is possible is very basic, similar to \"interconnected spreadsheets\".\n\t- Monolithic blockchains create limitations which de-facto limit the growth of the chain, only allowing for the entire system a very limited amount of computation in each block.\n- What Solidity misses:\n\t- Solidity is a Domain Specific Language, further increasing the cost of adoption by new users, especially those who are still curious and uncommitted to working on a blockchain.\n\t- Financially focused. Solidity contains many native constructs pertaining specifically to smart contracts; like the global `ether`, the type `address`, the globals `msg`, `tx` and `block`. On the other hand, its design lacks simple ways to represent and handle floats, dates and times, and misses other general-purpose features programmers expect from most programming languages.\n\t- Hidden control flow: [fallback functions](https://docs.soliditylang.org/en/latest/contracts.html#fallback-function) create hidden control flow when sending tokens, causing problems like [re-entrancy attacks](https://docs.soliditylang.org/en/latest/security-considerations.html#reentrancy).\n- How Gno solves it:\n\t- Composability:\n\t\t- Interfaces and closures allow to plug different code and data structures into each other.\n\t\t- Realms can be composed by re-using functionality of other realms or existing functionality published as packages.\n\t\t- IBC enables the blockchains using Gno to communicate with one another seamlessly, and build on the work happening elsewhere.\n\t- Low cost of adoption: Gno is a subset of Go with some different standard libraries. Learning Gno has a lower adoption barrier, as it is based on the widely-used Go programming language, familiar to approximately [two million developers worldwide](https://research.swtch.com/gophercount).\n\t- Low cost of building: quicker and simpler to write dApps (simple language, good already-audited p/ libraries); quicker and cheaper to audit them (all the source code is to be published on-chain).\n\t- App-focused: we are interested in social platforms, video game servers, and ways to share knowledge in a decentralized manner. We see dApps as systems that can make the web decentralized again and create a truly open internet for the time to come. DeFi is great - and an obvious use case for blockchains - Gno expands on what DeFi can do and enable many more apps, and ways to communicate with others.\n\t- Clear control flow: similarly to Go, there are no implicit getters, setters, and no method overloading; clear is better than clever.\n\t- Open source by default: all code on gno.land is published directly as source code, and published under the terms of the [Gno Network General Public License](https://gno.land/license) (on top of any license that the author may decide to use). The on-chain code can be perpetually inspected, modified and improved; becoming what we call \"timeless code\".\n- What does Gno enable?\n\t- Re-usable \"core\" contracts, like user management, groups, permissions.\n\t- Open Web: all data is public and clonable by others; as well as the tools to organize it and present it.\n\t- Coordination (civil services without government backing), Wikipedia, platforms that cannot be subverted or sold.\n- gno.land can be a GitHub for a wider ecosystem.\n\t- Our hope is to show with gno.land a much better way to develop decentralized applications.\n\t- Through IBC+ICS, other blockchains can look to connect with the gno.land chain and re-use its foundational code; as well as interact with its contracts.\n\t- gno.land, in the philosophy of [Cosmos](https://cosmos.network/), is not a monolithic, one-size-fits-all blockchain. The implementation of the programming language itself is not meant to be definitive, but rather to be a reference for creating other better, faster implementations that suit other use cases.\n\nLearn more about the vision and mission driving gno.land's development by watching our [video](https://youtu.be/M920PO3yrHk).\n",
    "2025-01-08T00:00:00Z",
    "thehowl,moul",
    "gnoland,gno"
  ],
  "max_deposit": ""
}
#46 vm/execgno.land/r/gnoland/blog.ModAddPost(gnops, Introducing gnops.io: The DevOps Hub for gno.land, We’ve launched the first phase of [gnops.io](http://gnops.io/), a dedicated DevOps resource hub for gno.land developers. The intent behind gnops is to provide valuable resources written by us and the broader community to empower a strong and security-minded DevOps culture and team within the ecosystem. By building a comprehensive knowledge base, the content is designed to support both newcomers and experienced developers in managing secure and resilient DevOps environments. ### What is gnops.io? gnops.io is a collection of effective essentials (Effective gnops), explainers, and best practices designed to help blockchain developers establish and maintain efficient DevOps workflows in gno.land. The key focus is on security, resilience, and automation, ensuring that teams can build and deploy with confidence. Over time, gnops.io will evolve into an ecosystem of tooling for automating, monitoring, and securing gno.land chains. ### Community-Driven Knowledge Base A core aspect of gnops is the gnops [GitHub](https://github.com/gnoverse/gnops) repository, which serves as a community-led knowledge base. gno.land’s technology and development is highly dynamic, and there is no one-size-fits-all approach to setting up DevOps environments. We’re creating a collaborative and iterative learning environment where developers share insights, refine best practices, and contribute to the evolution of DevOps in gno.land. ### Why DevOps Matters in gno.land DevOps practices enable software development (dev) and operations (ops) teams to accelerate deployments through collaboration, feedback, and iteration. By integrating these principles into blockchain development, gnops.io and its support channels will help teams optimize their workflows, mitigate security risks, and ensure high availability for their applications. We see the Gno DevOps family, the originators of gnops, as a community that learns together, supports each other, and cultivates a security-first culture in blockchain development. Whether you are running a complex chain on gno.land or operating as a validator, gnops.io provides guidance and tools to onboard developers quickly. ### Contributions & Future Content As gnops.io evolves, we encourage the DevOps community to contribute content that benefits developers across all skill levels. Some suggested areas of contribution include: - Automation scripts for managing gno.land nodes and chains - Guides for CI/CD best practices in gno.land development - Security audits and incident response plans for blockchain operations - Scaling and performance tuning strategies for validators and infrastructure providers - Case studies and war stories about DevOps challenges in blockchain If you’re building gno.land DevOps tools, dashboards and material for the community with the relevant documentation, add them to gnops GitHub repository. In the next phase of gnops.io, we’ll be rewarding high quality documentation, content and tooling submissions that advance the overall security, infrastructure, and operations for developing on gno.land. ### Join the Gno DevOps Community gnops.io is a community-driven initiative aimed at building the future of DevOps in gno.land. Your contributions today help establish the standards and best practices that new builders will follow. Visit [gnops.io](https://gnops.io/) today and become part of the Gno DevOps community! , 2025-01-30T00:00:00Z, michelleellen, gnoland,gno,devops)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "gnops",
    "Introducing gnops.io: The DevOps Hub for gno.land",
    "\n\nWe’ve launched the first phase of [gnops.io](http://gnops.io/), a dedicated DevOps resource hub for gno.land developers. The intent behind gnops is to provide valuable resources written by us and the broader community to empower a strong and security-minded DevOps culture and team within the ecosystem. By building a comprehensive knowledge base, the content is designed to support both newcomers and experienced developers in managing secure and resilient DevOps environments.\n\n### What is gnops.io?\n\ngnops.io is a collection of effective essentials (Effective gnops), explainers, and best practices designed to help blockchain developers establish and maintain efficient DevOps workflows in gno.land. The key focus is on security, resilience, and automation, ensuring that teams can build and deploy with confidence. Over time, gnops.io will evolve into an ecosystem of tooling for automating, monitoring, and securing gno.land chains.\n\n### Community-Driven Knowledge Base\n\nA core aspect of gnops is the gnops [GitHub](https://github.com/gnoverse/gnops) repository, which serves as a community-led knowledge base. gno.land’s technology and development is highly dynamic, and there is no one-size-fits-all approach to setting up DevOps environments. We’re creating a collaborative and iterative learning environment where developers share insights, refine best practices, and contribute to the evolution of DevOps in gno.land.\n\n### Why DevOps Matters in gno.land\n\nDevOps practices enable software development (dev) and operations (ops) teams to accelerate deployments through collaboration, feedback, and iteration. By integrating these principles into blockchain development, gnops.io and its support channels will help teams optimize their workflows, mitigate security risks, and ensure high availability for their applications.\n\nWe see the Gno DevOps family, the originators of gnops, as a community that learns together, supports each other, and cultivates a security-first culture in blockchain development. Whether you are running a complex chain on gno.land or operating as a validator, gnops.io provides guidance and tools to onboard developers quickly.\n\n### Contributions & Future Content\n\nAs gnops.io evolves, we encourage the DevOps community to contribute content that benefits developers across all skill levels. Some suggested areas of contribution include:\n\n- Automation scripts for managing gno.land nodes and chains\n- Guides for CI/CD best practices in gno.land development\n- Security audits and incident response plans for blockchain operations\n- Scaling and performance tuning strategies for validators and infrastructure providers\n- Case studies and war stories about DevOps challenges in blockchain\n\nIf you’re building gno.land DevOps tools, dashboards and material for the community with the relevant documentation, add them to gnops GitHub repository. In the next phase of gnops.io, we’ll be rewarding high quality documentation, content and tooling submissions that advance the overall security, infrastructure, and operations for developing on gno.land. \n\n### Join the Gno DevOps Community\n\ngnops.io is a community-driven initiative aimed at building the future of DevOps in gno.land. Your contributions today help establish the standards and best practices that new builders will follow. Visit [gnops.io](https://gnops.io/) today and become part of the Gno DevOps community!\n",
    "2025-01-30T00:00:00Z",
    "michelleellen",
    "gnoland,gno,devops"
  ],
  "max_deposit": ""
}
#47 vm/execgno.land/r/gnoland/blog.ModAddPost(fosdem-2025, FOSDEM 2025: Gnomes Spotted, [![moul](https://gnolang.github.io/blog/2025-02-06_fosdem-2025/src/thumbs/moul.jpg)](https://gnolang.github.io/blog/2025-02-06_fosdem-2025/src/moul.jpg) This past weekend, members of the gno.land team traveled to Brussels for FOSDEM 2025, one of the world’s largest and most influential open-source gatherings. This year marked FOSDEM’s 25th anniversary, drawing over 5,000 developers, engineers, and enthusiasts from across the globe. Attending FOSDEM was inspiring, a powerful reminder of what can be achieved when people collaborate in a free, transparent, and open way. The depth of knowledge shared, the engaging discussions, and the sheer diversity of topics, from robotics and simulations to the Go ecosystem, highlight the incredible breadth of open-source innovation, and what’s possible when people build together. It went beyond code, FOSDEM was a first-hand experience to witness the global community driven by a shared ethos. ## FOSDEM meets Gno This year was particularly special for us, as we introduced gno.land to the FOSDEM community for the first time. During the Go lightning talks, Manfred Touron distilled the essence of Gno in just a few minutes, explaining why Gno, the Gno paradigm, and how Go developers can easily start building with it. And simply put, what we’re building... ``` we're building a user-owned internet where governance is fair, development is open, and innovation is rewarded. ``` See the full presentation [here](https://gnolang.github.io/workshops/presentations/2025-02-01--fosdem--manfred/presentation.slide.html). ## Bridging Open Source and Web3 Web3 often meets skepticism in traditional open-source circles, but gno.land’s 100% open-source engineering bridges that gap. Throughout the weekend, we saw direct connections between our work and key topics at FOSDEM, from governance models and Byzantine Fault Tolerance to consensus algorithms and the challenges of sustaining open-source projects. These are issues that extend beyond web3 and resonate with the broader open-source community. A special thanks to all the organizers, presenters, and volunteers that made FOSDEM 2025 possible, and the opportunity to access information freely. See you next year! , 2025-02-06T00:00:00Z, michelleellen, gnoland,gno,fosdem,open-source,oss)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "fosdem-2025",
    "FOSDEM 2025: Gnomes Spotted",
    "\n\n[![moul](https://gnolang.github.io/blog/2025-02-06_fosdem-2025/src/thumbs/moul.jpg)](https://gnolang.github.io/blog/2025-02-06_fosdem-2025/src/moul.jpg)\n\nThis past weekend, members of the gno.land team traveled to Brussels for FOSDEM\n2025, one of the world’s largest and most influential open-source gatherings. \nThis year marked FOSDEM’s 25th anniversary, drawing over 5,000 developers, \nengineers, and enthusiasts from across the globe.\n\nAttending FOSDEM was inspiring, a powerful reminder of what can be achieved when \npeople collaborate in a free, transparent, and open way. The depth of knowledge \nshared, the engaging discussions, and the sheer diversity of topics, from robotics\nand simulations to the Go ecosystem, highlight the incredible breadth of \nopen-source innovation, and what’s possible when people build together. It went\nbeyond code, FOSDEM was a first-hand experience to witness the global community\ndriven by a shared ethos.\n\n## FOSDEM meets Gno\n\nThis year was particularly special for us, as we introduced gno.land to the \nFOSDEM community for the first time. During the Go lightning talks, Manfred \nTouron distilled the essence of Gno in just a few minutes, explaining why Gno,\nthe Gno paradigm, and how Go developers can easily start building with it. And \nsimply put, what we’re building...\n\n```\nwe're building a user-owned internet\nwhere governance is fair,\ndevelopment is open,\nand innovation is rewarded.\n```\n\nSee the full presentation [here](https://gnolang.github.io/workshops/presentations/2025-02-01--fosdem--manfred/presentation.slide.html).\n\n## Bridging Open Source and Web3\n\nWeb3 often meets skepticism in traditional open-source circles, but gno.land’s \n100% open-source engineering bridges that gap. Throughout the weekend, we saw\ndirect connections between our work and key topics at FOSDEM, from governance \nmodels and Byzantine Fault Tolerance to consensus algorithms and the challenges \nof sustaining open-source projects. These are issues that extend beyond web3\nand resonate with the broader open-source community.\n\nA special thanks to all the organizers, presenters, and volunteers that made \nFOSDEM 2025 possible, and the opportunity to access information freely. See \nyou next year!\n",
    "2025-02-06T00:00:00Z",
    "michelleellen",
    "gnoland,gno,fosdem,open-source,oss"
  ],
  "max_deposit": ""
}
#48 vm/execgno.land/r/gnoland/blog.ModAddPost(monthly-dev-14, The More You Gno 14: Mainnet Beta Checkpoint, We're nearing the final stages of the gno.land mainnet beta, so let's go over what's left. We've also launched a DevOps hub and are preparing for the Test6 launch. It's going to be a busy quarter! ## Mainnet Beta Progress There are several key components that we need to complete before we launch the mainnet beta: * [Constitution](https://github.com/gnolang/genesis) is being written, and we're looking for feedback. If you want to be part of the history, open an issue or a PR, leave comments and present your case. * [Realm ownership spec](https://github.com/gnolang/gno/issues/2743) is a critical piece that will dictate how realms interact with one another. * [GovDAO v3](https://github.com/gnolang/gno/issues/3078) is a unique realm tasked with governing the chain; it consists of contributors organized into multiple tiers. * [Token lock & params keeper](https://github.com/gnolang/gno/pull/3176) allows us to lock token transfers, except for paying gas fees to add a package or call a contract. The restriction will eventually be unlocked through a GovDAO vote. * [Garbage collector](https://github.com/gnolang/gno/issues/266) is capable of synchronous garbage collection, greatly reducing memory allocation and costs. * Tokenomics work will finalize the token allocation, including the airdrop distribution. Once the work is done, you will be able to check whether you're eligible for the airdrop. ## Introducing the gno.land DevOps Hub [gnops.io](https://gnops.io/) is a dedicated resource for developers to build secure, resilient workflows and designed to support newcomers & experts alike in managing DevOps for gno.land. It is a collection of effective essentials, explainers & best practices for DevOps in gno.land. Security, resilience & automation are key. Over time, it’ll expand into a repository of tools for monitoring, automation & security. Its goal is to accelerate blockchain development by improving collaboration & security. gnops.io helps optimize workflows, mitigate risks & support high availability. Whether you run a chain or validate, it’s your go-to DevOps resource. Want to contribute? gnops.io is community-driven! Share automation scripts, CI/CD guides, security audits & more. Future updates will reward top contributions. Check out the [Gnops GitHub repo](https://github.com/gnoverse/gnops) for more information. ## Onbloc Spotlight Onbloc is a Seoul-based company that's an active contributor on the gno.land project. They're building GnoSwap, Adena Wallet and GnoScan, as well as contributing to the core. That's why we filmed our last visit to the Onbloc office, and showcased these amazing people. [Inside Onbloc - YouTube](https://www.youtube.com/watch?v=7umxHYDJ4Bk) ## Events and Meetups ### FOSDEM 2025 We traveled to Brussels for FOSDEM 2025, one of the world’s largest and most influential open-source gatherings. This year marked FOSDEM’s 25th anniversary, drawing over 5,000 developers, engineers, and enthusiasts from across the globe. Attending FOSDEM was inspiring, and a powerful reminder of what can be achieved when people collaborate in a free, transparent, and open way. The depth of knowledge shared, the engaging discussions, and the sheer diversity of topics, from robotics and simulations to the Go ecosystem, highlight the incredible breadth of open-source innovation, and what’s possible when people build together. It went beyond code, FOSDEM was a first-hand experience to witness the global community driven by a shared ethos. Check out the recap blog post [here](/r/gnoland/blog:p/fosdem-2025). ### Epitech Career Day Last year, we had a strong Epitech University SCP cohort that we onboarded to gno.land, and as a follow up were invited to their annual student career day. This week, we hosted a talk titled "[Building dApps in gno.land](https://github.com/gnolang/workshops/blob/main/presentations/2025-02-05--epitech--leon/building-dapps.pdf)" to an audience of 40 students., 2025-02-12T00:00:00Z, Kouteki, gnoland,ecosystem,updates,gnovm)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "monthly-dev-14",
    "The More You Gno 14: Mainnet Beta Checkpoint",
    "\n\nWe're nearing the final stages of the gno.land mainnet beta, so let's go over what's left. We've also launched a DevOps hub and are preparing for the Test6 launch. It's going to be a busy quarter!\n\n## Mainnet Beta Progress\n\nThere are several key components that we need to complete before we launch the mainnet beta:\n* [Constitution](https://github.com/gnolang/genesis) is being written, and we're looking for feedback. If you want to be part of the history, open an issue or a PR, leave comments and present your case.\n* [Realm ownership spec](https://github.com/gnolang/gno/issues/2743) is a critical piece that will dictate how realms interact with one another.\n* [GovDAO v3](https://github.com/gnolang/gno/issues/3078) is a unique realm tasked with governing the chain; it consists of contributors organized into multiple tiers.\n* [Token lock & params keeper](https://github.com/gnolang/gno/pull/3176) allows us to lock token transfers, except for paying gas fees to add a package or call a contract. The restriction will eventually be unlocked through a GovDAO vote.\n* [Garbage collector](https://github.com/gnolang/gno/issues/266) is capable of synchronous garbage collection, greatly reducing memory allocation and costs.\n* Tokenomics work will finalize the token allocation, including the airdrop distribution. Once the work is done, you will be able to check whether you're eligible for the airdrop.\n\n## Introducing the gno.land DevOps Hub\n\n[gnops.io](https://gnops.io/) is a dedicated resource for developers to build secure, resilient workflows and designed to support newcomers & experts alike in managing DevOps for gno.land.\n\nIt is a collection of effective essentials, explainers & best practices for DevOps in gno.land. Security, resilience & automation are key. Over time, it’ll expand into a repository of tools for monitoring, automation & security. Its goal is to accelerate blockchain development by improving collaboration & security. gnops.io helps optimize workflows, mitigate risks & support high availability. Whether you run a chain or validate, it’s your go-to DevOps resource.\n\nWant to contribute? gnops.io is community-driven! Share automation scripts, CI/CD guides, security audits & more. Future updates will reward top contributions. Check out the [Gnops GitHub repo](https://github.com/gnoverse/gnops) for more information.\n\n## Onbloc Spotlight\n\nOnbloc is a Seoul-based company that's an active contributor on the gno.land project. They're building GnoSwap, Adena Wallet and GnoScan, as well as contributing to the core. That's why we filmed our last visit to the Onbloc office, and showcased these amazing people.\n\n[Inside Onbloc - YouTube](https://www.youtube.com/watch?v=7umxHYDJ4Bk)\n\n## Events and Meetups\n\n### FOSDEM 2025\n\nWe traveled to Brussels for FOSDEM 2025, one of the world’s largest and most influential open-source gatherings. This year marked FOSDEM’s 25th anniversary, drawing over 5,000 developers, engineers, and enthusiasts from across the globe.\n\nAttending FOSDEM was inspiring, and a powerful reminder of what can be achieved when people collaborate in a free, transparent, and open way. The depth of knowledge shared, the engaging discussions, and the sheer diversity of topics, from robotics and simulations to the Go ecosystem, highlight the incredible breadth of open-source innovation, and what’s possible when people build together. It went beyond code, FOSDEM was a first-hand experience to witness the global community driven by a shared ethos.\nCheck out the recap blog post [here](/r/gnoland/blog:p/fosdem-2025).\n\n### Epitech Career Day\n\nLast year, we had a strong Epitech University SCP cohort that we onboarded to gno.land, and as a follow up were invited to their annual student career day. This week, we hosted a talk titled \"[Building dApps in gno.land](https://github.com/gnolang/workshops/blob/main/presentations/2025-02-05--epitech--leon/building-dapps.pdf)\" to an audience of 40 students.",
    "2025-02-12T00:00:00Z",
    "Kouteki",
    "gnoland,ecosystem,updates,gnovm"
  ],
  "max_deposit": ""
}
#49 vm/execgno.land/r/gnoland/blog.ModAddPost(user-registry, Introducing the New gno.land User Registry, The user registration system has been around since the early days of gno.land, serving as one of the foundational components of the chain. It allows users to register custom names linked to their Gno addresses and claim matching namespaces for their Gno package deployments. While the username registration system existed as far back as April 2022 ([`r/demo/users`](https://github.com/gnolang/gno/commit/914f267dd31c0382a472b5fcf98fcfc53129a32d)) the namespace permission deployment system went into effect with Test4 for the first time in July 2024. With changes to the Gno language, chain infrastructure, as well as the addition of governance and other new functionality, the user registry was due for a major refactor. This new version introduces a set of realms that integrate directly with the core of the gno.land blockchain, providing similar but more flexible functionality and upgradeability through GovDAO proposals. ## Register your gno.land username now! We invite you to register your gno.land username with the new User Registry on the Portal Loop network. Here's how to register in a few steps: - Create a Gno address with `gnokey` or a third-party wallet such as Adena - Fetch Portal Loop GNOT from the [Faucet Hub](https://faucet.gno.land) - Visit the [User Registry realm](/r/gnoland/users/v1) - If you're using Adena, you can use [GnoStudio Connect](https://gno.studio/connect/view/gno.land/r/gnoland/users/v1?network=portal-loop#Register) to send a transaction via the web. - Under advanced options, make sure to set the "send" amount to `1000000ugnot` to pay for the registration fee. - If you're using `gnokey`, click on "Register" to get a pre-built `gnokey` command - Make sure to also set `-send "1000000ugnot"` to pay for the registration fee - Enter your desired username which follows the naming rules outlined in the User Registry realm. - Call the function and see your name show up in the "Latest registrations" section! > Make sure to specify the exact amount of GNOT for the registration fee (1 GNOT). ## System Architecture For developers that are looking to use the new User Registry system in their realms, below is an outline of the main components of the system including a practical example found under `r/docs`. The new user registration system, paired with the namespace system, enables custom usernames and namespace permission checking upon package deployment. It consists of three key realms: - [`r/sys/users`](/r/sys/users) - Core logic of the system, handling storage and resolution. - [`r/gnolang/users/v1`](/r/gnoland/users/v1) - The user-facing application where users register names. - [`r/sys/names`](/r/sys/names) - The deployment permission system for namespaces. Let's dive into what each part of the system does. ### r/sys/users This is a system realm that defines the core logic of the user registry. It is not upgradeable and serves as the foundational layer that includes key data structures, storage variables, and functions for managing usernames. Only whitelisted realms (approved via GovDAO proposals) can write to this storage, ensuring governance oversight over any entity modifying the registry. The `UserData` structure defines how user information is stored: ```go type UserData struct { addr std.Address // User's blockchain address username string // Latest registered username deleted bool // Flag for soft deletion } ``` This realm also provides user-facing functions for resolving names and addresses. #### Resolving Usernames & Addresses To enable applications and smart contracts to look up user information, `r/sys/users` provides functions to resolve both usernames and addresses: ```go // ResolveName returns the latest UserData of a specific user by name or alias func ResolveName(name string) (data *UserData, isCurrent bool) {...} // ResolveAddress returns the latest UserData of a specific user by address func ResolveAddress(addr std.Address) *UserData {...} ``` See how to use these functions in a practical example [here](/r/docs/users), and check out the source code [here](/r/sys/users$source&file=users.gno). ### r/gnoland/users/v1 The first iteration of the gno.land user registry allows users to register a name following a specific pattern - starts with three letters, ends with three numbers, and is not longer than 20 characters. The registration costs 1 GNOT and the fee is modifiable via a GovDAO proposal. This is the user-facing realm where users interact with the registry. It provides an interface for registering usernames while enforcing certain constraints: - Usernames must start with three letters. - They must end with three numbers. - The total length must not exceed 20 characters. - Only `_` is allowed as a special character. - The registration fee is 1 GNOT (modifiable via GovDAO proposals). This realm communicates with `r/sys/users` to ensure new registrations follow the system-wide rules and that only valid usernames are stored. Future versions (v2, v3, etc.) will follow different patterns, such as vanity usernames, username auctions, and more can be introduced without modifying the core storage logic. Find all releases for `r/gnoland/users` [here](/r/gnoland/users). ### r/sys/names The deployment permission system ensures that only the rightful owner of a namespace can deploy Gno packages under it. This check is performed at the GnoVM Keeper level, which communicates with `r/sys/names` realm before allowing a deployment to a certain package patch. This functionality is enabled in the genesis block, with an ownership-dropping mechanism ensuring no single entity retains control over the system. Check out the source code [here](/r/sys/names$source&file=verifier.gno)., 2025-03-12T00:00:00Z, leohhhn, gnoland,usernames,namespaces,dapps)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "user-registry",
    "Introducing the New gno.land User Registry",
    "\n\nThe user registration system has been around since the early days of gno.land, \nserving as one of the foundational components of the chain. It allows users to \nregister custom names linked to their Gno addresses and claim matching namespaces \nfor their Gno package deployments.\n\nWhile the username registration system existed as far back as April 2022 ([`r/demo/users`](https://github.com/gnolang/gno/commit/914f267dd31c0382a472b5fcf98fcfc53129a32d))\nthe namespace permission deployment system went into effect with Test4 for the \nfirst time in July 2024.\n\nWith changes to the Gno language, chain infrastructure, as well as the addition\nof governance and other new functionality, the user registry was due for a major\nrefactor. This new version introduces a set of realms that integrate directly \nwith the core of the gno.land blockchain, providing similar but more flexible\nfunctionality and upgradeability through GovDAO proposals.\n\n## Register your gno.land username now!\n\nWe invite you to register your gno.land username with the new User Registry on\nthe Portal Loop network.\n\nHere's how to register in a few steps:\n- Create a Gno address with `gnokey` or a third-party wallet such as Adena\n- Fetch Portal Loop GNOT from the [Faucet Hub](https://faucet.gno.land)\n- Visit the [User Registry realm](/r/gnoland/users/v1) \n- If you're using Adena, you can use [GnoStudio Connect](https://gno.studio/connect/view/gno.land/r/gnoland/users/v1?network=portal-loop#Register)\nto send a transaction via the web. \n  - Under advanced options, make sure to set the \"send\" amount to `1000000ugnot` \n  to pay for the registration fee.\n- If you're using `gnokey`, click on \"Register\" to get a pre-built `gnokey` command\n  - Make sure to also set `-send \"1000000ugnot\"` to pay for the registration fee\n- Enter your desired username which follows the naming rules outlined in the \nUser Registry realm.\n- Call the function and see your name show up in the \"Latest registrations\" section!\n\n> Make sure to specify the exact amount of GNOT for the registration fee (1 GNOT).\n\n## System Architecture\n\nFor developers that are looking to use the new User Registry system in their \nrealms, below is an outline of the main components of the system including a \npractical example found under `r/docs`. \n\nThe new user registration system, paired with the namespace system, enables\ncustom usernames and namespace permission checking upon package deployment. It\nconsists of three key realms:\n\n- [`r/sys/users`](/r/sys/users) - Core logic of the system, handling storage and resolution.\n- [`r/gnolang/users/v1`](/r/gnoland/users/v1) - The user-facing application where users register names.\n- [`r/sys/names`](/r/sys/names) - The deployment permission system for namespaces.\n\nLet's dive into what each part of the system does.\n\n### r/sys/users\n\nThis is a system realm that defines the core logic of the user registry. It is\nnot upgradeable and serves as the foundational layer that includes key data \nstructures, storage variables, and functions for managing usernames.\n\nOnly whitelisted realms (approved via GovDAO proposals) can write to this storage,\nensuring governance oversight over any entity modifying the registry.\n\nThe `UserData` structure defines how user information is stored:\n\n```go\ntype UserData struct {\n    addr     std.Address  // User's blockchain address\n    username string       // Latest registered username\n    deleted  bool         // Flag for soft deletion\n}\n```\n\nThis realm also provides user-facing functions for resolving names and addresses.\n\n#### Resolving Usernames & Addresses\n\nTo enable applications and smart contracts to look up user information, \n`r/sys/users` provides functions to resolve both usernames and addresses:\n\n```go\n// ResolveName returns the latest UserData of a specific user by name or alias\nfunc ResolveName(name string) (data *UserData, isCurrent bool) {...}\n\n// ResolveAddress returns the latest UserData of a specific user by address\nfunc ResolveAddress(addr std.Address) *UserData {...}\n```\n\nSee how to use these functions in a practical example [here](/r/docs/users), and \ncheck out the source code [here](/r/sys/users$source&file=users.gno).\n\n### r/gnoland/users/v1\n\nThe first iteration of the gno.land user registry allows users to register a\nname following a specific pattern - starts with three letters, ends with three\nnumbers, and is not longer than 20 characters. The registration costs 1 GNOT\nand the fee is modifiable via a GovDAO proposal.\n\nThis is the user-facing realm where users interact with the registry. It \nprovides an interface for registering usernames while enforcing certain constraints:\n\n- Usernames must start with three letters.\n- They must end with three numbers.\n- The total length must not exceed 20 characters.\n- Only `_` is allowed as a special character.\n- The registration fee is 1 GNOT (modifiable via GovDAO proposals).\n\nThis realm communicates with `r/sys/users` to ensure new registrations follow the \nsystem-wide rules and that only valid usernames are stored. Future versions \n(v2, v3, etc.) will follow different patterns, such as vanity usernames, username\nauctions, and more can be introduced without modifying the core storage logic.\n\nFind all releases for `r/gnoland/users` [here](/r/gnoland/users).\n\n### r/sys/names\n\nThe deployment permission system ensures that only the rightful owner of a \nnamespace can deploy Gno packages under it.\n\nThis check is performed at the GnoVM Keeper level, which communicates with \n`r/sys/names` realm before allowing a deployment to a certain package patch.\nThis functionality is enabled in the genesis block, with an ownership-dropping \nmechanism ensuring no single entity retains control over the system.\n\nCheck out the source code [here](/r/sys/names$source&file=verifier.gno).",
    "2025-03-12T00:00:00Z",
    "leohhhn",
    "gnoland,usernames,namespaces,dapps"
  ],
  "max_deposit": ""
}
#50 vm/execgno.land/r/gnoland/blog.ModAddPost(monthly-dev-15, The More You Gno 15: Getting Ready for the Mainnet Beta, As we gear up for the launch of the Mainnet Beta, this edition of _The More You Gno_ takes a look at the progress we’ve made, what’s currently in the works, and what’s coming next. From critical governance updates to improvements in storage and gas mechanisms, we’re laying the groundwork for a stable and feature-rich mainnet. Let’s dive in. ## Mainnet Beta Progress There are several key components that we need to complete before we launch the mainnet beta. Done: * [Token lock & params keeper](https://github.com/gnolang/gno/pull/3176) allows us to lock token transfers, except for paying gas fees to add a package or call a contract. The restriction will eventually be unlocked through a GovDAO vote. * [GovDAO v3](https://github.com/gnolang/gno/issues/3078): new iteration of the governance realms that introduces the multi-tiered membership. In review: * [Garbage collector](https://github.com/gnolang/gno/pull/3789): capable of synchronous garbage collection, greatly reducing memory allocation and costs. * [Realm ownership spec](https://github.com/gnolang/gno/pull/4028): a critical piece that will dictate how realms interact with one another. * [Gas storage fee mechanism](https://github.com/gnolang/gno/issues/3418): a system to manage storage fees for transactions by locking GNOT proportional to additional storage usage. This ensures fair accounting for storage costs and provides incentives for efficient storage use. * [Balance checker and genesis distribution](https://github.com/gnolang/gno/pull/3899): a realm and interface enabling you to quickly check any account balance. * [Drip faucet](https://github.com/gnolang/gno/pull/3808): since tokens initially can't be purchased or traded, the faucet will enable you to cover gas fees while using gno.land. * [Gas fee distribution](https://github.com/gnolang/gno/pull/3956): the cornerstone of the transaction fee logic, routing fees to the collector addresses. In development: * [std refactor](https://github.com/gnolang/gno/issues/3874): the division into packages should help to reduce the scope of each package, helping us create modular packages. ## Test6 Preview Test6 has been delayed because we wanted to launch it with both the token lock and GovDAO v3 components, so we could test them together and figure out how they could break. The new testnet will also introduce some new components, like the username registry and the valoper (validator operator) registry; prospective validators will be able to register a public profile before getting nominated to become a network validator. We aim to launch Test6 next week, so stay tuned! ## Events and Meetups ### Introduction to gno.land @ Belgrade If you're in the Belgrade area, join us for an [in-person workshop](https://lu.ma/gyesps56) on April 10, where we’ll explore Gno, and give you a solid understanding of gno.land and how it differs from other smart contract platforms., 2025-04-10T00:00:00Z, Kouteki, gnoland,ecosystem,updates,gnovm)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "monthly-dev-15",
    "The More You Gno 15: Getting Ready for the Mainnet Beta",
    "\n\nAs we gear up for the launch of the Mainnet Beta, this edition of _The More You Gno_ takes a look at the progress we’ve made, what’s currently in the works, and what’s coming next. From critical governance updates to improvements in storage and gas mechanisms, we’re laying the groundwork for a stable and feature-rich mainnet. Let’s dive in.\n\n## Mainnet Beta Progress\n\nThere are several key components that we need to complete before we launch the mainnet beta.\n\nDone:\n* [Token lock & params keeper](https://github.com/gnolang/gno/pull/3176) allows us to lock token transfers, except for paying gas fees to add a package or call a contract. The restriction will eventually be unlocked through a GovDAO vote.\n* [GovDAO v3](https://github.com/gnolang/gno/issues/3078): new iteration of the governance realms that introduces the multi-tiered membership.\n\nIn review:\n* [Garbage collector](https://github.com/gnolang/gno/pull/3789): capable of synchronous garbage collection, greatly reducing memory allocation and costs.\n* [Realm ownership spec](https://github.com/gnolang/gno/pull/4028): a critical piece that will dictate how realms interact with one another.\n* [Gas storage fee mechanism](https://github.com/gnolang/gno/issues/3418): a system to manage storage fees for transactions by locking GNOT proportional to additional storage usage. This ensures fair accounting for storage costs and provides incentives for efficient storage use.\n* [Balance checker and genesis distribution](https://github.com/gnolang/gno/pull/3899): a realm and interface enabling you to quickly check any account balance.\n* [Drip faucet](https://github.com/gnolang/gno/pull/3808): since tokens initially can't be purchased or traded, the faucet will enable you to cover gas fees while using gno.land.\n* [Gas fee distribution](https://github.com/gnolang/gno/pull/3956): the cornerstone of the transaction fee logic, routing fees to the collector addresses.\n\nIn development:\n* [std refactor](https://github.com/gnolang/gno/issues/3874): the division into packages should help to reduce the scope of each package, helping us create modular packages.\n\n## Test6 Preview\n\nTest6 has been delayed because we wanted to launch it with both the token lock and GovDAO v3 components, so we could test them together and figure out how they could break. The new testnet will also introduce some new components, like the username registry and the valoper (validator operator) registry; prospective validators will be able to register a public profile before getting nominated to become a network validator.\n\nWe aim to launch Test6 next week, so stay tuned!\n\n## Events and Meetups\n\n### Introduction to gno.land @ Belgrade\n\nIf you're in the Belgrade area, join us for an [in-person workshop](https://lu.ma/gyesps56) on April 10, where we’ll explore Gno, and give you a solid understanding of gno.land and how it differs from other smart contract platforms.",
    "2025-04-10T00:00:00Z",
    "Kouteki",
    "gnoland,ecosystem,updates,gnovm"
  ],
  "max_deposit": ""
}
#51 vm/execgno.land/r/gnoland/blog.ModAddPost(gnoland-the-first-logoverse, Gno.land - The First Logoverse, or Alternate Reality of Logical Objects, Tendermint changed the way blockchain developers think about blockchain consensus algorithms. Gno.land will change the way developers think about programming. Gno.land represents a paradigm shift in multi-user programming that no other solution offers. It is not just a smart contract platform and blockchain; it is the world's first viable language-based multi-user operating system. Its ultimate goal is to host the world's knowledge base for the new millennium. ## Why Gno.land? Compare publishing a blog site in Gno.land to all prior smart contract systems. ```go // Realm: gno.land/r/me/myblog package gnoblog import ( "std" "gno.land/p/demo/blog" ) var b = &blog.Blog{ Title: "gno.land's blog", Prefix: "/r/gnoland/blog:", } func AddComment(postSlug, comment string) { crossing() assertIsCommenter() assertNotInPause() caller := std.OriginCaller() err := b.GetPost(postSlug).AddComment(caller, comment) checkErr(err) } func Render(path string) string { return b.Render(path) } ``` You can see the Gno source code that rendered this webpage by clicking on "\<\/\>Source" on the top right of the webpage. Q: Why is everything else so complicated? A: Strangely difficult to answer, but ultimately because our languages, compilers, interpreters, and programming paradigms are still evolving. ## Brief Evolution of Language Written human language has only been around for a mere 6000 years, a blip in our evolutionary history. Like living species, our language and writing have evolved alongside us and within us. Adam was not the first Homo sapiens on earth, but he may have been the first with written language, and thereby a new kind of man. Programming languages likewise have been evolving rapidly, but only for a handful of decades; it was in the 1970s when Alan Kay developed Smalltalk, the first object-oriented programming language. In the 1990’s Brendan Eich of Netscape invented JavaScript which forever transformed the World Wide Web; Sun Microsystem made Java, and industries prospered greatly by these and similar language technologies. ## Gno vs Previous Our languages, compilers & interpreters, and programs are today: - Nondeterministic - randomness is the norm in concurrent programming, but even Go randomizes map iteration. - Disk Bound - programs need to be designed to save to disk —> SQL solutions; NOT native language - Dependent - running programs are owned by an owner; dependent on individuals, not self-sustaining - Ephemeral - running programs are expected to fail; no guarantee of presence. - Single User Realm - import of internal libraries are native, but interactions with external programs are NOT native; generally no `import “gno.land/r/external/realm”`, but leaky abstractions synthesized ie GRPC Gno, GnoVM, and Gno.land is in contrast: - Deterministic - gno routines not yet supported, but even these will be deterministic. - Auto Persistent - all changes to instantiated Gno objects in the transaction are persisted transparently. - Self-Sustaining - every transaction locks $GNOT up for new storage allocated; CPU gas fees paid in any language. - Timeless - every Gno object that is referenced (not GC’d) remains forever. - Multi User Realm - all objects are stored in realm packages (namespaces). ## Gno Language Innovation All modern popular programming languages are designed for a single programmer user. Programming languages support the importing of program libraries natively for components of the single user's program, but this does not hold true for interacting with components of another user's (other) program. Gno is an extension of the Go language for multi-user programming. Gno allows a massive number of programmers to iteratively and interactively develop a single shared program such as Gno.land. The added dimension of the program domain means the language should be extended to best express the complexities of programming in the inter-realm (inter-user) domain. In other words, Go is a restricted subset of the Gno language in the single-user context. (In this analogy client requests for Go web servers don't count as they run outside the server program). Gno is Go plus: - [`cross(fn)(…)`](https://github.com/gnolang/gno/blob/master/docs/resources/gno-interrealm.md#crossfn-and-crossing-specification) calls `fn(…)` where fn is another realm. - `std.CurrentRealm()` and `std.PreviousRealm()` changes upon cross-calls. - `func fn() { crossing(); … }` signifies that fn is a crossing-function where std.CurrentRealm() returns the realm in which the function is declared. [Gno2 proposed syntax](https://github.com/gnolang/gno/issues/4223): `@fn(…)`, `@func @fn() { … }`. These are like verb (function) modifiers in [honorifics in Korean and Japanese](https://en.wikipedia.org/wiki/Honorifics_%28linguistics%29) - While all data is readable by other realms, dot.selector access across realms get [tainted with 'readonly' attribute](https://github.com/gnolang/gno/blob/master/docs/resources/gno-interrealm.md#readonly-taint-specification). - [`revive(fn)`](https://github.com/gnolang/gno/blob/master/docs/resources/gno-interrealm.md#panic-and-revivefn) for Software Transactional Memory (STM). - Function/method return implies access without readonly taint. - Inter-realm type conversion limitations to prevent exploits. - More and refinements to come in Gno2. These language innovations/extensions allow for safer multi-user application development where many users are collaboratively programming a single timeless (immortal) communal program. ## The Logoverse Ἐν ἀρχῇ ἦν ὁ Λόγος καὶ ὁ Λόγος ἦν πρὸς τὸν Θεόν καὶ Θεὸς ἦν ὁ Λόγος. In the beginning was the Word (Logos), and the Word was with God, and the Word was God. - John 1:1 Logos means “word, discourse; reason”, and shares its root with the word “logic”. With these elements altogether you can derive a new property: - Gno expressions become "real" on Gno.land. - Ethereum comes close but isn't object-oriented and Solidity has no pronouns. - TBL's WWW, DOM model, HTTP verbs, Plan 9, Ethereum, and FB Meta are all attempts to arrive at the logoverse. - Gno.land is the first complete logoverse. ## Adoption Strategy There are over a million Go developers and growing. Go as a language remains a popular language for developers, an order of magnitude more than Rust developers, on par with JavaScript developers but growing faster than JavaScript. [![TIOBE 2025](https://gnolang.github.io/blog/2025-05-05_gnoland-the-first-logoverse/src/thumbs/tiobe_2025.png)](https://gnolang.github.io/blog/2025-05-05_gnoland-the-first-logoverse/src/tiobe_2025.png) [![GitHut2 2024](https://gnolang.github.io/blog/2025-05-05_gnoland-the-first-logoverse/src/thumbs/githut2_2024.png)](https://gnolang.github.io/blog/2025-05-05_gnoland-the-first-logoverse/src/githut2_2024.png) Gno.land and its associated network of Gno VM chains, and AtomOne if it hosts it, will become the nexus of human to human, human to machine, and machine to machine coordination; but only after it finds a self-sustaining organic growth cycle. The best way to ensure success and to accelerate adoption is to seed the initial community with the right community. There are many types of communities, such as the crypto community, ethereum community, student community, but since Bitcoin has gone mainstream, these communities aren't always in agreement about the purpose of blockchain technology; because they aren't aware of the history and fabric of the hidden power structures that run the narrative--both mainstream AND controlled oppositions. They do not feel that they need something, so their habits are not as obvious to change. But the "free-thinking" and "conspiracy" and "anti-war" and "anti-Covid19-vax" and even the "true Christian" communities feel an urgent need for censorship-proof coordination and communication tools. These communities have influencers who are kept hidden from the broader public; they have suffered deplatforming, defamation, and even death. Build tools, connections, and relations with these particular communities and especially those influencers who are nuanced in their research and speech. Even those that don't promote crypto will see the benefits uniquely offered by Gno.land. ## Gno.land License Anyone can make Gno VM powered chains derived from Gno.land according to the viral copyleft license terms and strong attribution requirement. The Strong Attribution clause of the Gno Network GPL license preserves the spirit of the GNU AGPL license for the blockchain world. ## Tokenomics $GNOT is the storage lock-up utility token, so Gno.land is to Gno England like $GNOT is to presence in Gno England, where total storage is kept finite for very-long-term existential purposes, and value is derived from the Gno artifacts created by its users, and some new users competing for attention from many existing users. Gno.land may migrate to AtomOne ICS once it is support hard-fork upgrades. There Gno.land would be one ICS shard, and many Gno VM shards may also exist, each with their own namespace and probably each their own storage token unless separate treaties are made between the main Gno.land chain (ICS shard) and other Gno VM shards. Transaction fees for CPU usage may be paid in either $GNOT or $PHOTON. ## Team ### New Tendermint, LLC NewTendermint, LLC is the core maintainer of the GnoVM, Tendermint2, and at present Gno.land. #### GnoVM & Gno.land Core Team * Jae Kwon before and after creating Tendermint and Cosmos always had a passion for programming languages and wrote multiple parsers and interpreters, and initially also wrote an EVM on top of the framework which became the Cosmos SDK. Gno.land is the result of two decades of search for the logoverse. * Manfred Touron, builder focused on open-source and resilient technologies; co-founded scaleway (cloud) and berty (p2p messaging), with contributions to 900+ open-source projects. * Miloš Živković - Senior distributed systems engineer; passion for solving protocol-level problems in the blockchain space. * Morgan Bazalgette - Senior Go engineer; bringing the joy of developing Go to Gno. * Ray Qin - With over 15 years of experience in software development and building large-scale networks, I have a deep passion for Go programming language and blockchain technology. * Marc Vertes - Senior VM and hardware developer; more than 3 decades of experience, Co-founder of 3 companies (1 acquired by IBM), author of 34 patents, author of the Yaegi Go interpreter. * Alexis Colin - Senior Frontend Engineer with 10+ years of experience building user-focused interfaces and exploring modern tech stacks. Driven to push forward efficient UX in the blockchain space through clean code and technical precision. Currently working on gnoweb. #### Gno Studio Team * Ìlker Öztürk - Senior software architect; 17 years in building and designing products, distributed p2p systems, leadership and strategic vision. * Jerónimo Albi - Experienced full-stack systems engineer with attention on simplicity and minimalism, focused on Blockchain and Golang development * Salvatore Mazzarino - Site Reliability Engineer with over 10 years of experience in building and mantaining high and scalable distribute systems across different range of platforms. "If it is not monitored, it does not exist" * Danny Salman - Vast experience in blockchain developer relations, technical writing and education, and product, with a background in full-stack development, engineering, and policy. * Alan Soares - A Brazilian lost in middle earth. Passionate coder with love for open-source and software craftsmanship. Taking the web forward for over 16 years. * Lucio Caetano - Senior Frontend Engineer with 10+ years of experience building web applications, specializing in web3 and blockchain technologies. With a background in data analysis, providing data-driven decisions and reporting with large datasets. ### All in Bits, Inc Members of All in Bits, Inc also build applications and community on top of Gno.land. * Kristov Atlas - Since 2012, I’ve been a crypto security engineer and researcher focusing on non-custodial wallets, CeFi exchanges, Bitcoin, Ethereum, and the Cosmos ecosystem. * Michelle Leech - Experienced marketing and ecosystem builder skilled at creating and driving strategic initiatives that foster relationship building and boost developer advocacy, engagement, education, and product utilization. * Lav Leon Hudak - DevRel Engineer with a strong background in blockchain development, documentation, and education. * Sean Casey - CFO (Chief Financial Gnome) - 10+ years’ experience in finance, aircraft leasing, and blockchain. Leads financial strategy, and treasury operations, ensuring capital discipline, regulatory compliance, and long-term value creation. * Jordan Magazine - Experienced General Counsel with over a decade of practice, specializing in designing frameworks that enable blockchain ecosystems to operate with clarity and compliance, empowering projects to scale confidently and with integrity. * Carolyn Pehrson - Paralegal keeping AIB,Inc and NT,LLC alive. Thinks you should get a pet mini pig. ### Onbloc Co., Ltd. Onbloc Co., Ltd. is a core contributor to Gno, delivering essential tools to the Gno.land ecosystem—including the Adena Wallet, GnoScan Explorer, and GnoSwap  AMM DEX—for both developers and everyday users. * Dongwon Shin - Blockchain evangelist and product‑driven builder, obsessed with user experience and ecosystem growth. Before founding Onbloc, he worked on several crypto initiatives, including a research firm, a crypto exchange, and a consulting firm. * Peter Yoon - Blockchain advocate and strategic specialist. A long-time supporter of Cosmos since its inception, he was an early member of Cosmos Korea and founded Lunamint, the first crypto wallet integrated with Telegram. * Jinwoo Choi - Full-stack engineer behind the Adena Wallet and GnoScan, with extensive experience building stable and scalable software systems. Passionate about designing robust architectures that endure scale and complexity. * Byeongjun Lee - Core engineer for Gno.land and the GnoSwap project, passionate about compilers and programming languages. He's dedicated to making developers’ lives easier. * Andrew Kang - Experienced product manager and researcher, skilled at identifying trends and driving strategic initiatives that advance the crypto ecosystem. , 2025-05-05T00:00:00Z, jaekwon, gnoland)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "gnoland-the-first-logoverse",
    "Gno.land - The First Logoverse, or Alternate Reality of Logical Objects",
    "\n\nTendermint changed the way blockchain developers think about blockchain\nconsensus algorithms. Gno.land will change the way developers think about\nprogramming.\n\nGno.land represents a paradigm shift in multi-user programming that no other\nsolution offers. It is not just a smart contract platform and blockchain; it is\nthe world's first viable language-based multi-user operating system. Its\nultimate goal is to host the world's knowledge base for the new millennium.\n\n## Why Gno.land?\n\nCompare publishing a blog site in Gno.land to all prior smart contract systems.\n\n```go\n// Realm: gno.land/r/me/myblog\n\npackage gnoblog\n\nimport (\n\t\"std\"\n\n\t\"gno.land/p/demo/blog\"\n)\n\nvar b = &blog.Blog{\n\tTitle:  \"gno.land's blog\",\n\tPrefix: \"/r/gnoland/blog:\",\n}\n\nfunc AddComment(postSlug, comment string) {\n    crossing()\n\tassertIsCommenter()\n\tassertNotInPause()\n\n\tcaller := std.OriginCaller()\n\terr := b.GetPost(postSlug).AddComment(caller, comment)\n\tcheckErr(err)\n}\n\nfunc Render(path string) string {\n\treturn b.Render(path)\n}\n```\n\nYou can see the Gno source code that rendered this webpage by clicking\non \"\\<\\/\\>Source\" on the top right of the webpage.\n\nQ: Why is everything else so complicated?\n\nA: Strangely difficult to answer, but ultimately because our languages,\ncompilers, interpreters, and programming paradigms are still evolving.\n\n## Brief Evolution of Language\n\nWritten human language has only been around for a mere 6000 years, a blip in\nour evolutionary history. Like living species, our language and writing have\nevolved alongside us and within us. Adam was not the first Homo sapiens on\nearth, but he may have been the first with written language, and thereby a new\nkind of man. \n\nProgramming languages likewise have been evolving rapidly, but only for a\nhandful of decades; it was in the 1970s when Alan Kay developed Smalltalk, the\nfirst object-oriented programming language. In the 1990’s Brendan Eich of\nNetscape invented JavaScript which forever transformed the World Wide Web; Sun\nMicrosystem made Java, and industries prospered greatly by these and similar\nlanguage technologies. \n\n## Gno vs Previous\n\nOur languages, compilers & interpreters, and programs are today:\n - Nondeterministic - randomness is the norm in concurrent programming, but\n   even Go randomizes map iteration. \n - Disk Bound - programs need to be designed to save to disk —> SQL solutions;\n   NOT native language\n - Dependent - running programs are owned by an owner; dependent on\n   individuals, not self-sustaining\n - Ephemeral - running programs are expected to fail; no guarantee of\n   presence.\n - Single User Realm - import of internal libraries are native, but\n   interactions with external programs are NOT native; generally no `import\n   “gno.land/r/external/realm”`, but leaky abstractions synthesized ie GRPC\n\nGno, GnoVM, and Gno.land is in contrast:\n - Deterministic - gno routines not yet supported, but even these will be\n   deterministic.\n - Auto Persistent - all changes to instantiated Gno objects in the transaction\n   are persisted transparently.\n - Self-Sustaining - every transaction locks $GNOT up for new storage allocated;\n   CPU gas fees paid in any language.\n - Timeless - every Gno object that is referenced (not GC’d) remains forever.\n - Multi User Realm - all objects are stored in realm packages (namespaces). \n\n## Gno Language Innovation\n\nAll modern popular programming languages are designed for a single programmer\nuser. Programming languages support the importing of program libraries natively\nfor components of the single user's program, but this does not hold true for\ninteracting with components of another user's (other) program. Gno is an\nextension of the Go language for multi-user programming. Gno allows a massive\nnumber of programmers to iteratively and interactively develop a single shared\nprogram such as Gno.land.\n\nThe added dimension of the program domain means the language should be extended\nto best express the complexities of programming in the inter-realm (inter-user)\ndomain. In other words, Go is a restricted subset of the Gno language in the\nsingle-user context. (In this analogy client requests for Go web servers don't\ncount as they run outside the server program).\n\nGno is Go plus:\n - [`cross(fn)(…)`](https://github.com/gnolang/gno/blob/master/docs/resources/gno-interrealm.md#crossfn-and-crossing-specification)\n   calls `fn(…)` where fn is another realm.\n - `std.CurrentRealm()` and `std.PreviousRealm()` changes upon cross-calls.\n - `func fn() { crossing(); … }` signifies that fn is a crossing-function where\n   std.CurrentRealm() returns the realm in which the function is declared.\n   [Gno2 proposed syntax](https://github.com/gnolang/gno/issues/4223):\n   `@fn(…)`, `@func @fn() { … }`. These are like verb (function) modifiers in\n   [honorifics in Korean and Japanese](https://en.wikipedia.org/wiki/Honorifics_%28linguistics%29)\n - While all data is readable by other realms, dot.selector access\n   across realms get [tainted with 'readonly' attribute](https://github.com/gnolang/gno/blob/master/docs/resources/gno-interrealm.md#readonly-taint-specification).\n - [`revive(fn)`](https://github.com/gnolang/gno/blob/master/docs/resources/gno-interrealm.md#panic-and-revivefn)\n   for Software Transactional Memory (STM). \n - Function/method return implies access without readonly taint.\n - Inter-realm type conversion limitations to prevent exploits.\n - More and refinements to come in Gno2.\n\nThese language innovations/extensions allow for safer multi-user application\ndevelopment where many users are collaboratively programming a single timeless\n(immortal) communal program.\n\n## The Logoverse\n\nἘν ἀρχῇ ἦν ὁ Λόγος καὶ ὁ Λόγος ἦν πρὸς τὸν Θεόν καὶ Θεὸς ἦν ὁ Λόγος.  In the\nbeginning was the Word (Logos), and the Word was with God, and the Word was\nGod. - John 1:1\n\nLogos means “word, discourse; reason”, and shares its root with the word\n“logic”. \n\nWith these elements altogether you can derive a new property:\n - Gno expressions become \"real\" on Gno.land.\n - Ethereum comes close but isn't object-oriented and Solidity has no pronouns.\n - TBL's WWW, DOM model, HTTP verbs, Plan 9, Ethereum, and FB Meta are all\n   attempts to arrive at the logoverse.\n - Gno.land is the first complete logoverse.\n\n## Adoption Strategy\n\nThere are over a million Go developers and growing. Go as a language remains a\npopular language for developers, an order of magnitude more than Rust\ndevelopers, on par with JavaScript developers but growing faster than\nJavaScript.\n\n[![TIOBE 2025](https://gnolang.github.io/blog/2025-05-05_gnoland-the-first-logoverse/src/thumbs/tiobe_2025.png)](https://gnolang.github.io/blog/2025-05-05_gnoland-the-first-logoverse/src/tiobe_2025.png)\n[![GitHut2 2024](https://gnolang.github.io/blog/2025-05-05_gnoland-the-first-logoverse/src/thumbs/githut2_2024.png)](https://gnolang.github.io/blog/2025-05-05_gnoland-the-first-logoverse/src/githut2_2024.png)\n\nGno.land and its associated network of Gno VM chains, and AtomOne if it hosts\nit, will become the nexus of human to human, human to machine, and machine to\nmachine coordination; but only after it finds a self-sustaining organic growth\ncycle.\n\nThe best way to ensure success and to accelerate adoption is to seed the\ninitial community with the right community. There are many types of\ncommunities, such as the crypto community, ethereum community, student community,\nbut since Bitcoin has gone mainstream, these communities aren't always in\nagreement about the purpose of blockchain technology; because they aren't aware\nof the history and fabric of the hidden power structures that run the\nnarrative--both mainstream AND controlled oppositions. They do not feel that\nthey need something, so their habits are not as obvious to change.\n\nBut the \"free-thinking\" and \"conspiracy\" and \"anti-war\" and \"anti-Covid19-vax\"\nand even the \"true Christian\" communities feel an urgent need for\ncensorship-proof coordination and communication tools. These communities have\ninfluencers who are kept hidden from the broader public; they have suffered\ndeplatforming, defamation, and even death.\n\nBuild tools, connections, and relations with these particular communities and\nespecially those influencers who are nuanced in their research and speech.\nEven those that don't promote crypto will see the benefits uniquely offered by\nGno.land.\n\n## Gno.land License\n\nAnyone can make Gno VM powered chains derived from Gno.land according to the\nviral copyleft license terms and strong attribution requirement. The Strong\nAttribution clause of the Gno Network GPL license preserves the spirit of the\nGNU AGPL license for the blockchain world.\n\n## Tokenomics\n\n$GNOT is the storage lock-up utility token, so Gno.land is to Gno England like\n$GNOT is to presence in Gno England, where total storage is kept finite for\nvery-long-term existential purposes, and value is derived from the Gno\nartifacts created by its users, and some new users competing for attention from\nmany existing users.\n\nGno.land may migrate to AtomOne ICS once it is support hard-fork upgrades.\nThere Gno.land would be one ICS shard, and many Gno VM shards may also exist,\neach with their own namespace and probably each their own storage token unless\nseparate treaties are made between the main Gno.land chain (ICS shard) and\nother Gno VM shards. Transaction fees for CPU usage may be paid in either $GNOT\nor $PHOTON.\n\n## Team\n\n### New Tendermint, LLC\n\nNewTendermint, LLC is the core maintainer of the GnoVM, Tendermint2, and \nat present Gno.land.\n\n#### GnoVM & Gno.land Core Team\n\n * Jae Kwon before and after creating Tendermint and Cosmos always had a\n   passion for programming languages and wrote multiple parsers and\n   interpreters, and initially also wrote an EVM on top of the framework which\n   became the Cosmos SDK. Gno.land is the result of two decades of search for\n   the logoverse.\n\n * Manfred Touron, builder focused on open-source and resilient technologies;\n   co-founded scaleway (cloud) and berty (p2p messaging), with contributions to\n   900+ open-source projects.\n\n * Miloš Živković - Senior distributed systems engineer; passion for solving\n   protocol-level problems in the blockchain space.\n\n * Morgan Bazalgette - Senior Go engineer; bringing the joy of developing Go to\n   Gno.\n\n * Ray Qin - With over 15 years of experience in software development and\n   building large-scale networks, I have a deep passion for Go programming\n   language and blockchain technology.\n\n * Marc Vertes - Senior VM and hardware developer; more than 3 decades of\n   experience, Co-founder of 3 companies (1 acquired by IBM), author of 34\n   patents, author of the Yaegi Go interpreter.\n\n * Alexis Colin - Senior Frontend Engineer with 10+ years of experience\n   building user-focused interfaces and exploring modern tech stacks. Driven to\n   push forward efficient UX in the blockchain space through clean code and\n   technical precision. Currently working on gnoweb.\n\n#### Gno Studio Team\n\n * Ìlker Öztürk - Senior software architect; 17 years in building and designing\n   products, distributed p2p systems, leadership and strategic vision.\n\n * Jerónimo Albi - Experienced full-stack systems engineer with attention on\n   simplicity and minimalism, focused on Blockchain and Golang development\n\n * Salvatore Mazzarino - Site Reliability Engineer with over 10 years of\n   experience in building and mantaining high and scalable distribute systems\n   across different range of platforms. \"If it is not monitored, it does not\n   exist\"\n\n * Danny Salman - Vast experience in blockchain developer relations, technical\n   writing and education, and product, with a background in full-stack\n   development, engineering, and policy.\n\n * Alan Soares - A Brazilian lost in middle earth.  Passionate coder with love\n   for open-source and software craftsmanship. Taking the web forward for over\n   16 years.\n\n * Lucio Caetano - Senior Frontend Engineer with 10+ years of experience\n   building web applications, specializing in web3 and blockchain technologies.\n   With a background in data analysis, providing data-driven decisions and\n   reporting with large datasets.\n\n### All in Bits, Inc \n\nMembers of All in Bits, Inc also build applications and community on top of\nGno.land.\n\n * Kristov Atlas - Since 2012, I’ve been a crypto security engineer and\n   researcher focusing on non-custodial wallets, CeFi exchanges, Bitcoin,\n   Ethereum, and the Cosmos ecosystem.\n\n * Michelle Leech - Experienced marketing and ecosystem builder skilled at\n   creating and driving strategic initiatives that foster relationship building\n   and boost developer advocacy, engagement, education, and product\n   utilization.\n\n * Lav Leon Hudak - DevRel Engineer with a strong background in blockchain\n   development, documentation, and education.\n\n * Sean Casey - CFO (Chief Financial Gnome) - 10+ years’ experience in finance,\n   aircraft leasing, and blockchain. Leads financial strategy, and treasury\n   operations, ensuring capital discipline, regulatory compliance, and\n   long-term value creation.\n\n * Jordan Magazine - Experienced General Counsel with over a decade of\n   practice, specializing in designing frameworks that enable blockchain\n   ecosystems to operate with clarity and compliance, empowering projects to\n   scale confidently and with integrity.\n\n * Carolyn Pehrson - Paralegal keeping AIB,Inc and NT,LLC alive. Thinks you\n   should get a pet mini pig.\n\n### Onbloc Co., Ltd.\n\nOnbloc Co., Ltd. is a core contributor to Gno, delivering essential tools to \nthe Gno.land ecosystem—including the Adena Wallet, GnoScan Explorer, and GnoSwap \nAMM DEX—for both developers and everyday users.\n\n * Dongwon Shin - Blockchain evangelist and product‑driven builder, obsessed with\n   user experience and ecosystem growth. Before founding Onbloc, he worked on several\n   crypto initiatives, including a research firm, a crypto exchange, and a consulting firm.\n\n * Peter Yoon - Blockchain advocate and strategic specialist. A long-time supporter\n   of Cosmos since its inception, he was an early member of Cosmos Korea and founded\n   Lunamint, the first crypto wallet integrated with Telegram.\n\n * Jinwoo Choi - Full-stack engineer behind the Adena Wallet and GnoScan, with\n   extensive experience building stable and scalable software systems. Passionate\n   about designing robust architectures that endure scale and complexity.\n\n * Byeongjun Lee - Core engineer for Gno.land and the GnoSwap project, passionate about\n   compilers and programming languages. He's dedicated to making developers’ lives easier.\n\n * Andrew Kang - Experienced product manager and researcher, skilled at identifying\n   trends and driving strategic initiatives that advance the crypto ecosystem.\n",
    "2025-05-05T00:00:00Z",
    "jaekwon",
    "gnoland"
  ],
  "max_deposit": ""
}
#52 vm/execgno.land/r/gnoland/blog.ModAddPost(kernel-realm, Gno realms vs system kernels, Let's explore the analogy between Gno and existing operating systems. In computers, the role of the operating system is to isolate each process from the others, for memory integrity and security, and to control access to system resources, including time sharing access to the CPU. It also lets processes communicate with others, or externally through the network. The operating system provides those capabilities through the kernel, which executes system calls. When invoked by a user process, the kernel switches the CPU into a privileged mode, to perform the services outside user reach. Each resource located outside the process means the private user memory must be manipulated through system calls. This is done under the strict supervision of the kernel, which acts as a neutral trusted facilitator between untrusted processes. On bare metal systems, this is enforced by the hardware itself. Gno is a distributed multi-user virtual computer implemented on top of the blockchain, ensuring all operations execute deterministically. The distributed storage layer of the blockchain provides Merkle trees and consensus-based verification that makes program code and memory tamper-proof. In Gno, the equivalent of computer processes are *realms*. Each realm is like an always-active process, running forever, similar to a web server. In a regular system, a live process is defined by its Process Identifier (PID, a number set by the system for the life of the process), its memory, and the set of system resources it uses at a given time (files, connections, etc). Similarly in Gno, a realm is defined by its identity (a unique package path), its global memory state (the content of memory when the realm is at rest), which may contain for example the amount of coins it retains. A realm may provide services to other realms through the exported functions it declares, and it may use services provided by other realms by importing the realm using an `import` statement, and directly calling its functions in code. The way of declaring exported functions and importing them is exactly identical to how packages are defined in the Go language. A realm is a Gno process, but is also a package (in the Go sense). Functions in packages can be pure (in the functional programming sense: the function has no side effects and operates only on temporary local variables which are discarded at return), or not: some variable outside the function scope is modified. In that case, the modified variable must be defined in the same package as the function. Functions can only write to global variables declared within their own package space (assuming variables are unexported), and static code analysis, as in Go, enforces this rule. However, since realms are also stateful processes with their own identity and protected space, and because a process can write only in its own space, calling a non-pure function imported from another realm means that the caller realm would attempt to write in the callee realm space, which is forbidden! To resolve this, the current realm identity is switched from the caller to the callee until the function returns, like when crossing the user-kernel boundary in a regular system call. From the system's point of view, the current realm is set to the callee, the previous realm to the caller. At function return, the current realm and previous realm are restored to their original value. So non-pure exported functions act exactly like a system call: they provide the ability to write outside the calling realm space, by crossing the realm boundary. A realm doesn't need to trust the calling realm: only itself can write in its own space. A realm doesn't need to trust an external kernel: it is its own kernel, it decides exactly how its data can be accessed and/or modified by caller realms. Gno unifies the concepts of Go packages and Unix processes in a single, simple concept: the realm. The kernel is decentralized and put back in control of package developers. The operating system itself becomes transparent: realm processes are both resource users and providers, with full control and accountability. In Gno, programs are processes are packages are realms. Gno rethinks the traditional boundaries between processes, packages, and system calls. By making each realm self-contained and in control of its own state, it replaces the need for a central kernel with a decentralized model where programs define their own access rules. It’s a practical and minimal approach to building secure, composable software on-chain. , 2025-06-09T13:17:22Z, mvertes, kernel,process,realm)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "kernel-realm",
    "Gno realms vs system kernels",
    "\n\nLet's explore the analogy between Gno and existing operating systems.\n\nIn computers, the role of the operating system is to isolate each process from\nthe others, for memory integrity and security, and to control access to system\nresources, including time sharing access to the CPU. It also lets processes\ncommunicate with others, or externally through the network.\n\nThe operating system provides those capabilities through the kernel, which\nexecutes system calls.  When invoked by a user process,  the kernel switches\nthe CPU into a privileged mode, to perform the services outside user reach.\nEach resource located outside the process means the private user memory must\nbe manipulated through system calls. This is done under the strict supervision\nof the kernel, which acts as a neutral trusted facilitator between untrusted\nprocesses. On bare metal systems, this is enforced by the hardware itself.\n\nGno is a distributed multi-user virtual computer implemented on top of the\nblockchain, ensuring all operations execute deterministically. The distributed\nstorage layer of the blockchain provides Merkle trees and consensus-based\nverification that makes program code and memory tamper-proof. \n\nIn Gno, the equivalent of computer processes are *realms*. Each realm is like\nan always-active process, running forever, similar to a web server. In a\nregular system, a live process is defined by its Process Identifier (PID, a\nnumber set by the system for the life of the process), its memory, and the set\nof system resources it uses at a given time (files, connections, etc).\nSimilarly in Gno, a realm is defined by its identity (a unique package path),\nits global memory state (the content of memory when the realm is at rest),\nwhich may contain for example the amount of coins it retains.\n\nA realm may provide services to other realms through the exported\nfunctions it declares, and it may use services provided by other realms by\nimporting the realm using an `import`  statement, and directly calling its\nfunctions in code. The way of declaring exported functions and importing them\nis exactly identical to how packages are defined in the Go language. A realm is\na Gno process, but is also a package (in the Go sense).\n\nFunctions in packages can be pure (in the functional programming sense: the\nfunction has no side effects and operates only on temporary local variables\nwhich are discarded at return), or not: some variable outside the function\nscope is modified. In that case, the modified variable must be defined in the\nsame package as the function. Functions can only write to global variables\ndeclared within their own package space (assuming variables are unexported),\nand static code analysis, as in Go, enforces this rule.\n\nHowever, since realms are also stateful processes with their own identity and\nprotected space, and because a process can write only in its own space, calling\na non-pure function imported from another realm means that the caller realm\nwould attempt to write in the callee realm space, which is forbidden!\n\nTo resolve this, the current realm identity is switched from the caller to the\ncallee until the function returns, like when crossing the user-kernel boundary\nin a regular system call. From the system's point of view, the current realm is\nset to the callee, the previous realm to the caller. At function return, the\ncurrent realm and previous realm are restored to their original value.\n\nSo non-pure exported functions act exactly like a system call: they provide the\nability to write outside the calling realm space, by crossing the realm\nboundary. A realm doesn't need to trust the calling realm: only itself can\nwrite in its own space. A realm doesn't need to trust an external kernel: it is\nits own kernel, it decides exactly how its data can be accessed and/or modified\nby caller realms.\n\nGno unifies the concepts of Go packages and Unix processes in a single, simple\nconcept: the realm. The kernel is decentralized and put back in control of\npackage developers. The operating system itself becomes transparent: realm\nprocesses are both resource users and providers, with full control and\naccountability.\n\nIn Gno, programs are processes are packages are realms. Gno rethinks the\ntraditional boundaries between processes, packages, and system calls. By making\neach realm self-contained and in control of its own state, it replaces the need\nfor a central kernel with a decentralized model where programs define their own\naccess rules. It’s a practical and minimal approach to building secure,\ncomposable software on-chain.\n",
    "2025-06-09T13:17:22Z",
    "mvertes",
    "kernel,process,realm"
  ],
  "max_deposit": ""
}
#53 vm/execgno.land/r/gnoland/blog.ModAddPost(test6-announcement, Announcing Test6: The Latest Gno.land Testnet, [![banner](https://gnolang.github.io/blog/2025-06-23_test6-announcement/src/thumbs/banner.jpg)](https://gnolang.github.io/blog/2025-06-23_test6-announcement/src/banner.jpg) The newest Gno.land testnet, [Test6](https://test6.testnets.gno.land/), is now live! This major milestone brings us closer to the anticipated beta mainnet launch. Test6 introduces essential features and infrastructure improvements designed to enhance network stability, and introduce critical pieces like governance, a token locking mechanism, and the new validator operator (valoper) realm ahead of the Beta Mainnet rollout. Key Enhancements in Test6 include: - GovDAO V3: The latest iteration of Gno.land’s primary decentralized governance model. - Token Transfer Locking Mechanism: A controlled approach to token distribution before full transferability at the time of the feature complete mainnet launch. - Valoper Registry: An on-chain, permissionless registry for valopers (validator operators) to register their public profile to be listed in the Gno.land validator registry. - GnoVM Enhancements: Performance improvements to the Gno Virtual Machine (GnoVM) for greater efficiency, security and scalability. - Interrealm Specification: Maximizing the safety of realms with explicit context switching during cross-realm execution. ## GovDAO V3: Advancing Gno.land’s Governance Model The Test6 GovDAO will launch with all 3 Tiers with the intent to test them out for Beta Mainnet. These tier members are tasked with governance oversight and advancing the progressive decentralization of governance and will model what could occur in the Beta Mainnet. GovDAO V3 overhauls Gno.land’s previous governance iterations to support the finalized governance [specifications](https://gist.github.com/jaekwon/918ad325c4c8f7fb5d6e022e33cb7eb3) by implementing: - Membership Tiers (T1, T2, T3) with distinct requirements. - Voting power assignments based on tier membership. - Modular governance logic, ensuring adaptability and structured decentralization. [GovDAO V3](https://test6.testnets.gno.land/r/gov/dao/) consists of several key components that ensure a structured and decentralized governance system to manage Gno.land. The GovDAO is fitted with an implemented upgrade mechanism, enabling governance-led upgrades through proposals. The GovDAO [member store](https://test6.testnets.gno.land/r/gov/dao/v3/memberstore) acts as a registry for GovDAO members to manage member data and tier assignments today and in future GovDAO versions. Lastly, the GovDAO V3 [implementation realm](https://test6.testnets.gno.land/r/gov/dao) holds the governance operational logic, and proposal statuses that can be migrated to new GovDAO instances. ## Token Transfer Locking Mechanism During the Beta Mainnet phase, GNOT token distribution will occur, but direct token transfers will remain disabled. To facilitate this, a token locking mechanism has been implemented, ensuring that tokens can be distributed while disallowing transfers until the Beta Mainnet GovDAO puts up a proposal and votes positively to indicate that the network is ready. Once tokens are distributed at beta mainnet, token holders will be able to use their GNOT on Gno.land to interact with the chain, and make realm and package deployments. For Test6, you can use the [Faucet Hub](https://faucet.gno.land/) to request tokens and start using the network. ## Valoper Registry Realm The Valoper Registry Realm is a public directory of validator profiles, providing transparency and essential information for GovDAO members to evaluate new validator candidates to add to the Gno.land valset. If validators are interested in participating on the Test6 network, you can register your public validator profile to the [registry](https://test6.testnets.gno.land/r/gnoland/valopers). Two informational guides are available to help you started on your way to becoming a [testnet validator](https://gnops.io/articles/guides/become-testnet-validator/) and provide details on the [hardware specifications](https://gnops.io/articles/effective-gnops/validator-specs/) for Gno.land. You will need to include your Discord handle in the registry in order to receive an invite to the valoper Discord channel. This is where you will signal your interest in joining Test6, and a GovDAO member(s) will be responsible for making and voting on the proposals to add new validators to the Test6 network. This process is a step in testing validator onboarding and the governance system leading up to beta mainnet. Please note: registering your validator profile and validating on Test6 does not guarantee a validator slot on the beta mainnet, or any future Gno.land networks. However, active participation and contributions to testnets will help establish credibility and may improve chances for future validator acceptance. The initial validator amount and valset will ultimately be selected through GovDAO T1 governance proposals and acceptance. The launch of Test6 signals the final groundwork needed to achieve the Beta Mainnet deliverables outlined in the Road to Mainnet and Beyond [post](https://gno.land/r/gnoland/blog:p/road-to-mainnet). ## Interrealm Specification Test6 supports the Interrealm Specification, introducing new builtins like `cross` and a way to explicitly specify whether a public realm function is crossing. By explicitly specifying if a function crosses the realm boundary, developers will be creating a safer execution environment during interrealm execution. Check out the [Interrealm Specification Docs](https://docs.gno.land/resources/gno-interrealm), as well as the [example packages](https://github.com/gnolang/gno/tree/master/examples) for more info., 2025-06-23T00:00:00Z, leohhhn,michelleellen, gnoland,ecosystem,updates,testnet,test6)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "test6-announcement",
    "Announcing Test6: The Latest Gno.land Testnet",
    "\n\n[![banner](https://gnolang.github.io/blog/2025-06-23_test6-announcement/src/thumbs/banner.jpg)](https://gnolang.github.io/blog/2025-06-23_test6-announcement/src/banner.jpg)\n\nThe newest Gno.land testnet, [Test6](https://test6.testnets.gno.land/), is now live! This major milestone brings us closer to the anticipated beta mainnet launch. Test6 introduces essential features and infrastructure improvements designed to enhance network stability, and introduce critical pieces like governance, a token locking mechanism, and the new validator operator (valoper) realm ahead of the Beta Mainnet rollout.\n\nKey Enhancements in Test6 include: \n\n- GovDAO V3: The latest iteration of Gno.land’s primary decentralized governance model.\n- Token Transfer Locking Mechanism: A controlled approach to token distribution before full transferability at the time of the feature complete mainnet launch.\n- Valoper Registry: An on-chain, permissionless registry for valopers (validator operators) to register their public profile to be listed in the Gno.land validator registry.\n- GnoVM Enhancements: Performance improvements to the Gno Virtual Machine (GnoVM) for greater efficiency, security and scalability.\n- Interrealm Specification: Maximizing the safety of realms with explicit context switching during cross-realm execution.\n\n## GovDAO V3: Advancing Gno.land’s Governance Model\n\nThe Test6 GovDAO will launch with all 3 Tiers with the intent to test them out for Beta Mainnet.\nThese tier members are tasked with governance oversight and advancing the progressive decentralization \nof governance and will model what could occur in the Beta Mainnet.\n\nGovDAO V3 overhauls Gno.land’s previous governance iterations to support the finalized governance [specifications](https://gist.github.com/jaekwon/918ad325c4c8f7fb5d6e022e33cb7eb3) by implementing:\n\n- Membership Tiers (T1, T2, T3) with distinct requirements.\n- Voting power assignments based on tier membership.\n- Modular governance logic, ensuring adaptability and structured decentralization.\n\n[GovDAO V3](https://test6.testnets.gno.land/r/gov/dao/) consists of several key components that ensure a \nstructured and decentralized governance system to manage Gno.land. The GovDAO is fitted with an implemented\nupgrade mechanism, enabling governance-led upgrades through proposals. The GovDAO\n[member store](https://test6.testnets.gno.land/r/gov/dao/v3/memberstore) acts as a registry for GovDAO\nmembers to manage member data and tier assignments today and in future GovDAO versions. Lastly, the \nGovDAO V3 [implementation realm](https://test6.testnets.gno.land/r/gov/dao) holds the governance operational \nlogic, and proposal statuses that can be migrated to new GovDAO instances.\n\n## Token Transfer Locking Mechanism\n\nDuring the Beta Mainnet phase, GNOT token distribution will occur, but direct token \ntransfers will remain disabled. To facilitate this, a token locking mechanism has been \nimplemented, ensuring that tokens can be distributed while disallowing transfers until the \nBeta Mainnet GovDAO puts up a proposal and votes positively to indicate that the network is ready.\n\nOnce tokens are distributed at beta mainnet, token holders will be able to use their\nGNOT on Gno.land to interact with the chain, and make realm and package deployments.\n\nFor Test6, you can use the [Faucet Hub](https://faucet.gno.land/) to request tokens \nand start using the network.\n\n## Valoper Registry Realm\n\nThe Valoper Registry Realm is a public directory of validator profiles, providing \ntransparency and essential information for GovDAO members to evaluate new validator \ncandidates to add to the Gno.land valset.\n\nIf validators are interested in participating on the Test6 network, you can register\nyour public validator profile to the [registry](https://test6.testnets.gno.land/r/gnoland/valopers). \nTwo informational guides are available to help you started on your way to becoming a\n[testnet validator](https://gnops.io/articles/guides/become-testnet-validator/) and \nprovide details on the [hardware specifications](https://gnops.io/articles/effective-gnops/validator-specs/) for Gno.land.\n\nYou will need to include your Discord handle in the registry in order to receive \nan invite to the valoper Discord channel. This is where you will signal your interest\nin joining Test6, and a GovDAO member(s) will be responsible for making and voting \non the proposals to add new validators to the Test6 network. This process is a step \nin testing validator onboarding and the governance system leading up to beta mainnet.\n\nPlease note: registering your validator profile and validating on Test6 does not guarantee \na validator slot on the beta mainnet, or any future Gno.land networks. However, active\nparticipation and contributions to testnets will help establish credibility and may \nimprove chances for future validator acceptance. The initial validator amount and \nvalset will ultimately be selected through GovDAO T1 governance proposals and acceptance.\n\nThe launch of Test6 signals the final groundwork needed to achieve the Beta Mainnet\ndeliverables outlined in the Road to Mainnet and Beyond [post](https://gno.land/r/gnoland/blog:p/road-to-mainnet).\n\n## Interrealm Specification\n\nTest6 supports the Interrealm Specification, introducing new builtins like `cross`\nand a way to explicitly specify whether a public realm function is crossing.\n\nBy explicitly specifying if a function crosses the realm boundary, developers \nwill be creating a safer execution environment during interrealm execution. Check \nout the [Interrealm Specification Docs](https://docs.gno.land/resources/gno-interrealm),\nas well as the [example packages](https://github.com/gnolang/gno/tree/master/examples) \nfor more info.",
    "2025-06-23T00:00:00Z",
    "leohhhn,michelleellen",
    "gnoland,ecosystem,updates,testnet,test6"
  ],
  "max_deposit": ""
}
#54 vm/execgno.land/r/gnoland/blog.ModAddPost(ethcc2025, Gnomes at EthCC ‘25, Earlier this month, a couple of members of the Gno squad headed to EthCC in Cannes, France, to introduce the Ethereum community to Gno.land and share our take on Web7—a multi-user, language-based operating system for the programmable web. ## Gno.land in Action Over a few packed days, we brought Gno.land to life with hands-on demos, live coding, and real conversations with devs at the booth. People got a sense of how Gno.land makes on-chain development feel natural. One demo that caught attention showed how Gno contracts are written in a deterministic version of Go and published as clean, human-readable code, right on-chain. One of the standout impressions was showing that the Gno.land homepage is itself a smart contract. It’s browsable, interactive, and fully rendered through Gnoweb, Gno.land’s universal browser layer. With the ‘Source’ and ‘Action’ tabs acting as both documentation and executable functions, the demo gave developers a real feel for the tech: backend logic, frontend interface, and program state, all unified on-chain, readable, and interactive. ## Feedback from the Community The Ethereum crowd came with solid feedback and on-point questions, which is exactly what we were there for. Developers welcomed the fact that Gno is Go-based, offering a gentler learning curve, more readable syntax, and a smoother onboarding experience compared to Solidity or Rust. Plenty of devs already use Go for real-world systems, and seeing it run smart contracts just made sense; it clicked quickly. Gno.land’s source-level publishing model also stood out. The ability to write and publish human-readable contracts, rather than just bytecode, resonated with the open-source community. It enables transparency, composability, and author-level accountability. Developers could audit contracts on the spot at the booth and see the author attribution directly on-chain. Visitors were also surprised by the breadth of the Gno.land platform. It’s not just another Layer 1, it's a full-stack application environment with its own language, virtual machine, runtime, and browser. The move toward a full operating system opens the door to a wide range of use cases beyond DeFi: coordination tools, publishing platforms, social networks, and general-purpose software, all with logic that’s on-chain, inspectable, and composable by default. ## That’s a Wrap EthCC gave people a glimpse of what programmable infrastructure could feel like, and how Gno.land is building towards a new Web. Big thanks to everyone who stopped by the booth, asked questions, poked at the code, or just came for the swag. Extra props to the community gnomes who joined us in Cannes! , 2025-07-21T17:13:00Z, michelleellen, gnoland,events,ethcc,conferences)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "ethcc2025",
    "Gnomes at EthCC ‘25",
    "\n\nEarlier this month, a couple of members of the Gno squad headed to EthCC in Cannes, France, to introduce the Ethereum community to Gno.land and share our take on Web7—a multi-user, language-based operating system for the programmable web.\n\n## Gno.land in Action\n\nOver a few packed days, we brought Gno.land to life with hands-on demos, live coding, and real conversations with devs at the booth. People got a sense of how Gno.land makes on-chain development feel natural.\n\nOne demo that caught attention showed how Gno contracts are written in a deterministic version of Go and published as clean, human-readable code, right on-chain.\n\nOne of the standout impressions was showing that the Gno.land homepage is itself a smart contract. It’s browsable, interactive, and fully rendered through Gnoweb, Gno.land’s universal browser layer. With the ‘Source’ and ‘Action’ tabs acting as both documentation and executable functions, the demo gave developers a real feel for the tech: backend logic, frontend interface, and program state, all unified on-chain, readable, and interactive.\n\n## Feedback from the Community\n\nThe Ethereum crowd came with solid feedback and on-point questions, which is exactly what we were there for.\n\nDevelopers welcomed the fact that Gno is Go-based, offering a gentler learning curve, more readable syntax, and a smoother onboarding experience compared to Solidity or Rust. Plenty of devs already use Go for real-world systems, and seeing it run smart contracts just made sense; it clicked quickly.\n\nGno.land’s source-level publishing model also stood out. The ability to write and publish human-readable contracts, rather than just bytecode, resonated with the open-source community. It enables transparency, composability, and author-level accountability. Developers could audit contracts on the spot at the booth and see the author attribution directly on-chain.\n\nVisitors were also surprised by the breadth of the Gno.land platform. It’s not just another Layer 1, it's a full-stack application environment with its own language, virtual machine, runtime, and browser. The move toward a full operating system opens the door to a wide range of use cases beyond DeFi: coordination tools, publishing platforms, social networks, and general-purpose software, all with logic that’s on-chain, inspectable, and composable by default.\n\n## That’s a Wrap\n\nEthCC gave people a glimpse of what programmable infrastructure could feel like, and how Gno.land is building towards a new Web. Big thanks to everyone who stopped by the booth, asked questions, poked at the code, or just came for the swag. Extra props to the community gnomes who joined us in Cannes!\n",
    "2025-07-21T17:13:00Z",
    "michelleellen",
    "gnoland,events,ethcc,conferences"
  ],
  "max_deposit": ""
}
#55 vm/execgno.land/r/gnoland/blog.ModAddPost(scp-cohort-4, Student Contributor Program: Cohort 4 Wrap-up, We’ve recently concluded the fourth cohort of our Student Contributor Program with third-year Epitech POC Innovation students. Over the course of five months, six students dove deep into Gno.land, learning, contributing, and building projects. The program kicked off with a few weeks of onboarding and discovery, allowing the students to explore Gno.land’s architecture, tooling, and community. From there, they quickly started developing and contributing ideas, fixes, and features. As part of their experience, the students participated in hands-on workshops with our core team in Paris. Some also joined us at EthCC, gaining exposure to the broader blockchain ecosystem. Each student began by creating their home realm and documenting their journey in the Hackerspace repo. At the end of the cohort, each student wrote a report to detail the internship experience, the learnings, engineering projects and takeaways. For the Gno engineering team and DevRels these reports are critical to gaining insights into how documentation is applied, challenges, voids and general areas to improve onboarding. ## Student advice to getting started - Always use `gnodev`: Develop with the same interface end-users will see to catch issues early and save both gas and time. - Start small: Build a simple home realm, blog, game, or voting app. A hands-on approach teaches more than just documentation reading. - Keep a HackerSpace diary: Write short weekly notes about what you build, learn, or fix. It makes progress tracking easy and helps mentors guide you. All are linked with the 'journey' [label](https://github.com/gnolang/hackerspace/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22🌄%20journey%22) - Read other's Gno code: The monorepo is full of solid, real-world examples that can accelerate your learning. - Ask questions early and often: Use Office Hours, PR comments, or Signal. Small clarifications now prevent big roadblocks later. - Expect rough edges: Gno is still evolving, so some issues may be language-level limitations, but a good experience in experimentation. - Stick to determinism: Avoid relying on time, randomness, or anything non-deterministic; these are not practical on-chain. - Experiment safely: Push the VM to its limits, test edge cases, and learn from breakage. Bugs you find can become your first GitHub issues. ## Student Contribution Highlights The cohort tackled a wide range of technical and creative projects, including applications, tools, and ecosystem enhancements. Here's a highlight of what they accomplished: #### Applications & Demos - Reddit-style r/place on Gno.land - Pokémon Fight Simulator - Calculator Realm - Change.org-style petition realm - Friendly Organizer app using the CommonDAO implementation #### Core Enhancements & Utilities - Levenshtein Distance package - link/pkgpath - Profiling Support for GnoVM (70ipprof + Flamegraph) - SVG Extension - Improvements to the blog realm #### Documentation - CommonDAO Tutorial - Solidity Famous Patterns ## Student Reflections [@louonezime](https://github.com/louonezime) ‘Over the course of this cohort, I had the opportunity to explore and build within the Gno.land ecosystem. I especially enjoyed working on rebuilding the blog package, which gave me the chance to be creative while learning Gno. The open-source environment made the experience smooth and collaborative. All in all, it was a great way to contribute to something meaningful in the blockchain space, especially since it was my first time getting into it.’ [@mounia](https://github.com/moonia) ‘During this cohort, I had the opportunity to get hands-on with the Gno.land ecosystem by working on two technical projects. I explored the idea of a Gno-based EVM interpreter, allowing Solidity bytecode to run in a Gno-native environment. I also led the profiling project for GnoVM, enabling source-level insights via pprof and flamegraph tools. It was a great opportunity to contribute meaningful tools while learning the internals of Gno and I really appreciated how close Gno feels to Go. Overall, it was a great experience that deepened my interest in the blockchain space and made me eager to keep contributing.’ [@Tchips46](https://github.com/Tchips46) ‘During this cohort, I focused on exploring the EVM on Gno.land, which helped me understand complex blockchain concepts and the inner workings of virtual machines. I learned how to build more advanced dApps and got introduced to Solidity. This allowed me to write documentation about well-known Solidity design patterns, using examples to make them easier to understand. Overall, it was a valuable experience that grew my technical skills and deepened my understanding of blockchain development.’ [@NicolasMelet](https://github.com/NicolasMelet) ‘Working on Gno.land was an amazing opportunity to discover new technologies and work on a blockchain space for the first time. My main area of interest was developing new dApps in Gno while trying to highlight different features everytime. As such I started by creating the Calculator realm, showcasing the use of URL for some tasks; and I worked on the r/place realm. SVGs being a core part of it, working on the place realm led me to contribute to the SVG Markdown extension, allowing me to discover another side of Gno.land and to work with a member of the main team. I really enjoyed being part of the Student Contributor Program and being part of this great team!’ [@paulogarithm](http://paulogarithm/) ‘This cohort was, in my opinion, a fantastic experience that significantly enhanced my skills across multiple areas. When I first joined Gno, I had little to no knowledge of blockchain in general (my expertise was mainly limited to coding in Go). By the end of the cohort, I not only gained a solid understanding of how Gno operates, but I also explored blockchain technology more broadly by studying its underlying principles and working on projects such as the EVM, essentially the Ethereum Virtual Machine bytecode being interpreted within Gno.land. Additionally, I improved my ability to work with decentralized applications (dApps) and deepened my understanding of low-level concepts related to virtual machines.’ [@Chaegnal](https://github.com/Chaegnal) ‘During my time in the Epitech x Gno.land cohort I was able to deepen my understanding and improve my skill on blockchains. Using Gno allowed me to use my previous Go coding experience in a different setting. My work was mainly focused on dApps, I first focused on building an app to help groups organize themselves. This dApp used core blockchain principles like DAO, which I integrated by using a new package that acts as a DAO factory. By using this new package, I gained experience that I was able to share by documenting it. This focused on the open source aspect of the project, as the documentation is aimed to help new Gno builders. Overall, I want to thank every member of the Gno ecosystem, for making this experience fulfilling and a great learning experience for all of us. I enjoyed being part of this amazing project, carried out by passionate people!’ ## That’s a wrap This cohort brought energy, creativity, and fresh perspectives to Gno.land. Their contributions ranging from dApp experiments to infrastructure-level improvements, and testing demonstrated the potential and ease Gno enables. Thank you for your contributions and becoming part of the Gno.land community. If you are interested in joining a [Gno.land](http://Gno.land) student cohort, find out more details [here](https://github.com/gnolang/student-contributors-program). , 2025-08-18T00:00:00Z, michelleellen, gnoland,students,community,scp,internship)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "scp-cohort-4",
    "Student Contributor Program: Cohort 4 Wrap-up",
    "\n\nWe’ve recently concluded the fourth cohort of our Student Contributor Program with third-year Epitech POC Innovation students. Over the course of five months, six students dove deep into Gno.land, learning, contributing, and building projects.\n\nThe program kicked off with a few weeks of onboarding and discovery, allowing the students to explore Gno.land’s architecture, tooling, and community. From there, they quickly started developing and contributing ideas, fixes, and features.\n\nAs part of their experience, the students participated in hands-on workshops with our core team in Paris. Some also joined us at EthCC, gaining exposure to the broader blockchain ecosystem.\n\nEach student began by creating their home realm and documenting their journey in the Hackerspace repo. At the end of the cohort, each student wrote a report to detail the internship experience, the learnings, engineering projects and takeaways. For the Gno engineering team and DevRels these reports are critical to gaining insights into how documentation is applied, challenges, voids and general areas to improve onboarding.\n\n## Student advice to getting started\n\n- Always use `gnodev`: Develop with the same interface end-users will see to catch issues early and save both gas and time.\n- Start small: Build a simple home realm, blog, game, or voting app. A hands-on approach teaches more than just documentation reading.\n- Keep a HackerSpace diary: Write short weekly notes about what you build, learn, or fix. It makes progress tracking easy and helps mentors guide you. All are linked with the 'journey' [label](https://github.com/gnolang/hackerspace/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22🌄%20journey%22)\n- Read other's Gno code: The monorepo is full of solid, real-world examples that can accelerate your learning. \n- Ask questions early and often: Use Office Hours, PR comments, or Signal. Small clarifications now prevent big roadblocks later.\n- Expect rough edges: Gno is still evolving, so some issues may be language-level limitations, but a good experience in experimentation.\n- Stick to determinism: Avoid relying on time, randomness, or anything non-deterministic; these are not practical on-chain.\n- Experiment safely: Push the VM to its limits, test edge cases, and learn from breakage. Bugs you find can become your first GitHub issues.\n\n## Student Contribution Highlights\n\nThe cohort tackled a wide range of technical and creative projects, including applications, tools, and ecosystem enhancements. Here's a highlight of what they accomplished:\n\n#### Applications & Demos\n\n- Reddit-style r/place on Gno.land\n- Pokémon Fight Simulator\n- Calculator Realm\n- Change.org-style petition realm\n- Friendly Organizer app using the CommonDAO implementation\n\n#### Core Enhancements & Utilities\n\n- Levenshtein Distance package - link/pkgpath\n- Profiling Support for GnoVM (70ipprof + Flamegraph)\n- SVG Extension\n- Improvements to the blog realm\n\n#### Documentation\n\n- CommonDAO Tutorial\n- Solidity Famous Patterns\n\n## Student Reflections\n\n[@louonezime](https://github.com/louonezime) ‘Over the course of this cohort, I had the opportunity to explore and build within the Gno.land ecosystem. I especially enjoyed working on rebuilding the blog package, which gave me the chance to be creative while learning Gno. The open-source environment made the experience smooth and collaborative. All in all, it was a great way to contribute to something meaningful in the blockchain space, especially since it was my first time getting into it.’\n\n[@mounia](https://github.com/moonia) ‘During this cohort, I had the opportunity to get hands-on with the Gno.land ecosystem by working on two technical projects. I explored the idea of a Gno-based EVM interpreter, allowing Solidity bytecode to run in a Gno-native environment. I also led the profiling project for GnoVM, enabling source-level insights via pprof and flamegraph tools. It was a great opportunity to contribute meaningful tools while learning the internals of Gno and I really appreciated how close Gno feels to Go. Overall, it was a great experience that deepened my interest in the blockchain space and made me eager to keep contributing.’\n\n[@Tchips46](https://github.com/Tchips46) ‘During this cohort, I focused on exploring the EVM on Gno.land, which helped me understand complex blockchain concepts and the inner workings of virtual machines. I learned how to build more advanced dApps and got introduced to Solidity. This allowed me to write documentation about well-known Solidity design patterns, using examples to make them easier to understand. Overall, it was a valuable experience that grew my technical skills and deepened my understanding of blockchain development.’\n\n[@NicolasMelet](https://github.com/NicolasMelet) ‘Working on Gno.land was an amazing opportunity to discover new technologies and work on a blockchain space for the first time. My main area of interest was developing new dApps in Gno while trying to highlight different features everytime. As such I started by creating the Calculator realm, showcasing the use of URL for some tasks; and I worked on the r/place realm. SVGs being a core part of it, working on the place realm led me to contribute to the SVG Markdown extension, allowing me to discover another side of Gno.land and to work with a member of the main team. I really enjoyed being part of the Student Contributor Program and being part of this great team!’\n\n[@paulogarithm](http://paulogarithm/) ‘This cohort was, in my opinion, a fantastic experience that significantly enhanced my skills across multiple areas. When I first joined Gno, I had little to no knowledge of blockchain in general (my expertise was mainly limited to coding in Go). By the end of the cohort, I not only gained a solid understanding of how Gno operates, but I also explored blockchain technology more broadly by studying its underlying principles and working on projects such as the EVM, essentially the Ethereum Virtual Machine bytecode being interpreted within Gno.land. Additionally, I improved my ability to work with decentralized applications (dApps) and deepened my understanding of low-level concepts related to virtual machines.’\n\n[@Chaegnal](https://github.com/Chaegnal) ‘During my time in the Epitech x Gno.land cohort I was able to deepen my understanding and improve my skill on blockchains. Using Gno allowed me to use my previous Go coding experience in a different setting. My work was mainly focused on dApps, I first focused on building an app to help groups organize themselves. This dApp used core blockchain principles like DAO, which I integrated by using a new package that acts as a DAO factory. By using this new package, I gained experience that I was able to share by documenting it. This focused on the open source aspect of the project, as the documentation is aimed to help new Gno builders. Overall, I want to thank every member of the Gno ecosystem, for making this experience fulfilling and a great learning experience for all of us. I enjoyed being part of this amazing project, carried out by passionate people!’\n\n## That’s a wrap\n\nThis cohort brought energy, creativity, and fresh perspectives to Gno.land. Their contributions ranging from dApp experiments to infrastructure-level improvements, and testing demonstrated the potential and ease Gno enables. Thank you for your contributions and becoming part of the Gno.land community.\n\nIf you are interested in joining a [Gno.land](http://Gno.land) student cohort, find out more details [here](https://github.com/gnolang/student-contributors-program).\n",
    "2025-08-18T00:00:00Z",
    "michelleellen",
    "gnoland,students,community,scp,internship"
  ],
  "max_deposit": ""
}
#56 vm/execgno.land/r/gnoland/blog.ModAddPost(monthly-dev-16, The More You Gno 16, In this edition of *The More You Gno*, we're highlighting progress made during the recent *Just Make* sprint (still ongoing), the release of Test8 (a closed testnet for performance testing), and what’s coming next as we move closer to a Beta Mainnet release candidate. ## 'Just Make' Gno.land The kick off of the *Just Make* initiative gave a significant push toward Beta Mainnet readiness. Seventeen team members, partners, and contributors gathered in person, many more supported remotely, to identify and fast-track the remaining Beta Mainnet scope. During the first-phase with the in-person sprint, the team completed around 65% of the outstanding work required for the Beta launch. Most pending pull requests were reviewed, with a few important ones like the [`std split`](https://github.com/gnolang/gno/pull/4040) just recently completed. We also released Test8 during the in-person session, which incorporated all merged PRs from the initial part of the sprint. This testnet release included a major update to the examples folder, making a clearer distinction between system contracts and demo contracts. Looking ahead, the focus is on wrapping up the final items from the *Just Make* scope, which are available for review in the linked [project](https://github.com/orgs/gnolang/projects/62). Test9 is coming soon, and we’ll continue stress testing the network to ensure stability. ## Testnet News While Test7 has been sunsetted, it played an important role in recent improvements. GovDAO v3 was thoroughly tested on Test7, with seven proposals created, voted on, and executed on-chain. Network performance improved significantly, scaling the validator set to 35 nodes, and external workflows are now running more smoothly across the board. The [Gno.land staging network](https://gno.land) is up-to-date with the latest merges on the monorepo, and another live network for testing your code real-time with all the newest features. ## Stay in the Gno: Gnome Digest and Tech Discussions There are several ways to stay updated with what’s happening in the Gno.land builder community. Gnome Digest is a weekly [roundup](https://x.com/_gnoland/status/1965445290279985630) of contributor updates, shared on X. Every other week, we also host Tech Discussions published on [YouTube](https://youtu.be/b-hPHxVGuq8), where contributors share demos, the team covers key topics, and DevRel recaps recent builder highlights. If you’re looking to engage directly, you’re always welcome to join our developer office hours every week (Thursdays) on Discord. ## Contributor Program We recently [concluded](https://gno.land/r/gnoland/blog:p/scp-cohort-4) a Student Contributor Program (SCP) cohort, which brought in several students from Epitech University for a six-month deep dive into Gno. They worked on various aspects of the project. We’ve kicked off a new SCP program for the second half of the year, and look forward to their contributions. We’re always looking for new contributors, and the best way to get started is by exploring the ‘good first issues’ on the repo and opening pull requests to help resolve them. You can also visit the Gnoverse [community repo](https://github.com/gnoverse/community) to develop your smart contract templates for feedback. ## Bounty Program Update The Gno.land Bounty Program continues to grow and evolve. It covers a range of categories including Meta, Scoped, Competing Implementations, and Architectural Solutions. A new category, Security Bounties, was recently added, focusing on providing solutions to select security issues. Developers interested in participating can find active opportunities by searching for the "bounty" label on the Gno repository. More information, including participation guidelines, is available in the [Gno.land Bounties Repo](https://github.com/gnolang/bounties). ## New Workshop: Intro to Gno At GopherCon in August, we hosted a [hands-on workshop](https://github.com/aeddi/gno-workshop) to help Go developers get started with Gno. The session walked attendees through building their first Gno application step by step. It's now available online for anyone looking to start their journey with the Gno platform. So now you gno! As the team continues to work on getting Gno.land ready for Beta Mainnet, we want to thank the entire community of gnomes around the world for your continued support and contributions. , 2025-09-30T00:00:00Z, michelleellen, gnoland,ecosystem,updates,TMYG,community)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "monthly-dev-16",
    "The More You Gno 16",
    "\n\nIn this edition of *The More You Gno*, we're highlighting progress made during\nthe recent *Just Make* sprint (still ongoing), the release of Test8 (a closed \ntestnet for performance testing), and what’s coming next as we move closer to a\nBeta Mainnet release candidate.\n\n## 'Just Make' Gno.land\n\nThe kick off of the *Just Make* initiative gave a significant push toward Beta\nMainnet readiness. Seventeen team members, partners, and contributors gathered\nin person, many more supported remotely, to identify and fast-track the remaining \nBeta Mainnet scope.\n\nDuring the first-phase with the in-person sprint, the team completed around 65% \nof the outstanding work required for the Beta launch. Most pending pull requests \nwere reviewed, with a few important ones like the [`std split`](https://github.com/gnolang/gno/pull/4040) \njust recently completed. \n\nWe also released Test8 during the in-person session, which incorporated all \nmerged PRs from the initial part of the sprint. This testnet release included \na major update to the examples folder, making a clearer distinction between \nsystem contracts and demo contracts.\n\nLooking ahead, the focus is on wrapping up the final items from the *Just Make*\nscope, which are available for review in the linked [project](https://github.com/orgs/gnolang/projects/62).\nTest9 is coming soon, and we’ll continue stress testing the network to ensure \nstability.\n\n## Testnet News\n\nWhile Test7 has been sunsetted, it played an important role in recent improvements.\nGovDAO v3 was thoroughly tested on Test7, with seven proposals created, voted on, \nand executed on-chain. Network performance improved significantly, scaling the\nvalidator set to 35 nodes, and external workflows are now running more smoothly \nacross the board.\n\nThe [Gno.land staging network](https://gno.land) is up-to-date with the latest merges on the\nmonorepo, and another live network for testing your code real-time with all the \nnewest features. \n\n## Stay in the Gno: Gnome Digest and Tech Discussions\n\nThere are several ways to stay updated with what’s happening in the Gno.land \nbuilder community. Gnome Digest is a weekly [roundup](https://x.com/_gnoland/status/1965445290279985630) of contributor updates,\nshared on X. Every other week, we also host Tech Discussions published on \n[YouTube](https://youtu.be/b-hPHxVGuq8), where contributors share demos, the team covers key topics, and\nDevRel recaps recent builder highlights. \n\nIf you’re looking to engage directly, you’re always welcome to join our developer \noffice hours every week (Thursdays) on Discord.\n\n## Contributor Program\n\nWe recently [concluded](https://gno.land/r/gnoland/blog:p/scp-cohort-4) a Student Contributor Program (SCP) cohort, which\nbrought in several students from Epitech University for a six-month deep dive \ninto Gno. They worked on various aspects of the project. We’ve kicked off a new \nSCP program for the second half of the year, and look forward to their contributions. \n\nWe’re always looking for new contributors, and the best way to get started is by \nexploring the ‘good first issues’ on the repo and opening pull requests to help \nresolve them. You can also visit the Gnoverse [community repo](https://github.com/gnoverse/community) to develop \nyour smart contract templates for feedback. \n\n## Bounty Program Update\n\nThe Gno.land Bounty Program continues to grow and evolve. It covers a range of\ncategories including Meta, Scoped, Competing Implementations, and Architectural \nSolutions. A new category, Security Bounties, was recently added, focusing on\nproviding solutions to select security issues. Developers interested in participating\ncan find active opportunities by searching for the \"bounty\" label on the Gno repository.\nMore information, including participation guidelines, is available in the\n[Gno.land Bounties Repo](https://github.com/gnolang/bounties).\n\n\n## New Workshop: Intro to Gno\n\nAt GopherCon in August, we hosted a [hands-on workshop](https://github.com/aeddi/gno-workshop) to help Go developers \nget started with Gno. The session walked attendees through building their first\nGno application step by step. It's now available online for anyone looking to \nstart their journey with the Gno platform. \n\n\nSo now you gno! As the team continues to work on getting Gno.land ready for\nBeta Mainnet, we want to thank the entire community of gnomes around the world\nfor your continued support and contributions.\n",
    "2025-09-30T00:00:00Z",
    "michelleellen",
    "gnoland,ecosystem,updates,TMYG,community"
  ],
  "max_deposit": ""
}
#57 vm/execgno.land/r/gnoland/blog.ModAddPost(monthly-dev-17, The More You Gno, Recently, the team launched [Test11](https://test11.testnets.gno.land/), which we expect to be the final testnet before the Beta Mainnet release, barring any major issues. The goal is not simply to deploy new features, but to verify that governance, validator coordination, and network operations function under conditions as close to Beta Mainnet as possible. Test11 introduces multi-signature functionality, updates to the GovDAO, and critical fixes to the GnoVM. It launched with an internal validator set and is now actively exercising governance by voting in additional validators to stress test the system. Currently, three additional core contributor validators have been voted in and the proposal executed. The deployment also demonstrated increased operational maturity across the release workflow and on-chain governance processes. Upgrades, proposal flows, and validator coordination were executed with significantly fewer manual interventions than in prior testnets. ## What Test11 Is Proving The primary purpose of Test11 is final validation. Stability, performance characteristics, governance execution, and validator onboarding are all being tested in parallel. Validator onboarding requires a valoper [profile](https://test11.testnets.gno.land/r/gnops/valopers) setup, a proposal submission by a GovDAO test [member](https://test11.testnets.gno.land/r/gov/dao/v3/memberstore) (for now), and formal [on-chain voting](https://test11.testnets.gno.land/r/gov/dao). The selected group of external validators still need to be voted in by the GovDAO, and their Test11 performance will serve as an important indicator of readiness. In parallel, development continues on the Beta Mainnet launch [milestone](https://github.com/gnolang/gno/milestone/7). The core team will determine which pending fixes are merged before the launch. The two remaining priorities are finalizing the initial GovDAO member composition and completing the genesis token distribution plan. ## Validator Composition and GovDAO For the initial pre-Beta validator set,  we selected a group of interested validators from AtomOne. Selection criteria included alignment with AtomOne, voting participation history, an internal scoring framework, and geographic diversity across multiple countries. Ultimately, Gno.land’s Beta Mainnet GovDAO is responsible for approving the full Gno.land validator set. The initial set for the Beta launch is approximately 15 to 20 validators to kick things off, starting with internal validators and expanding the set through GovDAO votes. Over time, additional validators may be voted in by the GovDAO, with preference given to those who avoid reliance on cloud infrastructure, make meaningful contributions to the community, and strengthen the geographic distribution of the validator set. Gno.land doesn’t operate in the same way as traditional Proof-of-Stake, so being voted in after Beta Mainnet genesis does not carry the same implications as in conventional PoS networks. ## Building Before Beta As Beta approaches, contribution pathways are becoming clearer. After launch, applications, tools, and ecosystem proposals will move through the GovDAO review processes, making this current timeline between Beta and the full Mainnet important. Builders who begin now position themselves ahead of those waiting for finality. ## When Beta Mainnet? The answer has not changed. Mainnet follows readiness. Stability, GnoVM fixes, governance reliability, and validator coordination must meet the required standard set forth by the core engineering team. The work now underway is focused on this. If Test11 proves what it is designed to prove, Beta will follow. , 2026-02-26T00:00:00Z, michelleellen, gnoland,ecosystem,updates,TMYG,community)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "monthly-dev-17",
    "The More You Gno",
    "\n\nRecently, the team launched [Test11](https://test11.testnets.gno.land/), which we expect to be the final testnet before the Beta Mainnet release, barring any major issues. The goal is not simply to deploy new features, but to verify that governance, validator coordination, and network operations function under conditions as close to Beta Mainnet as possible.\n\nTest11 introduces multi-signature functionality, updates to the GovDAO, and critical fixes to the GnoVM. It launched with an internal validator set and is now actively exercising governance by voting in additional validators to stress test the system. Currently, three additional core contributor validators have been voted in and the proposal executed.\n\nThe deployment also demonstrated increased operational maturity across the release workflow and on-chain governance processes. Upgrades, proposal flows, and validator coordination were executed with significantly fewer manual interventions than in prior testnets.\n\n## What Test11 Is Proving\n\nThe primary purpose of Test11 is final validation. Stability, performance characteristics, governance execution, and validator onboarding are all being tested in parallel.\n\nValidator onboarding requires a valoper [profile](https://test11.testnets.gno.land/r/gnops/valopers) setup, a proposal submission by a GovDAO test [member](https://test11.testnets.gno.land/r/gov/dao/v3/memberstore) (for now), and formal [on-chain voting](https://test11.testnets.gno.land/r/gov/dao). The selected group of external validators still need to be voted in by the GovDAO, and their Test11 performance will serve as an important indicator of readiness.\n\nIn parallel, development continues on the Beta Mainnet launch [milestone](https://github.com/gnolang/gno/milestone/7). The core team will determine which pending fixes are merged before the launch. The two remaining priorities are finalizing the initial GovDAO member composition and completing the genesis token distribution plan.\n\n## Validator Composition and GovDAO\n\nFor the initial pre-Beta validator set,  we selected a group of interested validators from AtomOne. Selection criteria included alignment with AtomOne, voting participation history, an internal scoring framework, and geographic diversity across multiple countries.\n\nUltimately, Gno.land’s Beta Mainnet GovDAO is responsible for approving the full Gno.land validator set. The initial set for the Beta launch is approximately 15 to 20 validators to kick things off, starting with internal validators and expanding the set through GovDAO votes. Over time, additional validators may be voted in by the GovDAO, with preference given to those who avoid reliance on cloud infrastructure, make meaningful contributions to the community, and strengthen the geographic distribution of the validator set.\n\nGno.land doesn’t operate in the same way as traditional Proof-of-Stake, so being voted in after Beta Mainnet genesis does not carry the same implications as in conventional PoS networks.\n\n## Building Before Beta\n\nAs Beta approaches, contribution pathways are becoming clearer. After launch, applications, tools, and ecosystem proposals will move through the GovDAO review processes, making this current timeline between Beta and the full Mainnet important. Builders who begin now position themselves ahead of those waiting for finality.\n\n## When Beta Mainnet?\n\nThe answer has not changed. Mainnet follows readiness. Stability, GnoVM fixes, governance reliability, and validator coordination must meet the required standard set forth by the core engineering team. The work now underway is focused on this. If Test11 proves what it is designed to prove, Beta will follow.\n",
    "2026-02-26T00:00:00Z",
    "michelleellen",
    "gnoland,ecosystem,updates,TMYG,community"
  ],
  "max_deposit": ""
}
#58 vm/execgno.land/r/gnoland/blog.ModAddPost(beta-mainnet, Gno.land Beta Mainnet is Live, Gno.land's Beta Mainnet marks the beginning of a new era in application development. Engineered from the ground up, Gno.land is the world's first language-based, multi-user operating system. It pushes the limits of existing blockchain infrastructure and programming languages by making shared computation, persistent state, and composability native to the system itself. Similar to the way Cosmos changed how blockchains intercommunicate, and the Tendermint Byzantine Fault Tolerant Consensus Protocol changed how blockchain developers approach consensus algorithms, Gno.land will change the way developers think about programming. ## Gno.land Genesis Started in 2022 by Jae Kwon, founder of Tendermint and Cosmos, Gno.land set out to bring next-generation smart contract programming to the Cosmos ecosystem. What began as a passion project evolved into a dedicated engineering effort: a novel Layer1 platform, the Gno language (derived from Go), the Gno virtual machine, an application layer, and a universal browser and rendering system to make deployed code human-readable and interactive. Gno.land is a paradigm shift in both programming languages and operating systems. The goal is to become the world's open knowledge base for the new millennium, starting with a powerful development environment for building next-level decentralized applications. ## Launch Phases ### Phase I: The Beta Mainnet (Present) The launch of the Beta Mainnet includes the first distribution of the GNOT token, an operational GnoVM-powered smart contract network, and the inaugural release of GovDAO, Gno.land's on-chain governing system. An initial treasury has been set up, managed by GovDAO members to fund future network development and growth. There will be a period of time where the virtual machine will be hardened and optimized with user provided contracts and automated fuzz tooling (which is currently being developed). Finally, the [Gno.land Constitution](https://github.com/gnolang/gno/blob/master/docs/CONSTITUTION.md) is in a preliminary state, and is expected to be ratified by a Supermajority Decision of GovDAO now that the Beta Mainnet is live. Note: For now, token transfers are disabled during Beta; GNOT is usable within the network for supported on-chain functions. ### Phase II: Mainnet This phase will enable GNOT transfers. The activation of GNOT transfers will be proposed and voted on by GovDAO. Once transfers are enabled, Gno.land's economy will begin forming with the community's help. The priority then becomes growth: expand awareness, attract a core group of new Go developers, prototype dApps at speed, and equip builders with better tools. We will also see numerous optimizations of the Gno virtual machine both during the Beta Mainnet and Mainnet phases. More to come later! ### Phase III: Expanding the Network The next engineering task following Beta Mainnet, focuses on secure interoperability with a priority on bridging AtomOne and Gno.land. This includes integrating and testing key Cosmos technologies: Inter-Blockchain Communication (IBC) and [Interchain Security (ICS)](https://allinbits.com/blog/rethinking-ics/). *Timelines for each phase will be communicated as they solidify.* [![Gno.land Beta Mainnet](https://gnolang.github.io/blog/2026-03-25_beta-mainnet/src/thumbs/banner.png)](https://gnolang.github.io/blog/2026-03-25_beta-mainnet/src/banner.png) ## GNOT Distribution Details Of the 1 billion total GNOT token supply, 70% is being distributed to the community in three categories. - Cosmos recipients: 35% has been allocated to a partial governance snapshot taken on [May 20th, 2022 (block 10,562,840)](https://www.mintscan.io/cosmos/block/10562840) - AtomOne recipients: 23.1% has been allocated to ATONE and PHOTON holders from a snapshot dated at [December 25th, 2025 (block 6439117)](https://www.mintscan.io/atomone/block/6439117) - Gno contributors: 11.9% has been allocated for distribution to prior and new Gno.land ecosystem contributors. This category will be managed in the future by a GovDAO subDAO. *Allocation figures and eligibility are based on snapshots and current records and may be adjusted to correct errors, prevent abuse, or comply with legal requirements.* From the remaining 30% GNOT supply, 7% has been reserved for current and future private token purchase rounds (if any), subject to applicable law, while the remaining 23% will be managed by NewTendermint, LLC. GovDAO and NewTendermint, LLC together will develop, support and maintain the Gno.land ecosystem. ## Beta Means Beta Beta Mainnet is a milestone, not the finish line. While the network is stable enough for builders and community members to begin experimenting, occasional chain instability, including network interruptions or restarts, as well as breaking changes may alter existing features or contracts. Data resets *will* occur as development progresses. This is intentional; learning how to recover from these issues and developing tooling to make the process smoother is part of the objective of the beta phase. The key objectives are to deploy and build realms, packages, and contracts to validate core functionality, stress-test the network to explore its performance limits and validator behavior, and report and document any findings, bugs, or improvement opportunities to the community. Every bug found, every realm deployed, and every part of Gno.land tested brings the network one step closer to a fully production-ready mainnet. ## Join the Beta Mainnet Experience There are many ways to contribute, whether you are a developer, a validator, or a network enthusiast, there's a few ways to push the ecosystem forward. ### Gnomies For Cosmos and AtomOne recipients, you can check your GNOT balance with your Cosmos Hub or AtomOne address using the [Coin Balance Checker](https://gno.land/r/gnoland/coins). You have two options for managing your GNOT tokens and interacting with the network: - Creating or importing your existing wallet through the [Adena Wallet](https://www.adena.app/) - Using [Gnokey CLI](https://docs.gno.land/users/interact-with-gnokey), the command-line wallet for Gno.land <span style="color:red">**WARNING: Never enter your mnemonic (secret 12, 18, or 24 words) on any device that is or will ever be connected to the internet, not even on the Adena Wallet or Gnokey CLI. While you can check your GNOT balance, and use the Gno.land network, token transfers are currently not available.**</span> If you didn't receive GNOT, you can still explore Beta Mainnet via the [Faucet Hub](https://faucet.gno.land/) by requesting tokens from a drip faucet. The [Staging network](https://staging.gno.land/) is also available for experimentation using a separate test token. ### Developers If you have the skills to go further at this early stage, you can make meaningful code contributions, tooling, smart contract examples, and killer applications. Your contributions are integral to shaping and bootstrapping the network. Developers can start by deploying a simple realm, exploring the example contracts, or submitting a pull request either directly in the [Gno repository](https://github.com/gnolang), or in [Gnoverse](https://github.com/gnoverse), a collaborative space for experimental and innovative projects inspired by the Gno.land ecosystem. The best way to jump right in is visiting the [Gno.land Documentation](https://docs.gno.land/). Contributors to the ecosystem may eventually deploy GRC-20 smart contracts enabling future on-chain swap functionality with [Gnoswap](https://beta.gnoswap.io/), the first decentralized exchange (DEX) on Gno.land. ### Validators Validators can join the set, help test scaling, and prepare for future upgrades. Beta Mainnet validators are added to the valset only through a GovDAO proposal. Unlike other networks where validators stake their funds and earn rewards, Gno.land's validator slots are given to contributors with proven track records. You can register your validator for consideration on the Gno.land [Valoper Registry](https://gno.land/r/gnops/valopers) and learn more [here](https://gnops.io/articles/guides/become-testnet-validator/) on how to get started. ### Everyone The Gno.land block explorer, [GnoScan](https://gnoscan.io/), gives you an overview of Gno.land networks like Beta Mainnet as well as Staging, or ongoing testnets. It includes important data for an overview of the network's status as well as a myriad of transactions made including total storage deposits, realm deployments, and fungible tokens (GRC20 token standard). ## Recognition and the Road Ahead Phase II is expected to enable token transfers and expand development and user tooling. Phase III will focus on interoperability and building bridges to the Cosmos ecosystem. Each phase builds toward establishing Gno.land as the go-to operating system and platform for a censorship-free and economically viable alternative to today's broken internet. Early adopters and contributors will always be remembered within the network. Whether your impact comes through core code, or creative realms, we'll spotlight your work and share it with the wider community. Now is the time. The Beta Mainnet is only the beginning. Join our community: - Webpage: [https://gno.land/](https://gno.land/) - GitHub: [https://github.com/gnolang/](https://github.com/gnolang/) - Docs: [https://docs.gno.land/](https://docs.gno.land/) - X: [https://x.com/_gnoland](https://x.com/_gnoland) - Discord: [Discord.gg/gnoland](https://discord.gg/gnoland) - Telegram: [https://t.me/join_gnoland](https://t.me/join_gnoland) - Gno.land Linker: [https://gno.land/links](https://gno.land/links) *Disclaimer:* *This announcement is for informational purposes only and is not an offer to sell or a solicitation to buy any token or any other instrument. It includes forward-looking statements and targets that may change; actual outcomes may differ materially. Participation may be restricted or unavailable in certain jurisdictions. Beta features and network behavior may change, including through upgrades, restarts, or data resets.* , 2026-03-25T00:00:00Z, michelleellen,Ticojohnny, gnoland,ecosystem,community)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "beta-mainnet",
    "Gno.land Beta Mainnet is Live",
    "\n\nGno.land's Beta Mainnet marks the beginning of a new era in application development. Engineered from the ground up, Gno.land is the world's first language-based, multi-user operating system. It pushes the limits of existing blockchain infrastructure and programming languages by making shared computation, persistent state, and composability native to the system itself.\n\nSimilar to the way Cosmos changed how blockchains intercommunicate, and the Tendermint Byzantine Fault Tolerant Consensus Protocol changed how blockchain developers approach consensus algorithms, Gno.land will change the way developers think about programming.\n\n## Gno.land Genesis\n\nStarted in 2022 by Jae Kwon, founder of Tendermint and Cosmos, Gno.land set out to bring next-generation smart contract programming to the Cosmos ecosystem. What began as a passion project evolved into a dedicated engineering effort: a novel Layer1 platform, the Gno language (derived from Go), the Gno virtual machine, an application layer, and a universal browser and rendering system to make deployed code human-readable and interactive.\n\nGno.land is a paradigm shift in both programming languages and operating systems. The goal is to become the world's open knowledge base for the new millennium, starting with a powerful development environment for building next-level decentralized applications.\n\n## Launch Phases\n\n### Phase I: The Beta Mainnet (Present)\n\nThe launch of the Beta Mainnet includes the first distribution of the GNOT token, an operational GnoVM-powered smart contract network, and the inaugural release of GovDAO, Gno.land's on-chain governing system. An initial treasury has been set up, managed by GovDAO members to fund future network development and growth. There will be a period of time where the virtual machine will be hardened and optimized with user provided contracts and automated fuzz tooling (which is currently being developed). Finally, the [Gno.land Constitution](https://github.com/gnolang/gno/blob/master/docs/CONSTITUTION.md) is in a preliminary state, and is expected to be ratified by a Supermajority Decision of GovDAO now that the Beta Mainnet is live.\n\nNote: For now, token transfers are disabled during Beta; GNOT is usable within the network for supported on-chain functions.\n\n### Phase II: Mainnet\n\nThis phase will enable GNOT transfers. The activation of GNOT transfers will be proposed and voted on by GovDAO. Once transfers are enabled, Gno.land's economy will begin forming with the community's help. The priority then becomes growth: expand awareness, attract a core group of new Go developers, prototype dApps at speed, and equip builders with better tools.\n\nWe will also see numerous optimizations of the Gno virtual machine both during the Beta Mainnet and Mainnet phases. More to come later!\n\n### Phase III: Expanding the Network\n\nThe next engineering task following Beta Mainnet, focuses on secure interoperability with a priority on bridging AtomOne and Gno.land. This includes integrating and testing key Cosmos technologies: Inter-Blockchain Communication (IBC) and [Interchain Security (ICS)](https://allinbits.com/blog/rethinking-ics/).\n\n*Timelines for each phase will be communicated as they solidify.*\n\n[![Gno.land Beta Mainnet](https://gnolang.github.io/blog/2026-03-25_beta-mainnet/src/thumbs/banner.png)](https://gnolang.github.io/blog/2026-03-25_beta-mainnet/src/banner.png)\n\n## GNOT Distribution Details\n\nOf the 1 billion total GNOT token supply, 70% is being distributed to the community in three categories.\n\n- Cosmos recipients: 35% has been allocated to a partial governance snapshot taken on [May 20th, 2022 (block 10,562,840)](https://www.mintscan.io/cosmos/block/10562840)\n- AtomOne recipients: 23.1% has been allocated to ATONE and PHOTON holders from a snapshot dated at [December 25th, 2025 (block 6439117)](https://www.mintscan.io/atomone/block/6439117)\n- Gno contributors: 11.9% has been allocated for distribution to prior and new Gno.land ecosystem contributors. This category will be managed in the future by a GovDAO subDAO.\n\n*Allocation figures and eligibility are based on snapshots and current records and may be adjusted to correct errors, prevent abuse, or comply with legal requirements.*\n\nFrom the remaining 30% GNOT supply, 7% has been reserved for current and future private token purchase rounds (if any), subject to applicable law, while the remaining 23% will be managed by NewTendermint, LLC. GovDAO and NewTendermint, LLC together will develop, support and maintain the Gno.land ecosystem.\n\n## Beta Means Beta\n\nBeta Mainnet is a milestone, not the finish line. While the network is stable enough for builders and community members to begin experimenting, occasional chain instability, including network interruptions or restarts, as well as breaking changes may alter existing features or contracts. Data resets *will* occur as development progresses. This is intentional; learning how to recover from these issues and developing tooling to make the process smoother is part of the objective of the beta phase.\n\nThe key objectives are to deploy and build realms, packages, and contracts to validate core functionality, stress-test the network to explore its performance limits and validator behavior, and report and document any findings, bugs, or improvement opportunities to the community.\n\nEvery bug found, every realm deployed, and every part of Gno.land tested brings the network one step closer to a fully production-ready mainnet.\n\n## Join the Beta Mainnet Experience\n\nThere are many ways to contribute, whether you are a developer, a validator, or a network enthusiast, there's a few ways to push the ecosystem forward.\n\n### Gnomies\n\nFor Cosmos and AtomOne recipients, you can check your GNOT balance with your Cosmos Hub or AtomOne address using the [Coin Balance Checker](https://gno.land/r/gnoland/coins). You have two options for managing your GNOT tokens and interacting with the network:\n\n- Creating or importing your existing wallet through the [Adena Wallet](https://www.adena.app/)\n- Using [Gnokey CLI](https://docs.gno.land/users/interact-with-gnokey), the command-line wallet for Gno.land\n\n<span style=\"color:red\">**WARNING: Never enter your mnemonic (secret 12, 18, or 24 words) on any device that is or will ever be connected to the internet, not even on the Adena Wallet or Gnokey CLI. While you can check your GNOT balance, and use the Gno.land network, token transfers are currently not available.**</span>\n\nIf you didn't receive GNOT, you can still explore Beta Mainnet via the [Faucet Hub](https://faucet.gno.land/) by requesting tokens from a drip faucet. The [Staging network](https://staging.gno.land/) is also available for experimentation using a separate test token.\n\n### Developers\n\nIf you have the skills to go further at this early stage, you can make meaningful code contributions, tooling, smart contract examples, and killer applications. Your contributions are integral to shaping and bootstrapping the network.\n\nDevelopers can start by deploying a simple realm, exploring the example contracts, or submitting a pull request either directly in the [Gno repository](https://github.com/gnolang), or in [Gnoverse](https://github.com/gnoverse), a collaborative space for experimental and innovative projects inspired by the Gno.land ecosystem. The best way to jump right in is visiting the [Gno.land Documentation](https://docs.gno.land/).\n\nContributors to the ecosystem may eventually deploy GRC-20 smart contracts enabling future on-chain swap functionality with [Gnoswap](https://beta.gnoswap.io/), the first decentralized exchange (DEX) on Gno.land.\n\n### Validators\n\nValidators can join the set, help test scaling, and prepare for future upgrades. Beta Mainnet validators are added to the valset only through a GovDAO proposal. Unlike other networks where validators stake their funds and earn rewards, Gno.land's validator slots are given to contributors with proven track records. You can register your validator for consideration on the Gno.land [Valoper Registry](https://gno.land/r/gnops/valopers) and learn more [here](https://gnops.io/articles/guides/become-testnet-validator/) on how to get started.\n\n### Everyone\n\nThe Gno.land block explorer, [GnoScan](https://gnoscan.io/), gives you an overview of Gno.land networks like Beta Mainnet as well as Staging, or ongoing testnets. It includes important data for an overview of the network's status as well as a myriad of transactions made including total storage deposits, realm deployments, and fungible tokens (GRC20 token standard).\n\n## Recognition and the Road Ahead\n\nPhase II is expected to enable token transfers and expand development and user tooling. Phase III will focus on interoperability and building bridges to the Cosmos ecosystem. Each phase builds toward establishing Gno.land as the go-to operating system and platform for a censorship-free and economically viable alternative to today's broken internet.\n\nEarly adopters and contributors will always be remembered within the network. Whether your impact comes through core code, or creative realms, we'll spotlight your work and share it with the wider community. Now is the time. The Beta Mainnet is only the beginning.\n\nJoin our community:\n\n- Webpage: [https://gno.land/](https://gno.land/)\n- GitHub: [https://github.com/gnolang/](https://github.com/gnolang/)\n- Docs: [https://docs.gno.land/](https://docs.gno.land/)\n- X: [https://x.com/_gnoland](https://x.com/_gnoland)\n- Discord: [Discord.gg/gnoland](https://discord.gg/gnoland)\n- Telegram: [https://t.me/join_gnoland](https://t.me/join_gnoland)\n- Gno.land Linker: [https://gno.land/links](https://gno.land/links)\n\n*Disclaimer:*\n\n*This announcement is for informational purposes only and is not an offer to sell or a solicitation to buy any token or any other instrument. It includes forward-looking statements and targets that may change; actual outcomes may differ materially. Participation may be restricted or unavailable in certain jurisdictions. Beta features and network behavior may change, including through upgrades, restarts, or data resets.*\n",
    "2026-03-25T00:00:00Z",
    "michelleellen,Ticojohnny",
    "gnoland,ecosystem,community"
  ],
  "max_deposit": ""
}
#59 vm/execgno.land/r/gnoland/blog.ModAddPost(test-13, Test13 is Live, We’re pleased to announce that Test13 is live. As we draw nearer to mainnet launch, Test13 marks a significant milestone in the development of the Gno.land blockchain. ## What’s New in Test13? Test13 is a consensus-breaking release for the Gno testnet line with the following changes. #### Interrealm Semantics Overhaul - Packages under `/p/` and the standard library are now persistent frozen Realms - Cross-realm panics from `/p/` abort instead of being catchable by `recover()` - The old `N_Readonly` provenance taint has been removed in favor of PkgID ownership checks at pointer dereference boundaries #### Additional Updates - Hardfork v3 support - GovDAO-driven chain halt handling - Coordinated `halt_height` upgrades - Validator-set limits - Session accounts - Improved genesis/replay tooling - Calibrated gas and storage changes - Safer markdown handling - Gnoweb search and UX improvements - Gnokey behavior updates - Broad VM/RPC/web/security hardening Read the full [change log here](https://github.com/gnolang/gno/releases/tag/chain/test13). ## What Test13 Means for Our Community In the practical sense, Test13 opens up a range of possibilities for developers: - Deploy and run applications using faucet tokens with no risk of monetary loss - Iterate on Gno code, realms, and packages in a production-like setting - Onboard early users and gather feedback before deploying on mainnet - Turn ideas into decentralized applications and test product-market fit - Estimate costs of building certain applications to determine the financial feasibility of deploying them For the broader community, Test13 is a chance to explore Gno.land firsthand. Keep an eye out for DeFi and gaming experiences from ecosystem projects like [GnoSwap](https://x.com/gnoswaplabs) and [Akkadia](https://x.com/akkadialand) as they come online. As the ecosystem grows, so will the ways to engage with Gno.land. For our validators, we’ll give you an update on what needs to be done next. To get started, visit [Test13](https://test13.testnets.gno.land/), receive test GNOT through our [faucet](https://test13.testnets.gno.land/faucet), and explore available [RPC endpoints](https://rpc.test13.testnets.gno.land/) if needed. ## Why Test13 Matters Test13 is a significant step forward in Gno.land's journey toward mainnet. The release delivers foundational improvements across security, gas modeling, VM correctness, and chain upgrade infrastructure, each addressing core engineering challenges and reducing risk for the network in the long term. Mainnet is when the network becomes permanent, real value starts to flow, and Gno.land’s vision of a transparent and composable blockchain platform becomes reality. Test13 brings that vision meaningfully closer. ## What’s Next? We've put Test13 through rigorous internal testing, and now it's time to open it up to the community. By deploying contracts, transacting, and exploring the network, you play a direct role in validating that the chain is ready for what comes next. And what comes next is important. The core team is actively preparing for mainnet, which includes the Token Generation Event (TGE), live GNOT transfers, on-chain governance through GovDAO, Inter-Blockchain Communication (IBC) and Interchain Security (ICS) integrations with AtomOne, continued optimization of the GnoVM, improved developer tooling, and the broader growth of the Gno.land ecosystem. Welcome to Test13. Join the conversation on [Discord](https://discord.gg/gnoland) and [Telegram](https://t.me/join_gnoland). , 2026-06-16T12:00:00Z, ryanlee19, gnoland,ecosystem,updates,test13,community,blog)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "test-13",
    "Test13 is Live",
    "\n\nWe’re pleased to announce that Test13 is live. As we draw nearer to mainnet launch, Test13 marks a significant milestone in the development of the Gno.land blockchain.\n\n## What’s New in Test13?\n\nTest13 is a consensus-breaking release for the Gno testnet line with the following changes.\n\n#### Interrealm Semantics Overhaul\n- Packages under `/p/` and the standard library are now persistent frozen Realms\n- Cross-realm panics from `/p/` abort instead of being catchable by `recover()`\n- The old `N_Readonly` provenance taint has been removed in favor of PkgID ownership checks at pointer dereference boundaries\n\n#### Additional Updates\n- Hardfork v3 support\n- GovDAO-driven chain halt handling\n- Coordinated `halt_height` upgrades\n- Validator-set limits\n- Session accounts\n- Improved genesis/replay tooling\n- Calibrated gas and storage changes\n- Safer markdown handling\n- Gnoweb search and UX improvements\n- Gnokey behavior updates\n- Broad VM/RPC/web/security hardening\n\nRead the full [change log here](https://github.com/gnolang/gno/releases/tag/chain/test13).\n\n## What Test13 Means for Our Community\n\nIn the practical sense, Test13 opens up a range of possibilities for developers:\n\n- Deploy and run applications using faucet tokens with no risk of monetary loss\n- Iterate on Gno code, realms, and packages in a production-like setting\n- Onboard early users and gather feedback before deploying on mainnet\n- Turn ideas into decentralized applications and test product-market fit\n- Estimate costs of building certain applications to determine the financial feasibility of deploying them\n\nFor the broader community, Test13 is a chance to explore Gno.land firsthand. Keep an eye out for DeFi and gaming experiences from ecosystem projects like [GnoSwap](https://x.com/gnoswaplabs) and [Akkadia](https://x.com/akkadialand) as they come online. As the ecosystem grows, so will the ways to engage with Gno.land. For our validators, we’ll give you an update on what needs to be done next.\n\nTo get started, visit [Test13](https://test13.testnets.gno.land/), receive test GNOT through our [faucet](https://test13.testnets.gno.land/faucet), and explore available [RPC endpoints](https://rpc.test13.testnets.gno.land/) if needed.\n\n## Why Test13 Matters\n\nTest13 is a significant step forward in Gno.land's journey toward mainnet. The release delivers foundational improvements across security, gas modeling, VM correctness, and chain upgrade infrastructure, each addressing core engineering challenges and reducing risk for the network in the long term.\n\nMainnet is when the network becomes permanent, real value starts to flow, and Gno.land’s vision of a transparent and composable blockchain platform becomes reality. Test13 brings that vision meaningfully closer.\n\n## What’s Next?\n\nWe've put Test13 through rigorous internal testing, and now it's time to open it up to the community. By deploying contracts, transacting, and exploring the network, you play a direct role in validating that the chain is ready for what comes next.\n\nAnd what comes next is important. The core team is actively preparing for mainnet, which includes the Token Generation Event (TGE), live GNOT transfers, on-chain governance through GovDAO, Inter-Blockchain Communication (IBC) and Interchain Security (ICS) integrations with AtomOne, continued optimization of the GnoVM, improved developer tooling, and the broader growth of the Gno.land ecosystem.\n\nWelcome to Test13. Join the conversation on [Discord](https://discord.gg/gnoland) and [Telegram](https://t.me/join_gnoland).\n",
    "2026-06-16T12:00:00Z",
    "ryanlee19",
    "gnoland,ecosystem,updates,test13,community,blog"
  ],
  "max_deposit": ""
}
#60 vm/execgno.land/r/gnoland/blog.ModAddPost(topaz, Topaz is Live, We’re pleased to announce that Topaz, the latest test network for Gno.land, is live. Topaz is the next iteration after Test13, and it is a new chain, not a hardfork. **Notice: Topaz is an experimental test network.** Because no state carries over from Test13, balances, realms, and registered names all start at zero. You’ll have to receive GNOT from the [faucet](https://topaz.testnets.gno.land/faucet) and re-register your names. Test13 will sunset within the next 24 hours. ### Chain Details - Chain ID: `topaz-1` - 90 curated packages at genesis - 2 founding validators, namespace enforcement (`r/sys/names`) live from block 1 - 10 pre-funded faucets - Unrestricted token transfers - Code baseline: master [959cefd91](https://github.com/gnolang/gno/commit/959cefd916021d3a55e9b51f20d05ef618e7f357), 133 commits ahead of Test13 ## What’s New in Topaz? ### Breaking / Consensus-relevant Updates - `fix(grc20)!`: token id decoupled from symbol ([#5908](https://github.com/gnolang/gno/pull/5908)) - secp256k1 validator keys no longer supported ([#5949](https://github.com/gnolang/gno/pull/5949)) - package name must match the last path element at `addpkg` ([#5048](https://github.com/gnolang/gno/pull/5048)) - `cockroachdb/apd` replaced by `math/big.Rat` in the VM ([#5867](https://github.com/gnolang/gno/pull/5867)) - type-check + preprocess gas now metered at `AddPackage/Run` ([#5892](https://github.com/gnolang/gno/pull/5892)) ### VM Correctness Notable fixes from the large batch of gnovm fixes are: - interface-bound method dispatch ([#5737](https://github.com/gnolang/gno/pull/5737)) - embedded field/method lookup ([#5721](https://github.com/gnolang/gno/pull/5721), [#5739](https://github.com/gnolang/gno/pull/5739)) - deterministic type-check verdicts ([#5893](https://github.com/gnolang/gno/pull/5893)) - tuple assignment order ([#5790](https://github.com/gnolang/gno/pull/5790)) - map-delete object reclaim ([#5882](https://github.com/gnolang/gno/pull/5882), [#5899](https://github.com/gnolang/gno/pull/5899)) ### New Features - sub-realm identities via `realm.Sub(subpath)` ([#5890](https://github.com/gnolang/gno/pull/5890)) - mempackage storage split into prod and test blobs ([#5891](https://github.com/gnolang/gno/pull/5891)) - vesting accounts PoC ([#5840](https://github.com/gnolang/gno/pull/5840)) - tm2 p2p address book ([#5861](https://github.com/gnolang/gno/pull/5861)) - concurrent ABCI queries via snapshot isolation ([#5431](https://github.com/gnolang/gno/pull/5431)) - gnoweb package overview source doc ([#5572](https://github.com/gnolang/gno/pull/5572)) ### Genesis / Operator Tooling - loud genesis-replay failures ([#5924](https://github.com/gnolang/gno/pull/5924)) - `GnoTxMetadata` provenance fields ([#5925](https://github.com/gnolang/gno/pull/5925)) - unified genesis signature-skip for replay txs ([#5926](https://github.com/gnolang/gno/pull/5926)) - `gnogenesis fork` provenance, tx patching + `inspect` ([#5927](https://github.com/gnolang/gno/pull/5927)) - valid, payable `fork valoper-seed` output ([#5928](https://github.com/gnolang/gno/pull/5928)) - `gnogenesis verify -skip-signature-check` ([#5944](https://github.com/gnolang/gno/pull/5944)) ### Genesis + Binaries - [genesis.json](https://github.com/gnolang/gno/releases/download/chain/topaz/genesis.json) (verify with `sha256sum`) - Prebuilt `gno`, `gnokey`, `gnoland`, `gnoweb` binaries for darwin/linux × amd64/arm64 Want to regenerate genesis? See [here](https://github.com/gnolang/gno/blob/chain/topaz/misc/deployments/topaz.gno.land/README.md). ### Validators Please refer to this [link](https://github.com/gnolang/gno/blob/chain/topaz/misc/deployments/topaz.gno.land/VALIDATOR.md) to join Topaz as a Validator. Once your validator is up and synced, you will have to register your valoper profile again with the same operator address you used in Test13. This enables us to add you directly to the Topaz valset. The team will soon announce on [Discord](https://discord.gg/gnoland) when Test13 will sunset in order to simplify the validator migration process. --- #### Links - Gnoweb: https://topaz.testnets.gno.land - Faucet: https://topaz.testnets.gno.land/faucet - RPC: https://rpc.topaz.testnets.gno.land - Gnockpit: https://gnockpit.topaz.testnets.gno.land - Status: https://status.topaz.testnets.gno.land - Tx-indexer: https://indexer.topaz.testnets.gno.land/graphql **Disclaimer** *Tokens on Topaz testnet have no real-world value, and participation is for testing purposes only.* , 2026-07-22T12:00:00Z, ryanlee19, gnoland,ecosystem,updates,topaz,community,blog)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "topaz",
    "Topaz is Live",
    "\n\nWe’re pleased to announce that Topaz, the latest test network for Gno.land, is live. Topaz is the next iteration after Test13, and it is a new chain, not a hardfork. **Notice: Topaz is an experimental test network.**\n\nBecause no state carries over from Test13, balances, realms, and registered names all start at zero. You’ll have to receive GNOT from the [faucet](https://topaz.testnets.gno.land/faucet) and re-register your names. Test13 will sunset within the next 24 hours.\n\n### Chain Details\n\n- Chain ID: `topaz-1`\n- 90 curated packages at genesis\n- 2 founding validators, namespace enforcement (`r/sys/names`) live from block 1\n- 10 pre-funded faucets\n- Unrestricted token transfers\n- Code baseline: master [959cefd91](https://github.com/gnolang/gno/commit/959cefd916021d3a55e9b51f20d05ef618e7f357), 133 commits ahead of Test13\n\n## What’s New in Topaz?\n\n### Breaking / Consensus-relevant Updates\n- `fix(grc20)!`: token id decoupled from symbol ([#5908](https://github.com/gnolang/gno/pull/5908))\n- secp256k1 validator keys no longer supported ([#5949](https://github.com/gnolang/gno/pull/5949))\n- package name must match the last path element at `addpkg` ([#5048](https://github.com/gnolang/gno/pull/5048))\n- `cockroachdb/apd` replaced by `math/big.Rat` in the VM ([#5867](https://github.com/gnolang/gno/pull/5867))\n- type-check + preprocess gas now metered at `AddPackage/Run` ([#5892](https://github.com/gnolang/gno/pull/5892))\n\n### VM Correctness\n\nNotable fixes from the large batch of gnovm fixes are:\n- interface-bound method dispatch ([#5737](https://github.com/gnolang/gno/pull/5737))\n- embedded field/method lookup ([#5721](https://github.com/gnolang/gno/pull/5721), [#5739](https://github.com/gnolang/gno/pull/5739))\n- deterministic type-check verdicts ([#5893](https://github.com/gnolang/gno/pull/5893))\n- tuple assignment order ([#5790](https://github.com/gnolang/gno/pull/5790))\n- map-delete object reclaim ([#5882](https://github.com/gnolang/gno/pull/5882), [#5899](https://github.com/gnolang/gno/pull/5899))\n\n### New Features\n- sub-realm identities via `realm.Sub(subpath)` ([#5890](https://github.com/gnolang/gno/pull/5890))\n- mempackage storage split into prod and test blobs ([#5891](https://github.com/gnolang/gno/pull/5891))\n- vesting accounts PoC ([#5840](https://github.com/gnolang/gno/pull/5840))\n- tm2 p2p address book ([#5861](https://github.com/gnolang/gno/pull/5861))\n- concurrent ABCI queries via snapshot isolation ([#5431](https://github.com/gnolang/gno/pull/5431))\n- gnoweb package overview source doc ([#5572](https://github.com/gnolang/gno/pull/5572))\n\n### Genesis / Operator Tooling\n- loud genesis-replay failures ([#5924](https://github.com/gnolang/gno/pull/5924))\n- `GnoTxMetadata` provenance fields ([#5925](https://github.com/gnolang/gno/pull/5925))\n- unified genesis signature-skip for replay txs ([#5926](https://github.com/gnolang/gno/pull/5926))\n- `gnogenesis fork` provenance, tx patching + `inspect` ([#5927](https://github.com/gnolang/gno/pull/5927))\n- valid, payable `fork valoper-seed` output ([#5928](https://github.com/gnolang/gno/pull/5928))\n- `gnogenesis verify -skip-signature-check` ([#5944](https://github.com/gnolang/gno/pull/5944))\n\n### Genesis + Binaries\n- [genesis.json](https://github.com/gnolang/gno/releases/download/chain/topaz/genesis.json) (verify with `sha256sum`)\n- Prebuilt `gno`, `gnokey`, `gnoland`, `gnoweb` binaries for darwin/linux × amd64/arm64\n\nWant to regenerate genesis? See [here](https://github.com/gnolang/gno/blob/chain/topaz/misc/deployments/topaz.gno.land/README.md).\n\n### Validators\nPlease refer to this [link](https://github.com/gnolang/gno/blob/chain/topaz/misc/deployments/topaz.gno.land/VALIDATOR.md) to join Topaz as a Validator. Once your validator is up and synced, you will have to register your valoper profile again with the same operator address you used in Test13. This enables us to add you directly to the Topaz valset. The team will soon announce on [Discord](https://discord.gg/gnoland) when Test13 will sunset in order to simplify the validator migration process.\n\n---\n\n#### Links\n- Gnoweb: https://topaz.testnets.gno.land\n- Faucet: https://topaz.testnets.gno.land/faucet\n- RPC: https://rpc.topaz.testnets.gno.land\n- Gnockpit: https://gnockpit.topaz.testnets.gno.land\n- Status: https://status.topaz.testnets.gno.land\n- Tx-indexer: https://indexer.topaz.testnets.gno.land/graphql\n\n**Disclaimer**\n*Tokens on Topaz testnet have no real-world value, and participation is for testing purposes only.*\n\n",
    "2026-07-22T12:00:00Z",
    "ryanlee19",
    "gnoland,ecosystem,updates,topaz,community,blog"
  ],
  "max_deposit": ""
}
#61 vm/execgno.land/r/gnoland/blog.ModAddPost(sapphire, Sapphire is Live, We're pleased to announce that Sapphire, the latest test network for [Gno.land](https://gno.land/), is live. Sapphire is the next iteration after Topaz, and it is a new chain, not a hardfork. ***Notice: Sapphire is an experimental test network.*** As it was with Topaz, no state carries over from the previous testnet, so balances, realms, and registered names all start at zero. To participate, you’ll have to receive GNOT from the [faucet](https://faucet.gno.land/) and re-register your names. Topaz will sunset within the next 24 hours. ### Chain Details - Chain ID: `sapphire-1` - 85 curated packages at genesis - 2 founding validators, namespace enforcement (`r/sys/names`) live from block 1 - 3 pre-funded faucet accounts - Protocol-level test transfers enabled - Code baseline: master [1bf8b2826](https://github.com/gnolang/gno/commit/1bf8b2826b7deec7648c6c17851b089cb078d04e), 17 commits ahead of Topaz A balance-measurement bug caught during [Topaz's PR review](https://github.com/gnolang/gno/pull/5945#pullrequestreview-4733742520) is also fixed in the genesis builder for this release, so fee payer balances are now verified more strictly before a node is considered ready. As a result, the only accounts funded at genesis are the three faucets; every other fee payer starts at zero. ## What's New in Sapphire? ### Breaking / Genesis-composition-relevant Updates - commondao aligned with the Common DAO Spec — Council, default tally, per-DAO treasuries ([#6012](https://github.com/gnolang/gno/pull/6012)); with boards permissions migrated to the new `p/nt/groups/v0` ([#6009](https://github.com/gnolang/gno/pull/6009)), ([#6010](https://github.com/gnolang/gno/pull/6010)), `p/nt/commondao/v0` and four transitive deps left the genesis set (85 packages vs Topaz's 90) - boards2 public API made non-crossing again; hub moved into `p/gnoland/boards/exts/hub` ([#5809](https://github.com/gnolang/gno/pull/5809)) - tm2: non-gas balances stored in their own keys ([#6034](https://github.com/gnolang/gno/pull/6034)) ### New Features - grc20: `NewToken` event on token creation ([#6042](https://github.com/gnolang/gno/pull/6042)) - grc20reg: transaction wrappers for registered tokens ([#5962](https://github.com/gnolang/gno/pull/5962)) - tm2: configurable RPC keep-alive idle timeout ([#6002](https://github.com/gnolang/gno/pull/6002)) - gnoweb: open render on package-name click, Browse link in explorer ([#5966](https://github.com/gnolang/gno/pull/5966)) ### Fixes - tm2: snapshot-isolated query paths and write-proof bptree fast-index maintenance ([#6018](https://github.com/gnolang/gno/pull/6018)) - gnodev: disable `PeerExchange` ([#5984](https://github.com/gnolang/gno/pull/5984)) ### Docs / Operations - node-operator docs moved into `gno.land/cmd/gnoland`, gnops.io links dropped ([#6039](https://github.com/gnolang/gno/pull/6039)) - "Running a node" routing page ([#6038](https://github.com/gnolang/gno/pull/6038)) ## Genesis + Binaries - [genesis.json](https://github.com/gnolang/gno/releases/download/chain/sapphire/genesis.json) (verify with sha256sum) - Prebuilt `gno`, `gnokey`, `gnoland`, `gnoweb` binaries for `darwin`/`linux` × `amd64`/`arm64` Want to regenerate genesis? See [here](https://github.com/gnolang/gno/blob/chain/sapphire/misc/deployments/sapphire.gno.land/README.md). ### Validators Please refer to this [link](https://github.com/gnolang/gno/blob/chain/sapphire/misc/deployments/sapphire.gno.land/VALIDATOR.md) to join Sapphire as a Validator. Further announcements will be made in the [testnet-announcements channel](https://discord.gg/4dAT8KbtU) on Discord. --- #### Links - Gnoweb: https://sapphire.testnets.gno.land - Faucet: https://faucet.gno.land/ - RPC: https://rpc.sapphire.testnets.gno.land - Gnockpit: https://gnockpit.sapphire.testnets.gno.land - Status: https://status.sapphire.testnets.gno.land - Tx-indexer: https://indexer.sapphire.testnets.gno.land/graphql **Disclaimer** *Tokens on Sapphire testnet have no real-world value, and participation is for testing purposes only.* , 2026-08-10T12:00:00Z, ryanlee19, gnoland,ecosystem,updates,sapphire,community,blog)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "sapphire",
    "Sapphire is Live",
    "\nWe're pleased to announce that Sapphire, the latest test network for [Gno.land](https://gno.land/), is live. Sapphire is the next iteration after Topaz, and it is a new chain, not a hardfork. ***Notice: Sapphire is an experimental test network.***\n\nAs it was with Topaz, no state carries over from the previous testnet, so balances, realms, and registered names all start at zero. To participate, you’ll have to receive GNOT from the [faucet](https://faucet.gno.land/) and re-register your names. Topaz will sunset within the next 24 hours.\n\n### Chain Details\n- Chain ID: `sapphire-1`\n- 85 curated packages at genesis\n- 2 founding validators, namespace enforcement (`r/sys/names`) live from block 1\n- 3 pre-funded faucet accounts\n- Protocol-level test transfers enabled\n- Code baseline: master [1bf8b2826](https://github.com/gnolang/gno/commit/1bf8b2826b7deec7648c6c17851b089cb078d04e), 17 commits ahead of Topaz\n\nA balance-measurement bug caught during [Topaz's PR review](https://github.com/gnolang/gno/pull/5945#pullrequestreview-4733742520) is also fixed in the genesis builder for this release, so fee payer balances are now verified more strictly before a node is considered ready. As a result, the only accounts funded at genesis are the three faucets; every other fee payer starts at zero.\n\n## What's New in Sapphire?\n\n### Breaking / Genesis-composition-relevant Updates\n- commondao aligned with the Common DAO Spec — Council, default tally, per-DAO treasuries ([#6012](https://github.com/gnolang/gno/pull/6012)); with boards permissions migrated to the new `p/nt/groups/v0` ([#6009](https://github.com/gnolang/gno/pull/6009)), ([#6010](https://github.com/gnolang/gno/pull/6010)), `p/nt/commondao/v0` and four transitive deps left the genesis set (85 packages vs Topaz's 90)\n- boards2 public API made non-crossing again; hub moved into `p/gnoland/boards/exts/hub` ([#5809](https://github.com/gnolang/gno/pull/5809))\n- tm2: non-gas balances stored in their own keys ([#6034](https://github.com/gnolang/gno/pull/6034))\n\n### New Features\n- grc20: `NewToken` event on token creation ([#6042](https://github.com/gnolang/gno/pull/6042))\n- grc20reg: transaction wrappers for registered tokens ([#5962](https://github.com/gnolang/gno/pull/5962))\n- tm2: configurable RPC keep-alive idle timeout ([#6002](https://github.com/gnolang/gno/pull/6002))\n- gnoweb: open render on package-name click, Browse link in explorer ([#5966](https://github.com/gnolang/gno/pull/5966))\n\n### Fixes\n- tm2: snapshot-isolated query paths and write-proof bptree fast-index maintenance ([#6018](https://github.com/gnolang/gno/pull/6018))\n- gnodev: disable `PeerExchange` ([#5984](https://github.com/gnolang/gno/pull/5984))\n\n### Docs / Operations\n- node-operator docs moved into `gno.land/cmd/gnoland`, gnops.io links dropped ([#6039](https://github.com/gnolang/gno/pull/6039))\n- \"Running a node\" routing page ([#6038](https://github.com/gnolang/gno/pull/6038))\n\n## Genesis + Binaries\n- [genesis.json](https://github.com/gnolang/gno/releases/download/chain/sapphire/genesis.json) (verify with sha256sum)\n- Prebuilt `gno`, `gnokey`, `gnoland`, `gnoweb` binaries for `darwin`/`linux` × `amd64`/`arm64`\n\nWant to regenerate genesis? See [here](https://github.com/gnolang/gno/blob/chain/sapphire/misc/deployments/sapphire.gno.land/README.md).\n\n### Validators\nPlease refer to this [link](https://github.com/gnolang/gno/blob/chain/sapphire/misc/deployments/sapphire.gno.land/VALIDATOR.md) to join Sapphire as a Validator. Further announcements will be made in the [testnet-announcements channel](https://discord.gg/4dAT8KbtU) on Discord.\n\n---\n\n#### Links\n\n- Gnoweb: https://sapphire.testnets.gno.land\n- Faucet: https://faucet.gno.land/\n- RPC: https://rpc.sapphire.testnets.gno.land\n- Gnockpit: https://gnockpit.sapphire.testnets.gno.land\n- Status: https://status.sapphire.testnets.gno.land\n- Tx-indexer: https://indexer.sapphire.testnets.gno.land/graphql \n\n**Disclaimer**\n*Tokens on Sapphire testnet have no real-world value, and participation is for testing purposes only.*\n",
    "2026-08-10T12:00:00Z",
    "ryanlee19",
    "gnoland,ecosystem,updates,sapphire,community,blog"
  ],
  "max_deposit": ""
}
#62 vm/execgno.land/r/gnoland/blog.ModAddPost(pearl, Pearl is Live, As August comes to a close, we're pleased to announce that Pearl, the latest test network for [Gno.land](https://gno.land/), is live. Pearl, the next iteration after [Sapphire](https://github.com/gnolang/gno/releases/tag/chain/sapphire), is a new chain, not a hardfork. Notice: Pearl is an experimental test network. As it was with Sapphire, no state carries over from the previous testnet, so balances, realms, and registered names all start at zero. To participate, you'll have to receive GNOT from the [faucet](https://faucet.gno.land/) and [re-register your names](https://docs.gno.land/resources/users-and-teams/). ## Chain Details - Chain ID: `pearl-1` - Release tag: [`chain/pearl`](https://github.com/gnolang/gno/releases/tag/chain/pearl) - 85 curated packages at genesis - 3 founding validators with [operator keyed valoper profiles](https://gnops.io/articles/guides/become-testnet-validator/), [namespace enforcement (`r/sys/names`)](https://gno.land/r/sys/names) live from block 1 - 3 pre-funded faucet accounts - Protocol-level test transfers enabled - Genesis built from the repo's [`examples/`](https://github.com/gnolang/gno/tree/master/examples) tree in about a minute, booting in seconds - Code baseline: master [`c04f8793d`](https://github.com/gnolang/gno/commit/c04f8793dacd3f340a2dda3776340cb62b0eeaa1), 25 commits ahead of Sapphire's baseline - Target commit: [`c4c72fdd2`](https://github.com/gnolang/gno/commit/c4c72fdd288c757e8da0d93aae867fa479b1b15c) - Full release comparison: [`sapphire...pearl`](https://github.com/gnolang/gno/compare/tags/chain/sapphire...tags/chain/pearl) - Release candidate PR: [#6091](https://github.com/gnolang/gno/pull/6091) At 3 validators weighted 60 power each, one validator going offline sits exactly at the one-third halt boundary. This has been accepted for launch and will be addressed as additional validator partners join. ## What's New in Pearl? The headline addition in this release is **genesis vesting accounts**. The genesis builder now supports a configurable list of vested accounts, where continuous schedules unlock linearly and delayed schedules unlock as a cliff. Malformed entries, duplicate accounts, and invalid schedules are all caught and rejected before any node runs, and vesting account creation is now exercised on every build. Pearl ships with ten vested test accounts covering the full schedule matrix, including accounts already fully vested at genesis, several linear unlock windows, cliff schedules, a future start date, and one schedule straddling genesis itself. ## Breaking / Consensus Relevant Updates - Inert-package flow completed, including a `MsgRun` allowlist and delegated params ([#6088](https://github.com/gnolang/gno/pull/6088), [#6093](https://github.com/gnolang/gno/pull/6093)) - `AddPackage` now type checks production files only, while test files are stored and syntax parsed ([#6025](https://github.com/gnolang/gno/pull/6025)) - Three separate cases where coins could be lost or over-authorized around the send envelope are fixed ([#6062](https://github.com/gnolang/gno/pull/6062)) - GovDAO allowlist lockdown, proposal page escaping, and executor disclosure ([#6068](https://github.com/gnolang/gno/pull/6068)) - Per-file Go version now pinned in the consensus type-check ([#5978](https://github.com/gnolang/gno/pull/5978)) ## VM Correctness - Type-switch with a sole `case nil:` fixed ([#5766](https://github.com/gnolang/gno/pull/5766)) - Clause-local names on switch fallthrough ([#6056](https://github.com/gnolang/gno/pull/6056)) - `goto` out of nested loops ([#5963](https://github.com/gnolang/gno/pull/5963)) - Map composite-literal keys inside for loops ([#6037](https://github.com/gnolang/gno/pull/6037)) - `ComputeMapKey` now metered on the realm-restore path ([#5710](https://github.com/gnolang/gno/pull/5710)) - Unsupported tilde operator now rejected at parse time ([#6057](https://github.com/gnolang/gno/pull/6057)) ## Performance - Size-aware encode, decode, and render paths ([commit `acd01fa29`](https://github.com/gnolang/gno/commit/acd01fa29)) - Runtime blocks recycled through a per machine pool ([#5813](https://github.com/gnolang/gno/pull/5813)) - Vestigial `Defer.Parent` dropped ([#5856](https://github.com/gnolang/gno/pull/5856)) ## New Features - `grc721` core rewritten on the `Token`/`PrivateLedger`/`Teller` axis, with stackable metadata, royalty, and enumerable extensions ([#6072](https://github.com/gnolang/gno/pull/6072), [#6073](https://github.com/gnolang/gno/pull/6073)) - GnoVM chain params reader API ([#6094](https://github.com/gnolang/gno/pull/6094)) - p2p: `config.P2P.Seeds` wired into the switch ([#6023](https://github.com/gnolang/gno/pull/6023)), plus a dial loop backoff fix ([#6054](https://github.com/gnolang/gno/pull/6054)) - New audit pattern harness with executable security pattern fixtures ([#5835](https://github.com/gnolang/gno/pull/5835)) ## Genesis + Binaries - [`genesis.json`](https://github.com/gnolang/gno/releases/download/chain/pearl/genesis.json) — verify with `sha256sum` before use: ``` c45fe60c8c8a1f859d9e4d5aad7ce4d100ff0eb78302e71318ba0de481a8dc91 genesis.json ``` - Prebuilt `gno`, `gnokey`, `gnoland`, and `gnoweb` binaries for `darwin`/`linux` × `amd64`/`arm64`, with a `CHECKSUMS.txt` covering every asset - Do you want to regenerate genesis or join as a validator? See the [Pearl deployment docs](https://github.com/gnolang/gno/tree/chain/pearl/misc/deployments/pearl.gno.land) ## Validators Please refer to the [Pearl validator guide](https://github.com/gnolang/gno/blob/chain/pearl/misc/deployments/pearl.gno.land/VALIDATOR.md) to join as a validator. Further announcements will be made in the [testnet announcements channel](https://discord.gg/4dAT8KbtU) on Discord. --- ### Links - Gnoweb: https://pearl.testnets.gno.land - Faucet: https://faucet.gno.land/ - RPC: https://rpc.pearl.testnets.gno.land - Gnockpit: https://gnockpit.pearl.testnets.gno.land - Status: https://status.pearl.testnets.gno.land - Tx-indexer: https://indexer.pearl.testnets.gno.land/graphql --- ### Disclaimer Tokens on Pearl testnet have no real world value, and participation is for testing purposes only. , 2026-08-27T12:00:00Z, ryanlee19, gnoland,ecosystem,updates,pearl,community,blog)
{
  "__typename": "MsgCall",
  "caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
  "send": "",
  "pkg_path": "gno.land/r/gnoland/blog",
  "func": "ModAddPost",
  "args": [
    "pearl",
    "Pearl is Live",
    "\n\nAs August comes to a close, we're pleased to announce that Pearl, the latest test network for [Gno.land](https://gno.land/), is live. Pearl, the next iteration after [Sapphire](https://github.com/gnolang/gno/releases/tag/chain/sapphire), is a new chain, not a hardfork. Notice: Pearl is an experimental test network.\n\nAs it was with Sapphire, no state carries over from the previous testnet, so balances, realms, and registered names all start at zero. To participate, you'll have to receive GNOT from the [faucet](https://faucet.gno.land/) and [re-register your names](https://docs.gno.land/resources/users-and-teams/).\n\n## Chain Details\n\n- Chain ID: `pearl-1`\n- Release tag: [`chain/pearl`](https://github.com/gnolang/gno/releases/tag/chain/pearl)\n- 85 curated packages at genesis\n- 3 founding validators with [operator keyed valoper profiles](https://gnops.io/articles/guides/become-testnet-validator/), [namespace enforcement (`r/sys/names`)](https://gno.land/r/sys/names) live from block 1\n- 3 pre-funded faucet accounts\n- Protocol-level test transfers enabled\n- Genesis built from the repo's [`examples/`](https://github.com/gnolang/gno/tree/master/examples) tree in about a minute, booting in seconds\n- Code baseline: master [`c04f8793d`](https://github.com/gnolang/gno/commit/c04f8793dacd3f340a2dda3776340cb62b0eeaa1), 25 commits ahead of Sapphire's baseline\n- Target commit: [`c4c72fdd2`](https://github.com/gnolang/gno/commit/c4c72fdd288c757e8da0d93aae867fa479b1b15c)\n- Full release comparison: [`sapphire...pearl`](https://github.com/gnolang/gno/compare/tags/chain/sapphire...tags/chain/pearl)\n- Release candidate PR: [#6091](https://github.com/gnolang/gno/pull/6091)\n\nAt 3 validators weighted 60 power each, one validator going offline sits exactly at the one-third halt boundary. This has been accepted for launch and will be addressed as additional validator partners join.\n\n## What's New in Pearl?\n\nThe headline addition in this release is **genesis vesting accounts**. The genesis builder now supports a configurable list of vested accounts, where continuous schedules unlock linearly and delayed schedules unlock as a cliff. Malformed entries, duplicate accounts, and invalid schedules are all caught and rejected before any node runs, and vesting account creation is now exercised on every build. Pearl ships with ten vested test accounts covering the full schedule matrix, including accounts already fully vested at genesis, several linear unlock windows, cliff schedules, a future start date, and one schedule straddling genesis itself.\n\n## Breaking / Consensus Relevant Updates\n\n- Inert-package flow completed, including a `MsgRun` allowlist and delegated params ([#6088](https://github.com/gnolang/gno/pull/6088), [#6093](https://github.com/gnolang/gno/pull/6093))\n- `AddPackage` now type checks production files only, while test files are stored and syntax parsed ([#6025](https://github.com/gnolang/gno/pull/6025))\n- Three separate cases where coins could be lost or over-authorized around the send envelope are fixed ([#6062](https://github.com/gnolang/gno/pull/6062))\n- GovDAO allowlist lockdown, proposal page escaping, and executor disclosure ([#6068](https://github.com/gnolang/gno/pull/6068))\n- Per-file Go version now pinned in the consensus type-check ([#5978](https://github.com/gnolang/gno/pull/5978))\n\n## VM Correctness\n\n- Type-switch with a sole `case nil:` fixed ([#5766](https://github.com/gnolang/gno/pull/5766))\n- Clause-local names on switch fallthrough ([#6056](https://github.com/gnolang/gno/pull/6056))\n- `goto` out of nested loops ([#5963](https://github.com/gnolang/gno/pull/5963))\n- Map composite-literal keys inside for loops ([#6037](https://github.com/gnolang/gno/pull/6037))\n- `ComputeMapKey` now metered on the realm-restore path ([#5710](https://github.com/gnolang/gno/pull/5710))\n- Unsupported tilde operator now rejected at parse time ([#6057](https://github.com/gnolang/gno/pull/6057))\n\n## Performance\n\n- Size-aware encode, decode, and render paths ([commit `acd01fa29`](https://github.com/gnolang/gno/commit/acd01fa29))\n- Runtime blocks recycled through a per machine pool ([#5813](https://github.com/gnolang/gno/pull/5813))\n- Vestigial `Defer.Parent` dropped ([#5856](https://github.com/gnolang/gno/pull/5856))\n\n## New Features\n\n- `grc721` core rewritten on the `Token`/`PrivateLedger`/`Teller` axis, with stackable metadata, royalty, and enumerable extensions ([#6072](https://github.com/gnolang/gno/pull/6072), [#6073](https://github.com/gnolang/gno/pull/6073))\n- GnoVM chain params reader API ([#6094](https://github.com/gnolang/gno/pull/6094))\n- p2p: `config.P2P.Seeds` wired into the switch ([#6023](https://github.com/gnolang/gno/pull/6023)), plus a dial loop backoff fix ([#6054](https://github.com/gnolang/gno/pull/6054))\n- New audit pattern harness with executable security pattern fixtures ([#5835](https://github.com/gnolang/gno/pull/5835))\n\n## Genesis + Binaries\n\n- [`genesis.json`](https://github.com/gnolang/gno/releases/download/chain/pearl/genesis.json) — verify with `sha256sum` before use:\n\n  ```\n  c45fe60c8c8a1f859d9e4d5aad7ce4d100ff0eb78302e71318ba0de481a8dc91  genesis.json\n  ```\n\n- Prebuilt `gno`, `gnokey`, `gnoland`, and `gnoweb` binaries for `darwin`/`linux` × `amd64`/`arm64`, with a `CHECKSUMS.txt` covering every asset\n- Do you want to regenerate genesis or join as a validator? See the [Pearl deployment docs](https://github.com/gnolang/gno/tree/chain/pearl/misc/deployments/pearl.gno.land)\n\n## Validators\n\nPlease refer to the [Pearl validator guide](https://github.com/gnolang/gno/blob/chain/pearl/misc/deployments/pearl.gno.land/VALIDATOR.md) to join as a validator. Further announcements will be made in the [testnet announcements channel](https://discord.gg/4dAT8KbtU) on Discord.\n\n---\n\n### Links\n- Gnoweb: https://pearl.testnets.gno.land\n- Faucet: https://faucet.gno.land/\n- RPC: https://rpc.pearl.testnets.gno.land\n- Gnockpit: https://gnockpit.pearl.testnets.gno.land\n- Status: https://status.pearl.testnets.gno.land\n- Tx-indexer: https://indexer.pearl.testnets.gno.land/graphql\n\n---\n\n### Disclaimer\n\nTokens on Pearl testnet have no real world value, and participation is for testing purposes only.\n",
    "2026-08-27T12:00:00Z",
    "ryanlee19",
    "gnoland,ecosystem,updates,pearl,community,blog"
  ],
  "max_deposit": ""
}
StorageDepositEventgno.land/r/gnoland/blog
+22,406 bytes · 2,240,600 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+19,982 bytes · 1,998,200 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+31,005 bytes · 3,100,500 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+13,320 bytes · 1,332,000 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+19,535 bytes · 1,953,500 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+28,459 bytes · 2,845,900 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+17,421 bytes · 1,742,100 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+22,416 bytes · 2,241,600 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+18,636 bytes · 1,863,600 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+33,596 bytes · 3,359,600 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+20,240 bytes · 2,024,000 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+25,816 bytes · 2,581,600 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+18,965 bytes · 1,896,500 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+19,611 bytes · 1,961,100 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+19,124 bytes · 1,912,400 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+15,863 bytes · 1,586,300 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+19,833 bytes · 1,983,300 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+15,376 bytes · 1,537,600 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+20,657 bytes · 2,065,700 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+17,150 bytes · 1,715,000 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+17,633 bytes · 1,763,300 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+14,441 bytes · 1,444,100 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+17,600 bytes · 1,760,000 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+14,766 bytes · 1,476,600 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+28,592 bytes · 2,859,200 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+18,697 bytes · 1,869,700 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+45,036 bytes · 4,503,600 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+15,208 bytes · 1,520,800 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+12,929 bytes · 1,292,900 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+14,634 bytes · 1,463,400 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+15,684 bytes · 1,568,400 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+36,918 bytes · 3,691,800 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+13,251 bytes · 1,325,100 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+13,536 bytes · 1,353,600 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+14,636 bytes · 1,463,600 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+14,696 bytes · 1,469,600 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+16,193 bytes · 1,619,300 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+30,593 bytes · 3,059,300 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+24,345 bytes · 2,434,500 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+13,721 bytes · 1,372,100 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+12,637 bytes · 1,263,700 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+14,364 bytes · 1,436,400 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+16,170 bytes · 1,617,000 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+13,348 bytes · 1,334,800 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+25,135 bytes · 2,513,500 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+14,819 bytes · 1,481,900 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+16,287 bytes · 1,628,700 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+13,008 bytes · 1,300,800 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+18,096 bytes · 1,809,600 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+14,833 bytes · 1,483,300 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+14,066 bytes · 1,406,600 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+20,475 bytes · 2,047,500 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+13,976 bytes · 1,397,600 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+14,910 bytes · 1,491,000 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+14,478 bytes · 1,447,800 ugnot
StorageDepositEventgno.land/r/gnoland/blog
+16,599 bytes · 1,659,900 ugnot