60806040523480156200001157600080fd5b50604051620055f6380380620055f6833981810160405281019062000037919062000669565b848481600090816200004a91906200098f565b5080600190816200005c91906200098f565b5050506200007f62000073620000d860201b60201c565b620000e060201b60201c565b6000600660146101000a81548160ff021916908315150217905550620000ab83620001a660201b60201c565b620000bc826200025860201b60201c565b620000cd816200030660201b60201c565b505050505062000bfe565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620001b66200037b60201b60201c565b612710811115620001fe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001f59062000ad7565b60405180910390fd5b80600a819055503373ffffffffffffffffffffffffffffffffffffffff167f4b7dbec63042c1dda577f7aa6fd14122cddcc3f21992561e3a69c6db7822b3c6826040516200024d919062000b0a565b60405180910390a250565b620002686200037b60201b60201c565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fbde6a1f22996ef208a396e5e011324e19c33cc4cd523fdcc34e26ce88c43e08c60405160405180910390a350565b620003166200037b60201b60201c565b80600e90816200032791906200098f565b503373ffffffffffffffffffffffffffffffffffffffff167fde16c1e51a062f420283920369ff930e4ec41c5721ff0fa09a083ef5b79c97de8260405162000370919062000b68565b60405180910390a250565b6200038b620000d860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003b16200040c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200040a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004019062000bdc565b60405180910390fd5b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200049f8262000454565b810181811067ffffffffffffffff82111715620004c157620004c062000465565b5b80604052505050565b6000620004d662000436565b9050620004e4828262000494565b919050565b600067ffffffffffffffff82111562000507576200050662000465565b5b620005128262000454565b9050602081019050919050565b60005b838110156200053f57808201518184015260208101905062000522565b60008484015250505050565b6000620005626200055c84620004e9565b620004ca565b9050828152602081018484840111156200058157620005806200044f565b5b6200058e8482856200051f565b509392505050565b600082601f830112620005ae57620005ad6200044a565b5b8151620005c08482602086016200054b565b91505092915050565b6000819050919050565b620005de81620005c9565b8114620005ea57600080fd5b50565b600081519050620005fe81620005d3565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620006318262000604565b9050919050565b620006438162000624565b81146200064f57600080fd5b50565b600081519050620006638162000638565b92915050565b600080600080600060a0868803121562000688576200068762000440565b5b600086015167ffffffffffffffff811115620006a957620006a862000445565b5b620006b78882890162000596565b955050602086015167ffffffffffffffff811115620006db57620006da62000445565b5b620006e98882890162000596565b9450506040620006fc88828901620005ed565b93505060606200070f8882890162000652565b925050608086015167ffffffffffffffff81111562000733576200073262000445565b5b620007418882890162000596565b9150509295509295909350565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620007a157607f821691505b602082108103620007b757620007b662000759565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008217fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620007e2565b6200082d8683620007e2565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620008706200086a6200086484620005c9565b62000845565b620005c9565b9050919050565b6000819050919050565b6200088c836200084f565b620008a46200089b8262000877565b848454620007ef565b825550505050565b600090565b620008bb620008ac565b620008c881848462000881565b505050565b5b81811015620008f057620008e4600082620008b1565b600181019050620008ce565b5050565b601f8211156200093f576200090981620007bd565b6200091484620007d2565b8101602085101562000924578190505b6200093c6200093385620007d2565b830182620008cd565b50505b505050565b600082821c905092915050565b6000620009646000198460080262000944565b1980831691505092915050565b60006200097f838362000951565b9150826002028217905092915050565b6200099a826200074e565b67ffffffffffffffff811115620009b657620009b562000465565b5b620009c2825462000788565b620009cf828285620008f4565b600060209050601f83116001811462000a075760008415620009f2578287015190505b620009fe858262000971565b86555062000a6e565b601f19841662000a1786620007bd565b60005b8281101562000a415784890151825560018201915060208501945060208101905062000a1a565b8683101562000a61578489015162000a5d601f89168262000951565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f726f79616c7479206f7574206f662072616e6765000000000000000000000000600082015250565b600062000abf60148362000a76565b915062000acc8262000a87565b602082019050919050565b6000602082019050818103600083015262000af28162000ab0565b9050919050565b62000b0481620005c9565b82525050565b600060208201905062000b21600083018462000af9565b92915050565b600062000b34826200074e565b62000b40818562000a76565b935062000b528185602086016200051f565b62000b5d8162000454565b840191505092915050565b6000602082019050818103600083015262000b84818462000b27565b905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000bc460208362000a76565b915062000bd18262000b8c565b602082019050919050565b6000602082019050818103600083015262000bf78162000bb5565b9050919050565b6149e88062000c0e6000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c8063715018a611610125578063bceb2a22116100ad578063da8fbf2a1161007c578063da8fbf2a146105af578063e1ee5c83146105b9578063e985e9c5146105d5578063f2fde38b14610605578063f8361bab1461062157610211565b8063bceb2a221461053d578063c20938e014610559578063c87b56dd14610575578063da304499146105a557610211565b8063a0ef91df116100f4578063a0ef91df146104e7578063a22cb465146104f1578063ae2003221461050d578063b2cfad2814610517578063b88d4fde1461052157610211565b8063715018a6146104855780638da5cb5b1461048f57806395d89b41146104ad57806398df857c146104cb57610211565b806333eba49a116101a8578063589a174311610177578063589a1743146103b95780635c975abb146103e957806362b99ad4146104075780636352211e1461042557806370a082311461045557610211565b806333eba49a14610335578063423afa661461035157806342842e0e1461038157806342966c681461039d57610211565b80630b185dfe116101e45780630b185dfe146102b057806318e97fd1146102cc57806323b872dd146102e85780632a55205a1461030457610211565b806301ffc9a71461021657806306fdde0314610246578063081812fc14610264578063095ea7b314610294575b600080fd5b610230600480360381019061022b9190612c20565b61063d565b60405161023d9190612c68565b60405180910390f35b61024e6106b7565b60405161025b9190612d13565b60405180910390f35b61027e60048036038101906102799190612d6b565b610749565b60405161028b9190612dd9565b60405180910390f35b6102ae60048036038101906102a99190612e20565b61078f565b005b6102ca60048036038101906102c59190612f1b565b6108a6565b005b6102e660048036038101906102e19190612ff2565b6109c3565b005b61030260048036038101906102fd9190613052565b610c2d565b005b61031e600480360381019061031991906130a5565b610c8d565b60405161032c9291906130f4565b60405180910390f35b61034f600480360381019061034a919061324d565b610db1565b005b61036b60048036038101906103669190613296565b610f8d565b6040516103789190612c68565b60405180910390f35b61039b60048036038101906103969190613052565b610fad565b005b6103b760048036038101906103b29190612d6b565b610fcd565b005b6103d360048036038101906103ce9190612d6b565b610fe1565b6040516103e09190612dd9565b60405180910390f35b6103f1611066565b6040516103fe9190612c68565b60405180910390f35b61040f61107d565b60405161041c9190612d13565b60405180910390f35b61043f600480360381019061043a9190612d6b565b61110b565b60405161044c9190612dd9565b60405180910390f35b61046f600480360381019061046a9190613296565b6111bc565b60405161047c91906132c3565b60405180910390f35b61048d611273565b005b610497611287565b6040516104a49190612dd9565b60405180910390f35b6104b56112b1565b6040516104c29190612d13565b60405180910390f35b6104e560048036038101906104e09190613296565b611343565b005b6104ef6113e9565b005b61050b6004803603810190610506919061330a565b61148c565b005b6105156114a2565b005b61051f6114b4565b005b61053b600480360381019061053691906133eb565b61151c565b005b6105576004803603810190610552919061324d565b61157e565b005b610573600480360381019061056e919061346e565b6115e7565b005b61058f600480360381019061058a9190612d6b565b6116a2565b60405161059c9190612d13565b60405180910390f35b6105ad61178f565b005b6105b76117f7565b005b6105d360048036038101906105ce9190612d6b565b611809565b005b6105ef60048036038101906105ea91906134ae565b6118ae565b6040516105fc9190612c68565b60405180910390f35b61061f600480360381019061061a9190613296565b611942565b005b61063b6004803603810190610636919061346e565b6119c5565b005b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106b057506106af82611b5e565b5b9050919050565b6060600080546106c69061351d565b80601f01602080910402602001604051908101604052809291908181526020018280546106f29061351d565b801561073f5780601f106107145761010080835404028352916020019161073f565b820191906000526020600020905b81548152906001019060200180831161072257829003601f168201915b5050505050905090565b600061075482611c40565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061079a8261110b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361080a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610801906135c0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610829611c8b565b73ffffffffffffffffffffffffffffffffffffffff161480610858575061085781610852611c8b565b6118ae565b5b610897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088e90613652565b60405180910390fd5b6108a18383611c93565b505050565b6108ae611d4c565b8181905084849050146108f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ed906136e4565b60405180910390fd5b60005b848490508110156109bc5782828281811061091757610916613704565b5b905060200201602081019061092c9190613733565b600f600087878581811061094357610942613704565b5b90506020020160208101906109589190613296565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806109b49061378f565b9150506108f9565b5050505050565b81818080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050600c81604051610a189190613813565b908152602001604051809103902060009054906101000a900460ff1615610a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6b90613876565b60405180910390fd5b610a7d81611dca565b83610a86611287565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610b365750600d600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015610b355750600960009054906101000a900460ff16155b5b610b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6c906138e2565b60405180910390fd5b6000600b600087815260200190815260200160002090508484600b60008981526020019081526020016000209182610bae929190613ab9565b506001600c8686604051610bc3929190613bae565b908152602001604051809103902060006101000a81548160ff0219169083151502179055507f877cb5fe270579c5071e4a16ceb146f7be4bf5ae40e9d8896a2a3727d781de3386828787604051610c1d9493929190613c8d565b60405180910390a1505050505050565b610c3e610c38611c8b565b82611f52565b610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7490613d46565b60405180910390fd5b610c88838383611fe7565b505050565b600080610c998461224d565b610cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccf90613db2565b60405180910390fd5b612710600a5484610ce99190613dd2565b610cf39190613e43565b9050600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d7357600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610da8565b600d600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b91509250929050565b610db96122b9565b80600c81604051610dca9190613813565b908152602001604051809103902060009054906101000a900460ff1615610e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1d90613876565b60405180910390fd5b610e2f81611dca565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb290613ec0565b60405180910390fd5b81600b600060085481526020019081526020016000209081610edd9190613ee0565b506001600c83604051610ef09190613813565b908152602001604051809103902060006101000a81548160ff02191690831515021790555033600d6000600854815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610f893360086000815480929190610f809061378f565b91905055612303565b5050565b600f6020528060005260406000206000915054906101000a900460ff1681565b610fc88383836040518060200160405280600081525061151c565b505050565b610fd5611d4c565b610fde816124dc565b50565b6000610fec8261224d565b61102b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102290613db2565b60405180910390fd5b600d600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600660149054906101000a900460ff16905090565b600e805461108a9061351d565b80601f01602080910402602001604051908101604052809291908181526020018280546110b69061351d565b80156111035780601f106110d857610100808354040283529160200191611103565b820191906000526020600020905b8154815290600101906020018083116110e657829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111aa90613ffe565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361122c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122390614090565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61127b611d4c565b61128560006125f9565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546112c09061351d565b80601f01602080910402602001604051908101604052809291908181526020018280546112ec9061351d565b80156113395780601f1061130e57610100808354040283529160200191611339565b820191906000526020600020905b81548152906001019060200180831161131c57829003601f168201915b5050505050905090565b61134b611d4c565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fbde6a1f22996ef208a396e5e011324e19c33cc4cd523fdcc34e26ce88c43e08c60405160405180910390a350565b6113f1611d4c565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051611439906140e1565b60006040518083038185875af1925050503d8060008114611476576040519150601f19603f3d011682016040523d82523d6000602084013e61147b565b606091505b505090508061148957600080fd5b50565b61149e611497611c8b565b83836126bf565b5050565b6114aa611d4c565b6114b261282b565b565b6114bc611d4c565b6000600960006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff167f7c2295421de1a88d6392f0fce429c317a32ed5d38be6f6e00a139f01590e920c60405160405180910390a2565b61152d611527611c8b565b83611f52565b61156c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156390613d46565b60405180910390fd5b6115788484848461288e565b50505050565b611586611d4c565b80600e90816115959190613ee0565b503373ffffffffffffffffffffffffffffffffffffffff167fde16c1e51a062f420283920369ff930e4ec41c5721ff0fa09a083ef5b79c97de826040516115dc9190612d13565b60405180910390a250565b6115ef611d4c565b60008173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518363ffffffff1660e01b815260040161164e9291906130f4565b6020604051808303816000875af115801561166d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611691919061410b565b90508061169d57600080fd5b505050565b60606116ad8261224d565b6116ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e390613db2565b60405180910390fd5b600b6000838152602001908152602001600020805461170a9061351d565b80601f01602080910402602001604051908101604052809291908181526020018280546117369061351d565b80156117835780601f1061175857610100808354040283529160200191611783565b820191906000526020600020905b81548152906001019060200180831161176657829003601f168201915b50505050509050919050565b611797611d4c565b6001600960006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff167feafe05283d5f7228187a72dfd58c6ae8296f91a6a9be9a29406a6941d1c593e760405160405180910390a2565b6117ff611d4c565b6118076128ea565b565b611811611d4c565b612710811115611856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184d90614184565b60405180910390fd5b80600a819055503373ffffffffffffffffffffffffffffffffffffffff167f4b7dbec63042c1dda577f7aa6fd14122cddcc3f21992561e3a69c6db7822b3c6826040516118a391906132c3565b60405180910390a250565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61194a611d4c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b090614216565b60405180910390fd5b6119c2816125f9565b50565b600d600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611a645750611a35611287565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9a90614282565b60405180910390fd5b80600d600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0a1be7c84f8d2439cd1106b06022308991ce5b9d1f38ee72ba89d2ffd89bfe8f84604051611b5291906132c3565b60405180910390a35050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611c2957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611c395750611c388261294d565b5b9050919050565b611c498161224d565b611c88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7f90613ffe565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611d068361110b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611d54611c8b565b73ffffffffffffffffffffffffffffffffffffffff16611d72611287565b73ffffffffffffffffffffffffffffffffffffffff1614611dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbf906142ee565b60405180910390fd5b565b60008190506000600e8054611dde9061351d565b9050905080825111611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c9061435a565b60405180910390fd5b60008167ffffffffffffffff811115611e4157611e40613122565b5b6040519080825280601f01601f191660200182016040528015611e735781602001600182028036833780820191505090505b50905060005b82811015611eec57838181518110611e9457611e93613704565b5b602001015160f81c60f81b828281518110611eb257611eb1613704565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806001019050611e79565b50600e604051611efc9190614412565b6040518091039020818051906020012014611f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4390614475565b60405180910390fd5b50505050565b600080611f5e8361110b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611fa05750611f9f81856118ae565b5b80611fde57508373ffffffffffffffffffffffffffffffffffffffff16611fc684610749565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166120078261110b565b73ffffffffffffffffffffffffffffffffffffffff161461205d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205490614507565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c390614599565b60405180910390fd5b6120d78383836129b7565b6120e2600082611c93565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461213291906145b9565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461218991906145ed565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122488383836129bc565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6122c1611066565b15612301576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f89061466d565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612372576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612369906146d9565b60405180910390fd5b61237b8161224d565b156123bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b290614745565b60405180910390fd5b6123c7600083836129b7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461241791906145ed565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124d8600083836129bc565b5050565b60006124e78261110b565b90506124f5816000846129b7565b612500600083611c93565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461255091906145b9565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125f5816000846129bc565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361272d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612724906147b1565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161281e9190612c68565b60405180910390a3505050565b6128336129c1565b6000600660146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612877611c8b565b6040516128849190612dd9565b60405180910390a1565b612899848484611fe7565b6128a584848484612a0a565b6128e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128db90614843565b60405180910390fd5b50505050565b6128f26122b9565b6001600660146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612936611c8b565b6040516129439190612dd9565b60405180910390a1565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b505050565b6129c9611066565b612a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ff906148af565b60405180910390fd5b565b6000612a2b8473ffffffffffffffffffffffffffffffffffffffff16612b91565b15612b84578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a54611c8b565b8786866040518563ffffffff1660e01b8152600401612a769493929190614924565b6020604051808303816000875af1925050508015612ab257506040513d601f19601f82011682018060405250810190612aaf9190614985565b60015b612b34573d8060008114612ae2576040519150601f19603f3d011682016040523d82523d6000602084013e612ae7565b606091505b506000815103612b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2390614843565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b89565b600190505b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612bfd81612bc8565b8114612c0857600080fd5b50565b600081359050612c1a81612bf4565b92915050565b600060208284031215612c3657612c35612bbe565b5b6000612c4484828501612c0b565b91505092915050565b60008115159050919050565b612c6281612c4d565b82525050565b6000602082019050612c7d6000830184612c59565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612cbd578082015181840152602081019050612ca2565b60008484015250505050565b6000601f19601f8301169050919050565b6000612ce582612c83565b612cef8185612c8e565b9350612cff818560208601612c9f565b612d0881612cc9565b840191505092915050565b60006020820190508181036000830152612d2d8184612cda565b905092915050565b6000819050919050565b612d4881612d35565b8114612d5357600080fd5b50565b600081359050612d6581612d3f565b92915050565b600060208284031215612d8157612d80612bbe565b5b6000612d8f84828501612d56565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612dc382612d98565b9050919050565b612dd381612db8565b82525050565b6000602082019050612dee6000830184612dca565b92915050565b612dfd81612db8565b8114612e0857600080fd5b50565b600081359050612e1a81612df4565b92915050565b60008060408385031215612e3757612e36612bbe565b5b6000612e4585828601612e0b565b9250506020612e5685828601612d56565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f840112612e8557612e84612e60565b5b8235905067ffffffffffffffff811115612ea257612ea1612e65565b5b602083019150836020820283011115612ebe57612ebd612e6a565b5b9250929050565b60008083601f840112612edb57612eda612e60565b5b8235905067ffffffffffffffff811115612ef857612ef7612e65565b5b602083019150836020820283011115612f1457612f13612e6a565b5b9250929050565b60008060008060408587031215612f3557612f34612bbe565b5b600085013567ffffffffffffffff811115612f5357612f52612bc3565b5b612f5f87828801612e6f565b9450945050602085013567ffffffffffffffff811115612f8257612f81612bc3565b5b612f8e87828801612ec5565b925092505092959194509250565b60008083601f840112612fb257612fb1612e60565b5b8235905067ffffffffffffffff811115612fcf57612fce612e65565b5b602083019150836001820283011115612feb57612fea612e6a565b5b9250929050565b60008060006040848603121561300b5761300a612bbe565b5b600061301986828701612d56565b935050602084013567ffffffffffffffff81111561303a57613039612bc3565b5b61304686828701612f9c565b92509250509250925092565b60008060006060848603121561306b5761306a612bbe565b5b600061307986828701612e0b565b935050602061308a86828701612e0b565b925050604061309b86828701612d56565b9150509250925092565b600080604083850312156130bc576130bb612bbe565b5b60006130ca85828601612d56565b92505060206130db85828601612d56565b9150509250929050565b6130ee81612d35565b82525050565b60006040820190506131096000830185612dca565b61311660208301846130e5565b9392505050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61315a82612cc9565b810181811067ffffffffffffffff8211171561317957613178613122565b5b80604052505050565b600061318c612bb4565b90506131988282613151565b919050565b600067ffffffffffffffff8211156131b8576131b7613122565b5b6131c182612cc9565b9050602081019050919050565b82818337600083830152505050565b60006131f06131eb8461319d565b613182565b90508281526020810184848401111561320c5761320b61311d565b5b6132178482856131ce565b509392505050565b600082601f83011261323457613233612e60565b5b81356132448482602086016131dd565b91505092915050565b60006020828403121561326357613262612bbe565b5b600082013567ffffffffffffffff81111561328157613280612bc3565b5b61328d8482850161321f565b91505092915050565b6000602082840312156132ac576132ab612bbe565b5b60006132ba84828501612e0b565b91505092915050565b60006020820190506132d860008301846130e5565b92915050565b6132e781612c4d565b81146132f257600080fd5b50565b600081359050613304816132de565b92915050565b6000806040838503121561332157613320612bbe565b5b600061332f85828601612e0b565b9250506020613340858286016132f5565b9150509250929050565b600067ffffffffffffffff82111561336557613364613122565b5b61336e82612cc9565b9050602081019050919050565b600061338e6133898461334a565b613182565b9050828152602081018484840111156133aa576133a961311d565b5b6133b58482856131ce565b509392505050565b600082601f8301126133d2576133d1612e60565b5b81356133e284826020860161337b565b91505092915050565b6000806000806080858703121561340557613404612bbe565b5b600061341387828801612e0b565b945050602061342487828801612e0b565b935050604061343587828801612d56565b925050606085013567ffffffffffffffff81111561345657613455612bc3565b5b613462878288016133bd565b91505092959194509250565b6000806040838503121561348557613484612bbe565b5b600061349385828601612d56565b92505060206134a485828601612e0b565b9150509250929050565b600080604083850312156134c5576134c4612bbe565b5b60006134d385828601612e0b565b92505060206134e485828601612e0b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061353557607f821691505b602082108103613548576135476134ee565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006135aa602183612c8e565b91506135b58261354e565b604082019050919050565b600060208201905081810360008301526135d98161359d565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b600061363c603e83612c8e565b9150613647826135e0565b604082019050919050565b6000602082019050818103600083015261366b8161362f565b9050919050565b7f61646472657373657320616e6420616c6c6f77616e636573206d75737420626560008201527f2073616d65206c656e6774680000000000000000000000000000000000000000602082015250565b60006136ce602c83612c8e565b91506136d982613672565b604082019050919050565b600060208201905081810360008301526136fd816136c1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561374957613748612bbe565b5b6000613757848285016132f5565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061379a82612d35565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036137cc576137cb613760565b5b600182019050919050565b600081905092915050565b60006137ed82612c83565b6137f781856137d7565b9350613807818560208601612c9f565b80840191505092915050565b600061381f82846137e2565b915081905092915050565b7f746f6b656e2075726920616c7265616479207573656400000000000000000000600082015250565b6000613860601683612c8e565b915061386b8261382a565b602082019050919050565b6000602082019050818103600083015261388f81613853565b9050919050565b7f6e6f7420616c6c6f77656420746f2075706461746520746f6b656e2075726900600082015250565b60006138cc601f83612c8e565b91506138d782613896565b602082019050919050565b600060208201905081810360008301526138fb816138bf565b9050919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261396f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613932565b6139798683613932565b95508019841693508086168417925050509392505050565b6000819050919050565b60006139b66139b16139ac84612d35565b613991565b612d35565b9050919050565b6000819050919050565b6139d08361399b565b6139e46139dc826139bd565b84845461393f565b825550505050565b600090565b6139f96139ec565b613a048184846139c7565b505050565b5b81811015613a2857613a1d6000826139f1565b600181019050613a0a565b5050565b601f821115613a6d57613a3e8161390d565b613a4784613922565b81016020851015613a56578190505b613a6a613a6285613922565b830182613a09565b50505b505050565b600082821c905092915050565b6000613a9060001984600802613a72565b1980831691505092915050565b6000613aa98383613a7f565b9150826002028217905092915050565b613ac38383613902565b67ffffffffffffffff811115613adc57613adb613122565b5b613ae6825461351d565b613af1828285613a2c565b6000601f831160018114613b205760008415613b0e578287013590505b613b188582613a9d565b865550613b80565b601f198416613b2e8661390d565b60005b82811015613b5657848901358255600182019150602085019450602081019050613b31565b86831015613b735784890135613b6f601f891682613a7f565b8355505b6001600288020188555050505b50505050505050565b6000613b9583856137d7565b9350613ba28385846131ce565b82840190509392505050565b6000613bbb828486613b89565b91508190509392505050565b60008190508160005260206000209050919050565b60008154613be98161351d565b613bf38186612c8e565b94506001821660008114613c0e5760018114613c2457613c57565b60ff198316865281151560200286019350613c57565b613c2d85613bc7565b60005b83811015613c4f57815481890152600182019150602081019050613c30565b808801955050505b50505092915050565b6000613c6c8385612c8e565b9350613c798385846131ce565b613c8283612cc9565b840190509392505050565b6000606082019050613ca260008301876130e5565b8181036020830152613cb48186613bdc565b90508181036040830152613cc9818486613c60565b905095945050505050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000613d30602e83612c8e565b9150613d3b82613cd4565b604082019050919050565b60006020820190508181036000830152613d5f81613d23565b9050919050565b7f6e6f6e6578697374616e7420746f6b656e000000000000000000000000000000600082015250565b6000613d9c601183612c8e565b9150613da782613d66565b602082019050919050565b60006020820190508181036000830152613dcb81613d8f565b9050919050565b6000613ddd82612d35565b9150613de883612d35565b9250828202613df681612d35565b91508282048414831517613e0d57613e0c613760565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e4e82612d35565b9150613e5983612d35565b925082613e6957613e68613e14565b5b828204905092915050565b7f63616c6c6572206e6f7420616c6c6f776564206d696e74657200000000000000600082015250565b6000613eaa601983612c8e565b9150613eb582613e74565b602082019050919050565b60006020820190508181036000830152613ed981613e9d565b9050919050565b613ee982612c83565b67ffffffffffffffff811115613f0257613f01613122565b5b613f0c825461351d565b613f17828285613a2c565b600060209050601f831160018114613f4a5760008415613f38578287015190505b613f428582613a9d565b865550613faa565b601f198416613f588661390d565b60005b82811015613f8057848901518255600182019150602085019450602081019050613f5b565b86831015613f9d5784890151613f99601f891682613a7f565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000613fe8601883612c8e565b9150613ff382613fb2565b602082019050919050565b6000602082019050818103600083015261401781613fdb565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b600061407a602983612c8e565b91506140858261401e565b604082019050919050565b600060208201905081810360008301526140a98161406d565b9050919050565b600081905092915050565b50565b60006140cb6000836140b0565b91506140d6826140bb565b600082019050919050565b60006140ec826140be565b9150819050919050565b600081519050614105816132de565b92915050565b60006020828403121561412157614120612bbe565b5b600061412f848285016140f6565b91505092915050565b7f726f79616c7479206f7574206f662072616e6765000000000000000000000000600082015250565b600061416e601483612c8e565b915061417982614138565b602082019050919050565b6000602082019050818103600083015261419d81614161565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614200602683612c8e565b915061420b826141a4565b604082019050919050565b6000602082019050818103600083015261422f816141f3565b9050919050565b7f6f6e6c792063726561746f720000000000000000000000000000000000000000600082015250565b600061426c600c83612c8e565b915061427782614236565b602082019050919050565b6000602082019050818103600083015261429b8161425f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142d8602083612c8e565b91506142e3826142a2565b602082019050919050565b60006020820190508181036000830152614307816142cb565b9050919050565b7f496e636f72726563742055524920707265666978206c656e6774680000000000600082015250565b6000614344601b83612c8e565b915061434f8261430e565b602082019050919050565b6000602082019050818103600083015261437381614337565b9050919050565b60008190508160005260206000209050919050565b6000815461439c8161351d565b6143a681866140b0565b945060018216600081146143c157600181146143d657614409565b60ff1983168652811515820286019350614409565b6143df8561437a565b60005b83811015614401578154818901526001820191506020810190506143e2565b838801955050505b50505092915050565b600061441e828461438f565b915081905092915050565b7f496e636f72726563742055524920707265666978000000000000000000000000600082015250565b600061445f601483612c8e565b915061446a82614429565b602082019050919050565b6000602082019050818103600083015261448e81614452565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006144f1602583612c8e565b91506144fc82614495565b604082019050919050565b60006020820190508181036000830152614520816144e4565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614583602483612c8e565b915061458e82614527565b604082019050919050565b600060208201905081810360008301526145b281614576565b9050919050565b60006145c482612d35565b91506145cf83612d35565b92508282039050818111156145e7576145e6613760565b5b92915050565b60006145f882612d35565b915061460383612d35565b925082820190508082111561461b5761461a613760565b5b92915050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000614657601083612c8e565b915061466282614621565b602082019050919050565b600060208201905081810360008301526146868161464a565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006146c3602083612c8e565b91506146ce8261468d565b602082019050919050565b600060208201905081810360008301526146f2816146b6565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061472f601c83612c8e565b915061473a826146f9565b602082019050919050565b6000602082019050818103600083015261475e81614722565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061479b601983612c8e565b91506147a682614765565b602082019050919050565b600060208201905081810360008301526147ca8161478e565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061482d603283612c8e565b9150614838826147d1565b604082019050919050565b6000602082019050818103600083015261485c81614820565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000614899601483612c8e565b91506148a482614863565b602082019050919050565b600060208201905081810360008301526148c88161488c565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006148f6826148cf565b61490081856148da565b9350614910818560208601612c9f565b61491981612cc9565b840191505092915050565b60006080820190506149396000830187612dca565b6149466020830186612dca565b61495360408301856130e5565b818103606083015261496581846148eb565b905095945050505050565b60008151905061497f81612bf4565b92915050565b60006020828403121561499b5761499a612bbe565b5b60006149a984828501614970565b9150509291505056fea2646970667358221220fccadec4765f6489645d5376d40a5cbaf35be21a7cfffe47f920ff2aaf1583cd64736f6c6343000811003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000005dc0000000000000000000000003433361e17d06fce4adbc596995cce73cc241bab000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000064156415441520000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000641564154415200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007697066733a2f2f00000000000000000000000000000000000000000000000000