0x60806040523480156200001157600080fd5b5060405162002876380380620028768339818101604052810190620000379190620004db565b620000576200004b620000ae60201b60201c565b620000b660201b60201c565b60005b8151811015620000a657620000928282815181106200007e576200007d6200052c565b5b60200260200101516200017a60201b60201c565b806200009e9062000594565b90506200005a565b505062000664565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200018a6200023360201b60201c565b6001819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f89c66952b48f3e96bf1d8ba1b63189520fd988a6979b8b740bd5c5d8dc53e20560405160405180910390a250565b62000243620000ae60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000269620002c460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002c2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002b99062000642565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620003518262000306565b810181811067ffffffffffffffff8211171562000373576200037262000317565b5b80604052505050565b600062000388620002ed565b905062000396828262000346565b919050565b600067ffffffffffffffff821115620003b957620003b862000317565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003fc82620003cf565b9050919050565b6200040e81620003ef565b81146200041a57600080fd5b50565b6000815190506200042e8162000403565b92915050565b60006200044b62000445846200039b565b6200037c565b90508083825260208201905060208402830185811115620004715762000470620003ca565b5b835b818110156200049e57806200048988826200041d565b84526020840193505060208101905062000473565b5050509392505050565b600082601f830112620004c057620004bf62000301565b5b8151620004d284826020860162000434565b91505092915050565b600060208284031215620004f457620004f3620002f7565b5b600082015167ffffffffffffffff811115620005155762000514620002fc565b5b6200052384828501620004a8565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000819050919050565b6000620005a1826200058a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620005d657620005d56200055b565b5b600182019050919050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200062a602083620005e1565b91506200063782620005f2565b602082019050919050565b600060208201905081810360008301526200065d816200061b565b9050919050565b61220280620006746000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80639308164311610071578063930816431461017957806399f6e0f614610195578063bcdf2528146101b1578063d81aefbf146101cd578063e7dc779f146101fd578063f2fde38b14610219576100b4565b80630406ffdc146100b95780632e2b287b146100e957806351aebc3814610105578063715018a61461013557806389fa82f21461013f5780638da5cb5b1461015b575b600080fd5b6100d360048036038101906100ce91906116a6565b610235565b6040516100e09190611763565b60405180910390f35b61010360048036038101906100fe91906117ea565b6104dc565b005b61011f600480360381019061011a9190611880565b61055b565b60405161012c91906118bc565b60405180910390f35b61013d61059a565b005b610159600480360381019061015491906118d7565b6105ae565b005b61016361084f565b60405161017091906118bc565b60405180910390f35b610193600480360381019061018e91906116a6565b610878565b005b6101af60048036038101906101aa91906118d7565b610929565b005b6101cb60048036038101906101c691906116a6565b61093f565b005b6101e760048036038101906101e291906118d7565b610b5b565b6040516101f491906118bc565b60405180910390f35b610217600480360381019061021291906118d7565b610d6f565b005b610233600480360381019061022e91906116a6565b610fab565b005b60606000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1603610358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161034f90611996565b60405180910390fd5b6000816000015173ffffffffffffffffffffffffffffffffffffffff16636352211e83602001516040518263ffffffff1660e01b815260040161039b91906119c5565b602060405180830381865afa1580156103b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103dc91906119f5565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461044c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044390611996565b60405180910390fd5b816000015173ffffffffffffffffffffffffffffffffffffffff1663dbe16c0783602001516040518263ffffffff1660e01b815260040161048d91906119c5565b600060405180830381865afa1580156104aa573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906104d39190611b43565b92505050919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361054b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054290611bfe565b60405180910390fd5b61055683838361102e565b505050565b6001818154811061056b57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6105a261128b565b6105ac6000611309565b565b6000806105bb84846113cd565b91509150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361062e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062590611c6a565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b815260040161066991906119c5565b602060405180830381865afa158015610686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106aa91906119f5565b90506106b46114ea565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071890611cfc565b60405180910390fd5b60405180604001604052808473ffffffffffffffffffffffffffffffffffffffff16815260200183815250600360006107586114ea565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015590505084846040516107f6929190611d5b565b60405180910390206108066114ea565b73ffffffffffffffffffffffffffffffffffffffff167fc4286cea7fa7a35890c7cfa5beeafdcce53bb79d2b81497f45bc384c2cc637f660405160405180910390a35050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61088061128b565b6001819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f89c66952b48f3e96bf1d8ba1b63189520fd988a6979b8b740bd5c5d8dc53e20560405160405180910390a250565b61093b82826109366114ea565b61102e565b5050565b61094761128b565b60006001808054905061095a9190611da3565b905060005b818111610b1c578273ffffffffffffffffffffffffffffffffffffffff166001828154811061099157610990611dd7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610b0b57818114610a7a57600182815481106109f2576109f1611dd7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660018281548110610a3157610a30611dd7565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6001805480610a8c57610a8b611e06565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590558273ffffffffffffffffffffffffffffffffffffffff167f8d30d41865a0b811b9545d879520d2dde9f4cc49e4241f486ad9752bc904b56560405160405180910390a25050610b58565b80610b1590611e35565b905061095f565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4f90611eef565b60405180910390fd5b50565b6000806000610b6a85856113cd565b91509150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610bad57600092505050610d69565b60008273ffffffffffffffffffffffffffffffffffffffff1663dbe16c07836040518263ffffffff1660e01b8152600401610be891906119c5565b600060405180830381865afa158015610c05573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610c2e9190611b43565b905060008373ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b8152600401610c6b91906119c5565b602060405180830381865afa158015610c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cac91906119f5565b9050600282604051610cbe9190611f40565b908152602001604051809103902060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169450600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603610d64578094505b505050505b92915050565b600080610d7c84846113cd565b91509150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de690611c6a565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610e2a91906119c5565b602060405180830381865afa158015610e47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6b91906119f5565b9050610e756114ea565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ee2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed990611cfc565b60405180910390fd5b60036000610eee6114ea565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560018201600090555050610f626114ea565b73ffffffffffffffffffffffffffffffffffffffff167f6af68bd18378ec4e3ceb70e0828a57ef0a75678d35017533ecdd0077c962ccbc60405160405180910390a25050505050565b610fb361128b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611022576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101990611fc9565b60405180910390fd5b61102b81611309565b50565b60008383905011611074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106b90612035565b60405180910390fd5b60008061108185856113cd565b91509150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110eb90611c6a565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1663dbe16c07836040518263ffffffff1660e01b815260040161112f91906119c5565b600060405180830381865afa15801561114c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906111759190611b43565b9050836002826040516111889190611f40565b908152602001604051809103902060006111a06114ea565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806040516112269190611f40565b60405180910390206112366114ea565b73ffffffffffffffffffffffffffffffffffffffff167fb6a2756d9ef22fb705f10021def51b66b567ac58b395ca42248d55b042015d3b8660405161127b91906118bc565b60405180910390a3505050505050565b6112936114ea565b73ffffffffffffffffffffffffffffffffffffffff166112b161084f565b73ffffffffffffffffffffffffffffffffffffffff1614611307576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fe906120a1565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060006113dc85856114f2565b905060005b6001805490508110156114d95760006001828154811061140457611403611dd7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1663b336ad83856040518263ffffffff1660e01b815260040161146c9190611763565b602060405180830381865afa158015611489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ad91906120d6565b9050600081146114c657818195509550505050506114e3565b5050806114d290611e35565b90506113e1565b5060008092509250505b9250929050565b600033905090565b6060366000848491509150600782829050106115e457366000838360048686905061151d9190611da3565b90868690509261152f9392919061210d565b915091507f4ca7dddfae5cf264d890b70bf1c49c51a1f3ce78a01fe9b1522e88b0d79f03f48282604051611564929190612178565b6040518091039020036115e15786866000906004878790506115869190611da3565b9261159393929190612191565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505094505050505061162e565b50505b84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050925050505b92915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061167382611648565b9050919050565b61168381611668565b811461168e57600080fd5b50565b6000813590506116a08161167a565b92915050565b6000602082840312156116bc576116bb61163e565b5b60006116ca84828501611691565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561170d5780820151818401526020810190506116f2565b60008484015250505050565b6000601f19601f8301169050919050565b6000611735826116d3565b61173f81856116de565b935061174f8185602086016116ef565b61175881611719565b840191505092915050565b6000602082019050818103600083015261177d818461172a565b905092915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126117aa576117a9611785565b5b8235905067ffffffffffffffff8111156117c7576117c661178a565b5b6020830191508360018202830111156117e3576117e261178f565b5b9250929050565b6000806000604084860312156118035761180261163e565b5b600084013567ffffffffffffffff81111561182157611820611643565b5b61182d86828701611794565b9350935050602061184086828701611691565b9150509250925092565b6000819050919050565b61185d8161184a565b811461186857600080fd5b50565b60008135905061187a81611854565b92915050565b6000602082840312156118965761189561163e565b5b60006118a48482850161186b565b91505092915050565b6118b681611668565b82525050565b60006020820190506118d160008301846118ad565b92915050565b600080602083850312156118ee576118ed61163e565b5b600083013567ffffffffffffffff81111561190c5761190b611643565b5b61191885828601611794565b92509250509250929050565b7f4e616d6574616757616c6c65743a2057616c6c6574206e6f742061737369676e60008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b60006119806022836116de565b915061198b82611924565b604082019050919050565b600060208201905081810360008301526119af81611973565b9050919050565b6119bf8161184a565b82525050565b60006020820190506119da60008301846119b6565b92915050565b6000815190506119ef8161167a565b92915050565b600060208284031215611a0b57611a0a61163e565b5b6000611a19848285016119e0565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611a5f82611719565b810181811067ffffffffffffffff82111715611a7e57611a7d611a27565b5b80604052505050565b6000611a91611634565b9050611a9d8282611a56565b919050565b600067ffffffffffffffff821115611abd57611abc611a27565b5b611ac682611719565b9050602081019050919050565b6000611ae6611ae184611aa2565b611a87565b905082815260208101848484011115611b0257611b01611a22565b5b611b0d8482856116ef565b509392505050565b600082601f830112611b2a57611b29611785565b5b8151611b3a848260208601611ad3565b91505092915050565b600060208284031215611b5957611b5861163e565b5b600082015167ffffffffffffffff811115611b7757611b76611643565b5b611b8384828501611b15565b91505092915050565b7f4e616d6574616757616c6c65743a205a65726f2077616c6c657420616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611be86022836116de565b9150611bf382611b8c565b604082019050919050565b60006020820190508181036000830152611c1781611bdb565b9050919050565b7f4e616d6574616757616c6c65743a204e616d65746167206e6f7420666f756e64600082015250565b6000611c546020836116de565b9150611c5f82611c1e565b602082019050919050565b60006020820190508181036000830152611c8381611c47565b9050919050565b7f4e616d6574616757616c6c65743a204e6f74206f776e6572206f66206e616d6560008201527f7461670000000000000000000000000000000000000000000000000000000000602082015250565b6000611ce66023836116de565b9150611cf182611c8a565b604082019050919050565b60006020820190508181036000830152611d1581611cd9565b9050919050565b600081905092915050565b82818337600083830152505050565b6000611d428385611d1c565b9350611d4f838584611d27565b82840190509392505050565b6000611d68828486611d36565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611dae8261184a565b9150611db98361184a565b9250828203905081811115611dd157611dd0611d74565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000611e408261184a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611e7257611e71611d74565b5b600182019050919050565b7f4e616d6574616757616c6c65743a20436f6e7472616374206e6f7420666f756e60008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000611ed96021836116de565b9150611ee482611e7d565b604082019050919050565b60006020820190508181036000830152611f0881611ecc565b9050919050565b6000611f1a826116d3565b611f248185611d1c565b9350611f348185602086016116ef565b80840191505092915050565b6000611f4c8284611f0f565b915081905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611fb36026836116de565b9150611fbe82611f57565b604082019050919050565b60006020820190508181036000830152611fe281611fa6565b9050919050565b7f4e616d6574616757616c6c65743a204e616d6574616720697320656d70747900600082015250565b600061201f601f836116de565b915061202a82611fe9565b602082019050919050565b6000602082019050818103600083015261204e81612012565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061208b6020836116de565b915061209682612055565b602082019050919050565b600060208201905081810360008301526120ba8161207e565b9050919050565b6000815190506120d081611854565b92915050565b6000602082840312156120ec576120eb61163e565b5b60006120fa848285016120c1565b91505092915050565b600080fd5b600080fd5b6000808585111561212157612120612103565b5b8386111561213257612131612108565b5b6001850283019150848603905094509492505050565b600081905092915050565b600061215f8385612148565b935061216c838584611d27565b82840190509392505050565b6000612185828486612153565b91508190509392505050565b600080858511156121a5576121a4612103565b5b838611156121b6576121b5612108565b5b600185028301915084860390509450949250505056fea26469706673582212200b7bd34b4ed11ffb9f177f0be6df1886c91789cced5334bea72db51e0cb02f4c64736f6c6343000812003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c53dc593b69c67a209cf70d4172078c9125449bb000000000000000000000000c9eef4c46abcb11002c9bb8a47445c96cdbcaffb