0x608060405234801561001057600080fd5b5060018081905550611637806100276000396000f3fe6080604052600436106100ab5760003560e01c80638da5cb5b116100645780638da5cb5b1461024d578063a3c2c46214610278578063dca615ed146102a3578063e4440a86146102ce578063f05c5fed146102f9578063f2fde38b146103225761015b565b80631794bb3c146101605780632ef53ff01461017c5780634f1439a8146101a55780635c459b98146101ce5780637804e707146101f95780638bc7e8c4146102225761015b565b3661015b5734600260008282546100c29190610b42565b92505081905550612710600454346100da9190610b76565b6100e49190610bff565b600581905550610118600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660055461034b565b60006005819055507fbb527541f6cc244ae00ab689f8c23d072a30a3b4176021df62ea1c2bac8aa2263034604051610151929190610c80565b60405180910390a1005b600080fd5b61017a60048036038101906101759190610d0b565b610395565b005b34801561018857600080fd5b506101a3600480360381019061019e9190610dc3565b610560565b005b3480156101b157600080fd5b506101cc60048036038101906101c79190610e10565b61057e565b005b3480156101da57600080fd5b506101e3610659565b6040516101f09190610e9c565b60405180910390f35b34801561020557600080fd5b50610220600480360381019061021b9190610eb7565b61067f565b005b34801561022e57600080fd5b506102376108ba565b6040516102449190610f2b565b60405180910390f35b34801561025957600080fd5b506102626108c0565b60405161026f9190610f46565b60405180910390f35b34801561028457600080fd5b5061028d6108e6565b60405161029a9190610f2b565b60405180910390f35b3480156102af57600080fd5b506102b86108ec565b6040516102c59190610f2b565b60405180910390f35b3480156102da57600080fd5b506102e36108f2565b6040516102f09190610f46565b60405180910390f35b34801561030557600080fd5b50610320600480360381019061031b9190610f61565b610918565b005b34801561032e57600080fd5b5061034960048036038101906103449190610e10565b6109ae565b005b600080600080600085875af1905080610390576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60008060019054906101000a900460ff161590508080156103c65750600160008054906101000a900460ff1660ff16105b806103f357506103d5306109fa565b1580156103f25750600160008054906101000a900460ff1660ff16145b5b610432576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042990611011565b60405180910390fd5b60016000806101000a81548160ff021916908360ff160217905550801561046f576001600060016101000a81548160ff0219169083151502179055505b8160048190555082600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506103e8600381905550801561055a5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516105519190611079565b60405180910390a15b50505050565b610568610a1d565b8181600691826105799291906112d0565b505050565b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631540aa896040518163ffffffff1660e01b8152600401602060405180830381865afa15801561062c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065091906113b5565b600a8190555050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610687610ab1565b60066040516020016106999190611470565b6040516020818303038152906040528051906020012084846040516020016106c29291906114bb565b604051602081830303815290604052805190602001201461070f576040517f76d4e1e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631540aa896040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e391906113b5565b905060003390508184116108305781846040517fafc354070000000000000000000000000000000000000000000000000000000081526004016108279291906114d4565b60405180910390fd5b61084581838661084091906114fd565b61034b565b610871600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361034b565b7f59021f4b9715172acd11a87d250d4b348e3d62f70125cba91b190ab27166869281856040516108a2929190610c80565b60405180910390a150506108b4610b00565b50505050565b600a5481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b60035481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610920610a1d565b61271081111561096b57612710816040517fafc3540700000000000000000000000000000000000000000000000000000000815260040161096292919061156c565b60405180910390fd5b806003819055507fd12448ad00429a2de00a2559e34d823542d31c141ae1c8c0c62cdff374980d0b6003546040516109a39190610f2b565b60405180910390a150565b6109b6610a1d565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aaf57336040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152600401610aa69190610f46565b60405180910390fd5b565b600260015403610af6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aed906115e1565b60405180910390fd5b6002600181905550565b60018081905550565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610b4d82610b09565b9150610b5883610b09565b9250828201905080821115610b7057610b6f610b13565b5b92915050565b6000610b8182610b09565b9150610b8c83610b09565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610bc557610bc4610b13565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000610c0a82610b09565b9150610c1583610b09565b925082610c2557610c24610bd0565b5b828204905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610c5b82610c30565b9050919050565b610c6b81610c50565b82525050565b610c7a81610b09565b82525050565b6000604082019050610c956000830185610c62565b610ca26020830184610c71565b9392505050565b600080fd5b600080fd5b610cbc81610c50565b8114610cc757600080fd5b50565b600081359050610cd981610cb3565b92915050565b610ce881610b09565b8114610cf357600080fd5b50565b600081359050610d0581610cdf565b92915050565b600080600060608486031215610d2457610d23610ca9565b5b6000610d3286828701610cca565b9350506020610d4386828701610cca565b9250506040610d5486828701610cf6565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f840112610d8357610d82610d5e565b5b8235905067ffffffffffffffff811115610da057610d9f610d63565b5b602083019150836001820283011115610dbc57610dbb610d68565b5b9250929050565b60008060208385031215610dda57610dd9610ca9565b5b600083013567ffffffffffffffff811115610df857610df7610cae565b5b610e0485828601610d6d565b92509250509250929050565b600060208284031215610e2657610e25610ca9565b5b6000610e3484828501610cca565b91505092915050565b6000819050919050565b6000610e62610e5d610e5884610c30565b610e3d565b610c30565b9050919050565b6000610e7482610e47565b9050919050565b6000610e8682610e69565b9050919050565b610e9681610e7b565b82525050565b6000602082019050610eb16000830184610e8d565b92915050565b60008060008060608587031215610ed157610ed0610ca9565b5b600085013567ffffffffffffffff811115610eef57610eee610cae565b5b610efb87828801610d6d565b94509450506020610f0e87828801610cf6565b9250506040610f1f87828801610cca565b91505092959194509250565b6000602082019050610f406000830184610c71565b92915050565b6000602082019050610f5b6000830184610c62565b92915050565b600060208284031215610f7757610f76610ca9565b5b6000610f8584828501610cf6565b91505092915050565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000610ffb602e83610f8e565b915061100682610f9f565b604082019050919050565b6000602082019050818103600083015261102a81610fee565b9050919050565b6000819050919050565b600060ff82169050919050565b600061106361105e61105984611031565b610e3d565b61103b565b9050919050565b61107381611048565b82525050565b600060208201905061108e600083018461106a565b92915050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061111557607f821691505b602082108103611128576111276110ce565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026111907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611153565b61119a8683611153565b95508019841693508086168417925050509392505050565b60006111cd6111c86111c384610b09565b610e3d565b610b09565b9050919050565b6000819050919050565b6111e7836111b2565b6111fb6111f3826111d4565b848454611160565b825550505050565b600090565b611210611203565b61121b8184846111de565b505050565b5b8181101561123f57611234600082611208565b600181019050611221565b5050565b601f821115611284576112558161112e565b61125e84611143565b8101602085101561126d578190505b61128161127985611143565b830182611220565b50505b505050565b600082821c905092915050565b60006112a760001984600802611289565b1980831691505092915050565b60006112c08383611296565b9150826002028217905092915050565b6112da8383611094565b67ffffffffffffffff8111156112f3576112f261109f565b5b6112fd82546110fd565b611308828285611243565b6000601f8311600181146113375760008415611325578287013590505b61132f85826112b4565b865550611397565b601f1984166113458661112e565b60005b8281101561136d57848901358255600182019150602085019450602081019050611348565b8683101561138a5784890135611386601f891682611296565b8355505b6001600288020188555050505b50505050505050565b6000815190506113af81610cdf565b92915050565b6000602082840312156113cb576113ca610ca9565b5b60006113d9848285016113a0565b91505092915050565b600081905092915050565b600081546113fa816110fd565b61140481866113e2565b9450600182166000811461141f576001811461143457611467565b60ff1983168652811515820286019350611467565b61143d8561112e565b60005b8381101561145f57815481890152600182019150602081019050611440565b838801955050505b50505092915050565b600061147c82846113ed565b915081905092915050565b82818337600083830152505050565b60006114a283856113e2565b93506114af838584611487565b82840190509392505050565b60006114c8828486611496565b91508190509392505050565b60006040820190506114e96000830185610c71565b6114f66020830184610c71565b9392505050565b600061150882610b09565b915061151383610b09565b925082820390508181111561152b5761152a610b13565b5b92915050565b6000819050919050565b600061155661155161154c84611531565b610e3d565b610b09565b9050919050565b6115668161153b565b82525050565b6000604082019050611581600083018561155d565b61158e6020830184610c71565b9392505050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006115cb601f83610f8e565b91506115d682611595565b602082019050919050565b600060208201905081810360008301526115fa816115be565b905091905056fea2646970667358221220da052e93af26b42320bdb826c88d90f5ab1b8596eb41831cf2f90a730fd7cf0c64736f6c63430008100033