60806040526040518060400160405280600a81526020017f5365706f6c6961455448000000000000000000000000000000000000000000008152505f90816100479190610369565b506040518060400160405280600381526020017f45544800000000000000000000000000000000000000000000000000000000008152506001908161008c9190610369565b50601260025f6101000a81548160ff021916908360ff1602179055503480156100b3575f80fd5b5060025f9054906101000a900460ff1660ff16600a6100d29190610594565b620f42406100e091906105de565b60038190555060035460045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061061f565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806101aa57607f821691505b6020821081036101bd576101bc610166565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261021f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826101e4565b61022986836101e4565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61026d61026861026384610241565b61024a565b610241565b9050919050565b5f819050919050565b61028683610253565b61029a61029282610274565b8484546101f0565b825550505050565b5f90565b6102ae6102a2565b6102b981848461027d565b505050565b5b818110156102dc576102d15f826102a6565b6001810190506102bf565b5050565b601f821115610321576102f2816101c3565b6102fb846101d5565b8101602085101561030a578190505b61031e610316856101d5565b8301826102be565b50505b505050565b5f82821c905092915050565b5f6103415f1984600802610326565b1980831691505092915050565b5f6103598383610332565b9150826002028217905092915050565b6103728261012f565b67ffffffffffffffff81111561038b5761038a610139565b5b6103958254610193565b6103a08282856102e0565b5f60209050601f8311600181146103d1575f84156103bf578287015190505b6103c9858261034e565b865550610430565b601f1984166103df866101c3565b5f5b82811015610406578489015182556001820191506020850194506020810190506103e1565b86831015610423578489015161041f601f891682610332565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156104ba5780860481111561049657610495610438565b5b60018516156104a55780820291505b80810290506104b385610465565b945061047a565b94509492505050565b5f826104d2576001905061058d565b816104df575f905061058d565b81600181146104f557600281146104ff5761052e565b600191505061058d565b60ff84111561051157610510610438565b5b8360020a91508482111561052857610527610438565b5b5061058d565b5060208310610133831016604e8410600b84101617156105635782820a90508381111561055e5761055d610438565b5b61058d565b6105708484846001610471565b9250905081840481111561058757610586610438565b5b81810290505b9392505050565b5f61059e82610241565b91506105a983610241565b92506105d67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846104c3565b905092915050565b5f6105e882610241565b91506105f383610241565b925082820261060181610241565b9150828204841483151761061857610617610438565b5b5092915050565b610db68061062c5f395ff3fe608060405234801561000f575f80fd5b5060043610610091575f3560e01c8063313ce56711610064578063313ce5671461013157806370a082311461014f57806395d89b411461017f578063a9059cbb1461019d578063dd62ed3e146101cd57610091565b806306fdde0314610095578063095ea7b3146100b357806318160ddd146100e357806323b872dd14610101575b5f80fd5b61009d6101fd565b6040516100aa9190610921565b60405180910390f35b6100cd60048036038101906100c891906109d2565b610288565b6040516100da9190610a2a565b60405180910390f35b6100eb610375565b6040516100f89190610a52565b60405180910390f35b61011b60048036038101906101169190610a6b565b61037b565b6040516101289190610a2a565b60405180910390f35b6101396105ca565b6040516101469190610ad6565b60405180910390f35b61016960048036038101906101649190610aef565b6105dc565b6040516101769190610a52565b60405180910390f35b6101876105f1565b6040516101949190610921565b60405180910390f35b6101b760048036038101906101b291906109d2565b61067d565b6040516101c49190610a2a565b60405180910390f35b6101e760048036038101906101e29190610b1a565b610713565b6040516101f49190610a52565b60405180910390f35b5f805461020990610b85565b80601f016020809104026020016040519081016040528092919081815260200182805461023590610b85565b80156102805780601f1061025757610100808354040283529160200191610280565b820191905f5260205f20905b81548152906001019060200180831161026357829003601f168201915b505050505081565b5f8160055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516103639190610a52565b60405180910390a36001905092915050565b60035481565b5f8060055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905060045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054831115610478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046f90610bff565b60405180910390fd5b808311156104bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b290610c67565b60405180910390fd5b6104c6858585610733565b82816104d29190610cb2565b60055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585846105a99190610cb2565b6040516105b69190610a52565b60405180910390a360019150509392505050565b60025f9054906101000a900460ff1681565b6004602052805f5260405f205f915090505481565b600180546105fe90610b85565b80601f016020809104026020016040519081016040528092919081815260200182805461062a90610b85565b80156106755780601f1061064c57610100808354040283529160200191610675565b820191905f5260205f20905b81548152906001019060200180831161065857829003601f168201915b505050505081565b5f8160045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156106fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f590610bff565b60405180910390fd5b610709338484610733565b6001905092915050565b6005602052815f5260405f20602052805f5260405f205f91509150505481565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036107a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079890610d2f565b60405180910390fd5b8060045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546107ed9190610cb2565b925050819055508060045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546108409190610d4d565b925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516108a49190610a52565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6108f3826108b1565b6108fd81856108bb565b935061090d8185602086016108cb565b610916816108d9565b840191505092915050565b5f6020820190508181035f83015261093981846108e9565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61096e82610945565b9050919050565b61097e81610964565b8114610988575f80fd5b50565b5f8135905061099981610975565b92915050565b5f819050919050565b6109b18161099f565b81146109bb575f80fd5b50565b5f813590506109cc816109a8565b92915050565b5f80604083850312156109e8576109e7610941565b5b5f6109f58582860161098b565b9250506020610a06858286016109be565b9150509250929050565b5f8115159050919050565b610a2481610a10565b82525050565b5f602082019050610a3d5f830184610a1b565b92915050565b610a4c8161099f565b82525050565b5f602082019050610a655f830184610a43565b92915050565b5f805f60608486031215610a8257610a81610941565b5b5f610a8f8682870161098b565b9350506020610aa08682870161098b565b9250506040610ab1868287016109be565b9150509250925092565b5f60ff82169050919050565b610ad081610abb565b82525050565b5f602082019050610ae95f830184610ac7565b92915050565b5f60208284031215610b0457610b03610941565b5b5f610b118482850161098b565b91505092915050565b5f8060408385031215610b3057610b2f610941565b5b5f610b3d8582860161098b565b9250506020610b4e8582860161098b565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610b9c57607f821691505b602082108103610baf57610bae610b58565b5b50919050565b7f496e73756666696369656e742062616c616e63650000000000000000000000005f82015250565b5f610be96014836108bb565b9150610bf482610bb5565b602082019050919050565b5f6020820190508181035f830152610c1681610bdd565b9050919050565b7f416c6c6f77616e636520657863656564656400000000000000000000000000005f82015250565b5f610c516012836108bb565b9150610c5c82610c1d565b602082019050919050565b5f6020820190508181035f830152610c7e81610c45565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610cbc8261099f565b9150610cc78361099f565b9250828203905081811115610cdf57610cde610c85565b5b92915050565b7f496e76616c6964206164647265737300000000000000000000000000000000005f82015250565b5f610d19600f836108bb565b9150610d2482610ce5565b602082019050919050565b5f6020820190508181035f830152610d4681610d0d565b9050919050565b5f610d578261099f565b9150610d628361099f565b9250828201905080821115610d7a57610d79610c85565b5b9291505056fea2646970667358221220d6aa9df51848737be7f24b9bb8e7bf9fc6418f81835a1cea7d20b3ae48f648e864736f6c634300081a0033