60806040526040518060400160405280600881526020017f47616d65436f696e0000000000000000000000000000000000000000000000008152506001908161004891906103d9565b506040518060400160405280600281526020017f47430000000000000000000000000000000000000000000000000000000000008152506002908161008d91906103d9565b50601260035f6101000a81548160ff021916908360ff1602179055503480156100b4575f80fd5b506040516126b13803806126b183398181016040528101906100d691906104d6565b60035f9054906101000a900460ff1660ff16600a6100f49190610682565b836100ff91906106cc565b60048190555060045460085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503360055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816006819055508060078190555050505061070d565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061021a57607f821691505b60208210810361022d5761022c6101d6565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261028f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610254565b6102998683610254565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6102dd6102d86102d3846102b1565b6102ba565b6102b1565b9050919050565b5f819050919050565b6102f6836102c3565b61030a610302826102e4565b848454610260565b825550505050565b5f90565b61031e610312565b6103298184846102ed565b505050565b5b8181101561034c576103415f82610316565b60018101905061032f565b5050565b601f8211156103915761036281610233565b61036b84610245565b8101602085101561037a578190505b61038e61038685610245565b83018261032e565b50505b505050565b5f82821c905092915050565b5f6103b15f1984600802610396565b1980831691505092915050565b5f6103c983836103a2565b9150826002028217905092915050565b6103e28261019f565b67ffffffffffffffff8111156103fb576103fa6101a9565b5b6104058254610203565b610410828285610350565b5f60209050601f831160018114610441575f841561042f578287015190505b61043985826103be565b8655506104a0565b601f19841661044f86610233565b5f5b8281101561047657848901518255600182019150602085019450602081019050610451565b86831015610493578489015161048f601f8916826103a2565b8355505b6001600288020188555050505b505050505050565b5f80fd5b6104b5816102b1565b81146104bf575f80fd5b50565b5f815190506104d0816104ac565b92915050565b5f805f606084860312156104ed576104ec6104a8565b5b5f6104fa868287016104c2565b935050602061050b868287016104c2565b925050604061051c868287016104c2565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156105a85780860481111561058457610583610526565b5b60018516156105935780820291505b80810290506105a185610553565b9450610568565b94509492505050565b5f826105c0576001905061067b565b816105cd575f905061067b565b81600181146105e357600281146105ed5761061c565b600191505061067b565b60ff8411156105ff576105fe610526565b5b8360020a91508482111561061657610615610526565b5b5061067b565b5060208310610133831016604e8410600b84101617156106515782820a90508381111561064c5761064b610526565b5b61067b565b61065e848484600161055f565b9250905081840481111561067557610674610526565b5b81810290505b9392505050565b5f61068c826102b1565b9150610697836102b1565b92506106c47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846105b1565b905092915050565b5f6106d6826102b1565b91506106e1836102b1565b92508282026106ef816102b1565b9150828204841483151761070657610705610526565b5b5092915050565b611f978061071a5f395ff3fe6080604052600436106100f2575f3560e01c806395d89b4111610089578063d0679d3411610058578063d0679d3414610320578063d96a094a14610348578063e4849b3214610364578063fc37987b1461038c576100f2565b806395d89b4114610269578063a87430ba14610293578063ac6af280146102d0578063cb797836146102f8576100f2565b80636217229b116100c55780636217229b1461019c57806366f07f8a146101c657806370a08231146102035780638da5cb5b1461023f576100f2565b806306fdde03146100f657806318160ddd146101205780631d2e4afd1461014a578063313ce56714610172575b5f80fd5b348015610101575f80fd5b5061010a6103b6565b6040516101179190611426565b60405180910390f35b34801561012b575f80fd5b50610134610442565b604051610141919061145e565b60405180910390f35b348015610155575f80fd5b50610170600480360381019061016b91906115b4565b610448565b005b34801561017d575f80fd5b5061018661062c565b6040516101939190611645565b60405180910390f35b3480156101a7575f80fd5b506101b061063e565b6040516101bd919061145e565b60405180910390f35b3480156101d1575f80fd5b506101ec60048036038101906101e791906116b8565b610644565b6040516101fa9291906116e3565b60405180910390f35b34801561020e575f80fd5b50610229600480360381019061022491906116b8565b6107e1565b604051610236919061145e565b60405180910390f35b34801561024a575f80fd5b506102536107f6565b6040516102609190611727565b60405180910390f35b348015610274575f80fd5b5061027d61081b565b60405161028a9190611426565b60405180910390f35b34801561029e575f80fd5b506102b960048036038101906102b491906116b8565b6108a7565b6040516102c79291906116e3565b60405180910390f35b3480156102db575f80fd5b506102f660048036038101906102f1919061176a565b6109d2565b005b348015610303575f80fd5b5061031e600480360381019061031991906117a8565b610aac565b005b34801561032b575f80fd5b50610346600480360381019061034191906117d3565b610d0b565b005b610362600480360381019061035d91906117a8565b610f08565b005b34801561036f575f80fd5b5061038a600480360381019061038591906117a8565b6110f7565b005b348015610397575f80fd5b506103a06113b0565b6040516103ad919061145e565b60405180910390f35b600180546103c39061183e565b80601f01602080910402602001604051908101604052809291908181526020018280546103ef9061183e565b801561043a5780601f106104115761010080835404028352916020019161043a565b820191905f5260205f20905b81548152906001019060200180831161041d57829003601f168201915b505050505081565b60045481565b5f82511161048b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610482906118b8565b60405180910390fd5b5f8151116104ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104c590611920565b60405180910390fd5b5f805f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0180546105189061183e565b90501461055a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055190611988565b60405180910390fd5b6040518060400160405280838152602001828152505f803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f0190816105be9190611b43565b5060208201518160010190816105d49190611b43565b509050503373ffffffffffffffffffffffffffffffffffffffff167f92822564bab8864c3a47b34e8d23fbce5c46234eb5da261f94087b995ac0f33b83836040516106209291906116e3565b60405180910390a25050565b60035f9054906101000a900460ff1681565b60065481565b6060805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001018180546106d09061183e565b80601f01602080910402602001604051908101604052809291908181526020018280546106fc9061183e565b80156107475780601f1061071e57610100808354040283529160200191610747565b820191905f5260205f20905b81548152906001019060200180831161072a57829003601f168201915b5050505050915080805461075a9061183e565b80601f01602080910402602001604051908101604052809291908181526020018280546107869061183e565b80156107d15780601f106107a8576101008083540402835291602001916107d1565b820191905f5260205f20905b8154815290600101906020018083116107b457829003601f168201915b5050505050905091509150915091565b6008602052805f5260405f205f915090505481565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600280546108289061183e565b80601f01602080910402602001604051908101604052809291908181526020018280546108549061183e565b801561089f5780601f106108765761010080835404028352916020019161089f565b820191905f5260205f20905b81548152906001019060200180831161088257829003601f168201915b505050505081565b5f602052805f5260405f205f91509050805f0180546108c59061183e565b80601f01602080910402602001604051908101604052809291908181526020018280546108f19061183e565b801561093c5780601f106109135761010080835404028352916020019161093c565b820191905f5260205f20905b81548152906001019060200180831161091f57829003601f168201915b5050505050908060010180546109519061183e565b80601f016020809104026020016040519081016040528092919081815260200182805461097d9061183e565b80156109c85780601f1061099f576101008083540402835291602001916109c8565b820191905f5260205f20905b8154815290600101906020018083116109ab57829003601f168201915b5050505050905082565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5890611c82565b60405180910390fd5b81600681905550806007819055507f866c85e858231ddea197da6aeb0c9d01f074dac4b735db1f8afeee3532156bfd8282604051610aa0929190611ca0565b60405180910390a15050565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3290611c82565b60405180910390fd5b8060085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb290611d11565b60405180910390fd5b8060085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610c079190611d5c565b925050819055508060085f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610c7b9190611d8f565b9250508190555060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610d00919061145e565b60405180910390a350565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7090611e0c565b60405180910390fd5b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054811115610df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df090611d11565b60405180910390fd5b8060085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610e459190611d5c565b925050819055508060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610e989190611d8f565b925050819055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610efc919061145e565b60405180910390a35050565b60075481610f169190611e2a565b3414610f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4e90611eb5565b60405180910390fd5b8060085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610fa39190611d8f565b925050819055508060085f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546110179190611d5c565b925050819055503373ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161109c919061145e565b60405180910390a33373ffffffffffffffffffffffffffffffffffffffff167f1cbc5ab135991bd2b6a4b034a04aa2aa086dac1371cb9b16b8b5e2ed6b036bed82346040516110ec929190611ca0565b60405180910390a250565b8060085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015611177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116e90611d11565b60405180910390fd5b5f600654826111869190611e2a565b9050804710156111cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c290611f43565b60405180910390fd5b8160085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546112179190611d5c565b925050819055508160085f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461128b9190611d8f565b925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156112d5573d5f803e3d5ffd5b5060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611354919061145e565b60405180910390a33373ffffffffffffffffffffffffffffffffffffffff167fed7a144fad14804d5c249145e3e0e2b63a9eb455b76aee5bc92d711e9bba3e4a83836040516113a4929190611ca0565b60405180910390a25050565b60075481565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6113f8826113b6565b61140281856113c0565b93506114128185602086016113d0565b61141b816113de565b840191505092915050565b5f6020820190508181035f83015261143e81846113ee565b905092915050565b5f819050919050565b61145881611446565b82525050565b5f6020820190506114715f83018461144f565b92915050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6114c6826113de565b810181811067ffffffffffffffff821117156114e5576114e4611490565b5b80604052505050565b5f6114f7611477565b905061150382826114bd565b919050565b5f67ffffffffffffffff82111561152257611521611490565b5b61152b826113de565b9050602081019050919050565b828183375f83830152505050565b5f61155861155384611508565b6114ee565b9050828152602081018484840111156115745761157361148c565b5b61157f848285611538565b509392505050565b5f82601f83011261159b5761159a611488565b5b81356115ab848260208601611546565b91505092915050565b5f80604083850312156115ca576115c9611480565b5b5f83013567ffffffffffffffff8111156115e7576115e6611484565b5b6115f385828601611587565b925050602083013567ffffffffffffffff81111561161457611613611484565b5b61162085828601611587565b9150509250929050565b5f60ff82169050919050565b61163f8161162a565b82525050565b5f6020820190506116585f830184611636565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6116878261165e565b9050919050565b6116978161167d565b81146116a1575f80fd5b50565b5f813590506116b28161168e565b92915050565b5f602082840312156116cd576116cc611480565b5b5f6116da848285016116a4565b91505092915050565b5f6040820190508181035f8301526116fb81856113ee565b9050818103602083015261170f81846113ee565b90509392505050565b6117218161167d565b82525050565b5f60208201905061173a5f830184611718565b92915050565b61174981611446565b8114611753575f80fd5b50565b5f8135905061176481611740565b92915050565b5f80604083850312156117805761177f611480565b5b5f61178d85828601611756565b925050602061179e85828601611756565b9150509250929050565b5f602082840312156117bd576117bc611480565b5b5f6117ca84828501611756565b91505092915050565b5f80604083850312156117e9576117e8611480565b5b5f6117f6858286016116a4565b925050602061180785828601611756565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061185557607f821691505b60208210810361186857611867611811565b5b50919050565b7f557365726e616d652063616e6e6f7420626520656d70747900000000000000005f82015250565b5f6118a26018836113c0565b91506118ad8261186e565b602082019050919050565b5f6020820190508181035f8301526118cf81611896565b9050919050565b7f456d61696c2063616e6e6f7420626520656d70747900000000000000000000005f82015250565b5f61190a6015836113c0565b9150611915826118d6565b602082019050919050565b5f6020820190508181035f830152611937816118fe565b9050919050565b7f5573657220616c726561647920726567697374657265640000000000000000005f82015250565b5f6119726017836113c0565b915061197d8261193e565b602082019050919050565b5f6020820190508181035f83015261199f81611966565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302611a027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826119c7565b611a0c86836119c7565b95508019841693508086168417925050509392505050565b5f819050919050565b5f611a47611a42611a3d84611446565b611a24565b611446565b9050919050565b5f819050919050565b611a6083611a2d565b611a74611a6c82611a4e565b8484546119d3565b825550505050565b5f90565b611a88611a7c565b611a93818484611a57565b505050565b5b81811015611ab657611aab5f82611a80565b600181019050611a99565b5050565b601f821115611afb57611acc816119a6565b611ad5846119b8565b81016020851015611ae4578190505b611af8611af0856119b8565b830182611a98565b50505b505050565b5f82821c905092915050565b5f611b1b5f1984600802611b00565b1980831691505092915050565b5f611b338383611b0c565b9150826002028217905092915050565b611b4c826113b6565b67ffffffffffffffff811115611b6557611b64611490565b5b611b6f825461183e565b611b7a828285611aba565b5f60209050601f831160018114611bab575f8415611b99578287015190505b611ba38582611b28565b865550611c0a565b601f198416611bb9866119a6565b5f5b82811015611be057848901518255600182019150602085019450602081019050611bbb565b86831015611bfd5784890151611bf9601f891682611b0c565b8355505b6001600288020188555050505b505050505050565b7f4f6e6c7920636f6e7472616374206f776e65722063616e2063616c6c207468695f8201527f732066756e6374696f6e00000000000000000000000000000000000000000000602082015250565b5f611c6c602a836113c0565b9150611c7782611c12565b604082019050919050565b5f6020820190508181035f830152611c9981611c60565b9050919050565b5f604082019050611cb35f83018561144f565b611cc0602083018461144f565b9392505050565b7f496e73756666696369656e742062616c616e63650000000000000000000000005f82015250565b5f611cfb6014836113c0565b9150611d0682611cc7565b602082019050919050565b5f6020820190508181035f830152611d2881611cef565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611d6682611446565b9150611d7183611446565b9250828203905081811115611d8957611d88611d2f565b5b92915050565b5f611d9982611446565b9150611da483611446565b9250828201905080821115611dbc57611dbb611d2f565b5b92915050565b7f496e76616c6964206164647265737300000000000000000000000000000000005f82015250565b5f611df6600f836113c0565b9150611e0182611dc2565b602082019050919050565b5f6020820190508181035f830152611e2381611dea565b9050919050565b5f611e3482611446565b9150611e3f83611446565b9250828202611e4d81611446565b91508282048414831517611e6457611e63611d2f565b5b5092915050565b7f496e636f727265637420616d6f756e74206f66204554482073656e74000000005f82015250565b5f611e9f601c836113c0565b9150611eaa82611e6b565b602082019050919050565b5f6020820190508181035f830152611ecc81611e93565b9050919050565b7f436f6e747261637420646f65736e2774206861766520656e6f756768204554485f8201527f20746f2062757900000000000000000000000000000000000000000000000000602082015250565b5f611f2d6027836113c0565b9150611f3882611ed3565b604082019050919050565b5f6020820190508181035f830152611f5a81611f21565b905091905056fea26469706673582212207bb2c95f39ba43fc465382d05f28b9e5b6711dad53c3333cd4967b490b6b008464736f6c6343000819003300000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000071afd498d0000