608060405234801561000f575f80fd5b505f339050805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506012600a6100bc9190610303565b633b9aca006100cb919061034d565b60015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503373ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6012600a6101699190610303565b633b9aca00610178919061034d565b604051610185919061039d565b60405180910390a36103b6565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115610214578086048111156101f0576101ef610192565b5b60018516156101ff5780820291505b808102905061020d856101bf565b94506101d4565b94509492505050565b5f8261022c57600190506102e7565b81610239575f90506102e7565b816001811461024f576002811461025957610288565b60019150506102e7565b60ff84111561026b5761026a610192565b5b8360020a91508482111561028257610281610192565b5b506102e7565b5060208310610133831016604e8410600b84101617156102bd5782820a9050838111156102b8576102b7610192565b5b6102e7565b6102ca84848460016101cb565b925090508184048111156102e1576102e0610192565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f61030d826102ee565b9150610318836102f7565b92506103457fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461021d565b905092915050565b5f610357826102ee565b9150610362836102ee565b9250828202610370816102ee565b9150828204841483151761038757610386610192565b5b5092915050565b610397816102ee565b82525050565b5f6020820190506103b05f83018461038e565b92915050565b6118a2806103c35f395ff3fe608060405234801561000f575f80fd5b50600436106100cd575f3560e01c806370a082311161008a57806395d89b411161006457806395d89b4114610225578063b15be2f514610243578063beabacc81461024d578063dd62ed3e14610269576100cd565b806370a08231146101bb5780637111a994146101eb5780638da5cb5b14610207576100cd565b806306fdde03146100d1578063095ea7b3146100ef57806318160ddd1461011f57806323b872dd1461013d578063313ce5671461016d5780635487816d1461018b575b5f80fd5b6100d9610299565b6040516100e69190610d4c565b60405180910390f35b61010960048036038101906101049190610e0a565b6102d6565b6040516101169190610e62565b60405180910390f35b6101276102ec565b6040516101349190610e8a565b60405180910390f35b61015760048036038101906101529190610ea3565b61030f565b6040516101649190610e62565b60405180910390f35b6101756103b4565b6040516101829190610f0e565b60405180910390f35b6101a560048036038101906101a09190610e0a565b6103bc565b6040516101b29190610e62565b60405180910390f35b6101d560048036038101906101d09190610f27565b6103d2565b6040516101e29190610e8a565b60405180910390f35b61020560048036038101906102009190611152565b610418565b005b61020f6105c7565b60405161021c9190611205565b60405180910390f35b61022d6105ee565b60405161023a9190610d4c565b60405180910390f35b61024b61062b565b005b61026760048036038101906102629190610ea3565b610772565b005b610283600480360381019061027e919061121e565b610869565b6040516102909190610e8a565b60405180910390f35b60606040518060400160405280600c81526020017fd0a2657468d0b572205553440000000000000000000000000000000000000000815250905090565b5f6102e23384846108eb565b6001905092915050565b5f6012600a6102fb91906113b8565b633b9aca0061030a9190611402565b905090565b5f61031b848484610aae565b6103a984338460025f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546103a49190611443565b6108eb565b600190509392505050565b5f6012905090565b5f6103c8338484610aae565b6001905092915050565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146104a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049c906114c0565b60405180910390fd5b815183511480156104b7575080518251145b6104f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ed90611528565b60405180910390fd5b5f5b83518110156105c15782818151811061051457610513611546565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1684828151811061054557610544611546565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84848151811061059757610596611546565b5b60200260200101516040516105ac9190610e8a565b60405180910390a380806001019150506104f8565b50505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600581526020017f555344d0a2000000000000000000000000000000000000000000000000000000815250905090565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106af906114c0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146107ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f6906114c0565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161085c9190610e8a565b60405180910390a3505050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610959576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610950906115e3565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036109c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109be90611671565b60405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610aa19190610e8a565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b13906116ff565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b819061178d565b60405180910390fd5b5f8111610bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc39061181b565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610c189190611443565b925050819055508060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610c6b9190611839565b925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610ccf9190610e8a565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610d1e82610cdc565b610d288185610ce6565b9350610d38818560208601610cf6565b610d4181610d04565b840191505092915050565b5f6020820190508181035f830152610d648184610d14565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610da682610d7d565b9050919050565b610db681610d9c565b8114610dc0575f80fd5b50565b5f81359050610dd181610dad565b92915050565b5f819050919050565b610de981610dd7565b8114610df3575f80fd5b50565b5f81359050610e0481610de0565b92915050565b5f8060408385031215610e2057610e1f610d75565b5b5f610e2d85828601610dc3565b9250506020610e3e85828601610df6565b9150509250929050565b5f8115159050919050565b610e5c81610e48565b82525050565b5f602082019050610e755f830184610e53565b92915050565b610e8481610dd7565b82525050565b5f602082019050610e9d5f830184610e7b565b92915050565b5f805f60608486031215610eba57610eb9610d75565b5b5f610ec786828701610dc3565b9350506020610ed886828701610dc3565b9250506040610ee986828701610df6565b9150509250925092565b5f60ff82169050919050565b610f0881610ef3565b82525050565b5f602082019050610f215f830184610eff565b92915050565b5f60208284031215610f3c57610f3b610d75565b5b5f610f4984828501610dc3565b91505092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610f8c82610d04565b810181811067ffffffffffffffff82111715610fab57610faa610f56565b5b80604052505050565b5f610fbd610d6c565b9050610fc98282610f83565b919050565b5f67ffffffffffffffff821115610fe857610fe7610f56565b5b602082029050602081019050919050565b5f80fd5b5f61100f61100a84610fce565b610fb4565b9050808382526020820190506020840283018581111561103257611031610ff9565b5b835b8181101561105b57806110478882610dc3565b845260208401935050602081019050611034565b5050509392505050565b5f82601f83011261107957611078610f52565b5b8135611089848260208601610ffd565b91505092915050565b5f67ffffffffffffffff8211156110ac576110ab610f56565b5b602082029050602081019050919050565b5f6110cf6110ca84611092565b610fb4565b905080838252602082019050602084028301858111156110f2576110f1610ff9565b5b835b8181101561111b57806111078882610df6565b8452602084019350506020810190506110f4565b5050509392505050565b5f82601f83011261113957611138610f52565b5b81356111498482602086016110bd565b91505092915050565b5f805f6060848603121561116957611168610d75565b5b5f84013567ffffffffffffffff81111561118657611185610d79565b5b61119286828701611065565b935050602084013567ffffffffffffffff8111156111b3576111b2610d79565b5b6111bf86828701611065565b925050604084013567ffffffffffffffff8111156111e0576111df610d79565b5b6111ec86828701611125565b9150509250925092565b6111ff81610d9c565b82525050565b5f6020820190506112185f8301846111f6565b92915050565b5f806040838503121561123457611233610d75565b5b5f61124185828601610dc3565b925050602061125285828601610dc3565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156112de578086048111156112ba576112b961125c565b5b60018516156112c95780820291505b80810290506112d785611289565b945061129e565b94509492505050565b5f826112f657600190506113b1565b81611303575f90506113b1565b8160018114611319576002811461132357611352565b60019150506113b1565b60ff8411156113355761133461125c565b5b8360020a91508482111561134c5761134b61125c565b5b506113b1565b5060208310610133831016604e8410600b84101617156113875782820a9050838111156113825761138161125c565b5b6113b1565b6113948484846001611295565b925090508184048111156113ab576113aa61125c565b5b81810290505b9392505050565b5f6113c282610dd7565b91506113cd83610ef3565b92506113fa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846112e7565b905092915050565b5f61140c82610dd7565b915061141783610dd7565b925082820261142581610dd7565b9150828204841483151761143c5761143b61125c565b5b5092915050565b5f61144d82610dd7565b915061145883610dd7565b92508282039050818111156114705761146f61125c565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6114aa602083610ce6565b91506114b582611476565b602082019050919050565b5f6020820190508181035f8301526114d78161149e565b9050919050565b7f417272617973206d69736d6174636800000000000000000000000000000000005f82015250565b5f611512600f83610ce6565b915061151d826114de565b602082019050919050565b5f6020820190508181035f83015261153f81611506565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6115cd602483610ce6565b91506115d882611573565b604082019050919050565b5f6020820190508181035f8301526115fa816115c1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61165b602283610ce6565b915061166682611601565b604082019050919050565b5f6020820190508181035f8301526116888161164f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6116e9602583610ce6565b91506116f48261168f565b604082019050919050565b5f6020820190508181035f830152611716816116dd565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f611777602383610ce6565b91506117828261171d565b604082019050919050565b5f6020820190508181035f8301526117a48161176b565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f611805602983610ce6565b9150611810826117ab565b604082019050919050565b5f6020820190508181035f830152611832816117f9565b9050919050565b5f61184382610dd7565b915061184e83610dd7565b92508282019050808211156118665761186561125c565b5b9291505056fea264697066735822122055ecef2c2409de6ad23cfd75a221bb8fb55b8ad5cb59f786192d771a5af5aaa264736f6c634300081a0033