608060405234801561000f575f80fd5b50336040518060400160405280600881526020017f47616d65436f696e0000000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f4743000000000000000000000000000000000000000000000000000000000000815250816003908161008c91906106fe565b50806004908161009c91906106fe565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361010f575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610106919061080c565b60405180910390fd5b61011e8161015b60201b60201c565b506101563361013161021e60201b60201c565b600a61013d919061098d565b620186a061014b91906109d7565b61022660201b60201c565b610aa8565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610296575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161028d919061080c565b60405180910390fd5b6102a75f83836102ab60201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036102fb578060025f8282546102ef9190610a18565b925050819055506103c9565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610384578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161037b93929190610a5a565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610410578060025f828254039250508190555061045a565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516104b79190610a8f565b60405180910390a3505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061053f57607f821691505b602082108103610552576105516104fb565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026105b47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610579565b6105be8683610579565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6106026105fd6105f8846105d6565b6105df565b6105d6565b9050919050565b5f819050919050565b61061b836105e8565b61062f61062782610609565b848454610585565b825550505050565b5f90565b610643610637565b61064e818484610612565b505050565b5b81811015610671576106665f8261063b565b600181019050610654565b5050565b601f8211156106b65761068781610558565b6106908461056a565b8101602085101561069f578190505b6106b36106ab8561056a565b830182610653565b50505b505050565b5f82821c905092915050565b5f6106d65f19846008026106bb565b1980831691505092915050565b5f6106ee83836106c7565b9150826002028217905092915050565b610707826104c4565b67ffffffffffffffff8111156107205761071f6104ce565b5b61072a8254610528565b610735828285610675565b5f60209050601f831160018114610766575f8415610754578287015190505b61075e85826106e3565b8655506107c5565b601f19841661077486610558565b5f5b8281101561079b57848901518255600182019150602085019450602081019050610776565b868310156107b857848901516107b4601f8916826106c7565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6107f6826107cd565b9050919050565b610806816107ec565b82525050565b5f60208201905061081f5f8301846107fd565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156108a75780860481111561088357610882610825565b5b60018516156108925780820291505b80810290506108a085610852565b9450610867565b94509492505050565b5f826108bf576001905061097a565b816108cc575f905061097a565b81600181146108e257600281146108ec5761091b565b600191505061097a565b60ff8411156108fe576108fd610825565b5b8360020a91508482111561091557610914610825565b5b5061097a565b5060208310610133831016604e8410600b84101617156109505782820a90508381111561094b5761094a610825565b5b61097a565b61095d848484600161085e565b9250905081840481111561097457610973610825565b5b81810290505b9392505050565b5f60ff82169050919050565b5f610997826105d6565b91506109a283610981565b92506109cf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846108b0565b905092915050565b5f6109e1826105d6565b91506109ec836105d6565b92508282026109fa816105d6565b91508282048414831517610a1157610a10610825565b5b5092915050565b5f610a22826105d6565b9150610a2d836105d6565b9250828201905080821115610a4557610a44610825565b5b92915050565b610a54816105d6565b82525050565b5f606082019050610a6d5f8301866107fd565b610a7a6020830185610a4b565b610a876040830184610a4b565b949350505050565b5f602082019050610aa25f830184610a4b565b92915050565b611df280610ab55f395ff3fe608060405260043610610129575f3560e01c80638da5cb5b116100aa578063d0679d341161006e578063d0679d34146103e4578063d96a094a1461040c578063dd62ed3e14610428578063e4849b3214610464578063f2fde38b1461048c578063fc37987b146104b457610129565b80638da5cb5b1461030457806395d89b411461032e578063a9059cbb14610358578063ac6af28014610394578063cb797836146103bc57610129565b8063313ce567116100f1578063313ce567146102215780636217229b1461024b5780636386c1c71461027557806370a08231146102b2578063715018a6146102ee57610129565b806306fdde031461012d578063095ea7b31461015757806318160ddd146101935780631d2e4afd146101bd57806323b872dd146101e5575b5f80fd5b348015610138575f80fd5b506101416104de565b60405161014e9190611384565b60405180910390f35b348015610162575f80fd5b5061017d60048036038101906101789190611442565b61056e565b60405161018a919061149a565b60405180910390f35b34801561019e575f80fd5b506101a7610590565b6040516101b491906114c2565b60405180910390f35b3480156101c8575f80fd5b506101e360048036038101906101de9190611607565b610599565b005b3480156101f0575f80fd5b5061020b6004803603810190610206919061167d565b61066e565b604051610218919061149a565b60405180910390f35b34801561022c575f80fd5b5061023561069c565b60405161024291906116e8565b60405180910390f35b348015610256575f80fd5b5061025f6106a4565b60405161026c91906114c2565b60405180910390f35b348015610280575f80fd5b5061029b60048036038101906102969190611701565b6106aa565b6040516102a992919061172c565b60405180910390f35b3480156102bd575f80fd5b506102d860048036038101906102d39190611701565b610844565b6040516102e591906114c2565b60405180910390f35b3480156102f9575f80fd5b50610302610889565b005b34801561030f575f80fd5b5061031861089c565b6040516103259190611770565b60405180910390f35b348015610339575f80fd5b506103426108c4565b60405161034f9190611384565b60405180910390f35b348015610363575f80fd5b5061037e60048036038101906103799190611442565b610954565b60405161038b919061149a565b60405180910390f35b34801561039f575f80fd5b506103ba60048036038101906103b59190611789565b610976565b005b3480156103c7575f80fd5b506103e260048036038101906103dd91906117c7565b610990565b005b3480156103ef575f80fd5b5061040a60048036038101906104059190611442565b610a1a565b005b610426600480360381019061042191906117c7565b610a29565b005b348015610433575f80fd5b5061044e600480360381019061044991906117f2565b610a8d565b60405161045b91906114c2565b60405180910390f35b34801561046f575f80fd5b5061048a600480360381019061048591906117c7565b610b0f565b005b348015610497575f80fd5b506104b260048036038101906104ad9190611701565b610bbd565b005b3480156104bf575f80fd5b506104c8610c41565b6040516104d591906114c2565b60405180910390f35b6060600380546104ed9061185d565b80601f01602080910402602001604051908101604052809291908181526020018280546105199061185d565b80156105645780601f1061053b57610100808354040283529160200191610564565b820191905f5260205f20905b81548152906001019060200180831161054757829003601f168201915b5050505050905090565b5f80610578610c47565b9050610585818585610c4e565b600191505092915050565b5f600254905090565b8160085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090816105e39190611a2a565b508060095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20908161062e9190611a2a565b507f7d18b42f8b54b38db3858d85addd4845b244c7ab57e5b3246475b88815c0c5cf82823360405161066293929190611af9565b60405180910390a15050565b5f80610678610c47565b9050610685858285610c60565b610690858585610cf2565b60019150509392505050565b5f6012905090565b60065481565b60608060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208180546107339061185d565b80601f016020809104026020016040519081016040528092919081815260200182805461075f9061185d565b80156107aa5780601f10610781576101008083540402835291602001916107aa565b820191905f5260205f20905b81548152906001019060200180831161078d57829003601f168201915b505050505091508080546107bd9061185d565b80601f01602080910402602001604051908101604052809291908181526020018280546107e99061185d565b80156108345780601f1061080b57610100808354040283529160200191610834565b820191905f5260205f20905b81548152906001019060200180831161081757829003601f168201915b5050505050905091509150915091565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610891610de2565b61089a5f610e69565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546108d39061185d565b80601f01602080910402602001604051908101604052809291908181526020018280546108ff9061185d565b801561094a5780601f106109215761010080835404028352916020019161094a565b820191905f5260205f20905b81548152906001019060200180831161092d57829003601f168201915b5050505050905090565b5f8061095e610c47565b905061096b818585610cf2565b600191505092915050565b61097e610de2565b81600681905550806007819055505050565b61099861089c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fc90611bac565b60405180910390fd5b610a1733610a1161089c565b83610cf2565b50565b610a25338383610cf2565b5050565b60075481610a379190611bf7565b3414610a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6f90611ca8565b60405180910390fd5b610a8a610a8361089c565b3383610cf2565b50565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f60065482610b1e9190611bf7565b905080471015610b63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5a90611d36565b60405180910390fd5b610b7533610b6f61089c565b84610cf2565b3373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015610bb8573d5f803e3d5ffd5b505050565b610bc5610de2565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c35575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610c2c9190611770565b60405180910390fd5b610c3e81610e69565b50565b60075481565b5f33905090565b610c5b8383836001610f2c565b505050565b5f610c6b8484610a8d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610cec5781811015610cdd578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610cd493929190611d54565b60405180910390fd5b610ceb84848484035f610f2c565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d62575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610d599190611770565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610dd2575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610dc99190611770565b60405180910390fd5b610ddd8383836110fb565b505050565b610dea610c47565b73ffffffffffffffffffffffffffffffffffffffff16610e0861089c565b73ffffffffffffffffffffffffffffffffffffffff1614610e6757610e2b610c47565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610e5e9190611770565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610f9c575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610f939190611770565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361100c575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016110039190611770565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080156110f5578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516110ec91906114c2565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361114b578060025f82825461113f9190611d89565b92505081905550611219565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156111d4578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016111cb93929190611d54565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611260578060025f82825403925050819055506112aa565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161130791906114c2565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61135682611314565b611360818561131e565b935061137081856020860161132e565b6113798161133c565b840191505092915050565b5f6020820190508181035f83015261139c818461134c565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6113de826113b5565b9050919050565b6113ee816113d4565b81146113f8575f80fd5b50565b5f81359050611409816113e5565b92915050565b5f819050919050565b6114218161140f565b811461142b575f80fd5b50565b5f8135905061143c81611418565b92915050565b5f8060408385031215611458576114576113ad565b5b5f611465858286016113fb565b92505060206114768582860161142e565b9150509250929050565b5f8115159050919050565b61149481611480565b82525050565b5f6020820190506114ad5f83018461148b565b92915050565b6114bc8161140f565b82525050565b5f6020820190506114d55f8301846114b3565b92915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6115198261133c565b810181811067ffffffffffffffff82111715611538576115376114e3565b5b80604052505050565b5f61154a6113a4565b90506115568282611510565b919050565b5f67ffffffffffffffff821115611575576115746114e3565b5b61157e8261133c565b9050602081019050919050565b828183375f83830152505050565b5f6115ab6115a68461155b565b611541565b9050828152602081018484840111156115c7576115c66114df565b5b6115d284828561158b565b509392505050565b5f82601f8301126115ee576115ed6114db565b5b81356115fe848260208601611599565b91505092915050565b5f806040838503121561161d5761161c6113ad565b5b5f83013567ffffffffffffffff81111561163a576116396113b1565b5b611646858286016115da565b925050602083013567ffffffffffffffff811115611667576116666113b1565b5b611673858286016115da565b9150509250929050565b5f805f60608486031215611694576116936113ad565b5b5f6116a1868287016113fb565b93505060206116b2868287016113fb565b92505060406116c38682870161142e565b9150509250925092565b5f60ff82169050919050565b6116e2816116cd565b82525050565b5f6020820190506116fb5f8301846116d9565b92915050565b5f60208284031215611716576117156113ad565b5b5f611723848285016113fb565b91505092915050565b5f6040820190508181035f830152611744818561134c565b90508181036020830152611758818461134c565b90509392505050565b61176a816113d4565b82525050565b5f6020820190506117835f830184611761565b92915050565b5f806040838503121561179f5761179e6113ad565b5b5f6117ac8582860161142e565b92505060206117bd8582860161142e565b9150509250929050565b5f602082840312156117dc576117db6113ad565b5b5f6117e98482850161142e565b91505092915050565b5f8060408385031215611808576118076113ad565b5b5f611815858286016113fb565b9250506020611826858286016113fb565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061187457607f821691505b60208210810361188757611886611830565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026118e97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826118ae565b6118f386836118ae565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61192e6119296119248461140f565b61190b565b61140f565b9050919050565b5f819050919050565b61194783611914565b61195b61195382611935565b8484546118ba565b825550505050565b5f90565b61196f611963565b61197a81848461193e565b505050565b5b8181101561199d576119925f82611967565b600181019050611980565b5050565b601f8211156119e2576119b38161188d565b6119bc8461189f565b810160208510156119cb578190505b6119df6119d78561189f565b83018261197f565b50505b505050565b5f82821c905092915050565b5f611a025f19846008026119e7565b1980831691505092915050565b5f611a1a83836119f3565b9150826002028217905092915050565b611a3382611314565b67ffffffffffffffff811115611a4c57611a4b6114e3565b5b611a56825461185d565b611a618282856119a1565b5f60209050601f831160018114611a92575f8415611a80578287015190505b611a8a8582611a0f565b865550611af1565b601f198416611aa08661188d565b5f5b82811015611ac757848901518255600182019150602085019450602081019050611aa2565b86831015611ae45784890151611ae0601f8916826119f3565b8355505b6001600288020188555050505b505050505050565b5f6060820190508181035f830152611b11818661134c565b90508181036020830152611b25818561134c565b9050611b346040830184611761565b949350505050565b7f4f6e6c7920746865206f776e65722063616e2075736520746869732066756e635f8201527f74696f6e00000000000000000000000000000000000000000000000000000000602082015250565b5f611b9660248361131e565b9150611ba182611b3c565b604082019050919050565b5f6020820190508181035f830152611bc381611b8a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611c018261140f565b9150611c0c8361140f565b9250828202611c1a8161140f565b91508282048414831517611c3157611c30611bca565b5b5092915050565b7f45746865722073656e7420646f6573206e6f74206d61746368207468652062755f8201527f7920726174650000000000000000000000000000000000000000000000000000602082015250565b5f611c9260268361131e565b9150611c9d82611c38565b604082019050919050565b5f6020820190508181035f830152611cbf81611c86565b9050919050565b7f436f6e747261637420646f6573206e6f74206861766520656e6f7567682065745f8201527f6865720000000000000000000000000000000000000000000000000000000000602082015250565b5f611d2060238361131e565b9150611d2b82611cc6565b604082019050919050565b5f6020820190508181035f830152611d4d81611d14565b9050919050565b5f606082019050611d675f830186611761565b611d7460208301856114b3565b611d8160408301846114b3565b949350505050565b5f611d938261140f565b9150611d9e8361140f565b9250828201905080821115611db657611db5611bca565b5b9291505056fea26469706673582212206d83e14ff1ebb21639bfe5851f3fccf63c9f4fcc0b42bc868507e78abf8fb8c264736f6c63430008190033