60806040526040518060400160405280600681526020017f50657065676100000000000000000000000000000000000000000000000000008152505f90816200004991906200039b565b506040518060400160405280600681526020017f5045504547410000000000000000000000000000000000000000000000000000815250600190816200009091906200039b565b50601260025f6101000a81548160ff021916908360ff16021790555060025f9054906101000a900460ff1660ff16600a620000cc9190620005fc565b63190f1b44620000dd91906200064c565b600355348015620000ec575f80fd5b5060035460045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555062000696565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620001b357607f821691505b602082108103620001c957620001c86200016e565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026200022d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620001f0565b620002398683620001f0565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620002836200027d620002778462000251565b6200025a565b62000251565b9050919050565b5f819050919050565b6200029e8362000263565b620002b6620002ad826200028a565b848454620001fc565b825550505050565b5f90565b620002cc620002be565b620002d981848462000293565b505050565b5b818110156200030057620002f45f82620002c2565b600181019050620002df565b5050565b601f8211156200034f576200031981620001cf565b6200032484620001e1565b8101602085101562000334578190505b6200034c6200034385620001e1565b830182620002de565b50505b505050565b5f82821c905092915050565b5f620003715f198460080262000354565b1980831691505092915050565b5f6200038b838362000360565b9150826002028217905092915050565b620003a68262000137565b67ffffffffffffffff811115620003c257620003c162000141565b5b620003ce82546200019b565b620003db82828562000304565b5f60209050601f83116001811462000411575f8415620003fc578287015190505b6200040885826200037e565b86555062000477565b601f1984166200042186620001cf565b5f5b828110156200044a5784890151825560018201915060208501945060208101905062000423565b868310156200046a578489015162000466601f89168262000360565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156200050957808604811115620004e157620004e06200047f565b5b6001851615620004f15780820291505b80810290506200050185620004ac565b9450620004c1565b94509492505050565b5f82620005235760019050620005f5565b8162000532575f9050620005f5565b81600181146200054b576002811462000556576200058c565b6001915050620005f5565b60ff8411156200056b576200056a6200047f565b5b8360020a9150848211156200058557620005846200047f565b5b50620005f5565b5060208310610133831016604e8410600b8410161715620005c65782820a905083811115620005c057620005bf6200047f565b5b620005f5565b620005d58484846001620004b8565b92509050818404811115620005ef57620005ee6200047f565b5b81810290505b9392505050565b5f620006088262000251565b9150620006158362000251565b9250620006447fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000512565b905092915050565b5f620006588262000251565b9150620006658362000251565b9250828202620006758162000251565b915082820484148315176200068f576200068e6200047f565b5b5092915050565b610f9580620006a45f395ff3fe608060405234801561000f575f80fd5b5060043610610091575f3560e01c8063313ce56711610064578063313ce5671461013157806370a082311461014f57806395d89b411461017f578063a9059cbb1461019d578063dd62ed3e146101cd57610091565b806306fdde0314610095578063095ea7b3146100b357806318160ddd146100e357806323b872dd14610101575b5f80fd5b61009d6101fd565b6040516100aa9190610a98565b60405180910390f35b6100cd60048036038101906100c89190610b49565b610288565b6040516100da9190610ba1565b60405180910390f35b6100eb610375565b6040516100f89190610bc9565b60405180910390f35b61011b60048036038101906101169190610be2565b61037b565b6040516101289190610ba1565b60405180910390f35b610139610737565b6040516101469190610c4d565b60405180910390f35b61016960048036038101906101649190610c66565b610749565b6040516101769190610bc9565b60405180910390f35b61018761075e565b6040516101949190610a98565b60405180910390f35b6101b760048036038101906101b29190610b49565b6107ea565b6040516101c49190610ba1565b60405180910390f35b6101e760048036038101906101e29190610c91565b6109ee565b6040516101f49190610bc9565b60405180910390f35b5f805461020990610cfc565b80601f016020809104026020016040519081016040528092919081815260200182805461023590610cfc565b80156102805780601f1061025757610100808354040283529160200191610280565b820191905f5260205f20905b81548152906001019060200180831161026357829003601f168201915b505050505081565b5f8160055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516103639190610bc9565b60405180910390a36001905092915050565b60035481565b5f8073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036103ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103e190610d76565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044f90610dde565b60405180910390fd5b8160045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156104d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104cf90610e46565b60405180910390fd5b8160055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058a90610eae565b60405180910390fd5b8160045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546105df9190610ef9565b925050819055508160045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546106329190610f2c565b925050819055508160055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546106c09190610ef9565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516107249190610bc9565b60405180910390a3600190509392505050565b60025f9054906101000a900460ff1681565b6004602052805f5260405f205f915090505481565b6001805461076b90610cfc565b80601f016020809104026020016040519081016040528092919081815260200182805461079790610cfc565b80156107e25780601f106107b9576101008083540402835291602001916107e2565b820191905f5260205f20905b8154815290600101906020018083116107c557829003601f168201915b505050505081565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610859576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085090610dde565b60405180910390fd5b8160045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156108d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d090610e46565b60405180910390fd5b8160045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546109259190610ef9565b925050819055508160045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546109789190610f2c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516109dc9190610bc9565b60405180910390a36001905092915050565b6005602052815f5260405f20602052805f5260405f205f91509150505481565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015610a45578082015181840152602081019050610a2a565b5f8484015250505050565b5f601f19601f8301169050919050565b5f610a6a82610a0e565b610a748185610a18565b9350610a84818560208601610a28565b610a8d81610a50565b840191505092915050565b5f6020820190508181035f830152610ab08184610a60565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610ae582610abc565b9050919050565b610af581610adb565b8114610aff575f80fd5b50565b5f81359050610b1081610aec565b92915050565b5f819050919050565b610b2881610b16565b8114610b32575f80fd5b50565b5f81359050610b4381610b1f565b92915050565b5f8060408385031215610b5f57610b5e610ab8565b5b5f610b6c85828601610b02565b9250506020610b7d85828601610b35565b9150509250929050565b5f8115159050919050565b610b9b81610b87565b82525050565b5f602082019050610bb45f830184610b92565b92915050565b610bc381610b16565b82525050565b5f602082019050610bdc5f830184610bba565b92915050565b5f805f60608486031215610bf957610bf8610ab8565b5b5f610c0686828701610b02565b9350506020610c1786828701610b02565b9250506040610c2886828701610b35565b9150509250925092565b5f60ff82169050919050565b610c4781610c32565b82525050565b5f602082019050610c605f830184610c3e565b92915050565b5f60208284031215610c7b57610c7a610ab8565b5b5f610c8884828501610b02565b91505092915050565b5f8060408385031215610ca757610ca6610ab8565b5b5f610cb485828601610b02565b9250506020610cc585828601610b02565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610d1357607f821691505b602082108103610d2657610d25610ccf565b5b50919050565b7f496e76616c69642073656e6465722061646472657373000000000000000000005f82015250565b5f610d60601683610a18565b9150610d6b82610d2c565b602082019050919050565b5f6020820190508181035f830152610d8d81610d54565b9050919050565b7f496e76616c696420726563697069656e742061646472657373000000000000005f82015250565b5f610dc8601983610a18565b9150610dd382610d94565b602082019050919050565b5f6020820190508181035f830152610df581610dbc565b9050919050565b7f496e73756666696369656e742062616c616e63650000000000000000000000005f82015250565b5f610e30601483610a18565b9150610e3b82610dfc565b602082019050919050565b5f6020820190508181035f830152610e5d81610e24565b9050919050565b7f416c6c6f77616e636520657863656564656400000000000000000000000000005f82015250565b5f610e98601283610a18565b9150610ea382610e64565b602082019050919050565b5f6020820190508181035f830152610ec581610e8c565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610f0382610b16565b9150610f0e83610b16565b9250828203905081811115610f2657610f25610ecc565b5b92915050565b5f610f3682610b16565b9150610f4183610b16565b9250828201905080821115610f5957610f58610ecc565b5b9291505056fea264697066735822122031a75419d109b8dd652027817d690fdac5a0c3acd0362f7bbe0220ea8304d84664736f6c63430008150033