60806040526000600860006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b5060405162002bd238038062002bd2833981810160405281019062000052919062000676565b338383816003908162000066919062000967565b50806004908162000078919062000967565b505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620000f05760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620000e7919062000a93565b60405180910390fd5b62000101816200012560201b60201c565b50620001143385620001eb60201b60201c565b806009819055505050505062000b85565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620002605760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040162000257919062000a93565b60405180910390fd5b62000274600083836200027860201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620002ce578060026000828254620002c1919062000adf565b92505081905550620003a4565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156200035d578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401620003549392919062000b2b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620003ef57806002600082825403925050819055506200043c565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200049b919062000b68565b60405180910390a3505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b620004d181620004bc565b8114620004dd57600080fd5b50565b600081519050620004f181620004c6565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200054c8262000501565b810181811067ffffffffffffffff821117156200056e576200056d62000512565b5b80604052505050565b600062000583620004a8565b905062000591828262000541565b919050565b600067ffffffffffffffff821115620005b457620005b362000512565b5b620005bf8262000501565b9050602081019050919050565b60005b83811015620005ec578082015181840152602081019050620005cf565b60008484015250505050565b60006200060f620006098462000596565b62000577565b9050828152602081018484840111156200062e576200062d620004fc565b5b6200063b848285620005cc565b509392505050565b600082601f8301126200065b576200065a620004f7565b5b81516200066d848260208601620005f8565b91505092915050565b60008060008060808587031215620006935762000692620004b2565b5b6000620006a387828801620004e0565b945050602085015167ffffffffffffffff811115620006c757620006c6620004b7565b5b620006d58782880162000643565b935050604085015167ffffffffffffffff811115620006f957620006f8620004b7565b5b620007078782880162000643565b92505060606200071a87828801620004e0565b91505092959194509250565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200077957607f821691505b6020821081036200078f576200078e62000731565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620007f97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620007ba565b620008058683620007ba565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000848620008426200083c84620004bc565b6200081d565b620004bc565b9050919050565b6000819050919050565b620008648362000827565b6200087c62000873826200084f565b848454620007c7565b825550505050565b600090565b6200089362000884565b620008a081848462000859565b505050565b5b81811015620008c857620008bc60008262000889565b600181019050620008a6565b5050565b601f8211156200091757620008e18162000795565b620008ec84620007aa565b81016020851015620008fc578190505b620009146200090b85620007aa565b830182620008a5565b50505b505050565b600082821c905092915050565b60006200093c600019846008026200091c565b1980831691505092915050565b600062000957838362000929565b9150826002028217905092915050565b620009728262000726565b67ffffffffffffffff8111156200098e576200098d62000512565b5b6200099a825462000760565b620009a7828285620008cc565b600060209050601f831160018114620009df5760008415620009ca578287015190505b620009d6858262000949565b86555062000a46565b601f198416620009ef8662000795565b60005b8281101562000a1957848901518255600182019150602085019450602081019050620009f2565b8683101562000a39578489015162000a35601f89168262000929565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000a7b8262000a4e565b9050919050565b62000a8d8162000a6e565b82525050565b600060208201905062000aaa600083018462000a82565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000aec82620004bc565b915062000af983620004bc565b925082820190508082111562000b145762000b1362000ab0565b5b92915050565b62000b2581620004bc565b82525050565b600060608201905062000b42600083018662000a82565b62000b51602083018562000b1a565b62000b60604083018462000b1a565b949350505050565b600060208201905062000b7f600083018462000b1a565b92915050565b61203d8062000b956000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806379cc6790116100b8578063a56fa76c1161007c578063a56fa76c14610318578063a9059cbb14610322578063b0cd8ba114610352578063b725905614610370578063dd62ed3e1461038c578063f2fde38b146103bc57610137565b806379cc67901461028857806385ab9b47146102a45780638da5cb5b146102c057806395d89b41146102de578063a1448194146102fc57610137565b806342966c68116100ff57806342966c68146101f65780635d7d852e146102125780636f3ed9d71461023057806370a082311461024e578063715018a61461027e57610137565b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461018a57806323b872dd146101a8578063313ce567146101d8575b600080fd5b6101446103d8565b6040516101519190611950565b60405180910390f35b610174600480360381019061016f9190611a0b565b61046a565b6040516101819190611a66565b60405180910390f35b61019261048d565b60405161019f9190611a90565b60405180910390f35b6101c260048036038101906101bd9190611aab565b610497565b6040516101cf9190611a66565b60405180910390f35b6101e0610543565b6040516101ed9190611b1a565b60405180910390f35b610210600480360381019061020b9190611b35565b610548565b005b61021a61055c565b6040516102279190611c20565b60405180910390f35b61023861056d565b6040516102459190611a90565b60405180910390f35b61026860048036038101906102639190611c42565b610577565b6040516102759190611a90565b60405180910390f35b6102866105bf565b005b6102a2600480360381019061029d9190611a0b565b6105d3565b005b6102be60048036038101906102b99190611c42565b6105f3565b005b6102c8610663565b6040516102d59190611c7e565b60405180910390f35b6102e661068d565b6040516102f39190611950565b60405180910390f35b61031660048036038101906103119190611a0b565b61071f565b005b61032061091f565b005b61033c60048036038101906103379190611a0b565b610944565b6040516103499190611a66565b60405180910390f35b61035a610c7e565b6040516103679190611a66565b60405180910390f35b61038a60048036038101906103859190611c42565b610c95565b005b6103a660048036038101906103a19190611c99565b610d05565b6040516103b39190611a90565b60405180910390f35b6103d660048036038101906103d19190611c42565b610d8c565b005b6060600380546103e790611d08565b80601f016020809104026020016040519081016040528092919081815260200182805461041390611d08565b80156104605780601f1061043557610100808354040283529160200191610460565b820191906000526020600020905b81548152906001019060200180831161044357829003601f168201915b5050505050905090565b600080610475610e12565b9050610482818585610e1a565b600191505092915050565b6000600254905090565b60006104a1610e2c565b600860009054906101000a900460ff16156104f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e890611d85565b60405180910390fd5b60006104fe858585610eb3565b905061051c8561050c610663565b61051588610577565b6000610ee2565b61053884610528610663565b61053187610577565b6000610ee2565b809150509392505050565b600090565b610559610553610e12565b826110b9565b50565b6060610568600661113b565b905090565b6000600954905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6105c7610e2c565b6105d1600061115c565b565b6105e5826105df610e12565b83611222565b6105ef82826110b9565b5050565b6105fb610e2c565b600860009054906101000a900460ff161561064b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064290611d85565b60405180910390fd5b61065f8160066112b690919063ffffffff16565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461069c90611d08565b80601f01602080910402602001604051908101604052809291908181526020018280546106c890611d08565b80156107155780601f106106ea57610100808354040283529160200191610715565b820191906000526020600020905b8154815290600101906020018083116106f857829003601f168201915b5050505050905090565b610727610e2c565b600860009054906101000a900460ff1615610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076e90611d85565b60405180910390fd5b816000610782610663565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614905060005b6107bf60066112e6565b811080156107cb575081155b156108805760006107e68260066112fb90919063ffffffff16565b9050828061086a57508073ffffffffffffffffffffffffffffffffffffffff1663d4d7b19a856040518263ffffffff1660e01b81526004016108289190611c7e565b602060405180830381865afa158015610845573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108699190611dd1565b5b925050808061087890611e2d565b9150506107b5565b50806108c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b890611ec1565b60405180910390fd5b6108cb8484610944565b506108e0846108d8610663565b856000610ee2565b7f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858484604051610911929190611ee1565b60405180910390a150505050565b610927610e2c565b6001600860006101000a81548160ff021916908315150217905550565b6000336000610951610663565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614905060005b61098e60066112e6565b8110801561099a575081155b15610a4f5760006109b58260066112fb90919063ffffffff16565b90508280610a3957508073ffffffffffffffffffffffffffffffffffffffff1663d4d7b19a856040518263ffffffff1660e01b81526004016109f79190611c7e565b602060405180830381865afa158015610a14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a389190611dd1565b5b9250508080610a4790611e2d565b915050610984565b5080610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8790611ec1565b60405180910390fd5b846000610a9b610663565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614905060005b610ad860066112e6565b81108015610ae4575081155b15610b99576000610aff8260066112fb90919063ffffffff16565b90508280610b8357508073ffffffffffffffffffffffffffffffffffffffff1663d4d7b19a856040518263ffffffff1660e01b8152600401610b419190611c7e565b602060405180830381865afa158015610b5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b829190611dd1565b5b9250508080610b9190611e2d565b915050610ace565b5080610bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd190611ec1565b60405180910390fd5b600860009054906101000a900460ff1615610c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2190611d85565b60405180910390fd5b6000610c368888611315565b9050610c5433610c44610663565b610c4d33610577565b6000610ee2565b610c7088610c60610663565b610c698b610577565b6000610ee2565b809550505050505092915050565b6000600860009054906101000a900460ff16905090565b610c9d610e2c565b600860009054906101000a900460ff1615610ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce490611d85565b60405180910390fd5b610d0181600661133890919063ffffffff16565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610d94610e2c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e065760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610dfd9190611c7e565b60405180910390fd5b610e0f8161115c565b50565b600033905090565b610e278383836001610ee2565b505050565b610e34610e12565b73ffffffffffffffffffffffffffffffffffffffff16610e52610663565b73ffffffffffffffffffffffffffffffffffffffff1614610eb157610e75610e12565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610ea89190611c7e565b60405180910390fd5b565b600080610ebe610e12565b9050610ecb858285611222565b610ed6858585611368565b60019150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610f545760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610f4b9190611c7e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610fc65760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610fbd9190611c7e565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080156110b3578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516110aa9190611a90565b60405180910390a35b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361112b5760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016111229190611c7e565b60405180910390fd5b6111378260008361145c565b5050565b6060600061114b83600001611681565b905060608190508092505050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061122e8484610d05565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146112b057818110156112a0578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161129793929190611f0a565b60405180910390fd5b6112af84848484036000610ee2565b5b50505050565b60006112de836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6116dd565b905092915050565b60006112f48260000161174d565b9050919050565b600061130a836000018361175e565b60001c905092915050565b600080611320610e12565b905061132d818585611368565b600191505092915050565b6000611360836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611789565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036113da5760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016113d19190611c7e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361144c5760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016114439190611c7e565b60405180910390fd5b61145783838361145c565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036114ae5780600260008282546114a29190611f41565b92505081905550611581565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561153a578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161153193929190611f0a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115ca5780600260008282540392505081905550611617565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116749190611a90565b60405180910390a3505050565b6060816000018054806020026020016040519081016040528092919081815260200182805480156116d157602002820191906000526020600020905b8154815260200190600101908083116116bd575b50505050509050919050565b60006116e9838361189d565b611742578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050611747565b600090505b92915050565b600081600001805490509050919050565b600082600001828154811061177657611775611f75565b5b9060005260206000200154905092915050565b600080836001016000848152602001908152602001600020549050600081146118915760006001826117bb9190611fa4565b90506000600186600001805490506117d39190611fa4565b90508082146118425760008660000182815481106117f4576117f3611f75565b5b906000526020600020015490508087600001848154811061181857611817611f75565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b8560000180548061185657611855611fd8565b5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611897565b60009150505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156118fa5780820151818401526020810190506118df565b60008484015250505050565b6000601f19601f8301169050919050565b6000611922826118c0565b61192c81856118cb565b935061193c8185602086016118dc565b61194581611906565b840191505092915050565b6000602082019050818103600083015261196a8184611917565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006119a282611977565b9050919050565b6119b281611997565b81146119bd57600080fd5b50565b6000813590506119cf816119a9565b92915050565b6000819050919050565b6119e8816119d5565b81146119f357600080fd5b50565b600081359050611a05816119df565b92915050565b60008060408385031215611a2257611a21611972565b5b6000611a30858286016119c0565b9250506020611a41858286016119f6565b9150509250929050565b60008115159050919050565b611a6081611a4b565b82525050565b6000602082019050611a7b6000830184611a57565b92915050565b611a8a816119d5565b82525050565b6000602082019050611aa56000830184611a81565b92915050565b600080600060608486031215611ac457611ac3611972565b5b6000611ad2868287016119c0565b9350506020611ae3868287016119c0565b9250506040611af4868287016119f6565b9150509250925092565b600060ff82169050919050565b611b1481611afe565b82525050565b6000602082019050611b2f6000830184611b0b565b92915050565b600060208284031215611b4b57611b4a611972565b5b6000611b59848285016119f6565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611b9781611997565b82525050565b6000611ba98383611b8e565b60208301905092915050565b6000602082019050919050565b6000611bcd82611b62565b611bd78185611b6d565b9350611be283611b7e565b8060005b83811015611c13578151611bfa8882611b9d565b9750611c0583611bb5565b925050600181019050611be6565b5085935050505092915050565b60006020820190508181036000830152611c3a8184611bc2565b905092915050565b600060208284031215611c5857611c57611972565b5b6000611c66848285016119c0565b91505092915050565b611c7881611997565b82525050565b6000602082019050611c936000830184611c6f565b92915050565b60008060408385031215611cb057611caf611972565b5b6000611cbe858286016119c0565b9250506020611ccf858286016119c0565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611d2057607f821691505b602082108103611d3357611d32611cd9565b5b50919050565b7f436f6e7472616374206861732065787069726564000000000000000000000000600082015250565b6000611d6f6014836118cb565b9150611d7a82611d39565b602082019050919050565b60006020820190508181036000830152611d9e81611d62565b9050919050565b611dae81611a4b565b8114611db957600080fd5b50565b600081519050611dcb81611da5565b92915050565b600060208284031215611de757611de6611972565b5b6000611df584828501611dbc565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611e38826119d5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611e6a57611e69611dfe565b5b600182019050919050565b7f496e76616c696420416464726573730000000000000000000000000000000000600082015250565b6000611eab600f836118cb565b9150611eb682611e75565b602082019050919050565b60006020820190508181036000830152611eda81611e9e565b9050919050565b6000604082019050611ef66000830185611c6f565b611f036020830184611a81565b9392505050565b6000606082019050611f1f6000830186611c6f565b611f2c6020830185611a81565b611f396040830184611a81565b949350505050565b6000611f4c826119d5565b9150611f57836119d5565b9250828201905080821115611f6f57611f6e611dfe565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000611faf826119d5565b9150611fba836119d5565b9250828203905081811115611fd257611fd1611dfe565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212207d81ff60a92b2d510554e17af1e0c58247b06e9038723556518572ae21b70b9764736f6c6343000814003300000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000c3500000000000000000000000000000000000000000000000000000000000000007446169776153540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034453540000000000000000000000000000000000000000000000000000000000