60806040526001600760006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b50604051620025f2380380620025f2833981810160405281019062000052919062000426565b62000063336200024860201b60201c565b6040518060400160405280600481526020017f426f42610000000000000000000000000000000000000000000000000000000081525060029080519060200190620000b09291906200030c565b506040518060400160405280600481526020017f424f42410000000000000000000000000000000000000000000000000000000081525060039080519060200190620000fe9291906200030c565b506009600460146101000a81548160ff021916908360ff160217905550600460149054906101000a900460ff16600a620001399190620005f2565b633b9aca006200014a919062000643565b600181905550600154600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600154604051620001f89190620006b5565b60405180910390a380600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000737565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200031a9062000701565b90600052602060002090601f0160209004810192826200033e57600085556200038a565b82601f106200035957805160ff19168380011785556200038a565b828001600101855582156200038a579182015b82811115620003895782518255916020019190600101906200036c565b5b5090506200039991906200039d565b5090565b5b80821115620003b85760008160009055506001016200039e565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003ee82620003c1565b9050919050565b6200040081620003e1565b81146200040c57600080fd5b50565b6000815190506200042081620003f5565b92915050565b6000602082840312156200043f576200043e620003bc565b5b60006200044f848285016200040f565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620004e657808604811115620004be57620004bd62000458565b5b6001851615620004ce5780820291505b8081029050620004de8562000487565b94506200049e565b94509492505050565b600082620005015760019050620005d4565b81620005115760009050620005d4565b81600181146200052a576002811462000535576200056b565b6001915050620005d4565b60ff8411156200054a576200054962000458565b5b8360020a91508482111562000564576200056362000458565b5b50620005d4565b5060208310610133831016604e8410600b8410161715620005a55782820a9050838111156200059f576200059e62000458565b5b620005d4565b620005b4848484600162000494565b92509050818404811115620005ce57620005cd62000458565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b6000620005ff82620005db565b91506200060c83620005e5565b92506200063b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620004ef565b905092915050565b60006200065082620005db565b91506200065d83620005db565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000699576200069862000458565b5b828202905092915050565b620006af81620005db565b82525050565b6000602082019050620006cc6000830184620006a4565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200071a57607f821691505b60208210811415620007315762000730620006d2565b5b50919050565b611eab80620007476000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063715018a6116100a2578063a457c2d711610071578063a457c2d7146102d1578063a9059cbb14610301578063b8c9d25c14610331578063dd62ed3e1461034f578063fbf28ffe1461037f57610116565b8063715018a61461026f57806383aa5393146102795780638da5cb5b1461029557806395d89b41146102b357610116565b806323b872dd116100e957806323b872dd146101a3578063313ce567146101d357806339509351146101f15780634a8d13481461022157806370a082311461023f57610116565b806306fdde031461011b578063095ea7b31461013957806318160ddd146101695780631dc437b114610187575b600080fd5b6101236103af565b60405161013091906113d2565b60405180910390f35b610153600480360381019061014e919061148d565b610441565b60405161016091906114e8565b60405180910390f35b610171610458565b60405161017e9190611512565b60405180910390f35b6101a1600480360381019061019c919061152d565b610462565b005b6101bd60048036038101906101b8919061155a565b6105c3565b6040516101ca91906114e8565b60405180910390f35b6101db6105eb565b6040516101e891906115c9565b60405180910390f35b61020b6004803603810190610206919061148d565b610602565b60405161021891906114e8565b60405180910390f35b61022961062d565b60405161023691906115f3565b60405180910390f35b6102596004803603810190610254919061160e565b610657565b6040516102669190611512565b60405180910390f35b6102776106a0565b005b610293600480360381019061028e919061160e565b6106b4565b005b61029d610931565b6040516102aa91906115f3565b60405180910390f35b6102bb61095a565b6040516102c891906113d2565b60405180910390f35b6102eb60048036038101906102e6919061148d565b6109ec565b6040516102f891906114e8565b60405180910390f35b61031b6004803603810190610316919061148d565b610a5f565b60405161032891906114e8565b60405180910390f35b610339610a76565b60405161034691906115f3565b60405180910390f35b6103696004803603810190610364919061163b565b610b30565b6040516103769190611512565b60405180910390f35b610399600480360381019061039491906116a7565b610bb7565b6040516103a691906114e8565b60405180910390f35b6060600280546103be90611703565b80601f01602080910402602001604051908101604052809291908181526020018280546103ea90611703565b80156104375780601f1061040c57610100808354040283529160200191610437565b820191906000526020600020905b81548152906001019060200180831161041a57829003601f168201915b5050505050905090565b600061044e338484610c33565b6001905092915050565b6000600154905090565b3373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146104bc57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156105bf576000600460149054906101000a900460ff16600a6105309190611897565b6403f5476a0061054091906118e2565b9050600061ffdc8261055291906118e2565b9050828161056091906118e2565b905080600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546105b1919061193c565b9250508190555050506105c0565b5b50565b6000803390506105d4858285610dfe565b6105df858585610e93565b60019150509392505050565b6000600460149054906101000a900460ff16905090565b60006106233384846106143388610b30565b61061e919061193c565b610c33565b6001905092915050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6106a86111ef565b6106b2600061126d565b565b3373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461070e57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480156107b957508073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b80156107f857508073ffffffffffffffffffffffffffffffffffffffff166107df610a76565b73ffffffffffffffffffffffffffffffffffffffff1614155b801561084457507310ed43c718714eb63d5aa57b78b54704e256024e73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b1561092d576000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600181600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546108da9190611992565b6108e4919061193c565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505061092e565b5b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606003805461096990611703565b80601f016020809104026020016040519081016040528092919081815260200182805461099590611703565b80156109e25780601f106109b7576101008083540402835291602001916109e2565b820191906000526020600020905b8154815290600101906020018083116109c557829003601f168201915b5050505050905090565b6000806109f93385610b30565b905082811015610a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3590611a38565b60405180910390fd5b610a5433858584610a4f9190611992565b610c33565b600191505092915050565b6000610a6c338484610e93565b6001905092915050565b600073ca143ce32fe78f1f7019d7d551a6402fc5350c7373ffffffffffffffffffffffffffffffffffffffff1663e6a4390573bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c306040518363ffffffff1660e01b8152600401610adb929190611a58565b60206040518083038186803b158015610af357600080fd5b505afa158015610b07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2b9190611a96565b905090565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60003373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610c2a5781600760006101000a81548160ff0219169083151502179055505b60019050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9a90611b35565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0a90611bc7565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610df19190611512565b60405180910390a3505050565b6000610e0a8484610b30565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610e8d5781811015610e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6d90611c33565b60405180910390fd5b610e8c84848484610e879190611992565b610c33565b5b50505050565b6000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1190611cc5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8190611d57565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff190611de9565b60405180910390fd5b600760009054906101000a900460ff16806110625750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b156111e95781600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110b29190611992565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611140919061193c565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516111e09190611512565b60405180910390a35b50505050565b6111f7611331565b73ffffffffffffffffffffffffffffffffffffffff16611215610931565b73ffffffffffffffffffffffffffffffffffffffff161461126b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126290611e55565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b600081519050919050565b600082825260208201905092915050565b60005b83811015611373578082015181840152602081019050611358565b83811115611382576000848401525b50505050565b6000601f19601f8301169050919050565b60006113a482611339565b6113ae8185611344565b93506113be818560208601611355565b6113c781611388565b840191505092915050565b600060208201905081810360008301526113ec8184611399565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611424826113f9565b9050919050565b61143481611419565b811461143f57600080fd5b50565b6000813590506114518161142b565b92915050565b6000819050919050565b61146a81611457565b811461147557600080fd5b50565b60008135905061148781611461565b92915050565b600080604083850312156114a4576114a36113f4565b5b60006114b285828601611442565b92505060206114c385828601611478565b9150509250929050565b60008115159050919050565b6114e2816114cd565b82525050565b60006020820190506114fd60008301846114d9565b92915050565b61150c81611457565b82525050565b60006020820190506115276000830184611503565b92915050565b600060208284031215611543576115426113f4565b5b600061155184828501611478565b91505092915050565b600080600060608486031215611573576115726113f4565b5b600061158186828701611442565b935050602061159286828701611442565b92505060406115a386828701611478565b9150509250925092565b600060ff82169050919050565b6115c3816115ad565b82525050565b60006020820190506115de60008301846115ba565b92915050565b6115ed81611419565b82525050565b600060208201905061160860008301846115e4565b92915050565b600060208284031215611624576116236113f4565b5b600061163284828501611442565b91505092915050565b60008060408385031215611652576116516113f4565b5b600061166085828601611442565b925050602061167185828601611442565b9150509250929050565b611684816114cd565b811461168f57600080fd5b50565b6000813590506116a18161167b565b92915050565b6000602082840312156116bd576116bc6113f4565b5b60006116cb84828501611692565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061171b57607f821691505b6020821081141561172f5761172e6116d4565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156117bb5780860481111561179757611796611735565b5b60018516156117a65780820291505b80810290506117b485611764565b945061177b565b94509492505050565b6000826117d45760019050611890565b816117e25760009050611890565b81600181146117f8576002811461180257611831565b6001915050611890565b60ff84111561181457611813611735565b5b8360020a91508482111561182b5761182a611735565b5b50611890565b5060208310610133831016604e8410600b84101617156118665782820a90508381111561186157611860611735565b5b611890565b6118738484846001611771565b9250905081840481111561188a57611889611735565b5b81810290505b9392505050565b60006118a282611457565b91506118ad836115ad565b92506118da7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846117c4565b905092915050565b60006118ed82611457565b91506118f883611457565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561193157611930611735565b5b828202905092915050565b600061194782611457565b915061195283611457565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561198757611986611735565b5b828201905092915050565b600061199d82611457565b91506119a883611457565b9250828210156119bb576119ba611735565b5b828203905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611a22602583611344565b9150611a2d826119c6565b604082019050919050565b60006020820190508181036000830152611a5181611a15565b9050919050565b6000604082019050611a6d60008301856115e4565b611a7a60208301846115e4565b9392505050565b600081519050611a908161142b565b92915050565b600060208284031215611aac57611aab6113f4565b5b6000611aba84828501611a81565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611b1f602483611344565b9150611b2a82611ac3565b604082019050919050565b60006020820190508181036000830152611b4e81611b12565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611bb1602283611344565b9150611bbc82611b55565b604082019050919050565b60006020820190508181036000830152611be081611ba4565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611c1d601d83611344565b9150611c2882611be7565b602082019050919050565b60006020820190508181036000830152611c4c81611c10565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611caf602683611344565b9150611cba82611c53565b604082019050919050565b60006020820190508181036000830152611cde81611ca2565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611d41602583611344565b9150611d4c82611ce5565b604082019050919050565b60006020820190508181036000830152611d7081611d34565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611dd3602383611344565b9150611dde82611d77565b604082019050919050565b60006020820190508181036000830152611e0281611dc6565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611e3f602083611344565b9150611e4a82611e09565b602082019050919050565b60006020820190508181036000830152611e6e81611e32565b905091905056fea2646970667358221220eba009c13889c82f6d59de8307618b87c423c7d5e7febed608be8e1fca8b3b0464736f6c6343000808003300000000000000000000000046ab36932aeb5a01973087cf135475204f0cc04a