6080604052348015600e575f80fd5b5060156019565b60d3565b5f54610100900460ff161560835760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff9081161460d1575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b614e87806100e05f395ff3fe608060405234801561000f575f80fd5b50600436106103d8575f3560e01c80637ecebe001161020f578063ba0876521161012e578063d505accf116100c3578063e5a5e67411610093578063eb3beb2911610079578063eb3beb2914610961578063ef8b30f714610889578063f2888dbb1461097f575f80fd5b8063e5a5e67414610514578063e7c2a60814610959575f80fd5b8063d505accf146108e8578063d547741f146108fb578063d905777e1461090e578063dd62ed3e14610921575f80fd5b8063c80ef110116100fe578063c80ef1101461089c578063cdac52ed146108af578063ce23eb3c146108c2578063ce96cb77146108d5575f80fd5b8063ba08765214610863578063c0c53b8b14610876578063c63d75b6146105fe578063c6e6f59214610889575f80fd5b806395d89b41116101a4578063a9059cbb11610174578063a9059cbb14610817578063b37fd1901461082a578063b3d7f6b91461083d578063b460af9414610850575f80fd5b806395d89b41146107e2578063a0776b82146107ea578063a217fddf146107fd578063a457c2d714610804575f80fd5b80638da5cb5b116101df5780638da5cb5b1461077357806391d14854146107845780639343d9e1146107bc57806394bf804d146107cf575f80fd5b80637ecebe001461070b57806384b0196e1461071e5780638580cf76146107395780638593d03314610760575f80fd5b806335269315116102fb5780634cdad506116102905780636e553f65116102605780636e553f65146106ad57806370a08231146106c05780637313ee5a146106e857806375829def146106f8575f80fd5b80634cdad506146104c9578063537df3b61461066b57806362b199c51461067e57806369615a4c146106a5575f80fd5b806339509351116102cb57806339509351146105eb578063402d267d146105fe578063410b24241461063157806344337ea114610658575f80fd5b806335269315146105935780633644e515146105aa57806336568abe146105b257806338d52e0f146105c5575f80fd5b80630e18b6811161037157806323b872dd1161034157806323b872dd1461053c578063248a9ca31461054f5780632f2ff15d14610571578063313ce56714610584575f80fd5b80630e18b6811461050257806318160ddd1461050c5780631e9049cf146105145780632095093314610532575f80fd5b806306fdde03116103ac57806306fdde03146104b457806307a2d13a146104c9578063095ea7b3146104dc5780630a28a477146104ef575f80fd5b8062728f76146103dc57806301320fe2146103f957806301e1d1141461048957806301ffc9a714610491575b5f80fd5b6103e66101965481565b6040519081526020015b60405180910390f35b61045061040736600461428c565b6101996020525f90815260409020546cffffffffffffffffffffffffff8116906d0100000000000000000000000000900472ffffffffffffffffffffffffffffffffffffff1682565b604080516cffffffffffffffffffffffffff909316835272ffffffffffffffffffffffffffffffffffffff9091166020830152016103f0565b6103e6610992565b6104a461049f3660046142a7565b610a38565b60405190151581526020016103f0565b6104bc610ad0565b6040516103f09190614351565b6103e66104d7366004614363565b610b60565b6104a46104ea36600461437a565b610b6b565b6103e66104fd366004614363565b610b82565b61050a610b8e565b005b60cd546103e6565b61051e6276a70081565b60405162ffffff90911681526020016103f0565b6103e66101975481565b6104a461054a3660046143a4565b610bde565b6103e661055d366004614363565b5f9081526065602052604090206001015490565b61050a61057f3660046143e2565b610c03565b604051601281526020016103f0565b6101985461051e906301000000900462ffffff1681565b6103e6610c55565b61050a6105c03660046143e2565b610c5e565b610164546001600160a01b03165b6040516001600160a01b0390911681526020016103f0565b6104a46105f936600461437a565b610c90565b6103e661060c36600461428c565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90565b6103e67ff988e4fb62b8e14f4820fed03192306ddf4d7dbfa215595ba1c6ba4b76b369ee81565b61050a61066636600461428c565b610cce565b61050a61067936600461428c565b610d96565b6103e67f548c7f0307ab2a7ea894e5c7e8c5353cc750bb9385ee2e945f189a9a83daa8ed81565b6103e6610dfd565b6103e66106bb3660046143e2565b610e07565b6103e66106ce36600461428c565b6001600160a01b03165f90815260cb602052604090205490565b6101985461051e9062ffffff1681565b61050a61070636600461428c565b610e2e565b6103e661071936600461428c565b610ee4565b610726610f02565b6040516103f09796959493929190614410565b6103e67fbeec13769b5f410b0584f69811bfd923818456d5edcf426b0e31cf90eed7a3f681565b61050a61076e3660046144c2565b610fbf565b6097546001600160a01b03166105d3565b6104a46107923660046143e2565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6103e66107ca366004614363565b610fda565b6103e66107dd3660046143e2565b6111af565b6104bc6111c8565b61050a6107f83660046144e4565b6111d7565b6103e65f81565b6104a461081236600461437a565b611388565b6104a461082536600461437a565b61143c565b61050a610838366004614510565b611449565b6103e661084b366004614363565b611523565b6103e661085e36600461454f565b61152f565b6103e661087136600461454f565b61158b565b61050a610884366004614583565b6115df565b6103e6610897366004614363565b61194b565b61050a6108aa366004614363565b611956565b6103e66108bd366004614363565b611a35565b61050a6108d03660046144c2565b611c01565b6103e66108e336600461428c565b611cd3565b61050a6108f63660046145b0565b611cf5565b61050a6109093660046143e2565b611e56565b6103e661091c36600461428c565b611ea2565b6103e661092f3660046144e4565b6001600160a01b039182165f90815260cc6020908152604080832093909416825291909152205490565b6103e6611ebf565b610198546105d390660100000000000090046001600160a01b031681565b61050a61098d36600461428c565b611f17565b5f61099b611ebf565b610164546001600160a01b03166040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610a05573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a299190614621565b610a339190614665565b905090565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b000000000000000000000000000000000000000000000000000000001480610aca57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b606060ce8054610adf90614678565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0b90614678565b8015610b565780601f10610b2d57610100808354040283529160200191610b56565b820191905f5260205f20905b815481529060010190602001808311610b3957829003601f168201915b5050505050905090565b5f610aca825f612086565b5f33610b788185856120be565b5060019392505050565b5f610aca826001612215565b6098546001600160a01b03163314610bd2576040517f058d9a1b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bdc5f33612244565b565b5f33610beb8582856122e3565b610bf685858561238c565b60019150505b9392505050565b5f610c0d81612589565b8280610c45576040517f6317a0fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c4f8484612244565b50505050565b5f610a33612593565b6040517ff50a3b5200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f81815260cc602090815260408083206001600160a01b0387168452909152812054909190610b789082908690610cc99087906146c3565b6120be565b610cd661259c565b7ff988e4fb62b8e14f4820fed03192306ddf4d7dbfa215595ba1c6ba4b76b369ee610d0081612589565b81610d136097546001600160a01b031690565b6001600160a01b0316816001600160a01b031603610d5d576040517ffe7c574000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d877f548c7f0307ab2a7ea894e5c7e8c5353cc750bb9385ee2e945f189a9a83daa8ed84612244565b5050610d936001609955565b50565b610d9e61259c565b7ff988e4fb62b8e14f4820fed03192306ddf4d7dbfa215595ba1c6ba4b76b369ee610dc881612589565b610df27f548c7f0307ab2a7ea894e5c7e8c5353cc750bb9385ee2e945f189a9a83daa8ed836125fc565b50610d936001609955565b5f610a333361269b565b5f610e16565b60405180910390fd5b5f610e208461194b565b9050610bfc338486846126c3565b5f610e3881612589565b336001600160a01b03831603610e7a576040517f6317a0fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b609880547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03848116918217909255609754604051919216907fefdcbba819467e00b0262c12892dda980bac68580b72178e57a162368b808766905f90a35050565b6001600160a01b0381165f9081526101316020526040812054610aca565b5f6060805f805f606060fd545f801b148015610f1e575060fe54155b610f6a5760405162461bcd60e51b815260206004820152601560248201527f4549503731323a20556e696e697469616c697a656400000000000000000000006044820152606401610e0d565b610f7261275f565b610f7a61276e565b604080515f808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b610fc761259c565b5f610fd181612589565b610df28261277e565b610198545f906301000000900462ffffff168103611024576040517ff50a3b5200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61102d33611ea2565b821115611066576040517f6334538800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61106f82610b60565b6101985490915061108c906301000000900462ffffff1642614703565b335f9081526101996020526040902080547fffffffffffffffffffffffffffffffffffffff00000000000000000000000000166cffffffffffffffffffffffffff9290921691909117808255829190600d9061110f9084906d0100000000000000000000000000900472ffffffffffffffffffffffffffffffffffffff16614728565b92506101000a81548172ffffffffffffffffffffffffffffffffffffff021916908372ffffffffffffffffffffffffffffffffffffff16021790555061116e3361019860069054906101000a90046001600160a01b031633848661287c565b604080518281526020810184905233917fa4b3d92c67ba96e840c4888c41c81bb378420dfa35fbdcec3c0581372fb0606891015b60405180910390a2919050565b5f806111ba84611523565b9050610bfc338483876126c3565b606060cf8054610adf90614678565b6111df61259c565b5f6111e981612589565b6001600160a01b0383165f9081527fbee8f72ae935e502cbab6b28b5be1596e5612563ff00d9f9545bf840dad92e10602052604090205460ff16158061126557506001600160a01b0382165f9081527fbee8f72ae935e502cbab6b28b5be1596e5612563ff00d9f9545bf840dad92e10602052604090205460ff165b1561129c576040517ff50a3b5200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0383165f90815260cb6020526040812054908190036112ee576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6112f882610b60565b905061130485836129d2565b6001600160a01b0384166113205761131b81612b46565b61132a565b61132a8483612b92565b836001600160a01b0316856001600160a01b03167f876c16d00405860345e61598200d0bca4ba4a4aadc6de7a752860eed93f6d8c48460405161136f91815260200190565b60405180910390a35050506113846001609955565b5050565b335f81815260cc602090815260408083206001600160a01b0387168452909152812054909190838110156114245760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610e0d565b61143182868684036120be565b506001949350505050565b5f33610b7881858561238c565b61145161259c565b5f61145b81612589565b610164546001600160a01b03166001600160a01b0316846001600160a01b0316036114b2576040517fc1ab6dc100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114c66001600160a01b0385168385612c5c565b816001600160a01b0316846001600160a01b03167f77023e19c7343ad491fd706c36335ca0e738340a91f29b1fd81e2673d44896c48560405161150b91815260200190565b60405180910390a35061151e6001609955565b505050565b5f610aca826001612086565b610198545f906301000000900462ffffff1615611578576040517ff50a3b5200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611583848484612d23565b949350505050565b610198545f906301000000900462ffffff16156115d4576040517ff50a3b5200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611583848484612d95565b5f54610100900460ff16158080156115fd57505f54600160ff909116105b806116165750303b15801561161657505f5460ff166001145b6116885760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610e0d565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156116e4575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6117586040518060400160405280600a81526020017f5374616b656420454e41000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f73454e4100000000000000000000000000000000000000000000000000000000815250612e07565b61176184612e8d565b61179f6040518060400160405280600481526020017f73454e4100000000000000000000000000000000000000000000000000000000815250612f12565b6117a7612fcd565b6001600160a01b03821615806117c457506001600160a01b038316155b806117d657506001600160a01b038416155b1561180d576040517ff6b2911f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b308460405161181b9061426b565b6001600160a01b03928316815291166020820152604001604051809103905ff08015801561184b573d5f803e3d5ffd5b5061019860066101000a8154816001600160a01b0302191690836001600160a01b0316021790555061187f62093a8061277e565b6118a97fbeec13769b5f410b0584f69811bfd923818456d5edcf426b0e31cf90eed7a3f684612244565b6118b35f83612244565b61019880547fffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff1665093a800000001790558015610c4f575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b5f610aca825f612215565b61195e61259c565b7fbeec13769b5f410b0584f69811bfd923818456d5edcf426b0e31cf90eed7a3f661198881612589565b81805f036119c2576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119cb83612b46565b6119f53330856119e4610164546001600160a01b031690565b6001600160a01b0316929190613051565b6040518381527fbb28dd7cd6be6f61828ea9158a04c5182c716a946a6d2f31f4864edb87471aa6906020015b60405180910390a15050610d936001609955565b610198545f906301000000900462ffffff168103611a7f576040517ff50a3b5200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a8833611cd3565b821115611ac1576040517fdf53dde200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611aca82610b82565b61019854909150611ae7906301000000900462ffffff1642614703565b335f9081526101996020526040902080547fffffffffffffffffffffffffffffffffffffff00000000000000000000000000166cffffffffffffffffffffffffff9290921691909117808255839190600d90611b6a9084906d0100000000000000000000000000900472ffffffffffffffffffffffffffffffffffffff16614728565b92506101000a81548172ffffffffffffffffffffffffffffffffffffff021916908372ffffffffffffffffffffffffffffffffffffff160217905550611bc93361019860069054906101000a90046001600160a01b031633858561287c565b604080518381526020810183905233917fa4b3d92c67ba96e840c4888c41c81bb378420dfa35fbdcec3c0581372fb0606891016111a2565b611c0961259c565b5f611c1381612589565b6276a70062ffffff83161115611c55576040517fe8ebb09a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610198805462ffffff84811663010000009081027fffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff8416179384905560408051938290048316808552919094049091166020830152917f180eacdf7dbaeecaa983d93173b4285db2f2c0de0044697e1f932bbbb73dcaa69101611a21565b6001600160a01b0381165f90815260cb6020526040812054610aca905f612086565b83421115611d455760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610e0d565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888611d738c61269b565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f611dcd826130a2565b90505f611ddc828787876130e9565b9050896001600160a01b0316816001600160a01b031614611e3f5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610e0d565b611e4a8a8a8a6120be565b50505050505050505050565b5f611e6081612589565b8280611e98576040517f6317a0fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c4f84846125fc565b6001600160a01b0381165f90815260cb6020526040812054610aca565b5f806101975442611ed09190614665565b6101985490915062ffffff168110611ee9575f91505090565b610198546101965462ffffff90911682810391611f069083614753565b611f109190614797565b9250505090565b611f1f61259c565b335f90815261019960205260409020805472ffffffffffffffffffffffffffffffffffffff6d0100000000000000000000000000820416906cffffffffffffffffffffffffff1642101580611f815750610198546301000000900462ffffff16155b15612054575f8255610198546040517ff3fef3a30000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301526024820184905266010000000000009092049091169063f3fef3a3906044015f604051808303815f87803b158015611ff9575f80fd5b505af115801561200b573d5f803e3d5ffd5b50506040518381526001600160a01b03861692503391507f390b1276974b9463e5d66ab10df69b6f3d7b930eb066a0e66df327edd2cc811c9060200160405180910390a3610d87565b6040517fe8ebb09a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610bfc612092610992565b61209d9060016146c3565b6120a85f600a6148f0565b60cd546120b591906146c3565b8591908561310f565b6001600160a01b0383166121395760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610e0d565b6001600160a01b0382166121b55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610e0d565b6001600160a01b038381165f81815260cc602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f610bfc61222482600a6148f0565b60cd5461223191906146c3565b612239610992565b6120b59060016146c3565b816122d9576097546040516001600160a01b038084169216907ff8ccb027dfcd135e000e9d45e6cc2d662578a8825d4c45b5e32e0adf67e79ec6905f90a3609754612299905f906001600160a01b03166125fc565b609780546001600160a01b0383167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179091556098805490911690555b611384828261316a565b6001600160a01b038381165f90815260cc60209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c4f578181101561237f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610e0d565b610c4f84848484036120be565b6001600160a01b0383166124085760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610e0d565b6001600160a01b0382166124845760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610e0d565b61248f838383613228565b6001600160a01b0383165f90815260cb60205260409020548181101561251d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610e0d565b6001600160a01b038085165f81815260cb602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061257c9086815260200190565b60405180910390a3610c4f565b610d938133613386565b5f610a33613418565b6002609954036125ee5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610e0d565b6002609955565b6001609955565b5f8281526065602090815260408083206001600160a01b038516845290915290205460ff1615611384575f8281526065602090815260408083206001600160a01b038516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0381165f908152610131602052604090208054600181018255905b50919050565b6126cb61259c565b81805f03612705576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81805f0361273f576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61274b8686868661348b565b61275361350a565b5050610c4f6001609955565b606060ff8054610adf90614678565b60606101008054610adf90614678565b5f612787611ebf565b11156127bf576040517f010133de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6276a70062ffffff82161115612801576040517fca6075df00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610198546040805162ffffff928316815291831660208301527f1d5e587d799342f659bb468470d4b37b49fc0509536bf48b24518a193af53872910160405180910390a161019880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000001662ffffff92909216919091179055565b61288461259c565b81805f036128be576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81805f036128f8576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0385165f9081527fbee8f72ae935e502cbab6b28b5be1596e5612563ff00d9f9545bf840dad92e10602052604090205460ff168061297357506001600160a01b0386165f9081527fbee8f72ae935e502cbab6b28b5be1596e5612563ff00d9f9545bf840dad92e10602052604090205460ff165b156129aa576040517ff50a3b5200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6129b78787878787613563565b6129bf61350a565b50506129cb6001609955565b5050505050565b6001600160a01b038216612a4e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610e0d565b612a59825f83613228565b6001600160a01b0382165f90815260cb602052604090205481811015612ae75760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610e0d565b6001600160a01b0383165f81815260cb60209081526040808320868603905560cd80548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b5f612b4f611ebf565b1115612b87576040517f010133de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610196554261019755565b6001600160a01b038216612be85760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610e0d565b612bf35f8383613228565b8060cd5f828254612c0491906146c3565b90915550506001600160a01b0382165f81815260cb60209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6040516001600160a01b03831660248201526044810182905261151e9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613610565b5f612d2d82611cd3565b841115612d7c5760405162461bcd60e51b815260206004820152601f60248201527f455243343632363a207769746864726177206d6f7265207468616e206d6178006044820152606401610e0d565b5f612d8685610b82565b9050611583338585888561287c565b5f612d9f82611ea2565b841115612dee5760405162461bcd60e51b815260206004820152601d60248201527f455243343632363a2072656465656d206d6f7265207468616e206d61780000006044820152606401610e0d565b5f612df885610b60565b9050611583338585848961287c565b5f54610100900460ff16612e835760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610e0d565b61138482826136f6565b5f54610100900460ff16612f095760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610e0d565b610d938161378b565b5f54610100900460ff16612f8e5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610e0d565b610d93816040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506138a6565b5f54610100900460ff166130495760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610e0d565b610bdc61394a565b6040516001600160a01b0380851660248301528316604482015260648101829052610c4f9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401612ca1565b5f610aca6130ae612593565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b5f805f6130f8878787876139c6565b9150915061310581613aa1565b5095945050505050565b5f8061311c868686613c05565b90506001836002811115613132576131326148fe565b14801561314e57505f84806131495761314961476a565b868809115b156131615761315e6001826146c3565b90505b95945050505050565b5f8281526065602090815260408083206001600160a01b038516845290915290205460ff16611384575f8281526065602090815260408083206001600160a01b0385168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556131e43390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b335f9081527fbee8f72ae935e502cbab6b28b5be1596e5612563ff00d9f9545bf840dad92e10602052604090205460ff1615613290576040517ff50a3b5200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0383165f9081527fbee8f72ae935e502cbab6b28b5be1596e5612563ff00d9f9545bf840dad92e10602052604090205460ff1680156132de57506001600160a01b03821615155b15613315576040517ff50a3b5200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f9081527fbee8f72ae935e502cbab6b28b5be1596e5612563ff00d9f9545bf840dad92e10602052604090205460ff161561151e576040517ff50a3b5200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526065602090815260408083206001600160a01b038516845290915290205460ff16611384576133b881613d11565b6133c3836020613d23565b6040516020016133d492919061492b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262461bcd60e51b8252610e0d91600401614351565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f613442613f46565b61344a613f9e565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b610164546134a4906001600160a01b0316853085613051565b6134ae8382612b92565b826001600160a01b0316846001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d784846040516134fc929190918252602082015260400190565b60405180910390a350505050565b5f61351460cd5490565b90505f8111801561352c5750670de0b6b3a764000081105b15610d93576040517fb4b836aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316856001600160a01b031614613587576135878386836122e3565b61359183826129d2565b610164546135a9906001600160a01b03168584612c5c565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8585604051613601929190918252602082015260400190565b60405180910390a45050505050565b5f613664826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613fce9092919063ffffffff16565b905080515f148061368457508080602001905181019061368491906149ab565b61151e5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610e0d565b5f54610100900460ff166137725760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610e0d565b60ce61377e8382614a0e565b5060cf61151e8282614a0e565b5f54610100900460ff166138075760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610e0d565b5f8061381283613fdc565b9150915081613822576012613824565b805b61016480546001600160a01b039095167fffffffffffffffffffffffff000000000000000000000000000000000000000060ff939093167401000000000000000000000000000000000000000002929092167fffffffffffffffffffffff00000000000000000000000000000000000000000090951694909417179092555050565b5f54610100900460ff166139225760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610e0d565b60ff61392e8382614a0e565b5061010061393c8282614a0e565b50505f60fd81905560fe5550565b5f54610100900460ff166125f55760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610e0d565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156139fb57505f90506003613a98565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613a4c573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001519150506001600160a01b038116613a92575f60019250925050613a98565b91505f90505b94509492505050565b5f816004811115613ab457613ab46148fe565b03613abc5750565b6001816004811115613ad057613ad06148fe565b03613b1d5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610e0d565b6002816004811115613b3157613b316148fe565b03613b7e5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610e0d565b6003816004811115613b9257613b926148fe565b03610d935760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610e0d565b5f80807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff858709858702925082811083820303915050805f03613c5b57838281613c5157613c5161476a565b0492505050610bfc565b808411613caa5760405162461bcd60e51b815260206004820152601560248201527f4d6174683a206d756c446976206f766572666c6f7700000000000000000000006044820152606401610e0d565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b6060610aca6001600160a01b03831660145b60605f613d31836002614753565b613d3c9060026146c3565b67ffffffffffffffff811115613d5457613d546146d6565b6040519080825280601f01601f191660200182016040528015613d7e576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f81518110613db457613db4614b25565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110613e1657613e16614b25565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f613e50846002614753565b613e5b9060016146c3565b90505b6001811115613ef7577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110613e9c57613e9c614b25565b1a60f81b828281518110613eb257613eb2614b25565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060049490941c93613ef081614b52565b9050613e5e565b508315610bfc5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610e0d565b5f80613f5061275f565b805190915015613f67578051602090910120919050565b60fd548015613f765792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b5f80613fa861276e565b805190915015613fbf578051602090910120919050565b60fe548015613f765792915050565b606061158384845f856140e0565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f313ce5670000000000000000000000000000000000000000000000000000000017905290515f918291829182916001600160a01b0387169161405091614b86565b5f60405180830381855afa9150503d805f8114614088576040519150601f19603f3d011682016040523d82523d5f602084013e61408d565b606091505b50915091508180156140a157506020815110155b156140d4575f818060200190518101906140bb9190614621565b905060ff81116140d2576001969095509350505050565b505b505f9485945092505050565b6060824710156141585760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610e0d565b5f80866001600160a01b031685876040516141739190614b86565b5f6040518083038185875af1925050503d805f81146141ad576040519150601f19603f3d011682016040523d82523d5f602084013e6141b2565b606091505b50915091506141c3878383876141ce565b979650505050505050565b6060831561423c5782515f03614235576001600160a01b0385163b6142355760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610e0d565b5081611583565b61158383838151156142515781518083602001fd5b8060405162461bcd60e51b8152600401610e0d9190614351565b6102b080614ba283390190565b6001600160a01b0381168114610d93575f80fd5b5f6020828403121561429c575f80fd5b8135610bfc81614278565b5f602082840312156142b7575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610bfc575f80fd5b5f5b838110156143005781810151838201526020016142e8565b50505f910152565b5f815180845261431f8160208601602086016142e6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f610bfc6020830184614308565b5f60208284031215614373575f80fd5b5035919050565b5f806040838503121561438b575f80fd5b823561439681614278565b946020939093013593505050565b5f805f606084860312156143b6575f80fd5b83356143c181614278565b925060208401356143d181614278565b929592945050506040919091013590565b5f80604083850312156143f3575f80fd5b82359150602083013561440581614278565b809150509250929050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201525f61444a60e0830189614308565b828103604084015261445c8189614308565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b818110156144b1578351835260209384019390920191600101614493565b50909b9a5050505050505050505050565b5f602082840312156144d2575f80fd5b813562ffffff81168114610bfc575f80fd5b5f80604083850312156144f5575f80fd5b823561450081614278565b9150602083013561440581614278565b5f805f60608486031215614522575f80fd5b833561452d81614278565b925060208401359150604084013561454481614278565b809150509250925092565b5f805f60608486031215614561575f80fd5b83359250602084013561457381614278565b9150604084013561454481614278565b5f805f60608486031215614595575f80fd5b83356145a081614278565b9250602084013561457381614278565b5f805f805f805f60e0888a0312156145c6575f80fd5b87356145d181614278565b965060208801356145e181614278565b95506040880135945060608801359350608088013560ff81168114614604575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b5f60208284031215614631575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b81810381811115610aca57610aca614638565b600181811c9082168061468c57607f821691505b6020821081036126bd577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b80820180821115610aca57610aca614638565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6cffffffffffffffffffffffffff8181168382160190811115610aca57610aca614638565b72ffffffffffffffffffffffffffffffffffffff8181168382160190811115610aca57610aca614638565b8082028115828204841417610aca57610aca614638565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f826147ca577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b6001815b600184111561480a578085048111156147ee576147ee614638565b60018416156147fc57908102905b60019390931c9280026147d3565b935093915050565b5f8261482057506001610aca565b8161482c57505f610aca565b8160018114614842576002811461484c57614868565b6001915050610aca565b60ff84111561485d5761485d614638565b50506001821b610aca565b5060208310610133831016604e8410600b841016171561488b575081810a610aca565b6148b67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846147cf565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156148e8576148e8614638565b029392505050565b5f610bfc60ff841683614812565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f83516149628160178501602088016142e6565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000601791840191820152835161499f8160288401602088016142e6565b01602801949350505050565b5f602082840312156149bb575f80fd5b81518015158114610bfc575f80fd5b601f82111561151e57805f5260205f20601f840160051c810160208510156149ef5750805b601f840160051c820191505b818110156129cb575f81556001016149fb565b815167ffffffffffffffff811115614a2857614a286146d6565b614a3c81614a368454614678565b846149ca565b6020601f821160018114614a8d575f8315614a575750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b1784556129cb565b5f848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015614ada5787850151825560209485019460019092019101614aba565b5084821015614b1657868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81614b6057614b60614638565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b5f8251614b978184602087016142e6565b919091019291505056fe60c0604052348015600e575f80fd5b506040516102b03803806102b0833981016040819052602b91605b565b6001600160a01b039182166080521660a0526087565b80516001600160a01b03811681146056575f80fd5b919050565b5f8060408385031215606b575f80fd5b6072836041565b9150607e602084016041565b90509250929050565b60805160a05161020a6100a65f395f60fd01525f605a015261020a5ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063f3fef3a31461002d575b5f80fd5b61004061003b36600461016c565b610042565b005b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146100b1576040517f17dd114500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af1158015610143573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061016791906101ae565b505050565b5f806040838503121561017d575f80fd5b823573ffffffffffffffffffffffffffffffffffffffff811681146101a0575f80fd5b946020939093013593505050565b5f602082840312156101be575f80fd5b815180151581146101cd575f80fd5b939250505056fea2646970667358221220a97c7d05d6167ff346094b14f8cf0ac9ac519e86f3f33f3f733de9da7db9489464736f6c634300081a0033a26469706673582212205fbb29ff449170f9e829bbbd59dc8874d2a7cdc525d9d4b20c02965a0b97855964736f6c634300081a0033