60806040523480156200001157600080fd5b50600062000024620001d060201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f0384899bd253d83b23daa4d29aaa2efe0563d1132b43101e9ad667235aeb951b60405160405180910390a3506012600a620000d2919062000372565b622dc6c0620000e29190620003c3565b60026000620000f6620001d060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000144620001d060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6012600a620001a3919062000372565b622dc6c0620001b39190620003c3565b604051620001c291906200041f565b60405180910390a36200043c565b600033905090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000266578086048111156200023e576200023d620001d8565b5b60018516156200024e5780820291505b80810290506200025e8562000207565b94506200021e565b94509492505050565b60008262000281576001905062000354565b8162000291576000905062000354565b8160018114620002aa5760028114620002b557620002eb565b600191505062000354565b60ff841115620002ca57620002c9620001d8565b5b8360020a915084821115620002e457620002e3620001d8565b5b5062000354565b5060208310610133831016604e8410600b8410161715620003255782820a9050838111156200031f576200031e620001d8565b5b62000354565b62000334848484600162000214565b925090508184048111156200034e576200034d620001d8565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b60006200037f826200035b565b91506200038c8362000365565b9250620003bb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200026f565b905092915050565b6000620003d0826200035b565b9150620003dd836200035b565b9250828202620003ed816200035b565b91508282048414831517620004075762000406620001d8565b5b5092915050565b62000419816200035b565b82525050565b60006020820190506200043660008301846200040e565b92915050565b611e73806200044c6000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c806370a08231116100ad578063a9059cbb11610071578063a9059cbb14610323578063b09f126614610353578063d28d885214610371578063dd62ed3e1461038f578063fa77b53a146103bf5761012c565b806370a0823114610291578063715018a6146102c15780637e8e182e146102cb57806395d89b41146102e75780639c679017146103055761012c565b8063313ce567116100f4578063313ce567146101e957806332424aa3146102075780633eaaf86b14610225578063442890d514610243578063653aa45f146102615761012c565b806306fdde0314610131578063095ea7b31461014f57806318160ddd1461017f5780631cd08d001461019d57806323b872dd146101b9575b600080fd5b6101396103db565b604051610146919061125e565b60405180910390f35b61016960048036038101906101649190611328565b610418565b6040516101769190611383565b60405180910390f35b610187610518565b60405161019491906113ad565b60405180910390f35b6101b760048036038101906101b291906113c8565b61053b565b005b6101d360048036038101906101ce91906113f5565b6105fb565b6040516101e09190611383565b60405180910390f35b6101f16108d3565b6040516101fe9190611464565b60405180910390f35b61020f6108dc565b60405161021c9190611464565b60405180910390f35b61022d6108e1565b60405161023a91906113ad565b60405180910390f35b61024b610900565b604051610258919061148e565b60405180910390f35b61027b600480360381019061027691906113c8565b610929565b60405161028891906113ad565b60405180910390f35b6102ab60048036038101906102a691906113c8565b610972565b6040516102b891906113ad565b60405180910390f35b6102c96109bb565b005b6102e560048036038101906102e091906115f1565b610af7565b005b6102ef610d43565b6040516102fc919061125e565b60405180910390f35b61030d610d80565b60405161031a919061148e565b60405180910390f35b61033d60048036038101906103389190611328565b610daa565b60405161034a9190611383565b60405180910390f35b61035b610fbf565b604051610368919061125e565b60405180910390f35b610379610ff8565b604051610386919061125e565b60405180910390f35b6103a960048036038101906103a4919061164d565b611031565b6040516103b691906113ad565b60405180910390f35b6103d960048036038101906103d491906116e8565b6110b8565b005b60606040518060400160405280600481526020017f4c4f4c4f00000000000000000000000000000000000000000000000000000000815250905090565b600081600160006104276111c6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff166104c16111c6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161050691906113ad565b60405180910390a36001905092915050565b60006012600a61052891906118aa565b622dc6c061053691906118f5565b905090565b6105436111c6565b73ffffffffffffffffffffffffffffffffffffffff16610561610900565b73ffffffffffffffffffffffffffffffffffffffff16146105b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ae906119a9565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006106476111c6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156106c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ba90611a3b565b60405180910390fd5b60006106ce85610929565b9050600081111561071c5780831461071b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071290611acd565b60405180910390fd5b5b82600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461076b9190611aed565b9250508190555082600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546107c19190611b21565b9250508190555082600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006108126111c6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461085b9190611aed565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516108bf91906113ad565b60405180910390a360019150509392505050565b60006012905090565b601281565b6012600a6108ef91906118aa565b622dc6c06108fd91906118f5565b81565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6109c36111c6565b73ffffffffffffffffffffffffffffffffffffffff166109e1610900565b73ffffffffffffffffffffffffffffffffffffffff1614610a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2e906119a9565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f0384899bd253d83b23daa4d29aaa2efe0563d1132b43101e9ad667235aeb951b60405160405180910390a361dead6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610aff6111c6565b73ffffffffffffffffffffffffffffffffffffffff16610b1d610d80565b73ffffffffffffffffffffffffffffffffffffffff1614610b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6a90611bc7565b60405180910390fd5b6000811015610bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bae90611c59565b60405180910390fd5b60005b8251811015610d3e576000838281518110610bd857610bd7611c79565b5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4890611d1a565b60405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167ffc0e5d9289abc217a5b78563c6d027e1c1c4d127b0dae1278e9572d6fe9cbd588286604051610d21929190611d3a565b60405180910390a250508080610d3690611d63565b915050610bba565b505050565b60606040518060400160405280600481526020017f4c4f4c4f00000000000000000000000000000000000000000000000000000000815250905090565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008160026000610db96111c6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610e35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2c90611e1d565b60405180910390fd5b6000610e47610e426111c6565b610929565b90506000811115610e9557808314610e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8b90611acd565b60405180910390fd5b5b8260026000610ea26111c6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610eeb9190611aed565b9250508190555082600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f419190611b21565b925050819055508373ffffffffffffffffffffffffffffffffffffffff16610f676111c6565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610fac91906113ad565b60405180910390a3600191505092915050565b6040518060400160405280600481526020017f4c4f4c4f0000000000000000000000000000000000000000000000000000000081525081565b6040518060400160405280600481526020017f4c4f4c4f0000000000000000000000000000000000000000000000000000000081525081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6110c06111c6565b73ffffffffffffffffffffffffffffffffffffffff166110de610d80565b73ffffffffffffffffffffffffffffffffffffffff1614611134576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112b90611bc7565b60405180910390fd5b60005b838390508110156111c057816003600086868581811061115a57611159611c79565b5b905060200201602081019061116f91906113c8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080806111b890611d63565b915050611137565b50505050565b600033905090565b600081519050919050565b600082825260208201905092915050565b60005b838110156112085780820151818401526020810190506111ed565b60008484015250505050565b6000601f19601f8301169050919050565b6000611230826111ce565b61123a81856111d9565b935061124a8185602086016111ea565b61125381611214565b840191505092915050565b600060208201905081810360008301526112788184611225565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006112bf82611294565b9050919050565b6112cf816112b4565b81146112da57600080fd5b50565b6000813590506112ec816112c6565b92915050565b6000819050919050565b611305816112f2565b811461131057600080fd5b50565b600081359050611322816112fc565b92915050565b6000806040838503121561133f5761133e61128a565b5b600061134d858286016112dd565b925050602061135e85828601611313565b9150509250929050565b60008115159050919050565b61137d81611368565b82525050565b60006020820190506113986000830184611374565b92915050565b6113a7816112f2565b82525050565b60006020820190506113c2600083018461139e565b92915050565b6000602082840312156113de576113dd61128a565b5b60006113ec848285016112dd565b91505092915050565b60008060006060848603121561140e5761140d61128a565b5b600061141c868287016112dd565b935050602061142d868287016112dd565b925050604061143e86828701611313565b9150509250925092565b600060ff82169050919050565b61145e81611448565b82525050565b60006020820190506114796000830184611455565b92915050565b611488816112b4565b82525050565b60006020820190506114a3600083018461147f565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6114e682611214565b810181811067ffffffffffffffff82111715611505576115046114ae565b5b80604052505050565b6000611518611280565b905061152482826114dd565b919050565b600067ffffffffffffffff821115611544576115436114ae565b5b602082029050602081019050919050565b600080fd5b600061156d61156884611529565b61150e565b905080838252602082019050602084028301858111156115905761158f611555565b5b835b818110156115b957806115a588826112dd565b845260208401935050602081019050611592565b5050509392505050565b600082601f8301126115d8576115d76114a9565b5b81356115e884826020860161155a565b91505092915050565b600080604083850312156116085761160761128a565b5b600083013567ffffffffffffffff8111156116265761162561128f565b5b611632858286016115c3565b925050602061164385828601611313565b9150509250929050565b600080604083850312156116645761166361128a565b5b6000611672858286016112dd565b9250506020611683858286016112dd565b9150509250929050565b600080fd5b60008083601f8401126116a8576116a76114a9565b5b8235905067ffffffffffffffff8111156116c5576116c461168d565b5b6020830191508360208202830111156116e1576116e0611555565b5b9250929050565b6000806000604084860312156117015761170061128a565b5b600084013567ffffffffffffffff81111561171f5761171e61128f565b5b61172b86828701611692565b9350935050602061173e86828701611313565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156117ce578086048111156117aa576117a9611748565b5b60018516156117b95780820291505b80810290506117c785611777565b945061178e565b94509492505050565b6000826117e757600190506118a3565b816117f557600090506118a3565b816001811461180b576002811461181557611844565b60019150506118a3565b60ff84111561182757611826611748565b5b8360020a91508482111561183e5761183d611748565b5b506118a3565b5060208310610133831016604e8410600b84101617156118795782820a90508381111561187457611873611748565b5b6118a3565b6118868484846001611784565b9250905081840481111561189d5761189c611748565b5b81810290505b9392505050565b60006118b5826112f2565b91506118c083611448565b92506118ed7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846117d7565b905092915050565b6000611900826112f2565b915061190b836112f2565b9250828202611919816112f2565b915082820484148315176119305761192f611748565b5b5092915050565b7f416363657373436f6e74726f6c3a2043616c6c6572206d75737420626520746860008201527f65206f776e657200000000000000000000000000000000000000000000000000602082015250565b60006119936027836111d9565b915061199e82611937565b604082019050919050565b600060208201905081810360008301526119c281611986565b9050919050565b7f54543a207472616e7366657220616d6f756e74206578636565647320616c6c6f60008201527f77616e6365000000000000000000000000000000000000000000000000000000602082015250565b6000611a256025836111d9565b9150611a30826119c9565b604082019050919050565b60006020820190508181036000830152611a5481611a18565b9050919050565b7f54543a207472616e7366657220616d6f756e7420646f6573206e6f742065717560008201527f616c20746865206578616374207472616e7366657220616d6f756e7400000000602082015250565b6000611ab7603c836111d9565b9150611ac282611a5b565b604082019050919050565b60006020820190508181036000830152611ae681611aaa565b9050919050565b6000611af8826112f2565b9150611b03836112f2565b9250828203905081811115611b1b57611b1a611748565b5b92915050565b6000611b2c826112f2565b9150611b37836112f2565b9250828201905080821115611b4f57611b4e611748565b5b92915050565b7f416363657373436f6e74726f6c3a2043616c6c6572206d75737420626520746860008201527f652063726561746f720000000000000000000000000000000000000000000000602082015250565b6000611bb16029836111d9565b9150611bbc82611b55565b604082019050919050565b60006020820190508181036000830152611be081611ba4565b9050919050565b7f546f6b656e4572726f723a206465736972656420616d6f756e74206d7573742060008201527f6265206e6f6e2d6e656761746976650000000000000000000000000000000000602082015250565b6000611c43602f836111d9565b9150611c4e82611be7565b604082019050919050565b60006020820190508181036000830152611c7281611c36565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f546f6b656e4572726f723a20757365722061646472657373206d757374206e6f60008201527f74206265207a65726f2061646472657373000000000000000000000000000000602082015250565b6000611d046031836111d9565b9150611d0f82611ca8565b604082019050919050565b60006020820190508181036000830152611d3381611cf7565b9050919050565b6000604082019050611d4f600083018561139e565b611d5c602083018461139e565b9392505050565b6000611d6e826112f2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611da057611d9f611748565b5b600182019050919050565b7f54543a207472616e7366657220616d6f756e7420657863656564732062616c6160008201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b6000611e076023836111d9565b9150611e1282611dab565b604082019050919050565b60006020820190508181036000830152611e3681611dfa565b905091905056fea26469706673582212201dc7a1514908e4a1edca7f2d2494aeaeb0c6f097047e8a1abd7b6680feafa18764736f6c63430008110033