0x608060405234801561001057600080fd5b50611228806100206000396000f3fe60806040526004361061004a5760003560e01c8063153a1f3e1461004f57806327e235e3146100785780632e1a7d4d146100b5578063a9059cbb146100de578063d0e30db014610107575b600080fd5b34801561005b57600080fd5b5061007660048036038101906100719190610c12565b610111565b005b34801561008457600080fd5b5061009f600480360381019061009a9190610c8a565b6104dd565b6040516100ac9190610cc6565b60405180910390f35b3480156100c157600080fd5b506100dc60048036038101906100d79190610ce1565b6104f5565b005b3480156100ea57600080fd5b5061010560048036038101906101009190610d0e565b610663565b005b61010f6108a9565b005b8051825114610155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161014c90610dab565b60405180910390fd5b6000805b835181101561028357600073ffffffffffffffffffffffffffffffffffffffff1684828151811061018d5761018c610dcb565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16036101eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101e290610e46565b60405180910390fd5b6000838281518110610200576101ff610dcb565b5b602002602001015111610248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161023f90610ed8565b60405180910390fd5b82818151811061025b5761025a610dcb565b5b60200260200101518261026e9190610f27565b9150808061027b90610f5b565b915050610159565b506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115610305576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102fc90610fef565b60405180910390fd5b60005b835181101561047357600084828151811061032657610325610dcb565b5b60200260200101519050600084838151811061034557610344610dcb565b5b60200260200101519050806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461039d919061100f565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546103f29190610f27565b925050819055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516104569190610cc6565b60405180910390a35050808061046b90610f5b565b915050610308565b508260405161048291906110fb565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167f902dc11c75b8ce1ac21e03d3b81711e6ddb2b2f52237690d140d6c5a55935e68846040516104d091906111d0565b60405180910390a3505050565b60006020528060005260406000206000915090505481565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115610576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056d90610fef565b60405180910390fd5b806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546105c4919061100f565b925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610611573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040516106589190610cc6565b60405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c990610e46565b60405180910390fd5b60008111610715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070c90610ed8565b60405180910390fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115610796576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078d90610fef565b60405180910390fd5b806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546107e4919061100f565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546108399190610f27565b925050819055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161089d9190610cc6565b60405180910390a35050565b346000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546108f79190610f27565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040516109449190610cc6565b60405180910390a2565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6109b082610967565b810181811067ffffffffffffffff821117156109cf576109ce610978565b5b80604052505050565b60006109e261094e565b90506109ee82826109a7565b919050565b600067ffffffffffffffff821115610a0e57610a0d610978565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610a4f82610a24565b9050919050565b610a5f81610a44565b8114610a6a57600080fd5b50565b600081359050610a7c81610a56565b92915050565b6000610a95610a90846109f3565b6109d8565b90508083825260208201905060208402830185811115610ab857610ab7610a1f565b5b835b81811015610ae15780610acd8882610a6d565b845260208401935050602081019050610aba565b5050509392505050565b600082601f830112610b0057610aff610962565b5b8135610b10848260208601610a82565b91505092915050565b600067ffffffffffffffff821115610b3457610b33610978565b5b602082029050602081019050919050565b6000819050919050565b610b5881610b45565b8114610b6357600080fd5b50565b600081359050610b7581610b4f565b92915050565b6000610b8e610b8984610b19565b6109d8565b90508083825260208201905060208402830185811115610bb157610bb0610a1f565b5b835b81811015610bda5780610bc68882610b66565b845260208401935050602081019050610bb3565b5050509392505050565b600082601f830112610bf957610bf8610962565b5b8135610c09848260208601610b7b565b91505092915050565b60008060408385031215610c2957610c28610958565b5b600083013567ffffffffffffffff811115610c4757610c4661095d565b5b610c5385828601610aeb565b925050602083013567ffffffffffffffff811115610c7457610c7361095d565b5b610c8085828601610be4565b9150509250929050565b600060208284031215610ca057610c9f610958565b5b6000610cae84828501610a6d565b91505092915050565b610cc081610b45565b82525050565b6000602082019050610cdb6000830184610cb7565b92915050565b600060208284031215610cf757610cf6610958565b5b6000610d0584828501610b66565b91505092915050565b60008060408385031215610d2557610d24610958565b5b6000610d3385828601610a6d565b9250506020610d4485828601610b66565b9150509250929050565b600082825260208201905092915050565b7f4172726179206c656e677468206d69736d617463680000000000000000000000600082015250565b6000610d95601583610d4e565b9150610da082610d5f565b602082019050919050565b60006020820190508181036000830152610dc481610d88565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f496e76616c696420726563697069656e74206164647265737300000000000000600082015250565b6000610e30601983610d4e565b9150610e3b82610dfa565b602082019050919050565b60006020820190508181036000830152610e5f81610e23565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000610ec2602983610d4e565b9150610ecd82610e66565b604082019050919050565b60006020820190508181036000830152610ef181610eb5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610f3282610b45565b9150610f3d83610b45565b9250828201905080821115610f5557610f54610ef8565b5b92915050565b6000610f6682610b45565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610f9857610f97610ef8565b5b600182019050919050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b6000610fd9601483610d4e565b9150610fe482610fa3565b602082019050919050565b6000602082019050818103600083015261100881610fcc565b9050919050565b600061101a82610b45565b915061102583610b45565b925082820390508181111561103d5761103c610ef8565b5b92915050565b600081519050919050565b600081905092915050565b6000819050602082019050919050565b61107281610a44565b82525050565b60006110848383611069565b60208301905092915050565b6000602082019050919050565b60006110a882611043565b6110b2818561104e565b93506110bd83611059565b8060005b838110156110ee5781516110d58882611078565b97506110e083611090565b9250506001810190506110c1565b5085935050505092915050565b6000611107828461109d565b915081905092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61114781610b45565b82525050565b6000611159838361113e565b60208301905092915050565b6000602082019050919050565b600061117d82611112565b611187818561111d565b93506111928361112e565b8060005b838110156111c35781516111aa888261114d565b97506111b583611165565b925050600181019050611196565b5085935050505092915050565b600060208201905081810360008301526111ea8184611172565b90509291505056fea2646970667358221220421d3f123b1b4bec36ffd81853fb4c9b24240aff50f67c99ad262aeb49b5a79064736f6c63430008120033