0x608060405234801561000f575f5ffd5b50604051612962380380612962833981810160405281019061003191906101f4565b61004d61004261009b60201b60201c565b6100a260201b60201c565b8160015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806002819055505050610232565b5f33905090565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61019082610167565b9050919050565b6101a081610186565b81146101aa575f5ffd5b50565b5f815190506101bb81610197565b92915050565b5f819050919050565b6101d3816101c1565b81146101dd575f5ffd5b50565b5f815190506101ee816101ca565b92915050565b5f5f6040838503121561020a57610209610163565b5b5f610217858286016101ad565b9250506020610228858286016101e0565b9150509250929050565b6127238061023f5f395ff3fe60806040526004361061007e575f3560e01c8063949a66061161004d578063949a660614610119578063ecc2c0fb14610155578063f2fde38b14610191578063f3fef3a3146101b957610085565b8063214ca9d014610089578063715018a6146100b1578063850be769146100c75780638da5cb5b146100ef57610085565b3661008557005b5f5ffd5b348015610094575f5ffd5b506100af60048036038101906100aa9190611a55565b6101e1565b005b3480156100bc575f5ffd5b506100c56108e0565b005b3480156100d2575f5ffd5b506100ed60048036038101906100e89190611b83565b610967565b005b3480156100fa575f5ffd5b50610103610cc0565b6040516101109190611c35565b60405180910390f35b348015610124575f5ffd5b5061013f600480360381019061013a9190611a55565b610ce7565b60405161014c9190611c5d565b60405180910390f35b348015610160575f5ffd5b5061017b60048036038101906101769190611a55565b611039565b6040516101889190611c5d565b60405180910390f35b34801561019c575f5ffd5b506101b760048036038101906101b29190611c76565b611527565b005b3480156101c4575f5ffd5b506101df60048036038101906101da9190611ca1565b61161d565b005b818161023a8282336040516020016101f99190611c35565b6040516020818303038152906040528051906020012060405160200161021f9190611d08565b60405160208183030381529060405280519060200120611792565b610279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161027090611d7c565b60405180910390fd5b5f600f426102879190611dc7565b90505f600267ffffffffffffffff8111156102a5576102a4611dfa565b5b6040519080825280602002602001820160405280156102d35781602001602082028036833780820191505090505b50905060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610340573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103649190611e3b565b815f8151811061037757610376611e66565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505088816001815181106103c6576103c5611e66565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637ff36ab58a5f8533886040518663ffffffff1660e01b81526004016104629493929190611f8c565b5f6040518083038185885af115801561047d573d5f5f3e3d5ffd5b50505050506040513d5f823e3d601f19601f820116820180604052508101906104a69190612105565b90505f816001815181106104bd576104bc611e66565b5b602002602001015190505f89826104d4919061214c565b90505f8111610518576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050f906121c9565b60405180910390fd5b5f8c90508073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401610559939291906121e7565b6020604051808303815f875af1158015610575573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105999190612251565b6105d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105cf906122c6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b360015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b81526004016106349291906122e4565b6020604051808303815f875af1158015610650573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106749190612251565b6106b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106aa90612355565b60405180910390fd5b5f600267ffffffffffffffff8111156106cf576106ce611dfa565b5b6040519080825280602002602001820160405280156106fd5781602001602082028036833780820191505090505b5090508d815f8151811061071457610713611e66565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107b8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107dc9190611e3b565b816001815181106107f0576107ef611e66565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318cbafe5845f84308c6040518663ffffffff1660e01b815260040161088c959493929190612373565b5f604051808303815f875af11580156108a7573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906108cf9190612105565b505050505050505050505050505050565b6108e86117e9565b73ffffffffffffffffffffffffffffffffffffffff16610906610cc0565b73ffffffffffffffffffffffffffffffffffffffff161461095c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095390612415565b60405180910390fd5b6109655f6117f0565b565b61096f6117e9565b73ffffffffffffffffffffffffffffffffffffffff1661098d610cc0565b73ffffffffffffffffffffffffffffffffffffffff16146109e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109da90612415565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a489061247d565b60405180910390fd5b5f8690505f5f90505b86869050811015610cb657848482818110610a7857610a77611e66565b5b905060200201358273ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e898985818110610aae57610aad611e66565b5b9050602002016020810190610ac39190611c76565b306040518363ffffffff1660e01b8152600401610ae192919061249b565b602060405180830381865afa158015610afc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b2091906124c2565b10158015610be55750848482818110610b3c57610b3b611e66565b5b905060200201358273ffffffffffffffffffffffffffffffffffffffff166370a08231898985818110610b7257610b71611e66565b5b9050602002016020810190610b879190611c76565b6040518263ffffffff1660e01b8152600401610ba39190611c35565b602060405180830381865afa158015610bbe573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610be291906124c2565b10155b15610ca9578173ffffffffffffffffffffffffffffffffffffffff166323b872dd888884818110610c1957610c18611e66565b5b9050602002016020810190610c2e9190611c76565b85888886818110610c4257610c41611e66565b5b905060200201356040518463ffffffff1660e01b8152600401610c67939291906121e7565b6020604051808303815f875af1158015610c83573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ca79190612251565b505b8080600101915050610a5a565b5050505050505050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f8282610d41828233604051602001610d009190611c35565b60405160208183030381529060405280519060200120604051602001610d269190611d08565b60405160208183030381529060405280519060200120611792565b610d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7790611d7c565b60405180910390fd5b5f600f42610d8e9190611dc7565b90505f600267ffffffffffffffff811115610dac57610dab611dfa565b5b604051908082528060200260200182016040528015610dda5781602001602082028036833780820191505090505b50905060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e47573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e6b9190611e3b565b815f81518110610e7e57610e7d611e66565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508981600181518110610ecd57610ecc611e66565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637ff36ab58b8b8533886040518663ffffffff1660e01b8152600401610f6994939291906124ed565b5f6040518083038185885af1158015610f84573d5f5f3e3d5ffd5b50505050506040513d5f823e3d601f19601f82011682018060405250810190610fad9190612105565b90508881600181518110610fc457610fc3611e66565b5b6020026020010151101561100d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100490612581565b60405180910390fd5b8060018151811061102157611020611e66565b5b60200260200101519550505050505095945050505050565b5f82826110938282336040516020016110529190611c35565b604051602081830303815290604052805190602001206040516020016110789190611d08565b60405160208183030381529060405280519060200120611792565b6110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c990611d7c565b60405180910390fd5b5f8890508073ffffffffffffffffffffffffffffffffffffffff166323b872dd33308b6040518463ffffffff1660e01b8152600401611113939291906121e7565b6020604051808303815f875af115801561112f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111539190612251565b611192576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611189906122c6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b360015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168a6040518363ffffffff1660e01b81526004016111ee9291906122e4565b6020604051808303815f875af115801561120a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061122e9190612251565b61126d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126490612355565b60405180910390fd5b5f600f4261127b9190611dc7565b90505f600267ffffffffffffffff81111561129957611298611dfa565b5b6040519080825280602002602001820160405280156112c75781602001602082028036833780820191505090505b5090508a815f815181106112de576112dd611e66565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611382573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113a69190611e3b565b816001815181106113ba576113b9611e66565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318cbafe58c8c8530886040518663ffffffff1660e01b815260040161145795949392919061259f565b5f604051808303815f875af1158015611472573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061149a9190612105565b905089816001815181106114b1576114b0611e66565b5b602002602001015110156114fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f190612581565b60405180910390fd5b8060018151811061150e5761150d611e66565b5b6020026020010151965050505050505095945050505050565b61152f6117e9565b73ffffffffffffffffffffffffffffffffffffffff1661154d610cc0565b73ffffffffffffffffffffffffffffffffffffffff16146115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159a90612415565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611611576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160890612667565b60405180910390fd5b61161a816117f0565b50565b6116256117e9565b73ffffffffffffffffffffffffffffffffffffffff16611643610cc0565b73ffffffffffffffffffffffffffffffffffffffff1614611699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169090612415565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fe9061247d565b60405180910390fd5b4781111561174a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611741906126cf565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561178d573d5f5f3e3d5ffd5b505050565b5f6117e08484808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f82011690508083019250505050505050600254846118b1565b90509392505050565b5f33905090565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f826118bd85846118c7565b1490509392505050565b5f5f8290505f5f90505b845181101561190d576118fe828683815181106118f1576118f0611e66565b5b6020026020010151611918565b915080806001019150506118d1565b508091505092915050565b5f81831061192f5761192a8284611942565b61193a565b6119398383611942565b5b905092915050565b5f825f528160205260405f20905092915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61199082611967565b9050919050565b6119a081611986565b81146119aa575f5ffd5b50565b5f813590506119bb81611997565b92915050565b5f819050919050565b6119d3816119c1565b81146119dd575f5ffd5b50565b5f813590506119ee816119ca565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112611a1557611a146119f4565b5b8235905067ffffffffffffffff811115611a3257611a316119f8565b5b602083019150836020820283011115611a4e57611a4d6119fc565b5b9250929050565b5f5f5f5f5f60808688031215611a6e57611a6d61195f565b5b5f611a7b888289016119ad565b9550506020611a8c888289016119e0565b9450506040611a9d888289016119e0565b935050606086013567ffffffffffffffff811115611abe57611abd611963565b5b611aca88828901611a00565b92509250509295509295909350565b5f5f83601f840112611aee57611aed6119f4565b5b8235905067ffffffffffffffff811115611b0b57611b0a6119f8565b5b602083019150836020820283011115611b2757611b266119fc565b5b9250929050565b5f5f83601f840112611b4357611b426119f4565b5b8235905067ffffffffffffffff811115611b6057611b5f6119f8565b5b602083019150836020820283011115611b7c57611b7b6119fc565b5b9250929050565b5f5f5f5f5f5f60808789031215611b9d57611b9c61195f565b5b5f611baa89828a016119ad565b965050602087013567ffffffffffffffff811115611bcb57611bca611963565b5b611bd789828a01611ad9565b9550955050604087013567ffffffffffffffff811115611bfa57611bf9611963565b5b611c0689828a01611b2e565b93509350506060611c1989828a016119ad565b9150509295509295509295565b611c2f81611986565b82525050565b5f602082019050611c485f830184611c26565b92915050565b611c57816119c1565b82525050565b5f602082019050611c705f830184611c4e565b92915050565b5f60208284031215611c8b57611c8a61195f565b5b5f611c98848285016119ad565b91505092915050565b5f5f60408385031215611cb757611cb661195f565b5b5f611cc4858286016119ad565b9250506020611cd5858286016119e0565b9150509250929050565b5f819050919050565b5f819050919050565b611d02611cfd82611cdf565b611ce8565b82525050565b5f611d138284611cf1565b60208201915081905092915050565b5f82825260208201905092915050565b7f34303300000000000000000000000000000000000000000000000000000000005f82015250565b5f611d66600383611d22565b9150611d7182611d32565b602082019050919050565b5f6020820190508181035f830152611d9381611d5a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611dd1826119c1565b9150611ddc836119c1565b9250828201905080821115611df457611df3611d9a565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050611e3581611997565b92915050565b5f60208284031215611e5057611e4f61195f565b5b5f611e5d84828501611e27565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f819050919050565b5f611ebf611eba611eb584611e93565b611e9c565b6119c1565b9050919050565b611ecf81611ea5565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b611f0781611986565b82525050565b5f611f188383611efe565b60208301905092915050565b5f602082019050919050565b5f611f3a82611ed5565b611f448185611edf565b9350611f4f83611eef565b805f5b83811015611f7f578151611f668882611f0d565b9750611f7183611f24565b925050600181019050611f52565b5085935050505092915050565b5f608082019050611f9f5f830187611ec6565b8181036020830152611fb18186611f30565b9050611fc06040830185611c26565b611fcd6060830184611c4e565b95945050505050565b5f601f19601f8301169050919050565b611fef82611fd6565b810181811067ffffffffffffffff8211171561200e5761200d611dfa565b5b80604052505050565b5f612020611956565b905061202c8282611fe6565b919050565b5f67ffffffffffffffff82111561204b5761204a611dfa565b5b602082029050602081019050919050565b5f8151905061206a816119ca565b92915050565b5f61208261207d84612031565b612017565b905080838252602082019050602084028301858111156120a5576120a46119fc565b5b835b818110156120ce57806120ba888261205c565b8452602084019350506020810190506120a7565b5050509392505050565b5f82601f8301126120ec576120eb6119f4565b5b81516120fc848260208601612070565b91505092915050565b5f6020828403121561211a5761211961195f565b5b5f82015167ffffffffffffffff81111561213757612136611963565b5b612143848285016120d8565b91505092915050565b5f612156826119c1565b9150612161836119c1565b925082820390508181111561217957612178611d9a565b5b92915050565b7f6661696c656400000000000000000000000000000000000000000000000000005f82015250565b5f6121b3600683611d22565b91506121be8261217f565b602082019050919050565b5f6020820190508181035f8301526121e0816121a7565b9050919050565b5f6060820190506121fa5f830186611c26565b6122076020830185611c26565b6122146040830184611c4e565b949350505050565b5f8115159050919050565b6122308161221c565b811461223a575f5ffd5b50565b5f8151905061224b81612227565b92915050565b5f602082840312156122665761226561195f565b5b5f6122738482850161223d565b91505092915050565b7f7472616e7366657246726f6d206661696c65642e0000000000000000000000005f82015250565b5f6122b0601483611d22565b91506122bb8261227c565b602082019050919050565b5f6020820190508181035f8301526122dd816122a4565b9050919050565b5f6040820190506122f75f830185611c26565b6123046020830184611c4e565b9392505050565b7f617070726f7665206661696c65642e00000000000000000000000000000000005f82015250565b5f61233f600f83611d22565b915061234a8261230b565b602082019050919050565b5f6020820190508181035f83015261236c81612333565b9050919050565b5f60a0820190506123865f830188611c4e565b6123936020830187611ec6565b81810360408301526123a58186611f30565b90506123b46060830185611c26565b6123c16080830184611c4e565b9695505050505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6123ff602083611d22565b915061240a826123cb565b602082019050919050565b5f6020820190508181035f83015261242c816123f3565b9050919050565b7f746f20746865207a65726f2061646472657373000000000000000000000000005f82015250565b5f612467601383611d22565b915061247282612433565b602082019050919050565b5f6020820190508181035f8301526124948161245b565b9050919050565b5f6040820190506124ae5f830185611c26565b6124bb6020830184611c26565b9392505050565b5f602082840312156124d7576124d661195f565b5b5f6124e48482850161205c565b91505092915050565b5f6080820190506125005f830187611c4e565b81810360208301526125128186611f30565b90506125216040830185611c26565b61252e6060830184611c4e565b95945050505050565b7f73776170206661696c65640000000000000000000000000000000000000000005f82015250565b5f61256b600b83611d22565b915061257682612537565b602082019050919050565b5f6020820190508181035f8301526125988161255f565b9050919050565b5f60a0820190506125b25f830188611c4e565b6125bf6020830187611c4e565b81810360408301526125d18186611f30565b90506125e06060830185611c26565b6125ed6080830184611c4e565b9695505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f612651602683611d22565b915061265c826125f7565b604082019050919050565b5f6020820190508181035f83015261267e81612645565b9050919050565b7f696e73756666696369656e742066756e647300000000000000000000000000005f82015250565b5f6126b9601283611d22565b91506126c482612685565b602082019050919050565b5f6020820190508181035f8301526126e6816126ad565b905091905056fea2646970667358221220860b2e0084fe3ccea047fda5c439c1008246bdc6a73bbc82a1e2d70c32945ce564736f6c634300081c00330000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad24349331133f6ebfdc598b2c96f847413c44f1a5e8763531cbd9a431ea5fa41b5e