0x60a060405234801561000f575f5ffd5b50335f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905573ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506001805f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506080516122cf6101175f395f8181610a4d01528181610adf01528181610b0a01528181610b9c01528181610cc501528181610df901526110b501526122cf5ff3fe6080604052600436106100aa575f3560e01c8063c1eb5ddd11610063578063c1eb5ddd146101b9578063d449a832146101e3578063d8f92c231461021f578063e0fb0f3514610247578063f52394b81461025d578063f7888aec14610285576100b1565b80631ea17091146100b557806374b836ab146100dd5780639bbebbc114610105578063b735b89b1461012d578063bb7b9c7614610155578063c03646ba14610191576100b1565b366100b157005b5f5ffd5b3480156100c0575f5ffd5b506100db60048036038101906100d691906116cb565b6102c1565b005b3480156100e8575f5ffd5b5061010360048036038101906100fe91906116cb565b6105d4565b005b348015610110575f5ffd5b5061012b60048036038101906101269190611768565b610a4b565b005b348015610138575f5ffd5b50610153600480360381019061014e91906117a6565b610b08565b005b348015610160575f5ffd5b5061017b60048036038101906101769190611921565b610c3b565b6040516101889190611a44565b60405180910390f35b34801561019c575f5ffd5b506101b760048036038101906101b291906117a6565b610cc3565b005b3480156101c4575f5ffd5b506101cd610df7565b6040516101da9190611a73565b60405180910390f35b3480156101ee575f5ffd5b50610209600480360381019061020491906117a6565b610e1b565b6040516102169190611aa7565b60405180910390f35b34801561022a575f5ffd5b5061024560048036038101906102409190611af8565b610e90565b005b348015610252575f5ffd5b5061025b6110b3565b005b348015610268575f5ffd5b50610283600480360381019061027e9190611af8565b6111a7565b005b348015610290575f5ffd5b506102ab60048036038101906102a69190611b95565b61147c565b6040516102b89190611be2565b60405180910390f35b60015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661034a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161034190611c55565b60405180910390fd5b5f600267ffffffffffffffff811115610366576103656117e5565b5b6040519080825280602002602001820160405280156103945781602001602082028036833780820191505090505b50905086815f815181106103ab576103aa611c73565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505085816001815181106103fa576103f9611c73565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050805f8151811061044757610446611c73565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663095ea7b389876040518363ffffffff1660e01b8152600401610489929190611ca0565b6020604051808303815f875af11580156104a5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104c99190611cfc565b505f820361055b578773ffffffffffffffffffffffffffffffffffffffff166338ed173986868430886040518663ffffffff1660e01b8152600401610512959493929190611dde565b5f604051808303815f875af115801561052d573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906105559190611f0a565b506105ca565b8773ffffffffffffffffffffffffffffffffffffffff16635c11d79586868430886040518663ffffffff1660e01b815260040161059c959493929190611dde565b5f604051808303815f87803b1580156105b3575f5ffd5b505af11580156105c5573d5f5f3e3d5ffd5b505050505b5050505050505050565b60015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661065d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065490611c55565b60405180910390fd5b5f600267ffffffffffffffff811115610679576106786117e5565b5b6040519080825280602002602001820160405280156106a75781602001602082028036833780820191505090505b50905086815f815181106106be576106bd611c73565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050858160018151811061070d5761070c611c73565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050805f8151811061075a57610759611c73565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663095ea7b389876040518363ffffffff1660e01b815260040161079c929190611ca0565b6020604051808303815f875af11580156107b8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107dc9190611cfc565b505f8203610920578773ffffffffffffffffffffffffffffffffffffffff166338ed173986868430886040518663ffffffff1660e01b8152600401610825959493929190611dde565b5f604051808303815f875af192505050801561086357506040513d5f823e3d601f19601f820116820180604052508101906108609190611f0a565b60015b610919573d805f8114610891576040519150601f19603f3d011682016040523d82523d5f602084013e610896565b606091505b508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fcc49c79d004c7f9352159155faa03bf8743412ba20e37a2b52a38264b54578718460405161090b9190611fa1565b60405180910390a45061091b565b505b610a41565b8773ffffffffffffffffffffffffffffffffffffffff16635c11d79586868430886040518663ffffffff1660e01b8152600401610961959493929190611dde565b5f604051808303815f87803b158015610978575f5ffd5b505af1925050508015610989575060015b610a3f573d805f81146109b7576040519150601f19603f3d011682016040523d82523d5f602084013e6109bc565b606091505b508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fcc49c79d004c7f9352159155faa03bf8743412ba20e37a2b52a38264b545787184604051610a319190611fa1565b60405180910390a450610a40565b5b5b5050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad09061200b565b60405180910390fd5b610b04827f0000000000000000000000000000000000000000000000000000000000000000836114fd565b5050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8d9061200b565b60405180910390fd5b610c38817f00000000000000000000000000000000000000000000000000000000000000008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610bf49190611a73565b602060405180830381865afa158015610c0f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c339190612029565b6114fd565b50565b60608373ffffffffffffffffffffffffffffffffffffffff1663d06ca61f84846040518363ffffffff1660e01b8152600401610c78929190612054565b5f60405180830381865afa158015610c92573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610cba9190611f0a565b90509392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d489061200b565b60405180910390fd5b6001805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fb1288e9f7bae3599e10819d5553febea48e11a6f8f585b32c8abad397dd2627e6001604051610dec9190612091565b60405180910390a250565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f8173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e65573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e8991906120d4565b9050919050565b60015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1090611c55565b60405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff1663095ea7b388866040518363ffffffff1660e01b8152600401610f54929190611ca0565b6020604051808303815f875af1158015610f70573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f949190611cfc565b505f6040518061010001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018562ffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018681526020018481526020015f73ffffffffffffffffffffffffffffffffffffffff1681525090508773ffffffffffffffffffffffffffffffffffffffff1663414bf389826040518263ffffffff1660e01b815260040161106891906121bd565b6020604051808303815f875af1158015611084573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110a89190612029565b505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611141576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111389061200b565b60405180910390fd5b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f193505050501580156111a4573d5f5f3e3d5ffd5b50565b60015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611230576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122790611c55565b60405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff1663095ea7b388866040518363ffffffff1660e01b815260040161126b929190611ca0565b6020604051808303815f875af1158015611287573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112ab9190611cfc565b505f6040518061010001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018562ffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018681526020018481526020015f73ffffffffffffffffffffffffffffffffffffffff1681525090508773ffffffffffffffffffffffffffffffffffffffff1663414bf389826040518263ffffffff1660e01b815260040161137f91906121bd565b6020604051808303815f875af19250505080156113ba57506040513d601f19601f820116820180604052508101906113b79190612029565b60015b611470573d805f81146113e8576040519150601f19603f3d011682016040523d82523d5f602084013e6113ed565b606091505b508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fcc49c79d004c7f9352159155faa03bf8743412ba20e37a2b52a38264b5457871846040516114629190611fa1565b60405180910390a450611472565b505b5050505050505050565b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b81526004016114b69190611a73565b602060405180830381865afa1580156114d1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114f59190612029565b905092915050565b5f5f8473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb858560405160240161152e929190611ca0565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161157c919061221b565b5f604051808303815f865af19150503d805f81146115b5576040519150601f19603f3d011682016040523d82523d5f602084013e6115ba565b606091505b50915091508180156115e757505f815114806115e65750808060200190518101906115e59190611cfc565b5b5b611626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161d9061227b565b60405180910390fd5b5050505050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6116678261163e565b9050919050565b6116778161165d565b8114611681575f5ffd5b50565b5f813590506116928161166e565b92915050565b5f819050919050565b6116aa81611698565b81146116b4575f5ffd5b50565b5f813590506116c5816116a1565b92915050565b5f5f5f5f5f5f5f60e0888a0312156116e6576116e5611636565b5b5f6116f38a828b01611684565b97505060206117048a828b01611684565b96505060406117158a828b01611684565b95505060606117268a828b016116b7565b94505060806117378a828b016116b7565b93505060a06117488a828b016116b7565b92505060c06117598a828b016116b7565b91505092959891949750929550565b5f5f6040838503121561177e5761177d611636565b5b5f61178b85828601611684565b925050602061179c858286016116b7565b9150509250929050565b5f602082840312156117bb576117ba611636565b5b5f6117c884828501611684565b91505092915050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61181b826117d5565b810181811067ffffffffffffffff8211171561183a576118396117e5565b5b80604052505050565b5f61184c61162d565b90506118588282611812565b919050565b5f67ffffffffffffffff821115611877576118766117e5565b5b602082029050602081019050919050565b5f5ffd5b5f61189e6118998461185d565b611843565b905080838252602082019050602084028301858111156118c1576118c0611888565b5b835b818110156118ea57806118d68882611684565b8452602084019350506020810190506118c3565b5050509392505050565b5f82601f830112611908576119076117d1565b5b813561191884826020860161188c565b91505092915050565b5f5f5f6060848603121561193857611937611636565b5b5f61194586828701611684565b9350506020611956868287016116b7565b925050604084013567ffffffffffffffff8111156119775761197661163a565b5b611983868287016118f4565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6119bf81611698565b82525050565b5f6119d083836119b6565b60208301905092915050565b5f602082019050919050565b5f6119f28261198d565b6119fc8185611997565b9350611a07836119a7565b805f5b83811015611a37578151611a1e88826119c5565b9750611a29836119dc565b925050600181019050611a0a565b5085935050505092915050565b5f6020820190508181035f830152611a5c81846119e8565b905092915050565b611a6d8161165d565b82525050565b5f602082019050611a865f830184611a64565b92915050565b5f60ff82169050919050565b611aa181611a8c565b82525050565b5f602082019050611aba5f830184611a98565b92915050565b5f62ffffff82169050919050565b611ad781611ac0565b8114611ae1575f5ffd5b50565b5f81359050611af281611ace565b92915050565b5f5f5f5f5f5f5f60e0888a031215611b1357611b12611636565b5b5f611b208a828b01611684565b9750506020611b318a828b01611684565b9650506040611b428a828b01611684565b9550506060611b538a828b016116b7565b9450506080611b648a828b01611ae4565b93505060a0611b758a828b016116b7565b92505060c0611b868a828b016116b7565b91505092959891949750929550565b5f5f60408385031215611bab57611baa611636565b5b5f611bb885828601611684565b9250506020611bc985828601611684565b9150509250929050565b611bdc81611698565b82525050565b5f602082019050611bf55f830184611bd3565b92915050565b5f82825260208201905092915050565b7f6e6f74206f6e20746865207768697465206c69737400000000000000000000005f82015250565b5f611c3f601583611bfb565b9150611c4a82611c0b565b602082019050919050565b5f6020820190508181035f830152611c6c81611c33565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f604082019050611cb35f830185611a64565b611cc06020830184611bd3565b9392505050565b5f8115159050919050565b611cdb81611cc7565b8114611ce5575f5ffd5b50565b5f81519050611cf681611cd2565b92915050565b5f60208284031215611d1157611d10611636565b5b5f611d1e84828501611ce8565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b611d598161165d565b82525050565b5f611d6a8383611d50565b60208301905092915050565b5f602082019050919050565b5f611d8c82611d27565b611d968185611d31565b9350611da183611d41565b805f5b83811015611dd1578151611db88882611d5f565b9750611dc383611d76565b925050600181019050611da4565b5085935050505092915050565b5f60a082019050611df15f830188611bd3565b611dfe6020830187611bd3565b8181036040830152611e108186611d82565b9050611e1f6060830185611a64565b611e2c6080830184611bd3565b9695505050505050565b5f67ffffffffffffffff821115611e5057611e4f6117e5565b5b602082029050602081019050919050565b5f81519050611e6f816116a1565b92915050565b5f611e87611e8284611e36565b611843565b90508083825260208201905060208402830185811115611eaa57611ea9611888565b5b835b81811015611ed35780611ebf8882611e61565b845260208401935050602081019050611eac565b5050509392505050565b5f82601f830112611ef157611ef06117d1565b5b8151611f01848260208601611e75565b91505092915050565b5f60208284031215611f1f57611f1e611636565b5b5f82015167ffffffffffffffff811115611f3c57611f3b61163a565b5b611f4884828501611edd565b91505092915050565b5f81519050919050565b8281835e5f83830152505050565b5f611f7382611f51565b611f7d8185611bfb565b9350611f8d818560208601611f5b565b611f96816117d5565b840191505092915050565b5f6020820190508181035f830152611fb98184611f69565b905092915050565b7f61646d696e3a2077757420646f20796f75207472793f000000000000000000005f82015250565b5f611ff5601683611bfb565b915061200082611fc1565b602082019050919050565b5f6020820190508181035f83015261202281611fe9565b9050919050565b5f6020828403121561203e5761203d611636565b5b5f61204b84828501611e61565b91505092915050565b5f6040820190506120675f830185611bd3565b81810360208301526120798184611d82565b90509392505050565b61208b81611cc7565b82525050565b5f6020820190506120a45f830184612082565b92915050565b6120b381611a8c565b81146120bd575f5ffd5b50565b5f815190506120ce816120aa565b92915050565b5f602082840312156120e9576120e8611636565b5b5f6120f6848285016120c0565b91505092915050565b61210881611ac0565b82525050565b6121178161163e565b82525050565b61010082015f8201516121325f850182611d50565b5060208201516121456020850182611d50565b50604082015161215860408501826120ff565b50606082015161216b6060850182611d50565b50608082015161217e60808501826119b6565b5060a082015161219160a08501826119b6565b5060c08201516121a460c08501826119b6565b5060e08201516121b760e085018261210e565b50505050565b5f610100820190506121d15f83018461211d565b92915050565b5f81519050919050565b5f81905092915050565b5f6121f5826121d7565b6121ff81856121e1565b935061220f818560208601611f5b565b80840191505092915050565b5f61222682846121eb565b915081905092915050565b7f5472616e7366657248656c7065723a205452414e534645525f4641494c4544005f82015250565b5f612265601f83611bfb565b915061227082612231565b602082019050919050565b5f6020820190508181035f83015261229281612259565b905091905056fea26469706673582212205cb7386377fa7b79c44723a4e2e54a0282ec7a67f388b4375108e2b7b3793f1b64736f6c634300081b0033