0x60806040526000600e55604051614efc380380614efc833981810160405281019061002a91906109af565b8585816003908161003b9190610c8b565b50806004908161004b9190610c8b565b50505061006a61005f61039e60201b60201c565b6103a660201b60201c565b82600b60006101000a81548160ff021916908360ff16021790555082600a6100929190610ebf565b8461009d9190610f0a565b600c81905550600c5460026000196100b59190610f7b565b6100bf9190610fac565b60026000196100ce9190610f7b565b6100d89190610fdd565b600d81905550806000600181106100f2576100f1611011565b5b6020020151600f81905550600f5460108190555060016008600061011a61046c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506101e56101d461039e60201b60201c565b600d54600c5461049660201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168260016002811061021157610210611011565b5b602002015173ffffffffffffffffffffffffffffffffffffffff16036102a2578160006002811061024557610244611011565b5b602002015173ffffffffffffffffffffffffffffffffffffffff166108fc6102716105fe60201b60201c565b9081150290604051600060405180830381858888f1935050505015801561029c573d6000803e3d6000fd5b50610393565b816001600281106102b6576102b5611011565b5b602002015173ffffffffffffffffffffffffffffffffffffffff166108fc6077600a6102e66105fe60201b60201c565b6102f09190610f0a565b6102fa9190610f7b565b9081150290604051600060405180830381858888f19350505050158015610325573d6000803e3d6000fd5b508160006002811061033a57610339611011565b5b602002015173ffffffffffffffffffffffffffffffffffffffff166108fc6103666105fe60201b60201c565b9081150290604051600060405180830381858888f19350505050158015610391573d6000803e3d6000fd5b505b50505050505061111b565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104fc9061109d565b60405180910390fd5b81600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461055091906110bd565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516105f19190611100565b60405180910390a3505050565b600047905090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61066d82610624565b810181811067ffffffffffffffff8211171561068c5761068b610635565b5b80604052505050565b600061069f610606565b90506106ab8282610664565b919050565b600067ffffffffffffffff8211156106cb576106ca610635565b5b6106d482610624565b9050602081019050919050565b60005b838110156106ff5780820151818401526020810190506106e4565b60008484015250505050565b600061071e610719846106b0565b610695565b90508281526020810184848401111561073a5761073961061f565b5b6107458482856106e1565b509392505050565b600082601f8301126107625761076161061a565b5b815161077284826020860161070b565b91505092915050565b6000819050919050565b61078e8161077b565b811461079957600080fd5b50565b6000815190506107ab81610785565b92915050565b600060ff82169050919050565b6107c7816107b1565b81146107d257600080fd5b50565b6000815190506107e4816107be565b92915050565b600067ffffffffffffffff82111561080557610804610635565b5b602082029050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061084082610815565b9050919050565b61085081610835565b811461085b57600080fd5b50565b60008151905061086d81610847565b92915050565b6000610886610881846107ea565b610695565b905080602084028301858111156108a05761089f610810565b5b835b818110156108c957806108b5888261085e565b8452602084019350506020810190506108a2565b5050509392505050565b600082601f8301126108e8576108e761061a565b5b60026108f5848285610873565b91505092915050565b600067ffffffffffffffff82111561091957610918610635565b5b602082029050919050565b6000610937610932846108fe565b610695565b9050806020840283018581111561095157610950610810565b5b835b8181101561097a5780610966888261079c565b845260208401935050602081019050610953565b5050509392505050565b600082601f8301126109995761099861061a565b5b60016109a6848285610924565b91505092915050565b60008060008060008060e087890312156109cc576109cb610610565b5b600087015167ffffffffffffffff8111156109ea576109e9610615565b5b6109f689828a0161074d565b965050602087015167ffffffffffffffff811115610a1757610a16610615565b5b610a2389828a0161074d565b9550506040610a3489828a0161079c565b9450506060610a4589828a016107d5565b9350506080610a5689828a016108d3565b92505060c0610a6789828a01610984565b9150509295509295509295565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610ac657607f821691505b602082108103610ad957610ad8610a7f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302610b417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610b04565b610b4b8683610b04565b95508019841693508086168417925050509392505050565b6000819050919050565b6000610b88610b83610b7e8461077b565b610b63565b61077b565b9050919050565b6000819050919050565b610ba283610b6d565b610bb6610bae82610b8f565b848454610b11565b825550505050565b600090565b610bcb610bbe565b610bd6818484610b99565b505050565b5b81811015610bfa57610bef600082610bc3565b600181019050610bdc565b5050565b601f821115610c3f57610c1081610adf565b610c1984610af4565b81016020851015610c28578190505b610c3c610c3485610af4565b830182610bdb565b50505b505050565b600082821c905092915050565b6000610c6260001984600802610c44565b1980831691505092915050565b6000610c7b8383610c51565b9150826002028217905092915050565b610c9482610a74565b67ffffffffffffffff811115610cad57610cac610635565b5b610cb78254610aae565b610cc2828285610bfe565b600060209050601f831160018114610cf55760008415610ce3578287015190505b610ced8582610c6f565b865550610d55565b601f198416610d0386610adf565b60005b82811015610d2b57848901518255600182019150602085019450602081019050610d06565b86831015610d485784890151610d44601f891682610c51565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115610de357808604811115610dbf57610dbe610d5d565b5b6001851615610dce5780820291505b8081029050610ddc85610d8c565b9450610da3565b94509492505050565b600082610dfc5760019050610eb8565b81610e0a5760009050610eb8565b8160018114610e205760028114610e2a57610e59565b6001915050610eb8565b60ff841115610e3c57610e3b610d5d565b5b8360020a915084821115610e5357610e52610d5d565b5b50610eb8565b5060208310610133831016604e8410600b8410161715610e8e5782820a905083811115610e8957610e88610d5d565b5b610eb8565b610e9b8484846001610d99565b92509050818404811115610eb257610eb1610d5d565b5b81810290505b9392505050565b6000610eca8261077b565b9150610ed5836107b1565b9250610f027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610dec565b905092915050565b6000610f158261077b565b9150610f208361077b565b9250828202610f2e8161077b565b91508282048414831517610f4557610f44610d5d565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000610f868261077b565b9150610f918361077b565b925082610fa157610fa0610f4c565b5b828204905092915050565b6000610fb78261077b565b9150610fc28361077b565b925082610fd257610fd1610f4c565b5b828206905092915050565b6000610fe88261077b565b9150610ff38361077b565b925082820390508181111561100b5761100a610d5d565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000611087601f83611040565b915061109282611051565b602082019050919050565b600060208201905081810360008301526110b68161107a565b9050919050565b60006110c88261077b565b91506110d38361077b565b92508282019050808211156110eb576110ea610d5d565b5b92915050565b6110fa8161077b565b82525050565b600060208201905061111560008301846110f1565b92915050565b613dd28061112a6000396000f3fe6080604052600436106101bb5760003560e01c806370a08231116100ec578063a9059cbb1161008a578063e547be6911610064578063e547be6914610663578063ea2f0b371461068c578063f2fde38b146106b5578063fdeb889f146106de576101c2565b8063a9059cbb146105ac578063cba0e996146105e9578063dd62ed3e14610626576101c2565b806383ad7994116100c657806383ad7994146104ee5780638da5cb5b1461051957806395d89b4114610544578063a457c2d71461056f576101c2565b806370a0823114610471578063715018a6146104ae57806379cc6790146104c5576101c2565b80633950935111610159578063437823ec11610133578063437823ec146103a55780634549b039146103ce5780635342acb41461040b5780636049876e14610448576101c2565b8063395093511461031657806340c10f191461035357806342966c681461037c576101c2565b806318160ddd1161019557806318160ddd1461025857806323b872dd14610283578063313ce567146102c057806332035504146102eb576101c2565b8063053ab182146101c757806306fdde03146101f0578063095ea7b31461021b576101c2565b366101c257005b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e99190612eb5565b610707565b005b3480156101fc57600080fd5b5061020561086b565b6040516102129190612f72565b60405180910390f35b34801561022757600080fd5b50610242600480360381019061023d9190612ff2565b6108fd565b60405161024f919061304d565b60405180910390f35b34801561026457600080fd5b5061026d61091b565b60405161027a9190613077565b60405180910390f35b34801561028f57600080fd5b506102aa60048036038101906102a59190613092565b610925565b6040516102b7919061304d565b60405180910390f35b3480156102cc57600080fd5b506102d5610a1d565b6040516102e29190613101565b60405180910390f35b3480156102f757600080fd5b50610300610a34565b60405161030d9190613077565b60405180910390f35b34801561032257600080fd5b5061033d60048036038101906103389190612ff2565b610a3e565b60405161034a919061304d565b60405180910390f35b34801561035f57600080fd5b5061037a60048036038101906103759190612ff2565b610aea565b005b34801561038857600080fd5b506103a3600480360381019061039e9190612eb5565b610b74565b005b3480156103b157600080fd5b506103cc60048036038101906103c7919061311c565b610b88565b005b3480156103da57600080fd5b506103f560048036038101906103f09190613175565b610c5f565b6040516104029190613077565b60405180910390f35b34801561041757600080fd5b50610432600480360381019061042d919061311c565b610cdf565b60405161043f919061304d565b60405180910390f35b34801561045457600080fd5b5061046f600480360381019061046a919061311c565b610d35565b005b34801561047d57600080fd5b506104986004803603810190610493919061311c565b610fd0565b6040516104a59190613077565b60405180910390f35b3480156104ba57600080fd5b506104c36110bb565b005b3480156104d157600080fd5b506104ec60048036038101906104e79190612ff2565b611143565b005b3480156104fa57600080fd5b506105036111be565b6040516105109190613077565b60405180910390f35b34801561052557600080fd5b5061052e6111c8565b60405161053b91906131c4565b60405180910390f35b34801561055057600080fd5b506105596111f2565b6040516105669190612f72565b60405180910390f35b34801561057b57600080fd5b5061059660048036038101906105919190612ff2565b611284565b6040516105a3919061304d565b60405180910390f35b3480156105b857600080fd5b506105d360048036038101906105ce9190612ff2565b61136f565b6040516105e0919061304d565b60405180910390f35b3480156105f557600080fd5b50610610600480360381019061060b919061311c565b61138d565b60405161061d919061304d565b60405180910390f35b34801561063257600080fd5b5061064d600480360381019061064891906131df565b6113e3565b60405161065a9190613077565b60405180910390f35b34801561066f57600080fd5b5061068a60048036038101906106859190612eb5565b61146a565b005b34801561069857600080fd5b506106b360048036038101906106ae919061311c565b6114f0565b005b3480156106c157600080fd5b506106dc60048036038101906106d7919061311c565b6115c7565b005b3480156106ea57600080fd5b506107056004803603810190610700919061311c565b6116be565b005b60006107116119ed565b9050600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156107a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079790613291565b60405180910390fd5b60006107ab836119f5565b505050905080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546107fb91906132e0565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600d5461084c91906132e0565b600d8190555082600e546108609190613314565b600e81905550505050565b60606003805461087a90613377565b80601f01602080910402602001604051908101604052809291908181526020018280546108a690613377565b80156108f35780601f106108c8576101008083540402835291602001916108f3565b820191906000526020600020905b8154815290600101906020018083116108d657829003601f168201915b5050505050905090565b600061091161090a6119ed565b8484611a5c565b6001905092915050565b6000600c54905090565b6000610932848484611c25565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061097d6119ed565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156109fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f49061341a565b60405180910390fd5b610a1185610a096119ed565b858403611a5c565b60019150509392505050565b6000600b60009054906101000a900460ff16905090565b6000600e54905090565b6000610ae0610a4b6119ed565b848460016000610a596119ed565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610adb9190613314565b611a5c565b6001905092915050565b610af26119ed565b73ffffffffffffffffffffffffffffffffffffffff16610b106111c8565b73ffffffffffffffffffffffffffffffffffffffff1614610b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5d90613486565b60405180910390fd5b610b708282611e22565b5050565b610b85610b7f6119ed565b826120c8565b50565b610b906119ed565b73ffffffffffffffffffffffffffffffffffffffff16610bae6111c8565b73ffffffffffffffffffffffffffffffffffffffff1614610c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfb90613486565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600c54831115610ca6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9d906134f2565b60405180910390fd5b81610cc4576000610cb6846119f5565b505050905080915050610cd9565b6000610ccf846119f5565b5050915050809150505b92915050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610d3d6119ed565b73ffffffffffffffffffffffffffffffffffffffff16610d5b6111c8565b73ffffffffffffffffffffffffffffffffffffffff1614610db1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da890613486565b60405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e359061355e565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115610f1257610ece600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123bf565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561106b57600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506110b6565b6110b3600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123bf565b90505b919050565b6110c36119ed565b73ffffffffffffffffffffffffffffffffffffffff166110e16111c8565b73ffffffffffffffffffffffffffffffffffffffff1614611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112e90613486565b60405180910390fd5b6111416000612426565b565b6000611156836111516119ed565b6113e3565b90508181101561119b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611192906135f0565b60405180910390fd5b6111af836111a76119ed565b848403611a5c565b6111b983836120c8565b505050565b6000600f54905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461120190613377565b80601f016020809104026020016040519081016040528092919081815260200182805461122d90613377565b801561127a5780601f1061124f5761010080835404028352916020019161127a565b820191906000526020600020905b81548152906001019060200180831161125d57829003601f168201915b5050505050905090565b600080600160006112936119ed565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611350576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134790613682565b60405180910390fd5b61136461135b6119ed565b85858403611a5c565b600191505092915050565b600061138361137c6119ed565b8484611c25565b6001905092915050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6114726119ed565b73ffffffffffffffffffffffffffffffffffffffff166114906111c8565b73ffffffffffffffffffffffffffffffffffffffff16146114e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dd90613486565b60405180910390fd5b80600f8190555050565b6114f86119ed565b73ffffffffffffffffffffffffffffffffffffffff166115166111c8565b73ffffffffffffffffffffffffffffffffffffffff161461156c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156390613486565b60405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6115cf6119ed565b73ffffffffffffffffffffffffffffffffffffffff166115ed6111c8565b73ffffffffffffffffffffffffffffffffffffffff1614611643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163a90613486565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a990613714565b60405180910390fd5b6116bb81612426565b50565b6116c66119ed565b73ffffffffffffffffffffffffffffffffffffffff166116e46111c8565b73ffffffffffffffffffffffffffffffffffffffff161461173a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173190613486565b60405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166117c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bd90613780565b60405180910390fd5b60005b600a805490508110156119e9578173ffffffffffffffffffffffffffffffffffffffff16600a8281548110611801576118006137a0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036119dc57600a6001600a8054905061185b91906132e0565b8154811061186c5761186b6137a0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a82815481106118ab576118aa6137a0565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a8054806119a2576119a16137cf565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556119e9565b80806001019150506117c9565b5050565b600033905090565b6000806000806000611a06866124ec565b905060008187611a1691906132e0565b90506000611a2261251a565b905060008183611a3291906137fe565b90506000828a611a4291906137fe565b905080828585985098509850985050505050509193509193565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611acb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac2906138b2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3190613944565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c189190613077565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8b906139d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfa90613a68565b60405180910390fd5b6000611d0e84610fd0565b905081811015611d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4a90613afa565b60405180910390fd5b611d5e84848461253e565b600060019050600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611e055750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611e0f57600090505b611e1b85858584612543565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8890613b66565b60405180910390fd5b611e9d6000838361253e565b6000611ea761251a565b905060008183611eb791906137fe565b9050600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611f9a5782600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f569190613314565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b80600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fe59190613314565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600c546120369190613314565b600c8190555080600d5461204a9190613314565b600d819055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516120ae9190613077565b60405180910390a36120c260008585612570565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212e90613bf8565b60405180910390fd5b600061214283610fd0565b905081811015612187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217e90613c8a565b60405180910390fd5b6121938360008461253e565b600061219d61251a565b9050600081846121ad91906137fe565b9050600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156122905783600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224c91906132e0565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b80600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122db91906132e0565b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600c5461232c91906132e0565b600c8190555080600d5461234091906132e0565b600d81905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516123a49190613077565b60405180910390a36123b885600086612570565b5050505050565b6000600d54821115612406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fd90613d1c565b60405180910390fd5b600061241061251a565b9050808361241e9190613d6b565b915050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080600f54905060006064828561250491906137fe565b61250e9190613d6b565b90508092505050919050565b6000806000612527612575565b9150915080826125379190613d6b565b9250505090565b505050565b806125515761255061280d565b5b61255c84848461282c565b8061256a57612569612e13565b5b50505050565b505050565b6000806000600d5490506000600c54905060005b600a805490508110156127d7578260066000600a84815481106125af576125ae6137a0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061269d57508160076000600a8481548110612635576126346137a0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156126b457600d54600c5494509450505050612809565b60066000600a83815481106126cc576126cb6137a0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361273d91906132e0565b925060076000600a8381548110612757576127566137a0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826127c891906132e0565b91508080600101915050612589565b50600c54600d546127e89190613d6b565b82101561280057600d54600c54935093505050612809565b81819350935050505b9091565b6000600f54031561282a57600f546010819055506000600f819055505b565b60008060008061283b856119f5565b935093509350935083600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461288e91906132e0565b600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461291c9190613314565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a025750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a9a5784600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a5291906132e0565b600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d9b565b600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b3d5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612bd55781600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b8d9190613314565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d9a565b600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c775750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d995784600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cc791906132e0565b600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d559190613314565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b612da58582612e1e565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e029190613077565b60405180910390a350505050505050565b601054600f81905550565b60006064600f5484612e3091906137fe565b612e3a9190613d6b565b905060008282612e4a91906137fe565b905080600d54612e5a91906132e0565b600d8190555081600e54612e6e9190613314565b600e8190555050505050565b600080fd5b6000819050919050565b612e9281612e7f565b8114612e9d57600080fd5b50565b600081359050612eaf81612e89565b92915050565b600060208284031215612ecb57612eca612e7a565b5b6000612ed984828501612ea0565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f1c578082015181840152602081019050612f01565b60008484015250505050565b6000601f19601f8301169050919050565b6000612f4482612ee2565b612f4e8185612eed565b9350612f5e818560208601612efe565b612f6781612f28565b840191505092915050565b60006020820190508181036000830152612f8c8184612f39565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612fbf82612f94565b9050919050565b612fcf81612fb4565b8114612fda57600080fd5b50565b600081359050612fec81612fc6565b92915050565b6000806040838503121561300957613008612e7a565b5b600061301785828601612fdd565b925050602061302885828601612ea0565b9150509250929050565b60008115159050919050565b61304781613032565b82525050565b6000602082019050613062600083018461303e565b92915050565b61307181612e7f565b82525050565b600060208201905061308c6000830184613068565b92915050565b6000806000606084860312156130ab576130aa612e7a565b5b60006130b986828701612fdd565b93505060206130ca86828701612fdd565b92505060406130db86828701612ea0565b9150509250925092565b600060ff82169050919050565b6130fb816130e5565b82525050565b600060208201905061311660008301846130f2565b92915050565b60006020828403121561313257613131612e7a565b5b600061314084828501612fdd565b91505092915050565b61315281613032565b811461315d57600080fd5b50565b60008135905061316f81613149565b92915050565b6000806040838503121561318c5761318b612e7a565b5b600061319a85828601612ea0565b92505060206131ab85828601613160565b9150509250929050565b6131be81612fb4565b82525050565b60006020820190506131d960008301846131b5565b92915050565b600080604083850312156131f6576131f5612e7a565b5b600061320485828601612fdd565b925050602061321585828601612fdd565b9150509250929050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b600061327b602c83612eed565b91506132868261321f565b604082019050919050565b600060208201905081810360008301526132aa8161326e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006132eb82612e7f565b91506132f683612e7f565b925082820390508181111561330e5761330d6132b1565b5b92915050565b600061331f82612e7f565b915061332a83612e7f565b9250828201905080821115613342576133416132b1565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061338f57607f821691505b6020821081036133a2576133a1613348565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613404602883612eed565b915061340f826133a8565b604082019050919050565b60006020820190508181036000830152613433816133f7565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613470602083612eed565b915061347b8261343a565b602082019050919050565b6000602082019050818103600083015261349f81613463565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b60006134dc601f83612eed565b91506134e7826134a6565b602082019050919050565b6000602082019050818103600083015261350b816134cf565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000613548601b83612eed565b915061355382613512565b602082019050919050565b600060208201905081810360008301526135778161353b565b9050919050565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b60006135da602483612eed565b91506135e58261357e565b604082019050919050565b60006020820190508181036000830152613609816135cd565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061366c602583612eed565b915061367782613610565b604082019050919050565b6000602082019050818103600083015261369b8161365f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006136fe602683612eed565b9150613709826136a2565b604082019050919050565b6000602082019050818103600083015261372d816136f1565b9050919050565b7f4163636f756e7420697320616c726561647920696e636c756465640000000000600082015250565b600061376a601b83612eed565b915061377582613734565b602082019050919050565b600060208201905081810360008301526137998161375d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600061380982612e7f565b915061381483612e7f565b925082820261382281612e7f565b91508282048414831517613839576138386132b1565b5b5092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061389c602483612eed565b91506138a782613840565b604082019050919050565b600060208201905081810360008301526138cb8161388f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061392e602283612eed565b9150613939826138d2565b604082019050919050565b6000602082019050818103600083015261395d81613921565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006139c0602583612eed565b91506139cb82613964565b604082019050919050565b600060208201905081810360008301526139ef816139b3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613a52602383612eed565b9150613a5d826139f6565b604082019050919050565b60006020820190508181036000830152613a8181613a45565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613ae4602683612eed565b9150613aef82613a88565b604082019050919050565b60006020820190508181036000830152613b1381613ad7565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000613b50601f83612eed565b9150613b5b82613b1a565b602082019050919050565b60006020820190508181036000830152613b7f81613b43565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613be2602183612eed565b9150613bed82613b86565b604082019050919050565b60006020820190508181036000830152613c1181613bd5565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c74602283612eed565b9150613c7f82613c18565b604082019050919050565b60006020820190508181036000830152613ca381613c67565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000613d06602a83612eed565b9150613d1182613caa565b604082019050919050565b60006020820190508181036000830152613d3581613cf9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d7682612e7f565b9150613d8183612e7f565b925082613d9157613d90613d3c565b5b82820490509291505056fea2646970667358221220b44db5a4e60c307a569503a002a022ded1b5eaa2fcc05185bee77f854b1fe64864736f6c634300081c003300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000000050000000000000000000000008a6b88978e1aba2b009baa8d270c2dc0d8f7990d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000054d4948465800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034d46580000000000000000000000000000000000000000000000000000000000