0x608060405234801561001057600080fd5b5061002d61002261003260201b60201c565b61003a60201b60201c565b6100fe565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6117828061010d6000396000f3fe608060405234801561001057600080fd5b50600436106100b85760003560e01c80638da5cb5b116100715780638da5cb5b146101b2578063b95cac28146101d0578063cd753b6c14610200578063e744092e1461021e578063f2fde38b1461024e578063fa6e671d1461026a576100b9565b80633dc2b240146100f457806355219d5a14610110578063715018a614610140578063724a5f3b1461014a5780638000b029146101665780638bdb391314610182576100b9565b5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100eb90610b11565b60405180910390fd5b61010e60048036038101906101099190610bdb565b61029a565b005b61012a60048036038101906101259190610c1b565b6103dc565b6040516101379190610c57565b60405180910390f35b610148610449565b005b610164600480360381019061015f9190610c72565b61045d565b005b610180600480360381019061017b9190610ebb565b6104d0565b005b61019c6004803603810190610197919061122b565b610709565b6040516101a991906112e9565b60405180910390f35b6101ba61078b565b6040516101c79190611313565b60405180910390f35b6101ea60048036038101906101e591906113fa565b6107b4565b6040516101f791906112e9565b60405180910390f35b610208610836565b6040516102159190610c57565b60405180910390f35b61023860048036038101906102339190610c1b565b610849565b6040516102459190610c57565b60405180910390f35b61026860048036038101906102639190610c1b565b610869565b005b610284600480360381019061027f919061147d565b6108ec565b60405161029191906112e9565b60405180910390f35b6102a2610947565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156102e557506102e3826109c5565b155b1561031c576040517f1eb00b0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167ffb9e4bbd88ddb7871a18531810b8ddba76be7638aab0c37a986d4525aadd3f34836040516103d09190610c57565b60405180910390a35050565b6000600260009054906101000a900460ff16806104425750600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b9050919050565b610451610947565b61045b60006109e8565b565b610465610947565b80600260006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff167f994d881385d4a505fe4acf0f3926693e6c12b3f8d7f6e2cafb12718b5bbc43f0826040516104c59190610c57565b60405180910390a250565b6104d8610947565b8051825114610513576040517f6889ba9000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b825181101561070457600073ffffffffffffffffffffffffffffffffffffffff1683828151811061054a576105496114d0565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141580156105965750610594838281518110610587576105866114d0565b5b60200260200101516109c5565b155b156105cd576040517f1eb00b0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181815181106105e0576105df6114d0565b5b6020026020010151600160008584815181106105ff576105fe6114d0565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555082818151811061066b5761066a6114d0565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167ffb9e4bbd88ddb7871a18531810b8ddba76be7638aab0c37a986d4525aadd3f348484815181106106d4576106d36114d0565b5b60200260200101516040516106e99190610c57565b60405180910390a380806106fc9061152e565b915050610516565b505050565b60003373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610779576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610770906115c2565b60405180910390fd5b6359faaa0360e01b9050949350505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60003373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081b906115c2565b60405180910390fd5b6359faaa0360e01b9050949350505050565b600260009054906101000a900460ff1681565b60016020528060005260406000206000915054906101000a900460ff1681565b610871610947565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036108e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d790611654565b60405180910390fd5b6108e9816109e8565b50565b60006108f7836103dc565b610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092d906116c0565b60405180910390fd5b6359faaa0360e01b90509392505050565b61094f610aac565b73ffffffffffffffffffffffffffffffffffffffff1661096d61078b565b73ffffffffffffffffffffffffffffffffffffffff16146109c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ba9061172c565b60405180910390fd5b565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b600082825260208201905092915050565b7f46756e6374696f6e206973206e6f742077686974656c69737465640000000000600082015250565b6000610afb601b83610ab4565b9150610b0682610ac5565b602082019050919050565b60006020820190508181036000830152610b2a81610aee565b9050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610b7082610b45565b9050919050565b610b8081610b65565b8114610b8b57600080fd5b50565b600081359050610b9d81610b77565b92915050565b60008115159050919050565b610bb881610ba3565b8114610bc357600080fd5b50565b600081359050610bd581610baf565b92915050565b60008060408385031215610bf257610bf1610b3b565b5b6000610c0085828601610b8e565b9250506020610c1185828601610bc6565b9150509250929050565b600060208284031215610c3157610c30610b3b565b5b6000610c3f84828501610b8e565b91505092915050565b610c5181610ba3565b82525050565b6000602082019050610c6c6000830184610c48565b92915050565b600060208284031215610c8857610c87610b3b565b5b6000610c9684828501610bc6565b91505092915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610ced82610ca4565b810181811067ffffffffffffffff82111715610d0c57610d0b610cb5565b5b80604052505050565b6000610d1f610b31565b9050610d2b8282610ce4565b919050565b600067ffffffffffffffff821115610d4b57610d4a610cb5565b5b602082029050602081019050919050565b600080fd5b6000610d74610d6f84610d30565b610d15565b90508083825260208201905060208402830185811115610d9757610d96610d5c565b5b835b81811015610dc05780610dac8882610b8e565b845260208401935050602081019050610d99565b5050509392505050565b600082601f830112610ddf57610dde610c9f565b5b8135610def848260208601610d61565b91505092915050565b600067ffffffffffffffff821115610e1357610e12610cb5565b5b602082029050602081019050919050565b6000610e37610e3284610df8565b610d15565b90508083825260208201905060208402830185811115610e5a57610e59610d5c565b5b835b81811015610e835780610e6f8882610bc6565b845260208401935050602081019050610e5c565b5050509392505050565b600082601f830112610ea257610ea1610c9f565b5b8135610eb2848260208601610e24565b91505092915050565b60008060408385031215610ed257610ed1610b3b565b5b600083013567ffffffffffffffff811115610ef057610eef610b40565b5b610efc85828601610dca565b925050602083013567ffffffffffffffff811115610f1d57610f1c610b40565b5b610f2985828601610e8d565b9150509250929050565b6000819050919050565b610f4681610f33565b8114610f5157600080fd5b50565b600081359050610f6381610f3d565b92915050565b6000610f7482610b45565b9050919050565b610f8481610f69565b8114610f8f57600080fd5b50565b600081359050610fa181610f7b565b92915050565b600080fd5b600080fd5b600067ffffffffffffffff821115610fcc57610fcb610cb5565b5b602082029050602081019050919050565b6000819050919050565b610ff081610fdd565b8114610ffb57600080fd5b50565b60008135905061100d81610fe7565b92915050565b600061102661102184610fb1565b610d15565b9050808382526020820190506020840283018581111561104957611048610d5c565b5b835b81811015611072578061105e8882610ffe565b84526020840193505060208101905061104b565b5050509392505050565b600082601f83011261109157611090610c9f565b5b81356110a1848260208601611013565b91505092915050565b600080fd5b600067ffffffffffffffff8211156110ca576110c9610cb5565b5b6110d382610ca4565b9050602081019050919050565b82818337600083830152505050565b60006111026110fd846110af565b610d15565b90508281526020810184848401111561111e5761111d6110aa565b5b6111298482856110e0565b509392505050565b600082601f83011261114657611145610c9f565b5b81356111568482602086016110ef565b91505092915050565b60006080828403121561117557611174610fa7565b5b61117f6080610d15565b9050600082013567ffffffffffffffff81111561119f5761119e610fac565b5b6111ab84828501610dca565b600083015250602082013567ffffffffffffffff8111156111cf576111ce610fac565b5b6111db8482850161107c565b602083015250604082013567ffffffffffffffff8111156111ff576111fe610fac565b5b61120b84828501611131565b604083015250606061121f84828501610bc6565b60608301525092915050565b6000806000806080858703121561124557611244610b3b565b5b600061125387828801610f54565b945050602061126487828801610b8e565b935050604061127587828801610f92565b925050606085013567ffffffffffffffff81111561129657611295610b40565b5b6112a28782880161115f565b91505092959194509250565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6112e3816112ae565b82525050565b60006020820190506112fe60008301846112da565b92915050565b61130d81610b65565b82525050565b60006020820190506113286000830184611304565b92915050565b60006080828403121561134457611343610fa7565b5b61134e6080610d15565b9050600082013567ffffffffffffffff81111561136e5761136d610fac565b5b61137a84828501610dca565b600083015250602082013567ffffffffffffffff81111561139e5761139d610fac565b5b6113aa8482850161107c565b602083015250604082013567ffffffffffffffff8111156113ce576113cd610fac565b5b6113da84828501611131565b60408301525060606113ee84828501610bc6565b60608301525092915050565b6000806000806080858703121561141457611413610b3b565b5b600061142287828801610f54565b945050602061143387828801610b8e565b935050604061144487828801610b8e565b925050606085013567ffffffffffffffff81111561146557611464610b40565b5b6114718782880161132e565b91505092959194509250565b60008060006060848603121561149657611495610b3b565b5b60006114a486828701610b8e565b93505060206114b586828701610b8e565b92505060406114c686828701610bc6565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061153982610fdd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156b5761156a6114ff565b5b600182019050919050565b7f6f75747369646520726563697069656e74206e6f7420616c6c6f776564000000600082015250565b60006115ac601d83610ab4565b91506115b782611576565b602082019050919050565b600060208201905081810360008301526115db8161159f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061163e602683610ab4565b9150611649826115e2565b604082019050919050565b6000602082019050818103600083015261166d81611631565b9050919050565b7f7265706c61796572206e6f7420616c6c6f776564000000000000000000000000600082015250565b60006116aa601483610ab4565b91506116b582611674565b602082019050919050565b600060208201905081810360008301526116d98161169d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611716602083610ab4565b9150611721826116e0565b602082019050919050565b6000602082019050818103600083015261174581611709565b905091905056fea2646970667358221220c1c74dc50c094d87ff84d51fe201609a9d12901388b2a3be2c84a9db1b4a071f64736f6c63430008120033