60806040523480156200001157600080fd5b5060405162005cf838038062005cf8833981810160405260608110156200003757600080fd5b5080516020808301516040938401516001600160a01b038085166000818152600c8652878120805460ff1916600190811790915581548487166001600160a01b031991821617909255600d80549486169490921693909317905586519081529384015284519394919390928592859285927fb21eb88b4e33b3f1281830a7178d74d8aa73220416215726b68ae23d539515cb92908290030190a1505050505050615c1180620000e76000396000f3fe608060405234801561001057600080fd5b50600436106102fe5760003560e01c80638b58c5691161019c578063bd9ff41b116100ee578063e985e9c511610097578063f0bc00d811610071578063f0bc00d814610d72578063f242432a14610eb6578063ff23be5314610f4b576102fe565b8063e985e9c514610c61578063eb8928e114610c8f578063eeb5a5d114610d3a576102fe565b8063c87b56dd116100c8578063c87b56dd14610c01578063d402756e14610c1e578063dc5074af14610c3b576102fe565b8063bd9ff41b14610b1c578063c50a4eb914610b39578063c7778baa14610be4576102fe565b8063a22cb46511610150578063b666923c1161012a578063b666923c146109f0578063b88d4fde14610a28578063b9b75ebc14610aee576102fe565b8063a22cb46514610971578063ac9fe4211461099f578063b390c0ab146109cd576102fe565b80639470f3cb116101815780639470f3cb1461092457806395d89b41146109615780639bc88b9c14610969576102fe565b80638b58c569146108e15780638f283970146108fe576102fe565b80632eb2c2d611610255578063589a1743116102095780636e9960c3116101e35780636e9960c31461088557806370a082311461088d5780638a04af6a146108b3576102fe565b8063589a1743146108255780636352211e14610842578063654b748a1461085f576102fe565b80634af85d121161023a5780634af85d12146106c15780634c4d07e7146106ed5780634e1273f414610713576102fe565b80632eb2c2d61461055e57806342842e0e1461068b576102fe565b8063095ea7b3116102b757806323b872dd1161029157806323b872dd146104d55780632b9917461461050b5780632e712b4614610541576102fe565b8063095ea7b31461045a5780630e89341c14610486578063124d91e5146104a3576102fe565b8063049476df116102e8578063049476df1461037c57806306fdde03146103a4578063081812fc14610421576102fe565b8062fdd58e1461030357806301ffc9a714610341575b600080fd5b61032f6004803603604081101561031957600080fd5b506001600160a01b038135169060200135610f81565b60408051918252519081900360200190f35b6103686004803603602081101561035757600080fd5b50356001600160e01b031916611011565b604080519115158252519081900360200190f35b6103a26004803603602081101561039257600080fd5b50356001600160a01b0316611118565b005b6103ac6111d8565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103e65781810151838201526020016103ce565b50505050905090810190601f1680156104135780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61043e6004803603602081101561043757600080fd5b5035611210565b604080516001600160a01b039092168252519081900360200190f35b6103a26004803603604081101561047057600080fd5b506001600160a01b038135169060200135611294565b6103ac6004803603602081101561049c57600080fd5b503561140a565b6103a2600480360360608110156104b957600080fd5b506001600160a01b03813516906020810135906040013561148f565b6103a2600480360360608110156104eb57600080fd5b506001600160a01b038135811691602081013590911690604001356115b9565b6103a26004803603606081101561052157600080fd5b506001600160a01b038135811691602081013590911690604001356116a9565b61032f6004803603602081101561055757600080fd5b503561188c565b6103a2600480360360a081101561057457600080fd5b6001600160a01b0382358116926020810135909116918101906060810160408201356401000000008111156105a857600080fd5b8201836020820111156105ba57600080fd5b803590602001918460208302840111640100000000831117156105dc57600080fd5b9193909290916020810190356401000000008111156105fa57600080fd5b82018360208201111561060c57600080fd5b8035906020019184602083028401116401000000008311171561062e57600080fd5b91939092909160208101903564010000000081111561064c57600080fd5b82018360208201111561065e57600080fd5b8035906020019184600183028401116401000000008311171561068057600080fd5b5090925090506118a5565b6103a2600480360360608110156106a157600080fd5b506001600160a01b03813581169160208101359091169060400135611c45565b61032f600480360360408110156106d757600080fd5b50803590602001356001600160a01b0316611c60565b6103686004803603602081101561070357600080fd5b50356001600160a01b0316611c75565b6107d56004803603604081101561072957600080fd5b81019060208101813564010000000081111561074457600080fd5b82018360208201111561075657600080fd5b8035906020019184602083028401116401000000008311171561077857600080fd5b91939092909160208101903564010000000081111561079657600080fd5b8201836020820111156107a857600080fd5b803590602001918460208302840111640100000000831117156107ca57600080fd5b509092509050611c93565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156108115781810151838201526020016107f9565b505050509050019250505060405180910390f35b61043e6004803603602081101561083b57600080fd5b5035611d6d565b61043e6004803603602081101561085857600080fd5b5035611e0a565b6103686004803603602081101561087557600080fd5b50356001600160a01b0316611e72565b61043e611e90565b61032f600480360360208110156108a357600080fd5b50356001600160a01b0316611e9f565b6103a2600480360360408110156108c957600080fd5b506001600160a01b0381351690602001351515611f18565b61032f600480360360208110156108f757600080fd5b5035611fc5565b6103a26004803603602081101561091457600080fd5b50356001600160a01b0316612114565b6103686004803603606081101561093a57600080fd5b5080356001600160a01b031690602081013564ffffffffff16906040013561ffff166121ea565b6103ac612233565b61043e61226a565b6103a26004803603604081101561098757600080fd5b506001600160a01b0381351690602001351515612279565b6103a2600480360360408110156109b557600080fd5b506001600160a01b0381351690602001351515612288565b6103a2600480360360408110156109e357600080fd5b5080359060200135612335565b6103a260048036036060811015610a0657600080fd5b506001600160a01b038135811691602081013582169160409091013516612340565b6103a260048036036080811015610a3e57600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135640100000000811115610a7957600080fd5b820183602082011115610a8b57600080fd5b80359060200191846001830284011164010000000083111715610aad57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612655945050505050565b6103a260048036036040811015610b0457600080fd5b506001600160a01b0381351690602001351515612736565b61036860048036036020811015610b3257600080fd5b50356127e3565b61032f600480360360e0811015610b4f57600080fd5b6001600160a01b03823581169264ffffffffff6020820135169260408201359260608301359260ff6080820135169260a08201359092169181019060e0810160c0820135640100000000811115610ba557600080fd5b820183602082011115610bb757600080fd5b80359060200191846001830284011164010000000083111715610bd957600080fd5b5090925090506127fe565b61032f60048036036020811015610bfa57600080fd5b5035612986565b6103ac60048036036020811015610c1757600080fd5b5035612a42565b61036860048036036020811015610c3457600080fd5b5035612aab565b61036860048036036020811015610c5157600080fd5b50356001600160a01b0316612b10565b61036860048036036040811015610c7757600080fd5b506001600160a01b0381358116916020013516612b2e565b61032f600480360360e0811015610ca557600080fd5b6001600160a01b03823581169260208101359264ffffffffff6040830135169260608301359260ff6080820135169260a08201359092169181019060e0810160c0820135640100000000811115610cfb57600080fd5b820183602082011115610d0d57600080fd5b80359060200191846001830284011164010000000083111715610d2f57600080fd5b509092509050612c36565b6103a260048036036060811015610d5057600080fd5b506001600160a01b038135811691602081013590911690604001351515612e35565b6107d5600480360360e0811015610d8857600080fd5b6001600160a01b038235169164ffffffffff6020820135169160408201359190810190608081016060820135640100000000811115610dc657600080fd5b820183602082011115610dd857600080fd5b80359060200191846020830284011164010000000083111715610dfa57600080fd5b919390929091602081019035640100000000811115610e1857600080fd5b820183602082011115610e2a57600080fd5b80359060200191846001830284011164010000000083111715610e4c57600080fd5b919390926001600160a01b0383351692604081019060200135640100000000811115610e7757600080fd5b820183602082011115610e8957600080fd5b80359060200191846001830284011164010000000083111715610eab57600080fd5b509092509050612ed1565b6103a2600480360360a0811015610ecc57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135640100000000811115610f0c57600080fd5b820183602082011115610f1e57600080fd5b80359060200191846001830284011164010000000083111715610f4057600080fd5b509092509050613132565b61032f60048036036060811015610f6157600080fd5b506001600160a01b03813581169160208101359160409091013516613254565b60006001605f1b821615610fc157826001600160a01b0316610fa283613339565b6001600160a01b03161415610fb95750600161100b565b50600061100b565b600080610fcd8461334b565b6001600160a01b03871660009081526004602090815260408083208584529091529020549193509150611006908263ffffffff61335c16565b925050505b92915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316148061107457507fd9b67a26000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b806110a857507f80ac58cd000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b806110dc57507f5b5e139f000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b8061111057507f0e89341c000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b90505b919050565b600d546001600160a01b031633146111615760405162461bcd60e51b8152600401808060200182810382526023815260200180615abc6023913960400191505060405180910390fd5b600d54604080516001600160a01b039283168152918316602083015280517f1bab6ababbec5519512e9ee16964953ec0f72839126138285cac1f1136bd642e9281900390910190a1600d805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60408051808201909152601081527f53616e64626f782773204153534554730000000000000000000000000000000060208201525b90565b60008061121c83613339565b6001600160a01b03161415611278576040805162461bcd60e51b815260206004820152601260248201527f4e465420646f6573206e6f742065786973740000000000000000000000000000604482015290519081900360640190fd5b506000908152600660205260409020546001600160a01b031690565b600061129f82613339565b90506001600160a01b0381166112fc576040805162461bcd60e51b815260206004820152601260248201527f4e465420646f6573206e6f742065786973740000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03811633148061132257503360009081526001602052604090205460ff165b8061135057506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b6113a1576040805162461bcd60e51b815260206004820152600e60248201527f6e6f7420617574686f72697a6564000000000000000000000000000000000000604482015290519081900360640190fd5b600082815260066020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b606061141582612aab565b611466576040805162461bcd60e51b815260206004820152601660248201527f746f6b656e20776173206e65766572206d696e74656400000000000000000000604482015290519081900360640190fd5b6bffffffff80000000000007ff1982166000908152600760205260409020546111109083613376565b6001600160a01b0383166114ea576040805162461bcd60e51b815260206004820152601460248201527f66726f6d206973207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b336001600160a01b03841614806115105750336000908152600c602052604090205460ff165b8061152a57503360009081526001602052604090205460ff165b8061155857506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b6115a9576040805162461bcd60e51b815260206004820152601560248201527f72657175697265206d65746120617070726f76616c0000000000000000000000604482015290519081900360640190fd5b6115b48383836134de565b505050565b826001600160a01b03166115cc82613339565b6001600160a01b031614611613576040805162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b604482015290519081900360640190fd5b600061162284848460016135fe565b9050611652816116325733611634565b845b85858560016040518060200160405280600081525060016000613a36565b6116a3576040805162461bcd60e51b815260206004820152601960248201527f65726331313535207472616e736665722072656a656374656400000000000000604482015290519081900360640190fd5b50505050565b60006116b482613339565b90506001600160a01b038416611711576040805162461bcd60e51b815260206004820152601660248201527f73656e646572206973207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b336001600160a01b03851614806117375750336000908152600c602052604090205460ff165b8061175157503360009081526001602052604090205460ff165b8061177f57506001600160a01b038416600090815260056020908152604080832033845290915290205460ff165b6117d0576040805162461bcd60e51b815260206004820152601160248201527f72657175697265206f70657261746f7273000000000000000000000000000000604482015290519081900360640190fd5b836001600160a01b0316816001600160a01b031614611822576040805162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b604482015290519081900360640190fd5b600082815260066020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a450505050565b600061189782612986565b5050603f1c63ffffffff1690565b8483146118e35760405162461bcd60e51b8152600401808060200182810382526026815260200180615a736026913960400191505060405180910390fd5b6001600160a01b03871661193e576040805162461bcd60e51b815260206004820152601b60248201527f64657374696e6174696f6e206973207a65726f20616464726573730000000000604482015290519081900360640190fd5b6001600160a01b038816611999576040805162461bcd60e51b815260206004820152601460248201527f66726f6d206973207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b336000818152600c602052604081205460ff16916001600160a01b038b1614806119c05750815b806119da57503360009081526001602052604090205460ff165b80611a0857506001600160a01b038a16600090815260056020908152604080832033845290915290205460ff165b9050611a7b8a8a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c918291850190849080828437600092019190915250889250613be2915050565b886001600160a01b03168a6001600160a01b031683611a9a5733611a9c565b8b5b6001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8b8b8b8b6040518080602001806020018381038352878782818152602001925060200280828437600083820152601f01601f19169091018481038352858152602090810191508690860280828437600083820152604051601f909101601f19169092018290039850909650505050505050a4611be882611b465733611b48565b8a5b8b8b8b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808f0282810182019093528e82529093508e92508d91829185019084908082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b90819084018382808284376000920191909152506141bc92505050565b611c39576040805162461bcd60e51b815260206004820152601960248201527f65726331313535207472616e736665722072656a656374656400000000000000604482015290519081900360640190fd5b50505050505050505050565b6115b483838360405180602001604052806000815250612655565b6000611c6e333385856143ac565b9392505050565b6001600160a01b03166000908152600b602052604090205460ff1690565b6060838214611cd35760405162461bcd60e51b8152600401808060200182810382526026815260200180615a736026913960400191505060405180910390fd5b604080518381526020808502820101909152606090838015611cff578160200160208202803883390190505b50905060005b83811015611d6357611d44878783818110611d1c57fe5b905060200201356001600160a01b0316868684818110611d3857fe5b90506020020135610f81565b828281518110611d5057fe5b6020908102919091010152600101611d05565b5095945050505050565b6000611d7882612aab565b611dc9576040805162461bcd60e51b815260206004820152601660248201527f746f6b656e20776173206e65766572206d696e74656400000000000000000000604482015290519081900360640190fd5b6c0100000000000000000000000082046001600160a01b038181166000908152600a6020526040902054168015611e035791506111139050565b5092915050565b6000611e1582613339565b90506001600160a01b038116611113576040805162461bcd60e51b815260206004820152601260248201527f4e465420646f6573206e6f742065786973740000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b031660009081526001602052604090205460ff1690565b6000546001600160a01b031690565b60006001600160a01b038216611efc576040805162461bcd60e51b815260206004820152601560248201527f6f776e6572206973207a65726f20616464726573730000000000000000000000604482015290519081900360640190fd5b506001600160a01b031660009081526002602052604090205490565b6000546001600160a01b03163314611f615760405162461bcd60e51b815260040180806020018281038252602e815260200180615baf602e913960400191505060405180910390fd5b6001600160a01b0382166000818152600c6020908152604091829020805460ff191685151590811790915582519384529083015280517fb21eb88b4e33b3f1281830a7178d74d8aa73220416215726b68ae23d539515cb9281900390910190a15050565b6000611fd082612aab565b612021576040805162461bcd60e51b815260206004820152601660248201527f746f6b656e20776173206e65766572206d696e74656400000000000000000000604482015290519081900360640190fd5b6bffffffff80000000000007ff198216600090815260086020526040902080546107ff84169060026000196101006001841615020190911604600482041061206e57600092505050611113565b6000826004830481546001816001161561010002031660029004811061209057fe5b8154600116156120af5790600052602060002090602091828204019190065b9054901a7f01000000000000000000000000000000000000000000000000000000000000000260f81c905060026003808416900381029060049060ff80841690910a1683816120fa57fe5b0460ff168161210557fe5b0660ff16945050505050611113565b6000546001600160a01b03163314612173576040805162461bcd60e51b815260206004820152601b60248201527f6f6e6c792061646d696e2063616e206368616e67652061646d696e0000000000604482015290519081900360640190fd5b600054604080516001600160a01b039283168152918316602083015280517f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f9281900390910190a16000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6001600160a01b0383166c010000000000000000000000000264ffffffffff831662800000020161ffff8216610800020160009081526007602052604090205415159392505050565b60408051808201909152600581527f4153534554000000000000000000000000000000000000000000000000000000602082015290565b600d546001600160a01b031690565b612284338383614553565b5050565b6000546001600160a01b031633146122d15760405162461bcd60e51b815260040180806020018281038252602c815260200180615b61602c913960400191505060405180910390fd5b6001600160a01b038216600081815260016020908152604091829020805460ff191685151590811790915582519384529083015280517f44f92d27abdf4cfb6a7d712c3af68f3be086d4ca747ab802c36f67d6790060d89281900390910190a15050565b6122843383836134de565b336001600160a01b03841614806123665750336000908152600c602052604090205460ff165b8061238057503360009081526001602052604090205460ff165b6123d1576040805162461bcd60e51b815260206004820152601560248201527f72657175697265206d65746120617070726f76616c0000000000000000000000604482015290519081900360640190fd5b6001600160a01b03831661242c576040805162461bcd60e51b815260206004820152601660248201527f73656e646572206973207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b6001600160a01b038116612487576040805162461bcd60e51b815260206004820152601b60248201527f64657374696e6174696f6e206973207a65726f20616464726573730000000000604482015290519081900360640190fd5b6001600160a01b038083166000908152600a602052604090205416806124aa5750815b816001600160a01b0316816001600160a01b03161415612511576040805162461bcd60e51b815260206004820152600d60248201527f63757272656e74203d3d20746f00000000000000000000000000000000000000604482015290519081900360640190fd5b836001600160a01b0316816001600160a01b031614612577576040805162461bcd60e51b815260206004820152601160248201527f63757272656e7420213d2073656e646572000000000000000000000000000000604482015290519081900360640190fd5b826001600160a01b0316826001600160a01b031614156125c9576001600160a01b0383166000908152600a60205260409020805473ffffffffffffffffffffffffffffffffffffffff19169055612605565b6001600160a01b038381166000908152600a60205260409020805473ffffffffffffffffffffffffffffffffffffffff19169184169190911790555b816001600160a01b0316816001600160a01b0316846001600160a01b03167f1a7f4b0ff7e2dc5eb0864ecd842062dd36fa2daafefc7a017476807ccd73600d60405160405180910390a450505050565b836001600160a01b031661266883613339565b6001600160a01b0316146126af576040805162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b604482015290519081900360640190fd5b60006126be85858560016135fe565b90506126de816126ce57336126d0565b855b868686600187600180613a36565b61272f576040805162461bcd60e51b815260206004820181905260248201527f6572633732312f65726331313535207472616e736665722072656a6563746564604482015290519081900360640190fd5b5050505050565b600d546001600160a01b0316331461277f5760405162461bcd60e51b8152600401808060200182810382526024815260200180615adf6024913960400191505060405180910390fd5b6001600160a01b0382166000818152600b6020908152604091829020805460ff191685151590811790915582519384529083015280517f5ecd928ac22825e06273a3e8db8118dd7fe11bd2637ecfe4bfa25154948bd85f9281900390910190a15050565b60006bffffffff8000000000000000198216611c6e81612aab565b600086612852576040805162461bcd60e51b815260206004820152600c60248201527f68617368206973207a65726f0000000000000000000000000000000000000000604482015290519081900360640190fd5b336000908152600b602052604090205460ff166128b6576040805162461bcd60e51b815260206004820152601c60248201527f6f6e6c7920626f756e63657220616c6c6f77656420746f206d696e7400000000604482015290519081900360640190fd5b6001600160a01b038416612911576040805162461bcd60e51b815260206004820152601b60248201527f64657374696e6174696f6e206973207a65726f20616464726573730000000000604482015290519081900360640190fd5b61293389878a89600114612926576001612929565b60005b60ff166000614736565b905061297a87878733888689898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092506147f3915050565b98975050505050505050565b60008061299283613339565b6001600160a01b031614156129ee576040805162461bcd60e51b815260206004820152601260248201527f4e465420646f6573206e6f742065786973740000000000000000000000000000604482015290519081900360640190fd5b6bffffffff8000000000000000198216612a0781612aab565b6111105760405162461bcd60e51b8152600401808060200182810382526028815260200180615b036028913960400191505060405180910390fd5b60606000612a4f83613339565b6001600160a01b03161415611466576040805162461bcd60e51b815260206004820152601260248201527f4e465420646f6573206e6f742065786973740000000000000000000000000000604482015290519081900360640190fd5b60006001605f1b821615612ad057506000818152600360205260409020541515611113565b610800627ff8008316046107ff8316108015612b0957506bffffffff80000000000007ff19821660009081526007602052604090205415155b9050611113565b6001600160a01b03166000908152600c602052604090205460ff1690565b60006001600160a01b038316612b8b576040805162461bcd60e51b815260206004820152601560248201527f6f776e6572206973207a65726f20616464726573730000000000000000000000604482015290519081900360640190fd5b6001600160a01b038216612be6576040805162461bcd60e51b815260206004820152601860248201527f6f70657261746f72206973207a65726f20616464726573730000000000000000604482015290519081900360640190fd5b6001600160a01b0380841660009081526005602090815260408083209386168352929052205460ff1680611c6e5750506001600160a01b031660009081526001602052604090205460ff16919050565b600085612c8a576040805162461bcd60e51b815260206004820152600c60248201527f68617368206973207a65726f0000000000000000000000000000000000000000604482015290519081900360640190fd5b336000908152600b602052604090205460ff16612cd85760405162461bcd60e51b8152600401808060200182810382526027815260200180615a296027913960400191505060405180910390fd5b6001600160a01b038416612d33576040805162461bcd60e51b815260206004820152601b60248201527f64657374696e6174696f6e206973207a65726f20616464726573730000000000604482015290519081900360640190fd5b6001600160a01b038916612d8e576040805162461bcd60e51b815260206004820152601460248201527f66726f6d206973207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b612d99338a8a614aee565b6000612daa8a60018a600080614736565b9050612df2876001883389868a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092506147f3915050565b6040805182815290518a917f848e40d125c35dfb2c55bc4bf9aebe36a2a1c53c8e8ab1a53d5a4bc855d64981919081900360200190a29998505050505050505050565b336001600160a01b0384161480612e5b5750336000908152600c602052604090205460ff165b80612e7557503360009081526001602052604090205460ff165b612ec6576040805162461bcd60e51b815260206004820152601560248201527f72657175697265206d65746120617070726f76616c0000000000000000000000604482015290519081900360640190fd5b6115b4838383614553565b606088612f25576040805162461bcd60e51b815260206004820152600c60248201527f68617368206973207a65726f0000000000000000000000000000000000000000604482015290519081900360640190fd5b336000908152600b602052604090205460ff16612f89576040805162461bcd60e51b815260206004820152601c60248201527f6f6e6c7920626f756e63657220616c6c6f77656420746f206d696e7400000000604482015290519081900360640190fd5b6001600160a01b038416612fe4576040805162461bcd60e51b815260206004820152601b60248201527f64657374696e6174696f6e206973207a65726f20616464726573730000000000604482015290519081900360640190fd5b60006130678c8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b9081908401838280828437600081840152601f19601f820116905080830192505050505050508e8e614c0b565b80925081935050506130b0898980806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250869150859050614d97565b6131233386848c8c8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f8d018190048102820181019092528b815292508b91508a9081908401838280828437600092019190915250614de292505050565b509a9950505050505050505050565b6001605f1b84161561319857856001600160a01b031661315185613339565b6001600160a01b031614613198576040805162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b604482015290519081900360640190fd5b60006131a6878787876135fe565b90506131fa816131b657336131b8565b875b8888888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250829150613a369050565b61324b576040805162461bcd60e51b815260206004820152601960248201527f65726331313535207472616e736665722072656a656374656400000000000000604482015290519081900360640190fd5b50505050505050565b336000818152600c6020526040812054909160ff909116906001600160a01b038616148061327f5750805b8061329957503360009081526001602052604090205460ff165b806132c757506001600160a01b038516600090815260056020908152604080832033845290915290205460ff165b613318576040805162461bcd60e51b815260206004820152601560248201527f72657175697265206d65746120617070726f76616c0000000000000000000000604482015290519081900360640190fd5b613330816133265733613328565b855b8686866143ac565b95945050505050565b60009081526003602052604090205490565b610100602082020491600790911690565b600181016020026101000382901c63ffffffff1692915050565b606061338183614f1c565b61338e6107ff8416615050565b60405160200180807f697066733a2f2f62616679626569000000000000000000000000000000000000815250600e0183805190602001908083835b602083106133e85780518252601f1990920191602091820191016133c9565b6001836020036101000a038019825116818451168082178552505050505050905001807f2f0000000000000000000000000000000000000000000000000000000000000081525060010182805190602001908083835b6020831061345d5780518252601f19909201916020918201910161343e565b5181516020939093036101000a60001901801990911692169190911790527f2e6a736f6e000000000000000000000000000000000000000000000000000000920191825250604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe5018152600590920190529695505050505050565b6001605f1b82161561356e578060011461353f576040805162461bcd60e51b815260206004820152601560248201527f63616e206f6e6c79206275726e206f6e65204e46540000000000000000000000604482015290519081900360640190fd5b336000908152600c60205260409020546135699060ff166135605733613562565b835b8484614aee565b6115b4565b600081118015613582575063ffffffff8111155b6135d3576040805162461bcd60e51b815260206004820152600e60248201527f696e76616c696420616d6f756e74000000000000000000000000000000000000604482015290519081900360640190fd5b336000908152600c60205260409020546115b49060ff166135f457336135f6565b835b848484615145565b60006001600160a01b03841661365b576040805162461bcd60e51b815260206004820152601b60248201527f64657374696e6174696f6e206973207a65726f20616464726573730000000000604482015290519081900360640190fd5b6001600160a01b0385166136b6576040805162461bcd60e51b815260206004820152601460248201527f66726f6d206973207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b50336000818152600c602052604081205460ff16916001600160a01b03871614806136de5750815b806136f857503360009081526001602052604090205460ff165b8061372657506001600160a01b038616600090815260056020908152604080832033845290915290205460ff165b90506001605f1b8416156138aa57808061375657506000848152600660205260409020546001600160a01b031633145b6137a7576040805162461bcd60e51b815260206004820152601560248201527f4f70657261746f72206e6f7420617070726f7665640000000000000000000000604482015290519081900360640190fd5b82156138a557826001146137ec5760405162461bcd60e51b8152600401808060200182810382526023815260200180615a506023913960400191505060405180910390fd5b6001600160a01b038087166000908152600260209081526040808320805460001901905588841680845281842080546001019055888452600383528184205560069091529020541615613863576000848152600660205260409020805473ffffffffffffffffffffffffffffffffffffffff191690555b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b6139c4565b806138fc576040805162461bcd60e51b815260206004820152601560248201527f4f70657261746f72206e6f7420617070726f7665640000000000000000000000604482015290519081900360640190fd5b82156139c45760008061390e8661334b565b6001600160a01b038a166000908152600460209081526040808320858452909152902054919350915061394a908287600163ffffffff61520616565b6001600160a01b03808a166000908152600460208181526040808420888552825280842095909555928b168252825282812085825290915290812054613999918390889063ffffffff61520616565b6001600160a01b03881660009081526004602090815260408083209583529490529290922091909155505b846001600160a01b0316866001600160a01b0316836139e357336139e5565b875b6001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051808381526020018281526020019250505060405180910390a450949350505050565b6000613a4a876001600160a01b0316615329565b613a565750600161297a565b8215613a8b57613a6587615360565b613a8b578115613a8357613a7c8989898988615426565b905061297a565b50600161297a565b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916876001600160a01b031663f23a6e618b8b8a8a8a6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613b4e578181015183820152602001613b36565b50505050905090810190601f168015613b7b5780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b158015613b9e57600080fd5b505af1158015613bb2573d6000803e3d6000fd5b505050506040513d6020811015613bc857600080fd5b50516001600160e01b031916149998505050505050505050565b825160008080808080805b878110156141375760006001605f1b8c8381518110613c0857fe5b6020026020010151161115613eb1578880613c5e5750336001600160a01b0316600660008d8481518110613c3857fe5b6020908102919091018101518252810191909152604001600020546001600160a01b0316145b613caf576040805162461bcd60e51b815260206004820152601560248201527f4f70657261746f72206e6f7420617070726f7665640000000000000000000000604482015290519081900360640190fd5b60008a8281518110613cbd57fe5b60200260200101511115613eac57898181518110613cd757fe5b6020026020010151600114613d1d5760405162461bcd60e51b8152600401808060200182810382526023815260200180615a506023913960400191505060405180910390fd5b8c6001600160a01b0316613d438c8381518110613d3657fe5b6020026020010151613339565b6001600160a01b031614613d8a576040805162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b604482015290519081900360640190fd5b81806001019250508b6001600160a01b0316600360008d8481518110613dac57fe5b602002602001015181526020019081526020016000208190555060006001600160a01b0316600660008d8481518110613de157fe5b6020908102919091018101518252810191909152604001600020546001600160a01b031614613e57576000600660008d8481518110613e1c57fe5b6020026020010151815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b8a8181518110613e6357fe5b60200260200101518c6001600160a01b03168e6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b61412f565b88613f03576040805162461bcd60e51b815260206004820152601560248201527f4f70657261746f72206e6f7420617070726f7665640000000000000000000000604482015290519081900360640190fd5b60008a8281518110613f1157fe5b6020026020010151111561412f57613f3b8b8281518110613f2e57fe5b602002602001015161334b565b909750955082613fe1576001600160a01b038d1660009081526004602090815260408083208a84529091529020548a51889450613f90919088908d9085908110613f8157fe5b60200260200101516001615206565b6001600160a01b038d1660009081526004602090815260408083208b84529091529020548b51919650613fda9188908d9085908110613fcb57fe5b60200260200101516000615206565b935061412f565b8287146140d45784600460008f6001600160a01b03166001600160a01b0316815260200190815260200160002060008581526020019081526020016000208190555083600460008e6001600160a01b03166001600160a01b03168152602001908152602001600020600085815260200190815260200160002081905550600460008e6001600160a01b03166001600160a01b031681526020019081526020016000206000888152602001908152602001600020549450600460008d6001600160a01b03166001600160a01b0316815260200190815260200160002060008881526020019081526020016000205493508692505b6140ff868b83815181106140e457fe5b6020026020010151600188615206909392919063ffffffff16565b945061412c868b838151811061411157fe5b6020026020010151600087615206909392919063ffffffff16565b93505b600101613bed565b50801561416c576001600160a01b03808d1660009081526002602052604080822080548590039055918d168152208054820190555b85156141ae576001600160a01b03808d1660009081526004602081815260408084208b85528252808420899055938f1683529081528282208983529052208390555b505050505050505050505050565b60006141d0856001600160a01b0316615329565b6141dc575060016143a2565b6000856001600160a01b031663bc197c8189898888886040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b83811015614279578181015183820152602001614261565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156142b85781810151838201526020016142a0565b50505050905001848103825285818151815260200191508051906020019080838360005b838110156142f45781810151838201526020016142dc565b50505050905090810190601f1680156143215780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b15801561434657600080fd5b505af115801561435a573d6000803e3d6000fd5b505050506040513d602081101561437057600080fd5b50516001600160e01b0319167fbc197c8100000000000000000000000000000000000000000000000000000000149150505b9695505050505050565b60006001600160a01b038216614409576040805162461bcd60e51b815260206004820152601b60248201527f64657374696e6174696f6e206973207a65726f20616464726573730000000000604482015290519081900360640190fd5b6001605f1b831615614462576040805162461bcd60e51b815260206004820152601460248201527f4e6f7420616e204552433131353520546f6b656e000000000000000000000000604482015290519081900360640190fd5b50600082815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008116600163ffffffff928316818101909316919091179092556001605f1b6780000000000000008202850101916144d090879087908790615145565b614514600760006bffffffff80000000000007ff198716815260200190815260200160002054600160008987876040518060200160405280600081525060016147f3565b60408051838152905185917faa923cda6d3360ee3cd49c083ac1fe5e062a5739b82a32d597a65168c0c6926c919081900360200190a250949350505050565b6001600160a01b0383166145ae576040805162461bcd60e51b815260206004820152601660248201527f73656e646572206973207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b816001600160a01b0316836001600160a01b03161415614615576040805162461bcd60e51b815260206004820152601160248201527f73656e646572203d206f70657261746f72000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b038216614670576040805162461bcd60e51b815260206004820152601860248201527f6f70657261746f72206973207a65726f20616464726573730000000000000000604482015290519081900360640190fd5b6001600160a01b03821660009081526001602052604090205460ff16156146c85760405162461bcd60e51b8152600401808060200182810382526036815260200180615b2b6036913960400191505060405180910390fd5b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff1916861515908117909155825190815291517f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319281900390910190a3505050565b6000808511801561474b575063ffffffff8511155b61479c576040805162461bcd60e51b815260206004820152600e60248201527f696e76616c696420737570706c79000000000000000000000000000000000000604482015290519081900360640190fd5b61ffff8083169084166108000264ffffffffff86166280000002600188146147c55760006147cb565b6001605f1b5b6001600160a01b038a166c010000000000000000000000000201010101905095945050505050565b6bffffffff80000000000007ff198316816149585760008181526007602052604090205415614869576040805162461bcd60e51b815260206004820152600f60248201527f696420616c726561647920757365640000000000000000000000000000000000604482015290519081900360640190fd5b6000818152600760205260409020899055600460ff8816106148d2576040805162461bcd60e51b815260206004820152600b60248201527f726172697479203e3d2034000000000000000000000000000000000000000000604482015290519081900360640190fd5b6040805160018082528183019092526060916020820181803883390190505090508760400260f81b8160008151811061490757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000828152600860209081526040909120825161495592840190615990565b50505b87600114156149c0576001600160a01b038516600081815260026020908152604080832080546001019055878352600390915280822083905551869291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4614a33565b6000806149cc8661334b565b6001600160a01b03891660009081526004602090815260408083208584529091529020549193509150614a0890828c600263ffffffff61520616565b6001600160a01b03881660009081526004602090815260408083209583529490529290922091909155505b60408051858152602081018a905281516001600160a01b0380891693600093918b16927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f629281900390910190a4614a9286600087878c88600080613a36565b614ae3576040805162461bcd60e51b815260206004820152601160248201527f7472616e736665722072656a6563746564000000000000000000000000000000604482015290519081900360640190fd5b505050505050505050565b614af781613339565b6001600160a01b0316826001600160a01b031614614b48576040805162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b604482015290519081900360640190fd5b60008181526003602090815260408083207401000000000000000000000000000000000000000090556001600160a01b0385168084526002909252808320805460001901905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a4604080518281526001602082015281516000926001600160a01b0386811693908816927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62929181900390910190a4505050565b6060600080865111614c64576040805162461bcd60e51b815260206004820152601460248201527f737570706c6965732e6c656e677468203d3d2030000000000000000000000000604482015290519081900360640190fd5b85516108001015614cbc576040805162461bcd60e51b815260206004820152600d60248201527f746f6f2062696720626174636800000000000000000000000000000000000000604482015290519081900360640190fd5b614cc787878661554f565b809250819350505060006bffffffff80000000000007ff1983600081518110614cec57fe5b6020026020010151169050600760008281526020019081526020016000205460001c600014614d62576040805162461bcd60e51b815260206004820152600f60248201527f696420616c726561647920757365640000000000000000000000000000000000604482015290519081900360640190fd5b6000818152600760209081526040808320879055600882529091208751614d8b92890190615990565b50509550959350505050565b60005b8161ffff168551038161ffff161015614dc157614db9818686866156b4565b600801614d9a565b61ffff82161561272f5761272f8261ffff168651038361ffff1686866157be565b836001600160a01b031660006001600160a01b0316866001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015614e68578181015183820152602001614e50565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015614ea7578181015183820152602001614e8f565b5050505090500194505050505060405180910390a4614ecb856000868686866141bc565b61272f576040805162461bcd60e51b815260206004820152601160248201527f7472616e736665722072656a6563746564000000000000000000000000000000604482015290519081900360640190fd5b60408051603480825260608281019093528391839082602082018180388339509192507f6162636465666768696a6b6c6d6e6f707172737475767778797a323334353637915050601c600285901b1660208110614f7557fe5b1a60f81b81836001900393508381518110614f8c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506008830492505b8115615048577f6162636465666768696a6b6c6d6e6f707172737475767778797a3233343536376020840660208110614ff757fe5b1a60f81b8183600190039350838151811061500e57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350602083049250614fc2565b949350505050565b606081615091575060408051808201909152600181527f30000000000000000000000000000000000000000000000000000000000000006020820152611113565b8160005b81156150a957600101600a82049150615095565b6060816040519080825280601f01601f1916602001820160405280156150d6576020820181803883390190505b50905060001982015b851561513c57600a860660300160f81b8282806001900393508151811061510257fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a860495506150df565b50949350505050565b6000806151518461334b565b6001600160a01b03871660009081526004602090815260408083208584529091529020549193509150615191908263ffffffff8087169060019061520616565b6001600160a01b038087166000818152600460209081526040808320888452825280832095909555845189815263ffffffff8916918101919091528451919492938b16927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6292918290030190a4505050505050565b6000808083600281111561521657fe5b141561524957615226868661335c565b9050615242868661523d848863ffffffff61587316565b6158cb565b915061513c565b600183600281111561525757fe5b14156152bd57615267868661335c565b9050838110156152a85760405162461bcd60e51b8152600401808060200182810382526022815260200180615b8d6022913960400191505060405180910390fd5b615242868661523d848863ffffffff61593316565b60028360028111156152cb57fe5b14156152dc576152428686866158cb565b6040805162461bcd60e51b815260206004820152601160248201527f496e76616c6964206f7065726174696f6e000000000000000000000000000000604482015290519081900360640190fd5b60007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470823f80158015906150485750141592915050565b604080517f4e2312e0000000000000000000000000000000000000000000000000000000006024808301919091528251808303909101815260449091018252602081810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a7000000000000000000000000000000000000000000000000000000001781528251935160008082529485948594909392908183858b612710fa955080519450505050609e5a1161541557fe5b828015613330575090949350505050565b6040517f150b7a02000000000000000000000000000000000000000000000000000000008082526001600160a01b03878116600484019081528782166024850152604484018690526080606485019081528551608486015285516000959389169363150b7a02938c938c938b938b93929160a49091019060208501908083838f5b838110156154bf5781810151838201526020016154a7565b50505050905090810190601f1680156154ec5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561550e57600080fd5b505af1158015615522573d6000803e3d6000fd5b505050506040513d602081101561553857600080fd5b50516001600160e01b031916149695505050505050565b60606000808451905060608161ffff16604051908082528060200260200182016040528015615588578160200160208202803883390190505b5090506000805b8361ffff168161ffff1610156156475761ffff82166155d357878161ffff16815181106155b857fe5b6020026020010151600114156155ce5780840391505b61563f565b878161ffff16815181106155e357fe5b602002602001015160011461563f576040805162461bcd60e51b815260206004820152601e60248201527f4e465473206e65656420746f206265207075742061742074686520656e640000604482015290519081900360640190fd5b60010161558f565b5080830360005b8461ffff168161ffff1610156156a5576156828a8a8361ffff168151811061567257fe5b60200260200101518a8585614736565b848261ffff168151811061569257fe5b602090810291909101015260010161564e565b50919890975095505050505050565b6000818561ffff16815181106156c657fe5b602002602001015190506000806156dc8361334b565b6001600160a01b03871660009081526004602090815260408083208584529091528120549294509092505b60088110801561571d57508751818a61ffff1601105b1561578c576000818a61ffff16019050600189828151811061573b57fe5b6020026020010151111561577d576157768285018a838151811061575b57fe5b6020026020010151600286615206909392919063ffffffff16565b9250615783565b5061578c565b50600101615707565b506001600160a01b03909516600090815260046020908152604080832094835293905291909120939093555050505050565b60005b8363ffffffff168161ffff1610156158475760008286830161ffff16815181106157e757fe5b6020908102919091018101516000818152600390925260408083206001600160a01b038816908190559051919350839290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4506001016157c1565b50506001600160a01b03166000908152600260205260409020805463ffffffff90921691909101905550565b8181018281101561100b576040805162461bcd60e51b815260206004820152600860248201527f6f766572666c6f77000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600064010000000082106159105760405162461bcd60e51b8152600401808060200182810382526023815260200180615a996023913960400191505060405180910390fd5b5063ffffffff600183016020026101000390811b1984169082901b179392505050565b60008282111561598a576040805162461bcd60e51b815260206004820152600860248201527f756e6465666c6f77000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b50900390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106159d157805160ff19168380011785556159fe565b828001600101855582156159fe579182015b828111156159fe5782518255916020019190600101906159e3565b50615a0a929150615a0e565b5090565b61120d91905b80821115615a0a5760008155600101615a1456fe6f6e6c7920626f756e63657220616c6c6f77656420746f206d696e74207669612075706461746563616e6e6f74207472616e73666572206e667420696620616d6f756e74206e6f742031496e636f6e73697374656e74206172726179206c656e677468206265747765656e2061726773416d6f756e7420746f20777269746520696e2062696e20697320746f6f206c617267656f6e6c7920626f756e63657241646d696e2063616e206368616e676520697473656c666f6e6c7920626f756e63657241646d696e2063616e20736574757020626f756e636572736e6f20636f6c6c656374696f6e2065766572206d696e74656420666f72207468617420746f6b656e7375706572206f70657261746f722063616e2774206861766520746865697220617070726f76616c466f72416c6c206368616e6765646f6e6c792061646d696e20697320616c6c6f77656420746f20616464207375706572206f70657261746f727363616e277420737562737472616374206d6f7265207468616e2074686572652069736f6e6c792061646d696e2063616e207365747570206d6574615472616e73616374696f6e50726f636573736f7273a265627a7a723058202ee7944d89120d7c8a0f96425d787da2a1bf326004e289bc28a35901c9226e4564736f6c634300050900320000000000000000000000003845badade8e6dff049820680d1f14bd3903a5d000000000000000000000000018dd4e0eb8699ea4fee238de41ecfb95e32272f800000000000000000000000018dd4e0eb8699ea4fee238de41ecfb95e32272f8