60806040523480156200001157600080fd5b50600660ff16600a6200002591906200020b565b633b9aca006200003691906200025c565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620002a7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200010c57808604811115620000e457620000e36200007e565b5b6001851615620000f45780820291505b80810290506200010485620000ad565b9450620000c4565b94509492505050565b600082620001275760019050620001fa565b81620001375760009050620001fa565b81600181146200015057600281146200015b5762000191565b6001915050620001fa565b60ff84111562000170576200016f6200007e565b5b8360020a9150848211156200018a57620001896200007e565b5b50620001fa565b5060208310610133831016604e8410600b8410161715620001cb5782820a905083811115620001c557620001c46200007e565b5b620001fa565b620001da8484846001620000ba565b92509050818404811115620001f457620001f36200007e565b5b81810290505b9392505050565b6000819050919050565b6000620002188262000201565b9150620002258362000201565b9250620002547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000115565b905092915050565b6000620002698262000201565b9150620002768362000201565b9250828202620002868162000201565b91508282048414831517620002a0576200029f6200007e565b5b5092915050565b61114f80620002b76000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063313ce56711610066578063313ce5671461013457806370a082311461015257806395d89b4114610182578063a9059cbb146101a0578063dd62ed3e146101d057610093565b806306fdde0314610098578063095ea7b3146100b657806318160ddd146100e657806323b872dd14610104575b600080fd5b6100a0610200565b6040516100ad9190610ac0565b60405180910390f35b6100d060048036038101906100cb9190610b7b565b610239565b6040516100dd9190610bd6565b60405180910390f35b6100ee610399565b6040516100fb9190610c00565b60405180910390f35b61011e60048036038101906101199190610c1b565b6103bc565b60405161012b9190610bd6565b60405180910390f35b61013c610719565b6040516101499190610c8a565b60405180910390f35b61016c60048036038101906101679190610ca5565b61071e565b6040516101799190610c00565b60405180910390f35b61018a610766565b6040516101979190610ac0565b60405180910390f35b6101ba60048036038101906101b59190610b7b565b61079f565b6040516101c79190610bd6565b60405180910390f35b6101ea60048036038101906101e59190610cd2565b6109a9565b6040516101f79190610c00565b60405180910390f35b6040518060400160405280600e81526020017f4765726d616e536865706865726400000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036102a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102a090610d5e565b60405180910390fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516103879190610c00565b60405180910390a36001905092915050565b600660ff16600a6103aa9190610ee0565b633b9aca006103b99190610f2b565b81565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361042c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042390610fb9565b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211156104ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104a490611025565b60405180910390fd5b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561056c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056390611091565b60405180910390fd5b816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546105ba91906110b1565b92505081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461060f91906110e5565b9250508190555081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546106a291906110b1565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516107069190610c00565b60405180910390a3600190509392505050565b600681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6040518060400160405280600581526020017f475348504400000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361080f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080690610fb9565b60405180910390fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115610890576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088790611025565b60405180910390fd5b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546108de91906110b1565b92505081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461093391906110e5565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516109979190610c00565b60405180910390a36001905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610a6a578082015181840152602081019050610a4f565b60008484015250505050565b6000601f19601f8301169050919050565b6000610a9282610a30565b610a9c8185610a3b565b9350610aac818560208601610a4c565b610ab581610a76565b840191505092915050565b60006020820190508181036000830152610ada8184610a87565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610b1282610ae7565b9050919050565b610b2281610b07565b8114610b2d57600080fd5b50565b600081359050610b3f81610b19565b92915050565b6000819050919050565b610b5881610b45565b8114610b6357600080fd5b50565b600081359050610b7581610b4f565b92915050565b60008060408385031215610b9257610b91610ae2565b5b6000610ba085828601610b30565b9250506020610bb185828601610b66565b9150509250929050565b60008115159050919050565b610bd081610bbb565b82525050565b6000602082019050610beb6000830184610bc7565b92915050565b610bfa81610b45565b82525050565b6000602082019050610c156000830184610bf1565b92915050565b600080600060608486031215610c3457610c33610ae2565b5b6000610c4286828701610b30565b9350506020610c5386828701610b30565b9250506040610c6486828701610b66565b9150509250925092565b600060ff82169050919050565b610c8481610c6e565b82525050565b6000602082019050610c9f6000830184610c7b565b92915050565b600060208284031215610cbb57610cba610ae2565b5b6000610cc984828501610b30565b91505092915050565b60008060408385031215610ce957610ce8610ae2565b5b6000610cf785828601610b30565b9250506020610d0885828601610b30565b9150509250929050565b7f496e76616c6964207370656e6465722061646472657373000000000000000000600082015250565b6000610d48601783610a3b565b9150610d5382610d12565b602082019050919050565b60006020820190508181036000830152610d7781610d3b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115610e0457808604811115610de057610ddf610d7e565b5b6001851615610def5780820291505b8081029050610dfd85610dad565b9450610dc4565b94509492505050565b600082610e1d5760019050610ed9565b81610e2b5760009050610ed9565b8160018114610e415760028114610e4b57610e7a565b6001915050610ed9565b60ff841115610e5d57610e5c610d7e565b5b8360020a915084821115610e7457610e73610d7e565b5b50610ed9565b5060208310610133831016604e8410600b8410161715610eaf5782820a905083811115610eaa57610ea9610d7e565b5b610ed9565b610ebc8484846001610dba565b92509050818404811115610ed357610ed2610d7e565b5b81810290505b9392505050565b6000610eeb82610b45565b9150610ef683610b45565b9250610f237fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610e0d565b905092915050565b6000610f3682610b45565b9150610f4183610b45565b9250828202610f4f81610b45565b91508282048414831517610f6657610f65610d7e565b5b5092915050565b7f496e76616c696420726563697069656e74206164647265737300000000000000600082015250565b6000610fa3601983610a3b565b9150610fae82610f6d565b602082019050919050565b60006020820190508181036000830152610fd281610f96565b9050919050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b600061100f601483610a3b565b915061101a82610fd9565b602082019050919050565b6000602082019050818103600083015261103e81611002565b9050919050565b7f496e73756666696369656e7420616c6c6f77616e636500000000000000000000600082015250565b600061107b601683610a3b565b915061108682611045565b602082019050919050565b600060208201905081810360008301526110aa8161106e565b9050919050565b60006110bc82610b45565b91506110c783610b45565b92508282039050818111156110df576110de610d7e565b5b92915050565b60006110f082610b45565b91506110fb83610b45565b925082820190508082111561111357611112610d7e565b5b9291505056fea264697066735822122025e7dc23e5e1c32910418cb935d99778b56c204b31f6fc94eba960500e27653464736f6c63430008120033