60806040523480156200001157600080fd5b50620000226200002860201b60201c565b620001d2565b600060019054906101000a900460ff16156200007b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000729062000175565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff1614620000ec5760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff604051620000e39190620001b5565b60405180910390a15b565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60006200015d602783620000ee565b91506200016a82620000ff565b604082019050919050565b6000602082019050818103600083015262000190816200014e565b9050919050565b600060ff82169050919050565b620001af8162000197565b82525050565b6000602082019050620001cc6000830184620001a4565b92915050565b61252a80620001e26000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c8063715018a6116100a257806395d89b411161007157806395d89b4114610294578063a457c2d7146102b2578063a9059cbb146102e2578063dd62ed3e14610312578063f2fde38b146103425761010b565b8063715018a61461024657806379cc6790146102505780638129fc1c1461026c5780638da5cb5b146102765761010b565b8063313ce567116100de578063313ce567146101ac57806339509351146101ca57806342966c68146101fa57806370a08231146102165761010b565b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015e57806323b872dd1461017c575b600080fd5b61011861035e565b604051610125919061153b565b60405180910390f35b610148600480360381019061014391906115f6565b6103f0565b6040516101559190611651565b60405180910390f35b610166610413565b604051610173919061167b565b60405180910390f35b61019660048036038101906101919190611696565b61041d565b6040516101a39190611651565b60405180910390f35b6101b461044c565b6040516101c19190611705565b60405180910390f35b6101e460048036038101906101df91906115f6565b610455565b6040516101f19190611651565b60405180910390f35b610214600480360381019061020f9190611720565b61048c565b005b610230600480360381019061022b919061174d565b6104a0565b60405161023d919061167b565b60405180910390f35b61024e6104e9565b005b61026a600480360381019061026591906115f6565b6104fd565b005b61027461051d565b005b61027e610703565b60405161028b9190611789565b60405180910390f35b61029c61072d565b6040516102a9919061153b565b60405180910390f35b6102cc60048036038101906102c791906115f6565b6107bf565b6040516102d99190611651565b60405180910390f35b6102fc60048036038101906102f791906115f6565b610836565b6040516103099190611651565b60405180910390f35b61032c600480360381019061032791906117a4565b610859565b604051610339919061167b565b60405180910390f35b61035c6004803603810190610357919061174d565b6108e0565b005b60606036805461036d90611813565b80601f016020809104026020016040519081016040528092919081815260200182805461039990611813565b80156103e65780601f106103bb576101008083540402835291602001916103e6565b820191906000526020600020905b8154815290600101906020018083116103c957829003601f168201915b5050505050905090565b6000806103fb610963565b905061040881858561096b565b600191505092915050565b6000603554905090565b600080610428610963565b9050610435858285610b34565b610440858585610bc0565b60019150509392505050565b60006012905090565b600080610460610963565b90506104818185856104728589610859565b61047c9190611873565b61096b565b600191505092915050565b61049d610497610963565b82610e39565b50565b6000603360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6104f1611008565b6104fb6000611086565b565b61050f82610509610963565b83610b34565b6105198282610e39565b5050565b60008060019054906101000a900460ff1615905080801561054e5750600160008054906101000a900460ff1660ff16105b8061057b575061055d3061114c565b15801561057a5750600160008054906101000a900460ff1660ff16145b5b6105ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b190611919565b60405180910390fd5b60016000806101000a81548160ff021916908360ff16021790555080156105f7576001600060016101000a81548160ff0219169083151502179055505b61066b6040518060400160405280601181526020017f4669726520476172792047656e736c65720000000000000000000000000000008152506040518060400160405280600381526020017f464747000000000000000000000000000000000000000000000000000000000081525061116f565b6106736111cc565b61067b61121d565b6106a73361068761044c565b600a6106939190611a6c565b6305f5e1006106a29190611ab7565b611276565b80156107005760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516106f79190611b3e565b60405180910390a15b50565b6000609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606037805461073c90611813565b80601f016020809104026020016040519081016040528092919081815260200182805461076890611813565b80156107b55780601f1061078a576101008083540402835291602001916107b5565b820191906000526020600020905b81548152906001019060200180831161079857829003601f168201915b5050505050905090565b6000806107ca610963565b905060006107d88286610859565b90508381101561081d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081490611bcb565b60405180910390fd5b61082a828686840361096b565b60019250505092915050565b600080610841610963565b905061084e818585610bc0565b600191505092915050565b6000603460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6108e8611008565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094e90611c5d565b60405180910390fd5b61096081611086565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036109da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d190611cef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4090611d81565b60405180910390fd5b80603460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610b27919061167b565b60405180910390a3505050565b6000610b408484610859565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610bba5781811015610bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba390611ded565b60405180910390fd5b610bb9848484840361096b565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2690611e7f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9590611f11565b60405180910390fd5b610ca98383836113cd565b6000603360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790611fa3565b60405180910390fd5b818103603360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081603360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e20919061167b565b60405180910390a3610e338484846113d2565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9f90612035565b60405180910390fd5b610eb4826000836113cd565b6000603360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f32906120c7565b60405180910390fd5b818103603360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081603560008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610fef919061167b565b60405180910390a3611003836000846113d2565b505050565b611010610963565b73ffffffffffffffffffffffffffffffffffffffff1661102e610703565b73ffffffffffffffffffffffffffffffffffffffff1614611084576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107b90612133565b60405180910390fd5b565b6000609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff166111be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b5906121c5565b60405180910390fd5b6111c882826113d7565b5050565b600060019054906101000a900460ff1661121b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611212906121c5565b60405180910390fd5b565b600060019054906101000a900460ff1661126c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611263906121c5565b60405180910390fd5b61127461144a565b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dc90612231565b60405180910390fd5b6112f1600083836113cd565b80603560008282546113039190611873565b9250508190555080603360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516113b5919061167b565b60405180910390a36113c9600083836113d2565b5050565b505050565b505050565b600060019054906101000a900460ff16611426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141d906121c5565b60405180910390fd5b81603690816114359190612422565b5080603790816114459190612422565b505050565b600060019054906101000a900460ff16611499576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611490906121c5565b60405180910390fd5b6114a96114a4610963565b611086565b565b600081519050919050565b600082825260208201905092915050565b60005b838110156114e55780820151818401526020810190506114ca565b60008484015250505050565b6000601f19601f8301169050919050565b600061150d826114ab565b61151781856114b6565b93506115278185602086016114c7565b611530816114f1565b840191505092915050565b600060208201905081810360008301526115558184611502565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061158d82611562565b9050919050565b61159d81611582565b81146115a857600080fd5b50565b6000813590506115ba81611594565b92915050565b6000819050919050565b6115d3816115c0565b81146115de57600080fd5b50565b6000813590506115f0816115ca565b92915050565b6000806040838503121561160d5761160c61155d565b5b600061161b858286016115ab565b925050602061162c858286016115e1565b9150509250929050565b60008115159050919050565b61164b81611636565b82525050565b60006020820190506116666000830184611642565b92915050565b611675816115c0565b82525050565b6000602082019050611690600083018461166c565b92915050565b6000806000606084860312156116af576116ae61155d565b5b60006116bd868287016115ab565b93505060206116ce868287016115ab565b92505060406116df868287016115e1565b9150509250925092565b600060ff82169050919050565b6116ff816116e9565b82525050565b600060208201905061171a60008301846116f6565b92915050565b6000602082840312156117365761173561155d565b5b6000611744848285016115e1565b91505092915050565b6000602082840312156117635761176261155d565b5b6000611771848285016115ab565b91505092915050565b61178381611582565b82525050565b600060208201905061179e600083018461177a565b92915050565b600080604083850312156117bb576117ba61155d565b5b60006117c9858286016115ab565b92505060206117da858286016115ab565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061182b57607f821691505b60208210810361183e5761183d6117e4565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061187e826115c0565b9150611889836115c0565b92508282019050808211156118a1576118a0611844565b5b92915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000611903602e836114b6565b915061190e826118a7565b604082019050919050565b60006020820190508181036000830152611932816118f6565b9050919050565b60008160011c9050919050565b6000808291508390505b60018511156119905780860481111561196c5761196b611844565b5b600185161561197b5780820291505b808102905061198985611939565b9450611950565b94509492505050565b6000826119a95760019050611a65565b816119b75760009050611a65565b81600181146119cd57600281146119d757611a06565b6001915050611a65565b60ff8411156119e9576119e8611844565b5b8360020a915084821115611a00576119ff611844565b5b50611a65565b5060208310610133831016604e8410600b8410161715611a3b5782820a905083811115611a3657611a35611844565b5b611a65565b611a488484846001611946565b92509050818404811115611a5f57611a5e611844565b5b81810290505b9392505050565b6000611a77826115c0565b9150611a82836116e9565b9250611aaf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484611999565b905092915050565b6000611ac2826115c0565b9150611acd836115c0565b9250828202611adb816115c0565b91508282048414831517611af257611af1611844565b5b5092915050565b6000819050919050565b6000819050919050565b6000611b28611b23611b1e84611af9565b611b03565b6116e9565b9050919050565b611b3881611b0d565b82525050565b6000602082019050611b536000830184611b2f565b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611bb56025836114b6565b9150611bc082611b59565b604082019050919050565b60006020820190508181036000830152611be481611ba8565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611c476026836114b6565b9150611c5282611beb565b604082019050919050565b60006020820190508181036000830152611c7681611c3a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611cd96024836114b6565b9150611ce482611c7d565b604082019050919050565b60006020820190508181036000830152611d0881611ccc565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611d6b6022836114b6565b9150611d7682611d0f565b604082019050919050565b60006020820190508181036000830152611d9a81611d5e565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611dd7601d836114b6565b9150611de282611da1565b602082019050919050565b60006020820190508181036000830152611e0681611dca565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611e696025836114b6565b9150611e7482611e0d565b604082019050919050565b60006020820190508181036000830152611e9881611e5c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611efb6023836114b6565b9150611f0682611e9f565b604082019050919050565b60006020820190508181036000830152611f2a81611eee565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611f8d6026836114b6565b9150611f9882611f31565b604082019050919050565b60006020820190508181036000830152611fbc81611f80565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061201f6021836114b6565b915061202a82611fc3565b604082019050919050565b6000602082019050818103600083015261204e81612012565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006120b16022836114b6565b91506120bc82612055565b604082019050919050565b600060208201905081810360008301526120e0816120a4565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061211d6020836114b6565b9150612128826120e7565b602082019050919050565b6000602082019050818103600083015261214c81612110565b9050919050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b60006121af602b836114b6565b91506121ba82612153565b604082019050919050565b600060208201905081810360008301526121de816121a2565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600061221b601f836114b6565b9150612226826121e5565b602082019050919050565b6000602082019050818103600083015261224a8161220e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026122e27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826122a5565b6122ec86836122a5565b95508019841693508086168417925050509392505050565b600061231f61231a612315846115c0565b611b03565b6115c0565b9050919050565b6000819050919050565b61233983612304565b61234d61234582612326565b8484546122b2565b825550505050565b600090565b612362612355565b61236d818484612330565b505050565b5b818110156123915761238660008261235a565b600181019050612373565b5050565b601f8211156123d6576123a781612280565b6123b084612295565b810160208510156123bf578190505b6123d36123cb85612295565b830182612372565b50505b505050565b600082821c905092915050565b60006123f9600019846008026123db565b1980831691505092915050565b600061241283836123e8565b9150826002028217905092915050565b61242b826114ab565b67ffffffffffffffff81111561244457612443612251565b5b61244e8254611813565b612459828285612395565b600060209050601f83116001811461248c576000841561247a578287015190505b6124848582612406565b8655506124ec565b601f19841661249a86612280565b60005b828110156124c25784890151825560018201915060208501945060208101905061249d565b868310156124df57848901516124db601f8916826123e8565b8355505b6001600288020188555050505b50505050505056fea264697066735822122084cf88073948beb7af163f4990fd60b7fce6c2864b42c7874cc7ce547f4a435c64736f6c63430008120033