608060405234801561000f575f80fd5b506040518060400160405280600781526020017f4e4f544d454d45000000000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f4e4f544d454d4500000000000000000000000000000000000000000000000000815250816003908161008b919061067e565b50806004908161009b919061067e565b5050506100ba6100af6100dc60201b60201c565b6100e360201b60201c565b6100d7336c01431e0fae6d7217caa00000006101a660201b60201c565b610862565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610216575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161020d919061078c565b60405180910390fd5b6102275f838361022b60201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361027b578060025f82825461026f91906107d2565b92505081905550610349565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610304578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016102fb93929190610814565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610390578060025f82825403925050819055506103da565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516104379190610849565b60405180910390a3505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806104bf57607f821691505b6020821081036104d2576104d161047b565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026105347fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826104f9565b61053e86836104f9565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61058261057d61057884610556565b61055f565b610556565b9050919050565b5f819050919050565b61059b83610568565b6105af6105a782610589565b848454610505565b825550505050565b5f90565b6105c36105b7565b6105ce818484610592565b505050565b5b818110156105f1576105e65f826105bb565b6001810190506105d4565b5050565b601f82111561063657610607816104d8565b610610846104ea565b8101602085101561061f578190505b61063361062b856104ea565b8301826105d3565b50505b505050565b5f82821c905092915050565b5f6106565f198460080261063b565b1980831691505092915050565b5f61066e8383610647565b9150826002028217905092915050565b61068782610444565b67ffffffffffffffff8111156106a05761069f61044e565b5b6106aa82546104a8565b6106b58282856105f5565b5f60209050601f8311600181146106e6575f84156106d4578287015190505b6106de8582610663565b865550610745565b601f1984166106f4866104d8565b5f5b8281101561071b578489015182556001820191506020850194506020810190506106f6565b868310156107385784890151610734601f891682610647565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6107768261074d565b9050919050565b6107868161076c565b82525050565b5f60208201905061079f5f83018461077d565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6107dc82610556565b91506107e783610556565b92508282019050808211156107ff576107fe6107a5565b5b92915050565b61080e81610556565b82525050565b5f6060820190506108275f83018661077d565b6108346020830185610805565b6108416040830184610805565b949350505050565b5f60208201905061085c5f830184610805565b92915050565b61113a8061086f5f395ff3fe608060405234801561000f575f80fd5b50600436106100b2575f3560e01c8063715018a61161006f578063715018a6146101a05780638da5cb5b146101aa57806395d89b41146101c8578063a9059cbb146101e6578063dd62ed3e14610216578063f2fde38b14610246576100b2565b806306fdde03146100b6578063095ea7b3146100d457806318160ddd1461010457806323b872dd14610122578063313ce5671461015257806370a0823114610170575b5f80fd5b6100be610262565b6040516100cb9190610cbd565b60405180910390f35b6100ee60048036038101906100e99190610d6e565b6102f2565b6040516100fb9190610dc6565b60405180910390f35b61010c610314565b6040516101199190610dee565b60405180910390f35b61013c60048036038101906101379190610e07565b61031d565b6040516101499190610dc6565b60405180910390f35b61015a61034b565b6040516101679190610e72565b60405180910390f35b61018a60048036038101906101859190610e8b565b610353565b6040516101979190610dee565b60405180910390f35b6101a8610398565b005b6101b26103ab565b6040516101bf9190610ec5565b60405180910390f35b6101d06103d3565b6040516101dd9190610cbd565b60405180910390f35b61020060048036038101906101fb9190610d6e565b610463565b60405161020d9190610dc6565b60405180910390f35b610230600480360381019061022b9190610ede565b610485565b60405161023d9190610dee565b60405180910390f35b610260600480360381019061025b9190610e8b565b610507565b005b60606003805461027190610f49565b80601f016020809104026020016040519081016040528092919081815260200182805461029d90610f49565b80156102e85780601f106102bf576101008083540402835291602001916102e8565b820191905f5260205f20905b8154815290600101906020018083116102cb57829003601f168201915b5050505050905090565b5f806102fc610589565b9050610309818585610590565b600191505092915050565b5f600254905090565b5f80610327610589565b90506103348582856105a2565b61033f858585610634565b60019150509392505050565b5f6012905090565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6103a0610724565b6103a95f6107a2565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546103e290610f49565b80601f016020809104026020016040519081016040528092919081815260200182805461040e90610f49565b80156104595780601f1061043057610100808354040283529160200191610459565b820191905f5260205f20905b81548152906001019060200180831161043c57829003601f168201915b5050505050905090565b5f8061046d610589565b905061047a818585610634565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61050f610724565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057490610fe9565b60405180910390fd5b610586816107a2565b50565b5f33905090565b61059d8383836001610865565b505050565b5f6105ad8484610485565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461062e578181101561061f578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161061693929190611007565b60405180910390fd5b61062d84848484035f610865565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036106a4575f6040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161069b9190610ec5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610714575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161070b9190610ec5565b60405180910390fd5b61071f838383610a34565b505050565b61072c610589565b73ffffffffffffffffffffffffffffffffffffffff1661074a6103ab565b73ffffffffffffffffffffffffffffffffffffffff16146107a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079790611086565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036108d5575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016108cc9190610ec5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610945575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161093c9190610ec5565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610a2e578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a259190610dee565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a84578060025f828254610a7891906110d1565b92505081905550610b52565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610b0d578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610b0493929190611007565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b99578060025f8282540392505081905550610be3565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c409190610dee565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610c8f82610c4d565b610c998185610c57565b9350610ca9818560208601610c67565b610cb281610c75565b840191505092915050565b5f6020820190508181035f830152610cd58184610c85565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610d0a82610ce1565b9050919050565b610d1a81610d00565b8114610d24575f80fd5b50565b5f81359050610d3581610d11565b92915050565b5f819050919050565b610d4d81610d3b565b8114610d57575f80fd5b50565b5f81359050610d6881610d44565b92915050565b5f8060408385031215610d8457610d83610cdd565b5b5f610d9185828601610d27565b9250506020610da285828601610d5a565b9150509250929050565b5f8115159050919050565b610dc081610dac565b82525050565b5f602082019050610dd95f830184610db7565b92915050565b610de881610d3b565b82525050565b5f602082019050610e015f830184610ddf565b92915050565b5f805f60608486031215610e1e57610e1d610cdd565b5b5f610e2b86828701610d27565b9350506020610e3c86828701610d27565b9250506040610e4d86828701610d5a565b9150509250925092565b5f60ff82169050919050565b610e6c81610e57565b82525050565b5f602082019050610e855f830184610e63565b92915050565b5f60208284031215610ea057610e9f610cdd565b5b5f610ead84828501610d27565b91505092915050565b610ebf81610d00565b82525050565b5f602082019050610ed85f830184610eb6565b92915050565b5f8060408385031215610ef457610ef3610cdd565b5b5f610f0185828601610d27565b9250506020610f1285828601610d27565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610f6057607f821691505b602082108103610f7357610f72610f1c565b5b50919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f610fd3602683610c57565b9150610fde82610f79565b604082019050919050565b5f6020820190508181035f83015261100081610fc7565b9050919050565b5f60608201905061101a5f830186610eb6565b6110276020830185610ddf565b6110346040830184610ddf565b949350505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f611070602083610c57565b915061107b8261103c565b602082019050919050565b5f6020820190508181035f83015261109d81611064565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6110db82610d3b565b91506110e683610d3b565b92508282019050808211156110fe576110fd6110a4565b5b9291505056fea264697066735822122047236d008c8ba4a186bfcf091f63259b88bebf4d3d56453cb5fd49276e7766c764736f6c634300081a0033