0x608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611090806100606000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c806340c10f191161006657806340c10f191461015d57806370a082311461017957806395d89b41146101a9578063a9059cbb146101c7578063dd62ed3e146101f75761009e565b806306fdde03146100a3578063095ea7b3146100c157806318160ddd146100f157806323b872dd1461010f578063313ce5671461013f575b600080fd5b6100ab610227565b6040516100b89190610cd6565b60405180910390f35b6100db60048036038101906100d69190610d91565b610260565b6040516100e89190610dec565b60405180910390f35b6100f9610352565b6040516101069190610e16565b60405180910390f35b61012960048036038101906101249190610e31565b610358565b6040516101369190610dec565b60405180910390f35b610147610710565b6040516101549190610ea0565b60405180910390f35b61017760048036038101906101729190610d91565b610715565b005b610193600480360381019061018e9190610ebb565b6108ca565b6040516101a09190610e16565b60405180910390f35b6101b1610913565b6040516101be9190610cd6565b60405180910390f35b6101e160048036038101906101dc9190610d91565b61094c565b6040516101ee9190610dec565b60405180910390f35b610211600480360381019061020c9190610ee8565b610b6c565b60405161021e9190610e16565b60405180910390f35b6040518060400160405280600681526020017f4e546f6b656e000000000000000000000000000000000000000000000000000081525081565b600081600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516103409190610e16565b60405180910390a36001905092915050565b60015481565b600081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610425575081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b801561045e5750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b61046757600080fd5b6104b982600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bf390919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061054e82600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c1a90919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061062082600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bf390919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516106fd9190610e16565b60405180910390a3600190509392505050565b601281565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146107a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079a90610f74565b60405180910390fd5b600081116107b057600080fd5b61080281600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c1a90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061085a81600154610c1a90919063ffffffff16565b6001819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516108be9190610e16565b60405180910390a35050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6040518060400160405280600281526020017f4e5400000000000000000000000000000000000000000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156109ca5750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b6109d357600080fd5b610a2582600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bf390919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610aba82600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c1a90919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610b5a9190610e16565b60405180910390a36001905092915050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600082821115610c0657610c05610f94565b5b8183610c129190610ff2565b905092915050565b6000808284610c299190611026565b905083811015610c3c57610c3b610f94565b5b8091505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610c80578082015181840152602081019050610c65565b60008484015250505050565b6000601f19601f8301169050919050565b6000610ca882610c46565b610cb28185610c51565b9350610cc2818560208601610c62565b610ccb81610c8c565b840191505092915050565b60006020820190508181036000830152610cf08184610c9d565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610d2882610cfd565b9050919050565b610d3881610d1d565b8114610d4357600080fd5b50565b600081359050610d5581610d2f565b92915050565b6000819050919050565b610d6e81610d5b565b8114610d7957600080fd5b50565b600081359050610d8b81610d65565b92915050565b60008060408385031215610da857610da7610cf8565b5b6000610db685828601610d46565b9250506020610dc785828601610d7c565b9150509250929050565b60008115159050919050565b610de681610dd1565b82525050565b6000602082019050610e016000830184610ddd565b92915050565b610e1081610d5b565b82525050565b6000602082019050610e2b6000830184610e07565b92915050565b600080600060608486031215610e4a57610e49610cf8565b5b6000610e5886828701610d46565b9350506020610e6986828701610d46565b9250506040610e7a86828701610d7c565b9150509250925092565b600060ff82169050919050565b610e9a81610e84565b82525050565b6000602082019050610eb56000830184610e91565b92915050565b600060208284031215610ed157610ed0610cf8565b5b6000610edf84828501610d46565b91505092915050565b60008060408385031215610eff57610efe610cf8565b5b6000610f0d85828601610d46565b9250506020610f1e85828601610d46565b9150509250929050565b7f596f7520617265206e6f7420616e206f776e6572210000000000000000000000600082015250565b6000610f5e601583610c51565b9150610f6982610f28565b602082019050919050565b60006020820190508181036000830152610f8d81610f51565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610ffd82610d5b565b915061100883610d5b565b92508282039050818111156110205761101f610fc3565b5b92915050565b600061103182610d5b565b915061103c83610d5b565b925082820190508082111561105457611053610fc3565b5b9291505056fea2646970667358221220fd5305af2118a3d6cb1ab38fbf7f02bf33423e5f231d313df7585735d07aeb8d64736f6c63430008120033