package generated

import (
	"strings"

	"github.com/autonity/autonity/accounts/abi"
	"github.com/autonity/autonity/common"
)

var AutonityTestBytecode = common.Hex2Bytes("60806040526000600e556000600f5534801561001a57600080fd5b506040516201383a3803806201383a83398101604081905261003b9161143b565b81816010601d015460000361006657604780546001600160a01b03191633179055610066828261006f565b50505050611a39565b805180516010556020808201516011819055604080840151601255606080850151601355608080860151601481905560a08088015160155560c08089015160165560e0808a0151601755610100808b0151601880546001600160a01b03199081166001600160a01b03938416179091556101208d01516019805483169184169190911790556101408d0151601a819055610160909d0151601b8190558c8f01518051601c80548516918616919091179055808e0151601d80548516918616919091179055808c0151601e80548516918616919091179055808b0151601f80548516918616919091179055808a01518e548416908516178e5580880151602180548516918616919091179055808701516022805485169186169190911790558086015160238054851691861691909117905590930151602480548316918416919091179055898e01518051602580549093169316929092179055808b01516026819055818a0151602755818901516028558188015160295594810151602a81905593810151602b819055920151602c819055878d0151602d55603194909455603a9390935586519485018752878552978401899052838601829052929093018690526035949094556036959095556037556038929092556039929092556046919091555161025b90611006565b604051809103906000f080158015610277573d6000803e3d6000fd5b50604880546001600160a01b0319166001600160a01b03929092169190911790556040516102a490611014565b604051809103906000f0801580156102c0573d6000803e3d6000fd5b50604980546001600160a01b0319166001600160a01b039290921691909117905560005b825181101561077a5760008382815181106103015761030161168b565b602002602001015160a00151905060008483815181106103235761032361168b565b60209081029190910101516101a0015261033f6012600a6117a0565b8483815181106103515761035161168b565b602002602001015161026001818152505060008483815181106103765761037661168b565b602002602001015161018001906001600160a01b031690816001600160a01b03168152505060008483815181106103af576103af61168b565b602002602001015160a001818152505060008483815181106103d3576103d361168b565b602002602001015161010001818152505060008483815181106103f8576103f861168b565b60209081029190910101516101c00152601254845185908490811061041f5761041f61168b565b6020026020010151608001818152505060008483815181106104435761044361168b565b602002602001015161024001906005811115610461576104616117b3565b90816005811115610474576104746117b3565b81525050600084838151811061048c5761048c61168b565b602002602001015161016001818152505060008483815181106104b1576104b161168b565b602002602001015160c001818152505060008483815181106104d5576104d561168b565b602002602001015161012001818152505060008483815181106104fa576104fa61168b565b602002602001015160e0018181525050600084838151811061051e5761051e61168b565b60200260200101516101400181815250506105578483815181106105445761054461168b565b602002602001015161077f60201b60201c565b61058384838151811061056c5761056c61168b565b6020026020010151604001516108bc60201b60201c565b6105ab8483815181106105985761059861168b565b602002602001015161093f60201b60201c565b80604160008685815181106105c2576105c261168b565b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002060008282546105fd91906117c9565b92505081905550806044600082825461061691906117c9565b92505081905550806045600082825461062f91906117c9565b925050819055507f8ad8bd2eb6950e5f332fd3a6dca48cb358ecfe3057848902b98cbdfe455c915c8483815181106106695761066961168b565b6020026020010151600001518584815181106106875761068761168b565b6020026020010151602001518685815181106106a5576106a561168b565b6020026020010151604001518786815181106106c3576106c361168b565b6020026020010151606001518887815181106106e1576106e161168b565b602002602001015161018001516040516106ff959493929190611808565b60405180910390a161077084838151811061071c5761071c61168b565b6020026020010151602001518286858151811061073b5761073b61168b565b6020026020010151600001518786815181106107595761075961168b565b602002602001015160000151610bdc60201b60201c565b50506001016102e4565b505050565b60006107948260600151610eb360201b60201c565b6001600160a01b039091166020840152905080156107e75760405162461bcd60e51b815260206004820152600b60248201526a32b737b2329032b93937b960a91b60448201526064015b60405180910390fd5b6020808301516001600160a01b039081166000908152604290925260409091206001015416156108595760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f7220616c726561647920726567697374657265640000000060448201526064016107de565b6108656004600a6117a0565b826080015111156108b85760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420636f6d6d697373696f6e207261746500000000000000000060448201526064016107de565b5050565b6001600160a01b038116600090815260436020526040902054156109225760405162461bcd60e51b815260206004820152601460248201527f6f7261636c65207365727665722065786973747300000000000000000000000060448201526064016107de565b6001600160a01b0316600090815260436020526040902060019055565b6101808101516001600160a01b0316610a34576048546001600160a01b03166109b55760405162461bcd60e51b815260206004820152602260248201527f6c6971756964206c6f67696320636f6e7472616374206e6f74206465706c6f79604482015261195960f21b60648201526084016107de565b602e546000906109c490610efe565b905081602001518260000151836080015183604860009054906101000a90046001600160a01b03166040516109f890611022565b610a06959493929190611856565b604051809103906000f080158015610a22573d6000803e3d6000fd5b506001600160a01b0316610180830152505b60208181018051602e80546001808201835560009283527f37fa166cbdbfbb1561ccd9ea985ec0218b5e68502e230525f544285b2bdf3d7e90910180546001600160a01b03199081166001600160a01b0395861617909155845184168352604290955260409182902086518154871690851617815593519084018054861691841691909117905584015160028301805490941691161790915560608201518291906003820190610ae49082611911565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c820180546001600160a01b0319166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f82015561020082015160108201556102208201516011820190610ba19082611911565b5061024082015160128201805460ff19166001836005811115610bc657610bc66117b3565b0217905550610260820151816013015590505050565b6001600160a01b0384166000818152604260205260408120909115801590610c13575060018101546001600160a01b038781169116145b610c5f5760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206e6f742072656769737465726564000000000000000060448201526064016107de565b6000601282015460ff166005811115610c7a57610c7a6117b3565b14610cc75760405162461bcd60e51b815260206004820152601b60248201527f76616c696461746f72206e65656420746f20626520616374697665000000000060448201526064016107de565b60008511610d235760405162461bcd60e51b815260206004820152602360248201527f616d6f756e74206e65656420746f206265207374726963746c7920706f73697460448201526269766560e81b60648201526084016107de565b6001600160a01b038416600090815260416020526040902054851115610d8b5760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74204e6577746f6e2062616c616e6365000000000060448201526064016107de565b6001600160a01b03841660009081526041602052604081208054879290610db39084906119cf565b9091555050604080516080810182526001600160a01b0386811680835289821660208085018281528587018c8152436060808901918252600880546000908152600687528b90208a518154908b166001600160a01b03199182161782559551600182018054918c16919097161790955592516002850155905160039093019290925588549054885191871686148083529382018e90529781019790975294959094938916937fcedee1b81e707f05d3f5f6b965053c24ce7759214e4886d87c02e0261367d1f2910160405180910390a460088054906000610e93836119e2565b91905055506001600854610ea791906119cf565b98975050505050505050565b600080610ebe611030565b60008060ff9050604083875160208901845afa610eda57600080fd5b505080516020909101516c0100000000000000000000000090910494909350915050565b606081600003610f255750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610f4f5780610f39816119e2565b9150610f489050600a83611a11565b9150610f29565b6000816001600160401b03811115610f6957610f6961104e565b6040519080825280601f01601f191660200182016040528015610f93576020820181803683370190505b5090505b8415610ffe57610fa86001836119cf565b9150610fb5600a86611a25565b610fc09060306117c9565b60f81b818381518110610fd557610fd561168b565b60200101906001600160f81b031916908160001a905350610ff7600a86611a11565b9450610f97565b949350505050565b611ff880620102cd83390190565b610f4b80620122c583390190565b61062a806201321083390190565b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156110875761108761104e565b60405290565b60405161010081016001600160401b03811182821017156110875761108761104e565b604051608081016001600160401b03811182821017156110875761108761104e565b60405161018081016001600160401b03811182821017156110875761108761104e565b60405161028081016001600160401b03811182821017156110875761108761104e565b604051601f8201601f191681016001600160401b03811182821017156111405761114061104e565b604052919050565b6001600160a01b038116811461115d57600080fd5b50565b805161116b81611148565b919050565b60005b8381101561118b578181015183820152602001611173565b50506000910152565b600082601f8301126111a557600080fd5b8151602083016000806001600160401b038411156111c5576111c561104e565b50601f8301601f19166020016111da81611118565b9150508281528583830111156111ef57600080fd5b6111fd836020830184611170565b95945050505050565b80516006811061116b57600080fd5b6000610120828403121561122857600080fd5b611230611064565b905061123b82611160565b815261124960208301611160565b602082015261125a60408301611160565b604082015261126b60608301611160565b606082015261127c60808301611160565b608082015261128d60a08301611160565b60a082015261129e60c08301611160565b60c08201526112af60e08301611160565b60e08201526112c16101008301611160565b61010082015292915050565b600061010082840312156112e057600080fd5b6112e861108d565b905081516112f581611148565b81526020828101519082015260408083015190820152606080830151908201526080808301519082015260a0808301519082015260c0808301519082015260e09182015191810191909152919050565b60008183036103c081121561135957600080fd5b6113616110b0565b915061018081121561137257600080fd5b5061137b6110d2565b825181526020808401519082015260408084015190820152606080840151908201526080808401519082015260a0808401519082015260c0808401519082015260e080840151908201526113d26101008401611160565b6101008201526113e56101208401611160565b610120820152610140838101519082015261016080840151908201528152611411836101808401611215565b6020820152611424836102a084016112cd565b60408201526103a091909101516060820152919050565b6000806103e0838503121561144f57600080fd5b82516001600160401b0381111561146557600080fd5b8301601f8101851361147657600080fd5b80516001600160401b0381111561148f5761148f61104e565b8060051b61149f60208201611118565b918252602081840181019290810190888411156114bb57600080fd5b6020850192505b8383101561166d5782516001600160401b038111156114e057600080fd5b8501610280818b03601f190112156114f757600080fd5b6114ff6110f5565b61150b60208301611160565b815261151960408301611160565b602082015261152a60608301611160565b604082015260808201516001600160401b0381111561154857600080fd5b6115578c602083860101611194565b60608301525060a082810151608083015260c0808401519183019190915260e080840151918301919091526101008084015191830191909152610120808401519183019190915261014080840151918301919091526101608084015191830191909152610180830151908201526115d16101a08301611160565b6101808201526101c0828101516101a08301526101e080840151918301919091526102008084015191830191909152610220830151908201526102408201516001600160401b0381111561162457600080fd5b6116338c602083860101611194565b610220830152506116476102608301611206565b6102408201526102809190910151610260820152825260209283019291909101906114c2565b80965050505050506116828460208501611345565b90509250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6001815b60018411156116f2578085048111156116d6576116d66116a1565b60018416156116e457908102905b60019390931c9280026116bb565b935093915050565b6000826117095750600161179a565b816117165750600061179a565b816001811461172c576002811461173657611752565b600191505061179a565b60ff841115611747576117476116a1565b50506001821b61179a565b5060208310610133831016604e8410600b8410161715611775575081810a61179a565b61178260001984846116b7565b8060001904821115611796576117966116a1565b0290505b92915050565b60006117ac83836116fa565b9392505050565b634e487b7160e01b600052602160045260246000fd5b8082018082111561179a5761179a6116a1565b600081518084526117f4816020860160208601611170565b601f01601f19169290920160200192915050565b6001600160a01b03868116825285811660208301528416604082015260a06060820181905260009061183c908301856117dc565b905060018060a01b03831660808301529695505050505050565b6001600160a01b038681168252851660208201526040810184905260a06060820181905260009061183c908301856117dc565b600181811c9082168061189d57607f821691505b6020821081036118bd57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561077a57806000526020600020601f840160051c810160208510156118ea5750805b601f840160051c820191505b8181101561190a57600081556001016118f6565b5050505050565b81516001600160401b0381111561192a5761192a61104e565b61193e816119388454611889565b846118c3565b6020601f821160018114611972576000831561195a5750848201515b600019600385901b1c1916600184901b17845561190a565b600084815260208120601f198516915b828110156119a25787850151825560209485019460019092019101611982565b50848210156119c05786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b8181038181111561179a5761179a6116a1565b6000600182016119f4576119f46116a1565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082611a2057611a206119fb565b500490565b600082611a3457611a346119fb565b500690565b61e8848062001a496000396000f3fe60806040526004361061066b5760003560e01c806384467fdb1161034a578063b66b3e79116101b9578063dfb1a4d2116100f6578063f03b959d1161009a578063f5502f2211610077578063f5502f2214611412578063f7866ee314611432578063f7fcc51014611450578063fed76a561461147057005b8063f03b959d146113bb578063f3c70aad146113db578063f3f759c1146113f057005b8063e294df7c116100d3578063e294df7c1461133d578063e7f43c681461135d578063ed5676e91461137b578063ee7d72b41461139b57005b8063dfb1a4d2146112f3578063dfd4b68814611308578063e0e01d541461131d57005b8063cfd19fb91161015d578063d372c07e1161013a578063d372c07e14611273578063d886f8a214611293578063dd62ed3e146112b3578063de7011b1146112d357005b8063cfd19fb914611220578063d0c80f1314611240578063d144f00a1461125e57005b8063bb0db42811610196578063bb0db428146111b4578063c3f909d4146111c9578063ceaad455146111eb578063cf9c57191461120b57005b8063b66b3e791461115a578063b7ab4db51461117d578063ba5224581461119f57005b8063a515366a11610287578063ab8f6ffe1161022b578063b2ea9adb11610208578063b2ea9adb146110da578063b3ecbadd146110fa578063b46e55201461111a578063b47c3eaa1461113a57005b8063ab8f6ffe14611074578063ae1f5fa014611096578063affb1cf1146110ba57005b8063a9059cbb11610264578063a9059cbb14610ff2578063a9a7d7c914611012578063a9fd1a8f14611032578063aabc24961461105457005b8063a515366a14610f90578063a5d059ca14610fb0578063a8b2216e14610fd057005b80638ef8c2fd116102ee57806395d89b41116102cb57806395d89b4114610ef557806396b477cb14610f3b5780639dc29fac14610f5b5780639efa9e7a14610f7b57005b80638ef8c2fd14610ea0578063905d76e914610ec05780639358928b14610ee057005b80638bac7dad116103275780638bac7dad14610dd65780638bb2e47714610df65780638d34728714610e165780638ebb48b714610e3657005b806384467fdb14610d81578063852c484914610da1578063872cf05914610dc157005b806340c10f19116104e657806356176bc41161042357806370a08231116103c757806377e741c7116103a457806377e741c714610d0e578063784304b514610d2e578063819b646314610d4e578063833b1fce14610d6357005b806370a0823114610c655780637264c4da14610c85578063731b3a0314610ce757005b8063676c24ab11610400578063676c24ab14610c065780636b5f444c14610c1b5780636fc5351514610c3b5780636fd2c80b14610c5057005b806356176bc414610b995780635a06136214610bb95780635b7d6c3614610bd957005b80634bb278f31161048a5780634da3baec116104675780634da3baec14610b245780634efcd15f14610b445780635049257114610b59578063520fdbbc14610b7957005b80634bb278f314610ab05780634bfe23f114610ad25780634c1f1c7714610af257005b8063427bc5de116104c3578063427bc5de14610a515780634364596914610a665780634651e07b14610a7b578063496ccd9b14610a9057005b806340c10f19146109f1578063416f86a214610a1157806341de740014610a3157005b8063154d76d7116105b457806329070c6d11610558578063313ce56711610535578063313ce56714610980578063354c40a71461099c57806339f9eb1f146109bc5780633d0ae216146109dc57005b806329070c6d146109295780632b56feac1461093e57806330bcb81c1461095357005b80631904bb2e116105915780631904bb2e146108a057806323b872dd146108cd57806325ce1bb9146108ed5780632701849b1461091457005b8063154d76d71461084b57806315ef30f81461086b57806318160ddd1461088b57005b80630ae65e7a1161061b578063114eaf55116105f8578063114eaf55146107ae578063122b4122146107ce5780631250a28d1461080b57806312e7b45d1461082b57005b80630ae65e7a146107645780630d8e6e2c14610784578063112206331461079957005b8063088566e911610649578063088566e9146106ff578063095ea7b31461071f5780630aac2da11461074f57005b8063010ed3ef1461066d57806302fb4d851461069057806306fdde03146106b0575b005b34801561067957600080fd5b50603d5b6040519081526020015b60405180910390f35b34801561069c57600080fd5b5061067d6106ab36600461c8af565b611485565b3480156106bc57600080fd5b5060408051808201909152600681527f4e6577746f6e000000000000000000000000000000000000000000000000000060208201525b604051610687919061c92b565b34801561070b57600080fd5b5061067d61071a36600461c93e565b61179e565b34801561072b57600080fd5b5061073f61073a36600461c8af565b6117be565b6040519015158152602001610687565b34801561075b57600080fd5b5060265461067d565b34801561077057600080fd5b5061066b61077f36600461c93e565b6117df565b34801561079057600080fd5b50602d5461067d565b3480156107a557600080fd5b5060115461067d565b3480156107ba57600080fd5b5061066b6107c936600461c95b565b6118f8565b3480156107da57600080fd5b506107ee6107e936600461c981565b6119cf565b604080519384526020840192909252151590820152606001610687565b34801561081757600080fd5b5061066b61082636600461c93e565b611d00565b34801561083757600080fd5b5061066b61084636600461c95b565b611e09565b34801561085757600080fd5b5061067d61086636600461c9e0565b611f30565b34801561087757600080fd5b5061066b61088636600461c93e565b6121f7565b34801561089757600080fd5b5061067d61237c565b3480156108ac57600080fd5b506108c06108bb36600461c93e565b6123d7565b604051610687919061cbda565b3480156108d957600080fd5b5061073f6108e836600461cbed565b612450565b3480156108f957600080fd5b50602f546000908152603c602052604090206003015461067d565b34801561092057600080fd5b5061066b61256d565b34801561093557600080fd5b5060105461067d565b34801561094a57600080fd5b50603b5461067d565b34801561095f57600080fd5b5061097361096e36600461c95b565b6125f7565b604051610687919061cc2e565b34801561098c57600080fd5b5060405160128152602001610687565b3480156109a857600080fd5b5061066b6109b736600461cca8565b6126bf565b3480156109c857600080fd5b5061066b6109d736600461c93e565b6127c5565b3480156109e857600080fd5b50600c5461067d565b3480156109fd57600080fd5b5061066b610a0c36600461c8af565b612924565b348015610a1d57600080fd5b5061066b610a2c36600461c95b565b61298c565b348015610a3d57600080fd5b5061067d610a4c36600461cbed565b612abe565b348015610a5d57600080fd5b5060085461067d565b348015610a7257600080fd5b5060275461067d565b348015610a8757600080fd5b5060465461067d565b348015610a9c57600080fd5b5061066b610aab36600461c93e565b612bd1565b348015610abc57600080fd5b50610ac5612e3a565b604051610687919061ce5b565b348015610ade57600080fd5b50610973610aed36600461c95b565b613949565b348015610afe57600080fd5b506048546001600160a01b03165b6040516001600160a01b039091168152602001610687565b348015610b3057600080fd5b5061066b610b3f36600461c95b565b6139df565b348015610b5057600080fd5b5060345461067d565b348015610b6557600080fd5b5061073f610b7436600461c8af565b613c04565b348015610b8557600080fd5b5061066b610b9436600461c93e565b613c19565b348015610ba557600080fd5b5061066b610bb436600461cf2f565b614031565b348015610bc557600080fd5b5061066b610bd436600461c93e565b614274565b348015610be557600080fd5b50610bf9610bf436600461c93e565b6143cd565b604051610687919061cf99565b348015610c1257600080fd5b5061066b61445f565b348015610c2757600080fd5b5061066b610c3636600461c95b565b614cea565b348015610c4757600080fd5b50602f5461067d565b348015610c5c57600080fd5b5060135461067d565b348015610c7157600080fd5b5061067d610c8036600461c93e565b61517e565b348015610c9157600080fd5b50610ca5610ca036600461c8af565b6151ed565b6040516106879190600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b348015610cf357600080fd5b50602f546000908152603c602052604090206002015461067d565b348015610d1a57600080fd5b5061066b610d2936600461c95b565b615229565b348015610d3a57600080fd5b5061066b610d4936600461d028565b615300565b348015610d5a57600080fd5b5060285461067d565b348015610d6f57600080fd5b50601d546001600160a01b0316610b0c565b348015610d8d57600080fd5b5061066b610d9c36600461d078565b6155bd565b348015610dad57600080fd5b5061066b610dbc36600461c8af565b6156fa565b348015610dcd57600080fd5b5061066b61592a565b348015610de257600080fd5b5061066b610df136600461c95b565b615996565b348015610e0257600080fd5b5061066b610e1136600461c95b565b615abd565b348015610e2257600080fd5b5061067d610e3136600461c95b565b615b94565b348015610e4257600080fd5b50610e56610e5136600461c95b565b615c5e565b604051610687919060006080820190506001600160a01b0383511682526001600160a01b036020840151166020830152604083015160408301526060830151606083015292915050565b348015610eac57600080fd5b5061066b610ebb36600461d11f565b615d23565b348015610ecc57600080fd5b5061066b610edb36600461c95b565b615fd9565b348015610eec57600080fd5b5061067d61610b565b348015610f0157600080fd5b5060408051808201909152600381527f4e544e000000000000000000000000000000000000000000000000000000000060208201526106f2565b348015610f4757600080fd5b5061067d610f5636600461c95b565b616165565b348015610f6757600080fd5b5061066b610f7636600461c8af565b61620f565b348015610f8757600080fd5b50600b5461067d565b348015610f9c57600080fd5b5061067d610fab36600461c8af565b616373565b348015610fbc57600080fd5b5061067d610fcb36600461c8af565b616394565b348015610fdc57600080fd5b50610fe56163aa565b604051610687919061d158565b348015610ffe57600080fd5b5061073f61100d36600461c8af565b616483565b34801561101e57600080fd5b5061067d61102d36600461cbed565b6164e4565b34801561103e57600080fd5b50611047616505565b604051610687919061d1db565b34801561106057600080fd5b5061066b61106f36600461c93e565b61669b565b34801561108057600080fd5b50611089616820565b604051610687919061d1ee565b3480156110a257600080fd5b506110ab616928565b6040516106879392919061d246565b3480156110c657600080fd5b506110476110d536600461c95b565b6169c2565b3480156110e657600080fd5b5061066b6110f536600461d289565b616c4a565b34801561110657600080fd5b5061066b61111536600461c93e565b616cae565b34801561112657600080fd5b5061066b61113536600461c93e565b616e09565b34801561114657600080fd5b5061066b61115536600461c93e565b61718b565b34801561116657600080fd5b5061116f617294565b60405161068792919061d2dc565b34801561118957600080fd5b506111926173bb565b604051610687919061d30a565b3480156111ab57600080fd5b5060335461067d565b3480156111c057600080fd5b5060075461067d565b3480156111d557600080fd5b506111de617476565b604051610687919061d403565b3480156111f757600080fd5b5061066b61120636600461c93e565b6175dc565b34801561121757600080fd5b5061066b6176e5565b34801561122c57600080fd5b5061066b61123b36600461c93e565b617747565b34801561124c57600080fd5b506049546001600160a01b0316610b0c565b34801561126a57600080fd5b5061067d61792e565b34801561127f57600080fd5b5061066b61128e36600461c93e565b61793d565b34801561129f57600080fd5b5061066b6112ae36600461c93e565b617a98565b3480156112bf57600080fd5b5061067d6112ce36600461d532565b617ba1565b3480156112df57600080fd5b5061066b6112ee36600461c95b565b617c20565b3480156112ff57600080fd5b5060315461067d565b34801561131457600080fd5b5061066b617ca5565b34801561132957600080fd5b5061067d61133836600461d532565b617cad565b34801561134957600080fd5b5061073f61135836600461c95b565b617d2b565b34801561136957600080fd5b506025546001600160a01b0316610b0c565b34801561138757600080fd5b5061066b61139636600461c95b565b617d9c565b3480156113a757600080fd5b5061066b6113b636600461c95b565b617ece565b3480156113c757600080fd5b5061066b6113d636600461c93e565b61801d565b3480156113e757600080fd5b5061067d600481565b3480156113fc57600080fd5b50611405618126565b604051610687919061d560565b34801561141e57600080fd5b50610e5661142d36600461c95b565b6182c4565b34801561143e57600080fd5b506019546001600160a01b0316610b0c565b34801561145c57600080fd5b5061066b61146b36600461d56f565b6182ed565b34801561147c57600080fd5b5060295461067d565b601c546000906001600160a01b03163314806114ab57506023546001600160a01b031633145b806114c05750601d546001600160a01b031633145b6115375760405162461bcd60e51b815260206004820152602860248201527f63616c6c6572206973206e6f7420616e206163636f756e746162696c6974792060448201527f636f6e747261637400000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61153f61c4af565b6049546001600160a01b03166399ac2d4861155986618589565b856040518363ffffffff1660e01b815260040161157792919061d5a4565b6000604051808303816000875af1158015611596573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115be919081019061d780565b6019546001600160a01b0316600090815260416020526040812080549295509293508492916115ee90849061d7f6565b90915550506001600160a01b038085166000908152604260209081526040918290208451815490851673ffffffffffffffffffffffffffffffffffffffff1991821617825591850151600182018054918616918416919091179055918401516002830180549190941691161790915560608201518291906003820190611674908261d8a3565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c8201805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f8201556102008201516010820155610220820151601182019061173e908261d8a3565b5061024082015160128201805460ff191660018360058111156117635761176361ca22565b021790555061026091909101516013909101556001600160a01b0384166000908152604260205260409020611797906188a3565b5092915050565b6001600160a01b0381166000908152600160205260408120545b92915050565b60006117c86188ee565b6117d3338484618945565b5060016117b860008055565b6117e76188ee565b6001600160a01b03808216600081815260426020526040902060010154909116146118545760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206d757374206265207265676973746572656400000000604482015260640161152e565b6001600160a01b038181166000908152604260205260409020541633146118e35760405162461bcd60e51b815260206004820152602c60248201527f726571756972652063616c6c657220746f2062652076616c696461746f72206160448201527f646d696e206163636f756e740000000000000000000000000000000000000000606482015260840161152e565b6118ec81618a9e565b6118f560008055565b50565b6025546001600160a01b031633146119525760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161152e565b601354604080516080808252600f908201527f756e626f6e64696e67506572696f64000000000000000000000000000000000060a0820152602081019290925281018290524360608201527f207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba9060c00160405180910390a1601355565b601c54600090819081906001600160a01b03163314806119f957506023546001600160a01b031633145b80611a0e5750601d546001600160a01b031633145b611a805760405162461bcd60e51b815260206004820152602860248201527f63616c6c6572206973206e6f7420616e206163636f756e746162696c6974792060448201527f636f6e7472616374000000000000000000000000000000000000000000000000606482015260840161152e565b611a8861c4af565b6049546001600160a01b031663a00f313f611aa28b618589565b8a438b8b8b6040518763ffffffff1660e01b8152600401611ac89695949392919061d965565b6000604051808303816000875af1158015611ae7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b0f919081019061d9b6565b6102008301516019546001600160a01b031660009081526041602052604081208054949950919750919550929350869291611b4b90849061d7f6565b90915550506001600160a01b03808a166000908152604260209081526040918290208451815490851673ffffffffffffffffffffffffffffffffffffffff1991821617825591850151600182018054918616918416919091179055918401516002830180549190941691161790915560608201518291906003820190611bd1908261d8a3565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c8201805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f82015561020082015160108201556102208201516011820190611c9b908261d8a3565b5061024082015160128201805460ff19166001836005811115611cc057611cc061ca22565b021790555061026091909101516013909101556001600160a01b0389166000908152604260205260409020611cf4906188a3565b50955095509592505050565b6025546001600160a01b03163314611d5a5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161152e565b601c546040805160808082526016908201527f6163636f756e746162696c697479436f6e74726163740000000000000000000060a08201526001600160a01b03928316602082015291831682820152436060830152517fe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a09181900360c00190a1601c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6025546001600160a01b03163314611e635760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161152e565b60008111611eb35760405162461bcd60e51b815260206004820181905260248201527f636c7573746572696e67207468726573686f6c642063616e6e6f742062652030604482015260640161152e565b602c546040805160808082526013908201527f636c7573746572696e675468726573686f6c640000000000000000000000000060a0820152602081019290925281018290524360608201527f207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba9060c00160405180910390a1603a55565b601c546000906001600160a01b0316331480611f5657506023546001600160a01b031633145b80611f6b5750601d546001600160a01b031633145b611fdd5760405162461bcd60e51b815260206004820152602860248201527f63616c6c6572206973206e6f7420616e206163636f756e746162696c6974792060448201527f636f6e7472616374000000000000000000000000000000000000000000000000606482015260840161152e565b6049546000906001600160a01b03166341b6cb0f611ffa87618589565b4387876040518563ffffffff1660e01b815260040161201c949392919061da06565b6000604051808303816000875af115801561203b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612063919081019061da34565b6001600160a01b038087166000908152604260209081526040918290208451815490851673ffffffffffffffffffffffffffffffffffffffff199182161782559185015160018201805491861691841691909117905591840151600283018054919094169116179091556060820151919250829160038201906120e6908261d8a3565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c8201805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f820155610200820151601082015561022082015160118201906121b0908261d8a3565b5061024082015160128201805460ff191660018360058111156121d5576121d561ca22565b02179055506102609190910151601390910155610200015190505b9392505050565b6025546001600160a01b031633146122515760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161152e565b6001600160a01b0381166122cd5760405162461bcd60e51b815260206004820152602960248201527f696e76616c696420636f6e7472616374206164647265737320666f72206c697160448201527f756964206c6f6769630000000000000000000000000000000000000000000000606482015260840161152e565b6048546040805160808082526013908201527f6c69717569644c6f676963436f6e74726163740000000000000000000000000060a08201526001600160a01b03928316602082015291831682820152436060830152517fe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a09181900360c00190a16048805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600080546001036123cf5760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e6379206465746563746564000000604482015260640161152e565b506044545b90565b6123df61c4af565b60005460011415806123fb5750601c546001600160a01b031633145b6124475760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e6379206465746563746564000000604482015260640161152e565b6117b882618589565b600061245a6188ee565b6001600160a01b0384166000908152603f60209081526040808320338452909152902054828110156124f45760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000606482015260840161152e565b6124ff858585618b89565b612513853361250e868561da69565b618945565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161255891815260200190565b60405180910390a350506000805560016121f0565b6047546001600160a01b031633146125ed5760405162461bcd60e51b815260206004820152602360248201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60448201527f636f6c0000000000000000000000000000000000000000000000000000000000606482015260840161152e565b6125f5618c50565b565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101919091525b506000908152600960209081526040918290208251610100808201855282546001600160a01b0390811683526001840154169382019390935260028201549381019390935260038101546060840152600481015460808401526005015460ff808216151560a08501529181048216151560c084015262010000900416151560e082015290565b6025546001600160a01b031633146127195760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161152e565b6029548111156127915760405162461bcd60e51b815260206004820152603460248201527f7363686564756c6520746f74616c206475726174696f6e20657863656564732060448201527f6d617820616c6c6f776564206475726174696f6e000000000000000000000000606482015260840161152e565b61279b8484618d87565b82604560008282546127ad919061da69565b909155506127bf905084848484618e21565b50505050565b6025546001600160a01b0316331461281f5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161152e565b6001600160a01b0381166128755760405162461bcd60e51b815260206004820152601b60248201527f706f6f6c2063616e6e6f74206265207a65726f20616464726573730000000000604482015260640161152e565b6018546040805160808082526013908201527f7769746868656c6452657761726473506f6f6c0000000000000000000000000060a08201526001600160a01b03928316602082015291831682820152436060830152517fe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a09181900360c00190a16018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6025546001600160a01b0316331461297e5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161152e565b6129888282618d87565b5050565b6025546001600160a01b031633146129e65760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161152e565b6129f26004600a61db63565b811115612a415760405162461bcd60e51b815260206004820152601260248201527f43616e6e6f742065786365656420313030250000000000000000000000000000604482015260640161152e565b6016546040805160808082526012908201527f70726f706f73657252657761726452617465000000000000000000000000000060a0820152602081019290925281018290524360608201527f207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba9060c00160405180910390a1601655565b6000612ac86188ee565b6001600160a01b03838116600090815260426020526040902054818616911603612b345760405162461bcd60e51b815260206004820152601f60248201527f63616e6e6f7420626f6e6420504153207573696e6720616c6c6f77616e636500604482015260640161152e565b6001600160a01b038416600090815260406020818152818320338452905290205482811015612ba55760405162461bcd60e51b815260206004820152601960248201527f616d6f756e7420657863656564656420616c6c6f77616e636500000000000000604482015260640161152e565b612bb98533612bb4868561da69565b6190bf565b612bc5848487336191c1565b9150506121f060008055565b6025546001600160a01b03163314612c2b5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161152e565b601d54604080516080808252600e908201527f6f7261636c65436f6e747261637400000000000000000000000000000000000060a08201526001600160a01b03928316602082015291831682820152436060830152517fe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a09181900360c00190a1601d805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03838116918217909255601e546040517f7adbf973000000000000000000000000000000000000000000000000000000008152600481019290925290911690637adbf97390602401600060405180830381600087803b158015612d2f57600080fd5b505af1158015612d43573d6000803e3d6000fd5b50506020546040517f7adbf9730000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301529091169250637adbf9739150602401600060405180830381600087803b158015612da757600080fd5b505af1158015612dbb573d6000803e3d6000fd5b5050602480546040517f7adbf9730000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301529091169350637adbf9739250015b600060405180830381600087803b158015612e1f57600080fd5b505af1158015612e33573d6000803e3d6000fd5b5050505050565b612e4261c57d565b6047546001600160a01b03163314612ec25760405162461bcd60e51b815260206004820152602360248201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60448201527f636f6c0000000000000000000000000000000000000000000000000000000000606482015260840161152e565b612eca6188ee565b436032819055602f546000828152603060209081526040808320849055928252603c905281812060030154603954602a55601c5492517f6c9789b000000000000000000000000000000000000000000000000000000000815293101560048401819052929091829182916001600160a01b031690636c9789b0906024016060604051808303816000875af1158015612f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8a919061db6f565b6023546040517f6c9789b0000000000000000000000000000000000000000000000000000000008152881515600482015293965091945092506000916001600160a01b0390911690636c9789b0906024016020604051808303816000875af1158015612ffa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061301e919061db9d565b601d54604080517f4bb278f300000000000000000000000000000000000000000000000000000000815290519293506000926001600160a01b0390921691634bb278f391600480820192602092909190829003018187875af1158015613088573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ac919061dbb6565b9050851561360c576022546045546046546033546040517f92eff3cd0000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915260448201524260648201526000916001600160a01b0316906392eff3cd90608401602060405180830381865afa158015613134573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613158919061db9d565b905080604654101561316957506046545b6131733082618d87565b8060466000828254613185919061da69565b909155506131949050426194bf565b604560008282546131a5919061d7f6565b9091555050306000908152604160205260409020546131c590479061965f565b6131cd61a343565b6131d5618c50565b60008060006131e261a40e565b601d546040517fda78110e00000000000000000000000000000000000000000000000000000000815293965091945092506001600160a01b03169063da78110e906132359086908590879060040161d246565b600060405180830381600087803b15801561324f57600080fd5b505af1158015613263573d6000803e3d6000fd5b5050601c546040517fe08b14ed0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063e08b14ed91506132b090859060040161d30a565b600060405180830381600087803b1580156132ca57600080fd5b505af11580156132de573d6000803e3d6000fd5b50506023546040517fe3deef9c0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063e3deef9c915061332e90603d90859060040161dc54565b600060405180830381600087803b15801561334857600080fd5b505af115801561335c573d6000803e3d6000fd5b50506031546026555050603554601155603654601a55603754601b55603854602b55603a54602c556023546040517fc024cc2c0000000000000000000000000000000000000000000000000000000081524360048201526001600160a01b039091169063c024cc2c90602401600060405180830381600087803b1580156133e257600080fd5b505af11580156133f6573d6000803e3d6000fd5b5050602f546000908152603c6020526040812060020154602654909350909150613420904361d7f6565b9050426033819055506001602f600082825461343c919061d7f6565b9091555050602f5460408051603d805460e0602082028401810190945260c083018181526135be9594849391929060009085015b82821015613554576000848152602090819020604080516060810182526003860290920180546001600160a01b03168352600181015493830193909352600283018054929392918401916134c39061d809565b80601f01602080910402602001604051908101604052809291908181526020018280546134ef9061d809565b801561353c5780601f106135115761010080835404028352916020019161353c565b820191906000526020600020905b81548152906001019060200180831161351f57829003601f168201915b50505050508152505081526020019060010190613470565b5050505081526020018581526020014381526020018481526020018b8152602001604051806080016040528060106000016001015481526020016010600001600a015481526020016010600001600b0154815260200160106015016006015481525081525061a712565b602f5460465460455460408051938452602084019290925282820152517f3bb7b347508b7c148ec2094ac60d2e3d8b7595421025643f08b45cb78b326b589181900360600190a15050505050505b801561371157601d54604080517f0f65875c00000000000000000000000000000000000000000000000000000000815290516001600160a01b0390921691630f65875c9160048082019260009290919082900301818387803b15801561367157600080fd5b505af1158015613685573d6000803e3d6000fd5b5050601e54604080517fa2e6204500000000000000000000000000000000000000000000000000000000815290516001600160a01b03909216935063a2e62045925060048082019260209290919082900301816000875af192505050801561370a575060408051601f3d908101601f191682019092526137079181019061dbb6565b60015b1561371157505b6040805160c080820183526026548252602754602080840191909152602a5483850152602c54606080850191909152845180820186528a81528083018a9052808601899052608080860191909152855180820187526011548152601a5481850152601b5481880152602b549281019290925260a08501919091528451908101855260055460ff16151581528a151581830152602f546000908152603c83528581208651815460e0958102820186018952958101868152969793969387019590949193859390928592919085015b828210156138c2576000848152602090819020604080516060810182526003860290920180546001600160a01b03168352600181015493830193909352600283018054929392918401916138319061d809565b80601f016020809104026020016040519081016040528092919081815260200182805461385d9061d809565b80156138aa5780601f1061387f576101008083540402835291602001916138aa565b820191906000526020600020905b81548152906001019060200180831161388d57829003601f168201915b505050505081525050815260200190600101906137de565b5050505081526020016001820154815260200160028201548152602001600382015481526020016004820154815260200160058201604051806080016040529081600082015481526020016001820154815260200160028201548152602001600382015481525050815250508152602001828152509750505050505050506123d460008055565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905290546001036126395760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e6379206465746563746564000000604482015260640161152e565b919050565b6047546001600160a01b03163314613a5f5760405162461bcd60e51b815260206004820152602360248201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60448201527f636f6c0000000000000000000000000000000000000000000000000000000000606482015260840161152e565b613a6761a343565b613a6f61a40e565b505042603355504360328190556000908152603060209081526040808320839055602f548151603d805460e09581028301860190945260c082018481526118f596939592948594919390919085015b82821015613ba2576000848152602090819020604080516060810182526003860290920180546001600160a01b0316835260018101549383019390935260028301805492939291840191613b119061d809565b80601f0160208091040260200160405190810160405280929190818152602001828054613b3d9061d809565b8015613b8a5780601f10613b5f57610100808354040283529160200191613b8a565b820191906000526020600020905b815481529060010190602001808311613b6d57829003601f168201915b50505050508152505081526020019060010190613abe565b505050908252506000602080830191909152436040808401919091526026546060808501919091526080808501899052825190810183526011548152601a5493810193909352601b5491830191909152602b549082015260a09091015261a712565b6000613c0e6188ee565b6117d33384846190bf565b6025546001600160a01b03163314613c735760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161152e565b602554604080516080808252600f908201527f6f70657261746f724163636f756e74000000000000000000000000000000000060a08201526001600160a01b03928316602082015291831682820152436060830152517fe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a09181900360c00190a16025805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03838116918217909255601d546040517fb3ab15fb00000000000000000000000000000000000000000000000000000000815260048101929092529091169063b3ab15fb90602401600060405180830381600087803b158015613d7757600080fd5b505af1158015613d8b573d6000803e3d6000fd5b5050601e546040517fb3ab15fb0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b158015613def57600080fd5b505af1158015613e03573d6000803e3d6000fd5b5050601f546040517fb3ab15fb0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b158015613e6757600080fd5b505af1158015613e7b573d6000803e3d6000fd5b50506020546040517fb3ab15fb0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b158015613edf57600080fd5b505af1158015613ef3573d6000803e3d6000fd5b50506021546040517fb3ab15fb0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b158015613f5757600080fd5b505af1158015613f6b573d6000803e3d6000fd5b50506023546040517fb3ab15fb0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b158015613fcf57600080fd5b505af1158015613fe3573d6000803e3d6000fd5b5050602480546040517fb3ab15fb0000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152909116935063b3ab15fb925001612e05565b6025546001600160a01b0316331461408b5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161152e565b60008160600151116141055760405162461bcd60e51b815260206004820152603260248201527f676173206c696d697420626f756e642064697669736f72206e6565647320746f60448201527f2062652067726561746572207468616e20300000000000000000000000000000606482015260840161152e565b600081602001511161417f5760405162461bcd60e51b815260206004820152603660248201527f6261736520666565206368616e67652064656e6f6d696e61746f72206e65656460448201527f7320746f2062652067726561746572207468616e203000000000000000000000606482015260840161152e565b60008160400151116141f95760405162461bcd60e51b815260206004820152603060248201527f656c6173746963697479206d756c7469706c696572206e6565647320746f206260448201527f652067726561746572207468616e203000000000000000000000000000000000606482015260840161152e565b604080516080810182526011548152601a546020820152601b5481830152602b54606082015290517fa1a63f0900be3abc55a58106fb99ccb53c1cdeaee2488038528f520d142563cc9161424e91849061dd0c565b60405180910390a180516035556020810151603655604081015160375560600151603855565b6025546001600160a01b031633146142ce5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161152e565b6024546040805160808082526012908201527f61756374696f6e656572436f6e7472616374000000000000000000000000000060a08201526001600160a01b03928316602082015291831682820152436060830152517fe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a09181900360c00190a16024805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038381169190911790915560205416156118f5576020546040517eede7e40000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301529091169062ede7e490602401612e05565b6000805460011415806143ea5750601c546001600160a01b031633145b806143ff57506023546001600160a01b031633145b61444b5760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e6379206465746563746564000000604482015260640161152e565b61445482618589565b610240015192915050565b61446761a343565b600080600061447461a40e565b9250925092506000835167ffffffffffffffff8111156144965761449661cea5565b6040519080825280602002602001820160405280156144bf578160200160208202803683370190505b50602854603d54919250600091829110156145425760405162461bcd60e51b815260206004820152602760248201527f636f6d6d69747465652073697a652065786365656473204d6178436f6d6d697460448201527f74656553697a6500000000000000000000000000000000000000000000000000606482015260840161152e565b60005b603d54811015614b47576000603d82815481106145645761456461dd58565b60009182526020909120600390910201546001600160a01b03169050806145cd5760405162461bcd60e51b815260206004820152600f60248201527f696e76616c696420616464726573730000000000000000000000000000000000604482015260640161152e565b808583815181106145e0576145e061dd58565b60200260200101906001600160a01b031690816001600160a01b0316815250506000603d83815481106146155761461561dd58565b9060005260206000209060030201600101549050600081116146795760405162461bcd60e51b815260206004820152601460248201527f30207374616b6520696e20636f6d6d6974746565000000000000000000000000604482015260640161152e565b614683818661d7f6565b945082156146db57808410156146db5760405162461bcd60e51b815260206004820152601c60248201527f636f6d6d6974746565206d656d62657273206e6f7420736f7274656400000000604482015260640161152e565b6001600160a01b038083166000818152604260205260409020600181015493965086939092161461474e5760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f7220646f6573206e6f742065786973740000000000000000604482015260640161152e565b818160050154146147a15760405162461bcd60e51b815260206004820152600e60248201527f7374616b65206d69736d61746368000000000000000000000000000000000000604482015260640161152e565b8984815181106147b3576147b361dd58565b602090810291909101015160028201546001600160a01b0390811691161461481d5760405162461bcd60e51b815260206004820152601760248201527f6f7261636c652061646472657373206d69736d61746368000000000000000000604482015260640161152e565b88848151811061482f5761482f61dd58565b60200260200101516001600160a01b0316603d85815481106148535761485361dd58565b60009182526020909120600390910201546001600160a01b0316146148e05760405162461bcd60e51b815260206004820152602860248201527f6163636f756e746162696c697479207265706f7274657220616464726573732060448201527f6d69736d61746368000000000000000000000000000000000000000000000000606482015260840161152e565b8784815181106148f2576148f261dd58565b602090810291909101015181546001600160a01b039081169116146149595760405162461bcd60e51b815260206004820152601960248201527f74726561737572792061646472657373206d69736d6174636800000000000000604482015260640161152e565b6000601282015460ff1660058111156149745761497461ca22565b146149c15760405162461bcd60e51b815260206004820152601460248201527f76616c696461746f72206e6f7420616374697665000000000000000000000000604482015260640161152e565b603e84815481106149d4576149d461dd58565b906000526020600020016040516020016149ee919061ddf6565b6040516020818303038152906040528051906020012081600301604051602001614a18919061ddf6565b6040516020818303038152906040528051906020012014614a7b5760405162461bcd60e51b815260206004820152600e60248201527f656e6f6465206d69736d61746368000000000000000000000000000000000000604482015260640161152e565b603d8481548110614a8e57614a8e61dd58565b9060005260206000209060030201600201604051602001614aaf919061ddf6565b6040516020818303038152906040528051906020012081601101604051602001614ad9919061ddf6565b6040516020818303038152906040528051906020012014614b3c5760405162461bcd60e51b815260206004820152601660248201527f636f6e73656e737573206b6579206d69736d6174636800000000000000000000604482015260640161152e565b505050600101614545565b506034548214614b995760405162461bcd60e51b815260206004820152601460248201527f746f74616c207374616b65206d69736d61746368000000000000000000000000604482015260640161152e565b60005b602e54811015614ce1576000805b8551811015614c1457858181518110614bc557614bc561dd58565b60200260200101516001600160a01b0316602e8481548110614be957614be961dd58565b6000918252602090912001546001600160a01b031603614c0c5760019150614c14565b600101614baa565b50600060426000602e8581548110614c2e57614c2e61dd58565b60009182526020808320909101546001600160a01b03168352820192909252604001812091508215159003614cd7578381600501541115614cd75760405162461bcd60e51b815260206004820152602360248201527f68696768207374616b6520666f72206e6f6e2d636f6d6d6974746565206d656d60448201527f6265720000000000000000000000000000000000000000000000000000000000606482015260840161152e565b5050600101614b9c565b50505050505050565b6025546001600160a01b03163314614d445760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161152e565b602354604080517f5ca1809c00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691635ca1809c9160048083019260209291908290030181865afa158015614da7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614dcb919061db9d565b602354604080517fc549176e00000000000000000000000000000000000000000000000000000000815290519293506000926001600160a01b039092169163c549176e916004808201926020929091908290030181865afa158015614e34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e58919061db9d565b905060008311614eaa5760405162461bcd60e51b815260206004820152601860248201527f65706f636820706572696f642063616e6e6f7420626520300000000000000000604482015260640161152e565b6001614eb6838361d7f6565b614ec0919061da69565b8311614f5b5760405162461bcd60e51b8152602060048201526044602482018190527f65706f636820706572696f64206e6565647320746f2062652067726561746572908201527f207468616e206f6d697373696f6e44656c74612b6c6f6f6b6261636b57696e6460648201527f6f772d3100000000000000000000000000000000000000000000000000000000608482015260a40161152e565b601d54604080517fb78dec5200000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163b78dec529160048083019260209291908290030181865afa158015614fbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614fe2919061db9d565b905083614ff082600261de02565b111561503e5760405162461bcd60e51b815260206004820152601960248201527f65706f636820706572696f6420697320746f6f20736d616c6c00000000000000604482015260640161152e565b601d54604080517f57eba75900000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916357eba7599160048083019260209291908290030181865afa1580156150a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906150c5919061db9d565b9050846150d382600261de02565b11156151215760405162461bcd60e51b815260206004820152601960248201527f65706f636820706572696f6420697320746f6f20736d616c6c00000000000000604482015260640161152e565b6031859055602f546000908152603c6020908152604091829020600301548251888152918201819052917f2eea6438d890c8603d4df81ad1bad2a4ea45c02b4837165f461ff3c81603abc7910160405180910390a1505050505050565b600080546001036151d15760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e6379206465746563746564000000604482015260640161152e565b506001600160a01b031660009081526041602052604090205490565b61521f6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6121f0838361a80d565b6025546001600160a01b031633146152835760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161152e565b601054604080516080808252600b908201527f747265617375727946656500000000000000000000000000000000000000000060a0820152602081019290925281018290524360608201527f207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba9060c00160405180910390a1601055565b6153086188ee565b6001600160a01b0380831660008181526042602052604090206001810154909216146153765760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206e6f7420726567697374657265640000000000000000604482015260640161152e565b80546001600160a01b031633146153f55760405162461bcd60e51b815260206004820152602f60248201527f726571756972652063616c6c657220746f2062652076616c696461746f72207460448201527f72656173757279206163636f756e740000000000000000000000000000000000606482015260840161152e565b6153fe8361a90d565b156154715760405162461bcd60e51b815260206004820152602260248201527f76616c696461746f72206d757374206e6f7420626520696e20636f6d6d69747460448201527f6565000000000000000000000000000000000000000000000000000000000000606482015260840161152e565b60008061547d8461a96c565b9250905081156154cf5760405162461bcd60e51b815260206004820152600b60248201527f656e6f6465206572726f72000000000000000000000000000000000000000000604482015260640161152e565b60018301546001600160a01b038281169116146155545760405162461bcd60e51b815260206004820152602760248201527f76616c696461746f72206e6f646520616464726573732063616e27742062652060448201527f7570646174656400000000000000000000000000000000000000000000000000606482015260840161152e565b60018301546040517f0693af84e99c5d55723f139a6badcfffa980bb354cf9c32bd5da745e9edaa46b9161559a916001600160a01b03909116906003870190889061de19565b60405180910390a1600383016155b0858261d8a3565b5050505061298860008055565b6155c56188ee565b6000604051806102800160405280336001600160a01b0316815260200160006001600160a01b03168152602001856001600160a01b0316815260200186815260200160106000016002015481526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b031681526020016000815260200143815260200160008152602001600081526020018481526020016000600581111561568a5761568a61ca22565b815260200161569b6012600a61db63565b905290506156a9818361a9b7565b60208101516101808201516040517f8ad8bd2eb6950e5f332fd3a6dca48cb358ecfe3057848902b98cbdfe455c915c926156e892339289918b9161de4d565b60405180910390a1506127bf60008055565b6157026188ee565b6001600160a01b038083166000818152604260205260409020600101549091161461576f5760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206d757374206265207265676973746572656400000000604482015260640161152e565b6001600160a01b038281166000908152604260205260409020541633146157fe5760405162461bcd60e51b815260206004820152602c60248201527f726571756972652063616c6c657220746f2062652076616c696461746f72206160448201527f646d696e206163636f756e740000000000000000000000000000000000000000606482015260840161152e565b61580a6004600a61db63565b8111156158595760405162461bcd60e51b815260206004820152601f60248201527f7265717569726520636f727265637420636f6d6d697373696f6e207261746500604482015260640161152e565b604080516060810182526001600160a01b038481168252436020808401918252838501868152600f80546000908152600d9093529582208551815473ffffffffffffffffffffffffffffffffffffffff19169516949094178455915160018085019190915591516002909301929092558354929390929091906158dd90849061d7f6565b90915550506040518281526001600160a01b038416907f4fba51c92fa3d6ad8374d394f6cd5766857552e153d7384a8f23aa4ce9a8a7cf9060200160405180910390a25061298860008055565b6025546001600160a01b031633146159845760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161152e565b6125f56005805460ff19166001179055565b6025546001600160a01b031633146159f05760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161152e565b60008111615a405760405162461bcd60e51b815260206004820152601960248201527f636f6d6d69747465652073697a652063616e2774206265203000000000000000604482015260640161152e565b602854604080516080808252600d908201527f636f6d6d697474656553697a650000000000000000000000000000000000000060a0820152602081019290925281018290524360608201527f207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba9060c00160405180910390a1602855565b6025546001600160a01b03163314615b175760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161152e565b6029546040805160808082526013908201527f6d61785363686564756c654475726174696f6e0000000000000000000000000060a0820152602081019290925281018290524360608201527f207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba9060c00160405180910390a1602955565b60008054600103615be75760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e6379206465746563746564000000604482015260640161152e565b60008281526009602052604090206005015460ff16615c485760405162461bcd60e51b815260206004820152601960248201527f756e626f6e64696e67206e6f74206170706c6965642079657400000000000000604482015260640161152e565b5060009081526009602052604090206003015490565b60408051608081018252600080825260208201819052918101829052606081018290529054600103615cd25760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e6379206465746563746564000000604482015260640161152e565b50600090815260066020908152604091829020825160808101845281546001600160a01b03908116825260018301541692810192909252600281015492820192909252600390910154606082015290565b601c546001600160a01b0316331480615d4657506023546001600160a01b031633145b80615d5b5750601d546001600160a01b031633145b615dcd5760405162461bcd60e51b815260206004820152602860248201527f63616c6c6572206973206e6f7420616e206163636f756e746162696c6974792060448201527f636f6e7472616374000000000000000000000000000000000000000000000000606482015260840161152e565b6049546000906001600160a01b0316630273a3ee615dea85618589565b846040518363ffffffff1660e01b8152600401615e0892919061dea8565b6000604051808303816000875af1158015615e27573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615e4f919081019061da34565b6001600160a01b038085166000908152604260209081526040918290208451815490851673ffffffffffffffffffffffffffffffffffffffff19918216178255918501516001820180549186169184169190911790559184015160028301805491909416911617909155606082015191925082916003820190615ed2908261d8a3565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c8201805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f82015561020082015160108201556102208201516011820190615f9c908261d8a3565b5061024082015160128201805460ff19166001836005811115615fc157615fc161ca22565b02179055506102608201518160130155905050505050565b6025546001600160a01b031633146160335760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161152e565b61603f6004600a61db63565b81111561608e5760405162461bcd60e51b815260206004820152601260248201527f43616e6e6f742065786365656420313030250000000000000000000000000000604482015260640161152e565b6015546040805160808082526014908201527f77697468686f6c64696e675468726573686f6c6400000000000000000000000060a0820152602081019290925281018290524360608201527f207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba9060c00160405180910390a1601555565b6000805460010361615e5760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e6379206465746563746564000000604482015260640161152e565b5060455490565b60006032546001616176919061d7f6565b8211156161eb5760405162461bcd60e51b815260206004820152602660248201527f63616e6e6f74206765742065706f636820696420666f7220612066757475726560448201527f20626c6f636b0000000000000000000000000000000000000000000000000000606482015260840161152e565b6032548211616207575060009081526030602052604090205490565b5050602f5490565b6025546001600160a01b031633146162695760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161152e565b6001600160a01b0382166000908152604160205260409020548111156162d15760405162461bcd60e51b815260206004820152601660248201527f416d6f756e7420657863656564732062616c616e636500000000000000000000604482015260640161152e565b6001600160a01b038216600090815260416020526040812080548392906162f990849061da69565b925050819055508060446000828254616312919061da69565b92505081905550806045600082825461632b919061da69565b90915550506040518181526001600160a01b038316907f5024dbeedf0c06664c9bd7be836915730c955e936972c020683dadf11d5488a3906020015b60405180910390a25050565b600061637d6188ee565b616389838333336191c1565b90506117b860008055565b600061639e6188ee565b6163898383333361ae38565b6060603e805480602002602001604051908101604052809291908181526020016000905b8282101561647a5783829060005260206000200180546163ed9061d809565b80601f01602080910402602001604051908101604052809291908181526020018280546164199061d809565b80156164665780601f1061643b57610100808354040283529160200191616466565b820191906000526020600020905b81548152906001019060200180831161644957829003601f168201915b5050505050815260200190600101906163ce565b50505050905090565b600061648d6188ee565b616498338484618b89565b6040518281526001600160a01b0384169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35060016117b860008055565b60006164ee6188ee565b6164fa8383863361ae38565b90506121f060008055565b61650d61c5ae565b602f546000908152603c602090815260408083208151815460e09481028201850190935260c08101838152909491938593919285929185015b8282101561662a576000848152602090819020604080516060810182526003860290920180546001600160a01b03168352600181015493830193909352600283018054929392918401916165999061d809565b80601f01602080910402602001604051908101604052809291908181526020018280546165c59061d809565b80156166125780601f106165e757610100808354040283529160200191616612565b820191906000526020600020905b8154815290600101906020018083116165f557829003601f168201915b50505050508152505081526020019060010190616546565b505050508152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820160405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505081525050905090565b6025546001600160a01b031633146166f55760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161152e565b6001600160a01b0381166167715760405162461bcd60e51b815260206004820152602b60248201527f736c617368657220636f6e74726163742063616e6e6f7420626520746865207a60448201527f65726f2061646472657373000000000000000000000000000000000000000000606482015260840161152e565b6049546040805160808082526007908201527f736c61736865720000000000000000000000000000000000000000000000000060a08201526001600160a01b03928316602082015291831682820152436060830152517fe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a09181900360c00190a16049805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6060603d805480602002602001604051908101604052809291908181526020016000905b8282101561647a576000848152602090819020604080516060810182526003860290920180546001600160a01b03168352600181015493830193909352600283018054929392918401916168979061d809565b80601f01602080910402602001604051908101604052809291908181526020018280546168c39061d809565b80156169105780601f106168e557610100808354040283529160200191616910565b820191906000526020600020905b8154815290600101906020018083116168f357829003601f168201915b50505050508152505081526020019060010190616844565b604754606090819081906001600160a01b031633146169af5760405162461bcd60e51b815260206004820152602360248201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60448201527f636f6c0000000000000000000000000000000000000000000000000000000000606482015260840161152e565b6169b761a40e565b925092509250909192565b6169ca61c5ae565b600054600103616a1c5760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e6379206465746563746564000000604482015260640161152e565b603254616a2a90600161d7f6565b821115616a9f5760405162461bcd60e51b815260206004820152602360248201527f63616e6e6f74206765742065706f636820666f7220612066757475726520626c60448201527f6f636b0000000000000000000000000000000000000000000000000000000000606482015260840161152e565b602f546032548311616abc57506000828152603060205260409020545b6000818152603c602090815260408083208151815460e09481028201850190935260c08101838152909491938593919285929185015b82821015616bd6576000848152602090819020604080516060810182526003860290920180546001600160a01b0316835260018101549383019390935260028301805492939291840191616b459061d809565b80601f0160208091040260200160405190810160405280929190818152602001828054616b719061d809565b8015616bbe5780601f10616b9357610100808354040283529160200191616bbe565b820191906000526020600020905b815481529060010190602001808311616ba157829003601f168201915b50505050508152505081526020019060010190616af2565b505050508152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820160405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505081525050915050919050565b6025546001600160a01b03163314616ca45760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161152e565b612988828261b458565b6025546001600160a01b03163314616d085760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161152e565b601f546040805160808082526015908201527f737570706c79436f6e74726f6c436f6e7472616374000000000000000000000060a08201526001600160a01b03928316602082015291831682820152436060830152517fe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a09181900360c00190a1601f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038381169190911790915560205416156118f5576020546040517f52e5a0500000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152909116906352e5a05090602401612e05565b616e116188ee565b6001600160a01b0380821660008181526042602052604090206001015490911614616e7e5760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206d757374206265207265676973746572656400000000604482015260640161152e565b6001600160a01b03808216600090815260426020526040902080549091163314616f105760405162461bcd60e51b815260206004820152602f60248201527f726571756972652063616c6c657220746f2062652076616c696461746f72207460448201527f72656173757279206163636f756e740000000000000000000000000000000000606482015260840161152e565b6000601282015460ff166005811115616f2b57616f2b61ca22565b03616f785760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f7220616c7265616479206163746976650000000000000000604482015260640161152e565b6002601282015460ff166005811115616f9357616f9361ca22565b148015616fa35750438160100154115b15616ff05760405162461bcd60e51b815260206004820152601760248201527f76616c696461746f72207374696c6c20696e206a61696c000000000000000000604482015260640161152e565b6004601282015460ff16600581111561700b5761700b61ca22565b14801561701b5750438160100154115b1561708e5760405162461bcd60e51b815260206004820152602660248201527f76616c696461746f72207374696c6c20696e206a61696c20666f7220696e616360448201527f7469766974790000000000000000000000000000000000000000000000000000606482015260840161152e565b6003601282015460ff1660058111156170a9576170a961ca22565b141580156170d057506005601282015460ff1660058111156170cd576170cd61ca22565b14155b61711c5760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206a61696c6564207065726d616e656e746c7900000000604482015260640161152e565b60128101805460ff191690558054602f546000908152603c60209081526040918290206003015491519182526001600160a01b038581169316917f60fcbf2d07dc712a93e59fb28f1edb626d7c2497c57ba71a8c0b3999ecb9a3b5910160405180910390a3506118f560008055565b6025546001600160a01b031633146171e55760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161152e565b602354604080516080808252601e908201527f6f6d697373696f6e4163636f756e746162696c697479436f6e7472616374000060a08201526001600160a01b03928316602082015291831682820152436060830152517fe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a09181900360c00190a16023805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b606080600360048180546172a79061d809565b80601f01602080910402602001604051908101604052809291908181526020018280546172d39061d809565b80156173205780601f106172f557610100808354040283529160200191617320565b820191906000526020600020905b81548152906001019060200180831161730357829003601f168201915b505050505091508080546173339061d809565b80601f016020809104026020016040519081016040528092919081815260200182805461735f9061d809565b80156173ac5780601f10617381576101008083540402835291602001916173ac565b820191906000526020600020905b81548152906001019060200180831161738f57829003601f168201915b50505050509050915091509091565b60606173c960005460011490565b156174165760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e6379206465746563746564000000604482015260640161152e565b602e80548060200260200160405190810160405280929190818152602001828054801561746c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161744e575b5050505050905090565b61747e61c607565b506040805161020081018252601054608080830191825260115460a08085019190915260125460c08086019190915260135460e08087019190915260145461010080880191909152601554610120808901919091526016546101408901526017546101608901526018546001600160a01b039081166101808a015260195481166101a08a0152601a546101c08a0152601b546101e08a015296885288519081018952601c5487168152601d548716602082810191909152601e548816828b0152601f5488166060808401919091528154891683890152602154891683880152602254891683870152602354891683860152602454891683850152818a019290925289519283018a52602554909716825260265496820196909652602754818901526028548187015260295494810194909452602a5492840192909252602b5490830152602c549082015292820192909252602d549181019190915290565b6025546001600160a01b031633146176365760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161152e565b6021546040805160808082526016908201527f757067726164654d616e61676572436f6e74726163740000000000000000000060a08201526001600160a01b03928316602082015291831682820152436060830152517fe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a09181900360c00190a16021805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6025546001600160a01b0316331461773f5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161152e565b6125f561b46e565b6025546001600160a01b031633146177a15760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161152e565b602080546040805160808082526015908201527f73746162696c697a6174696f6e436f6e7472616374000000000000000000000060a08201526001600160a01b039283169381019390935290831682820152436060830152517fe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a09181900360c00190a16020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038381169190911790915560245416156178d257602480546040517f4f5058950000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015290911691634f5058959101600060405180830381600087803b1580156178b957600080fd5b505af11580156178cd573d6000803e3d6000fd5b505050505b601f546001600160a01b0316156118f557601f546040517fdb7f521a0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301529091169063db7f521a90602401612e05565b61793a6004600a61db63565b81565b6025546001600160a01b031633146179975760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161152e565b601e54604080516080808252600b908201527f616375436f6e747261637400000000000000000000000000000000000000000060a08201526001600160a01b03928316602082015291831682820152436060830152517fe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a09181900360c00190a1601e805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038381169190911790915560205416156118f5576020546040517f4b8ef9430000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015290911690634b8ef94390602401612e05565b6025546001600160a01b03163314617af25760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161152e565b601954604080516080808252600f908201527f74726561737572794163636f756e74000000000000000000000000000000000060a08201526001600160a01b03928316602082015291831682820152436060830152517fe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a09181900360c00190a16019805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60008054600103617bf45760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e6379206465746563746564000000604482015260640161152e565b506001600160a01b039182166000908152603f6020908152604080832093909416825291909152205490565b6047546001600160a01b03163314617ca05760405162461bcd60e51b815260206004820152602360248201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60448201527f636f6c0000000000000000000000000000000000000000000000000000000000606482015260840161152e565b603255565b6125f561a343565b60008054600103617d005760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e6379206465746563746564000000604482015260640161152e565b506001600160a01b039182166000908152604060208181528183209390941682529190925290205490565b60008054600103617d7e5760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e6379206465746563746564000000604482015260640161152e565b50600090815260096020526040902060050154610100900460ff1690565b6025546001600160a01b03163314617df65760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161152e565b617e026004600a61db63565b811115617e515760405162461bcd60e51b815260206004820152601260248201527f43616e6e6f742065786365656420313030250000000000000000000000000000604482015260640161152e565b6017546040805160808082526010908201527f6f7261636c65526577617264526174650000000000000000000000000000000060a0820152602081019290925281018290524360608201527f207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba9060c00160405180910390a1601755565b6025546001600160a01b03163314617f285760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161152e565b60008111617f9d5760405162461bcd60e51b8152602060048201526024808201527f676173206c696d6974206e6565647320746f206265206772656174657220746860448201527f616e203000000000000000000000000000000000000000000000000000000000606482015260840161152e565b6039819055602a546040805160808082526008908201527f6761734c696d697400000000000000000000000000000000000000000000000060a0820152602081019290925281018290524360608201527f207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba9060c00160405180910390a150565b6025546001600160a01b031633146180775760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161152e565b602254604080516080808252601b908201527f696e666c6174696f6e436f6e74726f6c6c6572436f6e7472616374000000000060a08201526001600160a01b03928316602082015291831682820152436060830152517fe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a09181900360c00190a16022805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b61812e61c72a565b601c54604080517fc3f909d400000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163c3f909d4916004808301926101209291908290030181865afa158015618192573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906181b6919061df23565b6040805160c0810182526026548152602754602080830191909152602a5482840152602c54606080840191909152835190810184528385015181528185015181830152601c5484517fdbd183880000000000000000000000000000000000000000000000000000000081528551969750939560808701959294928501936001600160a01b039092169263dbd183889260048083019391928290030181865afa158015618266573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061828a919061db9d565b90528152604080516080810182526011548152601a54602082810191909152601b5492820192909252602b54606082015291015292915050565b604080516080810182526000808252602082018190529181018290526060810191909152615cd2565b602f546000908152603c60205260409020600301544310156183515760405162461bcd60e51b815260206004820152601260248201527f65706f6368206973206e6f7420656e6465640000000000000000000000000000604482015260640161152e565b601c5483906001600160a01b031633148061837657506023546001600160a01b031633145b8061839d57506001600160a01b038181166000908152604260205260409020600c01541633145b806183b25750601d546001600160a01b031633145b6184245760405162461bcd60e51b815260206004820152602260248201527f63616c6c6572206973206e6f742061207265776172642064697374726962757460448201527f6f72000000000000000000000000000000000000000000000000000000000000606482015260840161152e565b61842e828461d7f6565b33600090815260416020526040902054101561848c5760405162461bcd60e51b815260206004820152601260248201527f6e6f7420656e6f7567682062616c616e63650000000000000000000000000000604482015260640161152e565b6001600160a01b0384166184e25760405162461bcd60e51b815260206004820181905260248201527f76616c696461746f7220616464726573732063616e6e6f74206265207a65726f604482015260640161152e565b6001600160a01b038085166000818152604260205260409020600101549091161461854f5760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206e6f7420726567697374657265640000000000000000604482015260640161152e565b618559828461d7f6565b336000908152604160205260408120805490919061857890849061da69565b909155506127bf905084848461b492565b61859161c4af565b6001600160a01b0382166185e75760405162461bcd60e51b815260206004820152601e60248201527f63616e6e6f74207265717565737420656d7074792076616c696461746f720000604482015260640161152e565b6001600160a01b03808316600081815260426020526040902060010154909116146186545760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206e6f7420726567697374657265640000000000000000604482015260640161152e565b6001600160a01b0380831660009081526042602090815260409182902082516102808101845281548516815260018201548516928101929092526002810154909316918101919091526003820180549192916060840191906186b59061d809565b80601f01602080910402602001604051908101604052809291908181526020018280546186e19061d809565b801561872e5780601f106187035761010080835404028352916020019161872e565b820191906000526020600020905b81548152906001019060200180831161871157829003601f168201915b505050918352505060048201546020820152600582015460408201526006820154606082015260078201546080820152600882015460a0820152600982015460c0820152600a82015460e0820152600b820154610100820152600c8201546001600160a01b0316610120820152600d820154610140820152600e820154610160820152600f82015461018082015260108201546101a08201526011820180546101c0909201916187dd9061d809565b80601f01602080910402602001604051908101604052809291908181526020018280546188099061d809565b80156188565780601f1061882b57610100808354040283529160200191618856565b820191906000526020600020905b81548152906001019060200180831161883957829003601f168201915b5050509183525050601282015460209091019060ff16600581111561887d5761887d61ca22565b600581111561888e5761888e61ca22565b81526020016013820154815250509050919050565b600d810154156118f557600d8101546188be6012600a61db63565b826008015483600501546188d2919061da69565b6188dc919061de02565b6188e6919061dfd8565b601382015550565b6000541561893e5760405162461bcd60e51b815260206004820152601360248201527f7265656e7472616e637920646574656374656400000000000000000000000000604482015260640161152e565b6001600055565b6001600160a01b0383166189c05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161152e565b6001600160a01b038216618a3c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161152e565b6001600160a01b038381166000818152603f602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038116600090815260426020526040812090601282015460ff166005811115618ad057618ad061ca22565b14618b1d5760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206d757374206265206163746976650000000000000000604482015260640161152e565b60128101805460ff191660011790558054602f546000908152603c60209081526040918290206003015491519182526001600160a01b038581169316917f75bdcdbe540758778e669d108fbcb7ede734f27f46e4e5525eeb8ecf91849a9c910160405180910390a35050565b6001600160a01b038316600090815260416020526040902054811115618bf15760405162461bcd60e51b815260206004820152601660248201527f616d6f756e7420657863656564732062616c616e636500000000000000000000604482015260640161152e565b6001600160a01b03831660009081526041602052604081208054839290618c1990849061da69565b90915550506001600160a01b03821660009081526041602052604081208054839290618c4690849061d7f6565b9091555050505050565b600f54600e5410156125f557600e546000908152600d6020526040902060135460018201544391618c809161d7f6565b1115618c895750565b80546001600160a01b039081166000908152604260205260409081902060028401546004808301829055600c83015493517f19fac8fd000000000000000000000000000000000000000000000000000000008152929493909316926319fac8fd92618cf992910190815260200190565b600060405180830381600087803b158015618d1357600080fd5b505af1158015618d27573d6000803e3d6000fd5b5050600e80546000908152600d60205260408120805473ffffffffffffffffffffffffffffffffffffffff1916815560018082018390556002909101829055825490945091925090618d7a90849061d7f6565b90915550618c5092505050565b6001600160a01b03821660009081526041602052604081208054839290618daf90849061d7f6565b925050819055508060446000828254618dc8919061d7f6565b925050819055508060456000828254618de1919061d7f6565b90915550506040518181526001600160a01b038316907f48490b4407bb949b708ec5f514b4167f08f4969baaf78d53b05028adf369bfcf90602001616367565b6001600160a01b038416618e775760405162461bcd60e51b815260206004820152601c60248201527f7661756c7420616464726573732063616e6e6f74206265207a65726f00000000604482015260640161152e565b60008111618ec75760405162461bcd60e51b815260206004820181905260248201527f7363686564756c65206475726174696f6e2063616e6e6f74206265207a65726f604482015260640161152e565b42821015618f3d5760405162461bcd60e51b815260206004820152602560248201527f7363686564756c652063616e6e6f74207374617274206265666f72652063726560448201527f6174696f6e000000000000000000000000000000000000000000000000000000606482015260840161152e565b60008311618f8d5760405162461bcd60e51b815260206004820152601960248201527f616d6f756e742073686f756c6420626520706f73697469766500000000000000604482015260640161152e565b6001600160a01b0384166000908152600160205260408120805490910361900757600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387161790555b6040805160a08101825285815260006020808301828152838501888152606080860189815260808701868152895460018082018c558b8952978790209851600590910290980197885593519587019590955590516002860155925160038501555160049093019290925582518781529182018690529181018490526001600160a01b038716917fe8c9fd2e555ad3e633f249786eff2a2a523c05e21f497fbf8daadfb2e78a1edd910160405180910390a25050505050565b6001600160a01b0383166191155760405162461bcd60e51b815260206004820152601d60248201527f617070726f76652066726f6d20746865207a65726f2061646472657373000000604482015260640161152e565b6001600160a01b03821661916b5760405162461bcd60e51b815260206004820152601b60248201527f617070726f766520746f20746865207a65726f20616464726573730000000000604482015260640161152e565b6001600160a01b0383811660008181526040602081815281832094871680845294815291819020859055518481527f78225b0c38a851deb4e94d5318d250e0add756beaec6e85252429c41ed55f8ea9101618a91565b6001600160a01b03841660008181526042602052604081209091158015906191f8575060018101546001600160a01b038781169116145b6192445760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206e6f7420726567697374657265640000000000000000604482015260640161152e565b6000601282015460ff16600581111561925f5761925f61ca22565b146192ac5760405162461bcd60e51b815260206004820152601b60248201527f76616c696461746f72206e65656420746f206265206163746976650000000000604482015260640161152e565b600085116193225760405162461bcd60e51b815260206004820152602360248201527f616d6f756e74206e65656420746f206265207374726963746c7920706f73697460448201527f6976650000000000000000000000000000000000000000000000000000000000606482015260840161152e565b6001600160a01b03841660009081526041602052604090205485111561938a5760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74204e6577746f6e2062616c616e63650000000000604482015260640161152e565b6001600160a01b038416600090815260416020526040812080548792906193b290849061da69565b9091555050604080516080810182526001600160a01b0386811680835289821660208085018281528587018c8152436060808901918252600880546000908152600687528b90208a518154908b1673ffffffffffffffffffffffffffffffffffffffff199182161782559551600182018054918c16919097161790955592516002850155905160039093019290925588549054885191871686148083529382018e90529781019790975294959094938916937fcedee1b81e707f05d3f5f6b965053c24ce7759214e4886d87c02e0261367d1f2910160405180910390a46008805490600061949f8361dfec565b919050555060016008546194b3919061da69565b98975050505050505050565b600254600090815b8181101561965857600060016000600284815481106194e8576194e861dd58565b60009182526020808320909101546001600160a01b0316835282019290925260400181208054909250905b8181101561964d57600083828154811061952f5761952f61dd58565b9060005260206000209060050201905080600401548810156195b95760405162461bcd60e51b815260206004820152602860248201527f7363686564756c6520616c726561647920756e6c6f636b656420666f7220676960448201527f76656e2074696d65000000000000000000000000000000000000000000000000606482015260840161152e565b806002015488116195ca5750619645565b6004810188905560038101546002820154600091906195e9908b61da69565b106195f657508054619623565b60038201548254600284015461960c908c61da69565b619616919061de02565b619620919061dfd8565b90505b6001820154619632908261da69565b61963c908961d7f6565b60019092015595505b600101619513565b5050506001016194c7565b5050919050565b8115801561966b575080155b15619674575050565b601054600090670de0b6b3a76400009061968f90859061de02565b619699919061dfd8565b90508015619711576019546040516000916001600160a01b03169083908381818185875af1925050503d80600081146196ee576040519150601f19603f3d011682016040523d82523d6000602084013e6196f3565b606091505b509091505080151560010361970f5761970c828561da69565b93505b505b600080806197216004600a61db63565b60175461972e908861de02565b619738919061dfd8565b905060006197486004600a61db63565b601754619755908861de02565b61975f919061dfd8565b602354604080517f53b1821b00000000000000000000000000000000000000000000000000000000815290519293506000926001600160a01b03909216916353b1821b916004808201926020929091908290030181865afa1580156197c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906197ec919061db9d565b111561987257603b546198016004600a61db63565b61980b919061de02565b603d5460165461981b908a61de02565b619825919061de02565b61982f919061dfd8565b603b549094506198416004600a61db63565b61984b919061de02565b603d5460165461985b908961de02565b619865919061de02565b61986f919061dfd8565b92505b61987c848361d7f6565b619886908861da69565b9650619892838261d7f6565b61989c908761da69565b602354604080517f7f5e2f1100000000000000000000000000000000000000000000000000000000815290519298506000926001600160a01b0390921691637f5e2f11916004808201926020929091908290030181865afa158015619905573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190619929919061db9d565b603d5490915060009067ffffffffffffffff81111561994a5761994a61cea5565b604051908082528060200260200182016040528015619973578160200160208202803683370190505b5090506000806000805b603d54811015619efc57600060426000603d84815481106199a0576199a061dd58565b906000526020600020906003020160000160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020905060006034548f603d8581548110619a0057619a0061dd58565b906000526020600020906003020160010154619a1c919061de02565b619a26919061dfd8565b905060006034548f603d8681548110619a4157619a4161dd58565b906000526020600020906003020160010154619a5d919061de02565b619a67919061dfd8565b90506000821180619a785750600081115b15619ef0576002601284015460ff166005811115619a9857619a9861ca22565b1480619abc57506003601284015460ff166005811115619aba57619aba61ca22565b145b15619af45783888881518110619ad457619ad461dd58565b602090810291909101015286619ae98161dfec565b975050505050619ef4565b6004601284015460ff166005811115619b0f57619b0f61ca22565b1480619b3357506005601284015460ff166005811115619b3157619b3161ca22565b145b15619b5857619b42828761d7f6565b9550619b4e818661d7f6565b9450505050619ef4565b60235460018401546040517f9a11e0e60000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000929190911690639a11e0e690602401602060405180830381865afa158015619bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190619be8919061db9d565b601554909150811115619c5a5760008a619c02838661de02565b619c0c919061dfd8565b905060008b619c1b848661de02565b619c25919061dfd8565b9050619c31828a61d7f6565b9850619c3d818961d7f6565b9750619c49828661da69565b9450619c55818561da69565b935050505b600084600801548560050154619c70919061da69565b9050600085600501548583619c85919061de02565b619c8f919061dfd8565b90506000619c9d828761da69565b90508015619d5957865460405160009182916001600160a01b03909116906108fc90859084818181858888f193505050503d8060008114619cfa576040519150601f19603f3d011682016040523d82523d6000602084013e619cff565b606091505b509092509050811515600003619d565788546040517f1137d8c966ce69b9630fb2294be011f3d64cc56e91fad7d375f0662568e9d35291619d4d916001600160a01b0390911690849061e006565b60405180910390a15b50505b6005870154600090619d6b878661de02565b619d75919061dfd8565b90506000619d83828861da69565b30600090815260416020526040812080549293508392909190619da790849061da69565b90915550506001890154619dc6906001600160a01b031682600061b492565b6000841180619dd55750600082115b15619e9057600c890154619df49030906001600160a01b031684618b89565b600c8901546001600160a01b0316600081815260416020526040908190205490517fa0ce552d000000000000000000000000000000000000000000000000000000008152600481019190915263a0ce552d90869060240160206040518083038185885af1158015619e69573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190619e8e919061db9d565b505b60018901546040805185815260208101879052908101839052606081018490526001600160a01b03909116907f5d4e9c803c111cc5e507b1cd7ffb638d0084c4d0696bb89a39434637ce31b4d59060800160405180910390a25050505050505b5050505b60010161997d565b50821561a08c5760005b8381101561a08a576000858281518110619f2257619f2261dd58565b6020026020010151905060006034548f603d8481548110619f4557619f4561dd58565b906000526020600020906003020160010154619f61919061de02565b619f6b919061dfd8565b905060006034548f603d8581548110619f8657619f8661dd58565b906000526020600020906003020160010154619fa2919061de02565b619fac919061dfd8565b601c54909150619fc79030906001600160a01b031683618b89565b601c54603d80546001600160a01b039092169163a8031a1d91859187908110619ff257619ff261dd58565b600091825260209091206003909102015460405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b039091166004820152602481018590526044016000604051808303818588803b15801561a06257600080fd5b505af115801561a076573d6000803e3d6000fd5b505060019096019550619f06945050505050565b505b602354604080517f53b1821b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916353b1821b9160048083019260209291908290030181865afa15801561a0ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061a113919061db9d565b111561a1be576023546001600160a01b031661a13030828b618b89565b6023546001600160a01b03828116600090815260416020526040908190205490517feeb92233000000000000000000000000000000000000000000000000000000008152600481019190915291169063eeb92233908c906024016000604051808303818588803b15801561a1a357600080fd5b505af115801561a1b7573d6000803e3d6000fd5b5050505050505b601d5461a1d69030906001600160a01b031688618b89565b601d546001600160a01b0316600081815260416020526040908190205490517f59974e3800000000000000000000000000000000000000000000000000000000815260048101919091526359974e389089906024016000604051808303818588803b15801561a24457600080fd5b505af115801561a258573d6000803e3d6000fd5b5050505050600082111561a3175760185460405160009182916001600160a01b039091169085908381818185875af1925050503d806000811461a2b7576040519150601f19603f3d011682016040523d82523d6000602084013e61a2bc565b606091505b50909250905081151560000361a314576018546040517f1137d8c966ce69b9630fb2294be011f3d64cc56e91fad7d375f0662568e9d3529161a30b916001600160a01b0390911690849061e006565b60405180910390a15b50505b801561a3355760185461a3359030906001600160a01b031683618b89565b505050505050505050505050565b6007545b60085481101561a36a5761a3658161a35e8161dfec565b925061b507565b61a347565b50600854600755600b54600a540361a37e57565b600c545b600b5481101561a3a55761a3a08161a3998161dfec565b925061b74b565b61a382565b50600b54600c55600a54805b600b5481101561a40857601354600082815260096020526040902060040154439161a3db9161d7f6565b1161a3fb5761a3e98161ba50565b61a3f460018361d7f6565b915061a400565b61a408565b60010161a3b1565b50600a55565b60608060606000602e805490501161a4685760405162461bcd60e51b815260206004820152601860248201527f5468657265206d7573742062652076616c696461746f72730000000000000000604482015260640161152e565b61a47061c7a5565b6028546080820152602e815260426020820152603d60408201526034606082015261a49a8161bbb5565b602854603b5561a4ac603e600061c7c3565b603d548061a4fc5760405162461bcd60e51b815260206004820152601260248201527f636f6d6d697474656520697320656d7074790000000000000000000000000000604482015260640161152e565b60008167ffffffffffffffff81111561a5175761a51761cea5565b60405190808252806020026020018201604052801561a540578160200160208202803683370190505b50905060008267ffffffffffffffff81111561a55e5761a55e61cea5565b60405190808252806020026020018201604052801561a587578160200160208202803683370190505b50905060008367ffffffffffffffff81111561a5a55761a5a561cea5565b60405190808252806020026020018201604052801561a5ce578160200160208202803683370190505b50905060005b8481101561a70357600060426000603d848154811061a5f55761a5f561dd58565b60009182526020808320600392830201546001600160a01b0316845283019390935260409091018120603e8054600181018255925292507f8d800d6614d35eed73733ee453164a3b48076eb3138f466adeeb9dec7bb31f70019061a65b9083018261e036565b50600281015485516001600160a01b039091169086908490811061a6815761a68161dd58565b6001600160a01b0392831660209182029290920101526001820154855191169085908490811061a6b35761a6b361dd58565b6001600160a01b0392831660209182029290920101528154845191169084908490811061a6e25761a6e261dd58565b6001600160a01b03909216602092830291909101909101525060010161a5d4565b50919790965090945092505050565b6000828152603c6020908152604080832084830151600182015584820151600282015560608086015160038301556080860151600483015560a0860151805160058401559384015160068301559183015160078201559101516008820155905b8251518110156127bf57825180518391908390811061a7935761a79361dd58565b6020908102919091018101518254600180820185556000948552938390208251600390920201805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0390921691909117815591810151928201929092556040820151600282019061a802908261d8a3565b50505060010161a772565b61a83f6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b03831660009081526001602052604090208054831061a8a75760405162461bcd60e51b815260206004820152601760248201527f7363686564756c6520646f6573206e6f74206578697374000000000000000000604482015260640161152e565b80838154811061a8b95761a8b961dd58565b90600052602060002090600502016040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152505091505092915050565b6000805b603d5481101561a96357603d818154811061a92e5761a92e61dd58565b60009182526020909120600390910201546001600160a01b039081169084160361a95b5750600192915050565b60010161a911565b50600092915050565b60008061a97761c7e1565b60008060ff9050604083875160208901845afa61a99357600080fd5b505080516020909101516c0100000000000000000000000090910494909350915050565b60e281511461aa085760405162461bcd60e51b815260206004820152601460248201527f496e76616c69642070726f6f66206c656e677468000000000000000000000000604482015260640161152e565b6030826102200151511461aa5e5760405162461bcd60e51b815260206004820152601c60248201527f496e76616c696420636f6e73656e737573206b6579206c656e67746800000000604482015260640161152e565b61aa678261bbcf565b604080518082018252601a81527f19457468657265756d205369676e6564204d6573736167653a0a00000000000060208083019190915284519251919260009261aadc920160609190911b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016815260140190565b604051602081830303815290604052905060008261aafa835161bd0f565b8360405160200161ab0d9392919061e10b565b60408051601f198184030181528282528051602091820120600280855260608501845290945060009392909183019080368337019050509050600080808061ab61898261ab5c6041600261de02565b61be4c565b9050600061ab7c8a61ab756041600261de02565b606061be4c565b905060205b825181101561ac415761ab94838261bf74565b6040805160008152602081018083528d905260ff8316918101919091526060810184905260808101839052929850909650945060019060a0016020604051602081039080840390855afa15801561abef573d6000803e3d6000fd5b5050604051601f19015190508761ac0760418461dfd8565b8151811061ac175761ac1761dd58565b6001600160a01b039092166020928302919091019091015261ac3a60418261d7f6565b905061ab81565b508a602001516001600160a01b03168660008151811061ac635761ac6361dd58565b60200260200101516001600160a01b03161461ace75760405162461bcd60e51b815260206004820152602960248201527f496e76616c6964206e6f6465206b6579206f776e6572736869702070726f6f6660448201527f2070726f76696465640000000000000000000000000000000000000000000000606482015260840161152e565b8a604001516001600160a01b03168660018151811061ad085761ad0861dd58565b60200260200101516001600160a01b03161461ad8c5760405162461bcd60e51b815260206004820152602b60248201527f496e76616c6964206f7261636c65206b6579206f776e6572736869702070726f60448201527f6f662070726f7669646564000000000000000000000000000000000000000000606482015260840161152e565b600161ada28c6102200151838e6000015161bfa8565b1461ae155760405162461bcd60e51b815260206004820152603660248201527f496e76616c696420636f6e73656e737573206b6579206f776e6572736869702060448201527f70726f6f6620666f7220726567697374726174696f6e00000000000000000000606482015260840161152e565b61ae228b6040015161c010565b61ae2b8b61c093565b5050505050505050505050565b6001600160a01b038416600081815260426020526040812090911580159061ae6f575060018101546001600160a01b038781169116145b61aebb5760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206e6f7420726567697374657265640000000000000000604482015260640161152e565b6000851161af0b5760405162461bcd60e51b815260206004820152601560248201527f756e626f6e64696e6720616d6f756e7420697320300000000000000000000000604482015260640161152e565b80546001600160a01b038581169116148061b15157600c8201546040517f84955c880000000000000000000000000000000000000000000000000000000081526001600160a01b03878116600483015260009216906384955c8890602401602060405180830381865afa15801561af86573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061afaa919061db9d565b90508681101561b0225760405162461bcd60e51b815260206004820152602b60248201527f696e73756666696369656e7420756e6c6f636b6564204c6971756964204e657760448201527f746f6e2062616c616e6365000000000000000000000000000000000000000000606482015260840161152e565b856001600160a01b0316856001600160a01b03160361b0c157600c8301546040517f282d3fdf0000000000000000000000000000000000000000000000000000000081526001600160a01b038881166004830152602482018a90529091169063282d3fdf90604401600060405180830381600087803b15801561b0a457600080fd5b505af115801561b0b8573d6000803e3d6000fd5b5050505061b14b565b600c8301546040517f708e91e50000000000000000000000000000000000000000000000000000000081526001600160a01b0388811660048301528781166024830152604482018a90529091169063708e91e590606401600060405180830381600087803b15801561b13257600080fd5b505af115801561b146573d6000803e3d6000fd5b505050505b5061b27b565b846001600160a01b0316846001600160a01b03161461b1d85760405162461bcd60e51b815260206004820152602160248201527f63616e6e6f7420756e626f6e6420504153207573696e6720616c6c6f77616e6360448201527f6500000000000000000000000000000000000000000000000000000000000000606482015260840161152e565b8582600b0154836008015461b1ed919061da69565b101561b2615760405162461bcd60e51b815260206004820152602760248201527f696e73756666696369656e742073656c6620626f6e646564206e6577746f6e2060448201527f62616c616e636500000000000000000000000000000000000000000000000000606482015260840161152e565b8582600b01600082825461b275919061d7f6565b90915550505b836001600160a01b0316856001600160a01b0316886001600160a01b03167f58cac3f318ed4be30304429f66e0d6794a95041b92ebe8d35ec0d0abcf1b593c848a600b5460405161b2e19392919092151583526020830191909152604082015260600190565b60405180910390a46040805161010080820183526001600160a01b0388811683528a811660208085019182528486018c8152600060608701818152436080890190815260a0890183815260c08a018481528c151560e08c01908152600b8054875260099098529b85209a518b5473ffffffffffffffffffffffffffffffffffffffff19908116918b16919091178c55975160018c0180549099169916989098179096559251600289015551600388015590516004870155915160059095018054935196517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009094169515157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1695909517951515909302949094177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff1662010000911515919091021790915580549161b4398361dfec565b91905055506001600b5461b44d919061da69565b979650505050505050565b61b46360038361c365565b61298860048261c365565b61b47a6003600061c7ff565b61b4866004600061c7ff565b6005805460ff19169055565b8115801561b49e575080155b1561b4a857505050565b6001600160a01b03831660009081526042602052604081206008810180549192859261b4d590849061d7f6565b9091555061b4e59050828461d7f6565b81600501600082825461b4f8919061d7f6565b909155506127bf9050816188a3565b600081815260066020908152604080832060018101546001600160a01b03168452604290925282209091601282015460ff16600581111561b54a5761b54a61ca22565b1461b5d957600282015482546001600160a01b03166000908152604160205260408120805490919061b57d90849061d7f6565b909155505081546001830154600284015460128401546040516001600160a01b0394851694909316927f1ff2b052afa4bb37ce30d9aaccde416a700b97e632d089111749af937f87834292618a9192909160ff9091169061e14e565b805482546001600160a01b0390811691161461b710576000808260080154836005015461b606919061da69565b90508060000361b62d576002840154915061b6236012600a61db63565b601384015561b64f565b80846002015484600d015461b642919061de02565b61b64c919061dfd8565b91505b600c83015484546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018590529116906340c10f1990604401600060405180830381600087803b15801561b6b957600080fd5b505af115801561b6cd573d6000803e3d6000fd5b505050508183600d01600082825461b6e5919061d7f6565b9091555050600284015460058401805460009061b70390849061d7f6565b9091555061b74692505050565b816002015481600801600082825461b728919061d7f6565b90915550506002820154600582018054600090618c4690849061d7f6565b505050565b600081815260096020908152604080832060018101546001600160a01b031684526042909252822060058201549192909162010000900460ff1661b95a576002830154600c83015484546040517f7eee288d0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101849052911690637eee288d90604401600060405180830381600087803b15801561b7f857600080fd5b505af115801561b80c573d6000803e3d6000fd5b50505050600c83015484546040517f9dc29fac0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101849052911690639dc29fac90604401600060405180830381600087803b15801561b87a57600080fd5b505af115801561b88e573d6000803e3d6000fd5b5050505060008360080154846005015461b8a8919061da69565b600d85015490915061b8ba828461de02565b61b8c4919061dfd8565b92508184600d01600082825461b8da919061da69565b9091555050600684015460000361b8f7576003850183905561b91b565b6006840154600785015461b90b908561de02565b61b915919061dfd8565b60038601555b8284600601600082825461b92f919061d7f6565b9091555050600385015460078501805460009061b94d90849061d7f6565b9091555061ba2092505050565b506002820154600882015481111561b973575060088101545b816009015460000361b98b576003830181905561b9af565b6009820154600a83015461b99f908361de02565b61b9a9919061dfd8565b60038401555b8082600901600082825461b9c3919061d7f6565b90915550506003830154600a8301805460009061b9e190849061d7f6565b925050819055508082600801600082825461b9fc919061da69565b90915550506002830154600b8301805460009061ba1a90849061da69565b90915550505b6005808401805460ff191660011790558201805482919060009061ba4590849061da69565b909155505050505050565b60008181526009602052604081206005810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055600381015490910361ba9c575050565b60018101546001600160a01b03166000908152604260205260408120600583015490919062010000900460ff1661bb2f5781600701548260060154846003015461bae6919061de02565b61baf0919061dfd8565b90508082600601600082825461bb06919061da69565b9091555050600383015460078301805460009061bb2490849061da69565b9091555061bb8c9050565b81600a01548260090154846003015461bb48919061de02565b61bb52919061dfd8565b90508082600901600082825461bb68919061da69565b90915550506003830154600a8301805460009061bb8690849061da69565b90915550505b82546001600160a01b03166000908152604160205260408120805483929061ba4590849061d7f6565b60fa60a06000808285855af461b746573d6000803e3d6000fd5b600061bbde826060015161a96c565b6001600160a01b0390911660208401529050801561bc3e5760405162461bcd60e51b815260206004820152600b60248201527f656e6f6465206572726f72000000000000000000000000000000000000000000604482015260640161152e565b6020808301516001600160a01b0390811660009081526042909252604090912060010154161561bcb05760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f7220616c7265616479207265676973746572656400000000604482015260640161152e565b61bcbc6004600a61db63565b826080015111156129885760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420636f6d6d697373696f6e2072617465000000000000000000604482015260640161152e565b60608160000361bd5257505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b811561bd7c578061bd668161dfec565b915061bd759050600a8361dfd8565b915061bd56565b60008167ffffffffffffffff81111561bd975761bd9761cea5565b6040519080825280601f01601f19166020018201604052801561bdc1576020820181803683370190505b5090505b841561be445761bdd660018361da69565b915061bde3600a8661e162565b61bdee90603061d7f6565b60f81b81838151811061be035761be0361dd58565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061be3d600a8661dfd8565b945061bdc5565b949350505050565b60608161be5a81601f61d7f6565b101561bea85760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015260640161152e565b61beb2828461d7f6565b8451101561bf025760405162461bcd60e51b815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015260640161152e565b60608215801561bf21576040519150600082526020820160405261bf6b565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561bf5a57805183526020928301920161bf42565b5050858452601f01601f1916604052505b50949350505050565b8181018051602082015160409092015190919060001a601b81101561bfa15761bf9e601b8261e176565b90505b9250925092565b600061bfb261c839565b600085858560405160200161bfc99392919061e18f565b6040516020818303038152906040529050600060fb905060008251602061bff0919061d7f6565b90506020848285855afa61c00357600080fd5b5050905195945050505050565b6001600160a01b0381166000908152604360205260409020541561c0765760405162461bcd60e51b815260206004820152601460248201527f6f7261636c652073657276657220657869737473000000000000000000000000604482015260640161152e565b6001600160a01b0316600090815260436020526040902060019055565b6101808101516001600160a01b031661c1a3576048546001600160a01b031661c1245760405162461bcd60e51b815260206004820152602260248201527f6c6971756964206c6f67696320636f6e7472616374206e6f74206465706c6f7960448201527f6564000000000000000000000000000000000000000000000000000000000000606482015260840161152e565b602e5460009061c1339061bd0f565b905081602001518260000151836080015183604860009054906101000a90046001600160a01b031660405161c1679061c857565b61c17595949392919061e1ed565b604051809103906000f08015801561c191573d6000803e3d6000fd5b506001600160a01b0316610180830152505b60208181018051602e80546001808201835560009283527f37fa166cbdbfbb1561ccd9ea985ec0218b5e68502e230525f544285b2bdf3d7e909101805473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b039586161790915584518416835260429095526040918290208651815487169085161781559351908401805486169184169190911790558401516002830180549094169116179091556060820151829190600382019061c260908261d8a3565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c8201805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f8201556102008201516010820155610220820151601182019061c32a908261d8a3565b5061024082015160128201805460ff1916600183600581111561c34f5761c34f61ca22565b0217905550610260820151816013015590505050565b81546002600180831615610100020382160482518082016020811060208410016002811461c40f576001811461c434578660005260208404602060002001600160028402018855602085068060200390508088018589016001836101000a0392508282511684540184556001840193506020820191505b8082101561c3f9578151845560018401935060208201915061c3dc565b815191036101000a908190040290915550614ce1565b60028302826020036101000a846020036101000a602089015104020185018755614ce1565b8660005260208404602060002001600160028402018855846020038088018589016001836101000a0392508282511660ff198a160184556020820191506001840193505b8082101561c495578151845560018401935060208201915061c478565b815191036101000a90819004029091555050505050505050565b60405180610280016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001606081526020016000600581111561c5705761c57061ca22565b8152602001600081525090565b604080516080810182526000808252602082015290810161c59c61c5ae565b815260200161c5a961c72a565b905290565b6040518060c00160405280606081526020016000815260200160008152602001600081526020016000815260200161c5a96040518060800160405280600081526020016000815260200160008152602001600081525090565b604051806080016040528061c688604051806101800160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008152602001600081525090565b8152604080516101208101825260008082526020828101829052928201819052606082018190526080820181905260a0820181905260c0820181905260e08201819052610100820152910190815260200161c57060405180610100016040528060006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040518060c001604052806000815260200160008152602001600081526020016000815260200161c77560405180606001604052806000815260200160008152602001600081525090565b815260200161c5a96040518060800160405280600081526020016000815260200160008152602001600081525090565b6040518060a001604052806005906020820280368337509192915050565b50805460008255906000526020600020908101906118f5919061c864565b60405180604001604052806002906020820280368337509192915050565b50805461c80b9061d809565b6000825580601f1061c81b575050565b601f0160209004906000526020600020908101906118f5919061c885565b60405180602001604052806001906020820280368337509192915050565b61062a8061e22583390190565b8082111561c88157600061c878828261c7ff565b5060010161c864565b5090565b5b8082111561c881576000815560010161c886565b6001600160a01b03811681146118f557600080fd5b6000806040838503121561c8c257600080fd5b823561c8cd8161c89a565b946020939093013593505050565b60005b8381101561c8f657818101518382015260200161c8de565b50506000910152565b6000815180845261c91781602086016020860161c8db565b601f01601f19169290920160200192915050565b6020815260006121f0602083018461c8ff565b60006020828403121561c95057600080fd5b81356121f08161c89a565b60006020828403121561c96d57600080fd5b5035919050565b600681106118f557600080fd5b600080600080600060a0868803121561c99957600080fd5b853561c9a48161c89a565b94506020860135935060408601359250606086013561c9c28161c974565b9150608086013561c9d28161c974565b809150509295509295909350565b60008060006060848603121561c9f557600080fd5b833561ca008161c89a565b925060208401359150604084013561ca178161c974565b809150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6006811061ca88577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b80516001600160a01b031682526000602082015161cab560208501826001600160a01b03169052565b50604082015161cad060408501826001600160a01b03169052565b506060820151610280606085015261caec61028085018261c8ff565b90506080830151608085015260a083015160a085015260c083015160c085015260e083015160e085015261010083015161010085015261012083015161012085015261014083015161014085015261016083015161016085015261018083015161cb626101808601826001600160a01b03169052565b506101a08301516101a08501526101c08301516101c08501526101e08301516101e085015261020083015161020085015261022083015184820361022086015261cbac828261c8ff565b91505061024083015161cbc361024086018261ca51565b506102608301516102608501528091505092915050565b6020815260006121f0602083018461ca8c565b60008060006060848603121561cc0257600080fd5b833561cc0d8161c89a565b9250602084013561cc1d8161c89a565b929592945050506040919091013590565b6000610100820190506001600160a01b0383511682526001600160a01b03602084015116602083015260408301516040830152606083015160608301526080830151608083015260a0830151151560a083015260c083015161cc9460c084018215159052565b5060e083015161179760e084018215159052565b6000806000806080858703121561ccbe57600080fd5b843561ccc98161c89a565b966020860135965060408601359560600135945092505050565b600082825180855260208501945060208160051b8301016020850160005b8381101561cd5d57601f1985840301885281516001600160a01b03815116845260208101516020850152604081015190506060604085015261cd46606085018261c8ff565b6020998a019990945092909201915060010161cd01565b50909695505050505050565b60008151610120845261cd8061012085018261cce3565b90506020830151602085015260408301516040850152606083015160608501526080830151608085015260a083015161cddd60a0860182805182526020810151602083015260408101516040830152606081015160608301525050565b509392505050565b80518252602081015160208301526040810151604083015260608101516060830152608081015180516080840152602081015160a0840152604081015160c08401525060a081015161b74660e0840182805182526020810151602083015260408101516040830152606081015160608301525050565b60208152815115156020820152602082015115156040820152600060408301516101c0606084015261ce916101e084018261cd69565b9050606084015161cddd608085018261cde5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610280810167ffffffffffffffff8111828210171561cef85761cef861cea5565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561cf275761cf2761cea5565b604052919050565b6000608082840312801561cf4257600080fd5b506040516000906080810167ffffffffffffffff8111828210171561cf695761cf6961cea5565b60409081528435825260208086013590830152848101359082015260609384013593810193909352509092915050565b602081016117b8828461ca51565b600067ffffffffffffffff82111561cfc15761cfc161cea5565b50601f01601f191660200190565b600082601f83011261cfe057600080fd5b813560208301600061cff961cff48461cfa7565b61cefe565b905082815285838301111561d00d57600080fd5b82826020830137600092810160200192909252509392505050565b6000806040838503121561d03b57600080fd5b823561d0468161c89a565b9150602083013567ffffffffffffffff81111561d06257600080fd5b61d06e8582860161cfcf565b9150509250929050565b6000806000806080858703121561d08e57600080fd5b843567ffffffffffffffff81111561d0a557600080fd5b61d0b18782880161cfcf565b945050602085013561d0c28161c89a565b9250604085013567ffffffffffffffff81111561d0de57600080fd5b61d0ea8782880161cfcf565b925050606085013567ffffffffffffffff81111561d10757600080fd5b61d1138782880161cfcf565b91505092959194509250565b6000806040838503121561d13257600080fd5b823561d13d8161c89a565b9150602083013561d14d8161c974565b809150509250929050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561d1cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261d1ba85835161c8ff565b9450602093840193919091019060010161d180565b50929695505050505050565b6020815260006121f0602083018461cd69565b6020815260006121f0602083018461cce3565b600081518084526020840193506020830160005b8281101561d23c5781516001600160a01b031686526020958601959091019060010161d215565b5093949350505050565b60608152600061d259606083018661d201565b828103602084015261d26b818661d201565b9050828103604084015261d27f818561d201565b9695505050505050565b6000806040838503121561d29c57600080fd5b823567ffffffffffffffff81111561d2b357600080fd5b61d2bf8582860161cfcf565b925050602083013567ffffffffffffffff81111561d06257600080fd5b60408152600061d2ef604083018561c8ff565b828103602084015261d301818561c8ff565b95945050505050565b6020815260006121f0602083018461d201565b6001600160a01b038151168252602081015161d34460208401826001600160a01b03169052565b50604081015161d35f60408401826001600160a01b03169052565b50606081015161d37a60608401826001600160a01b03169052565b50608081015161d39560808401826001600160a01b03169052565b5060a081015161d3b060a08401826001600160a01b03169052565b5060c081015161d3cb60c08401826001600160a01b03169052565b5060e081015161d3e660e08401826001600160a01b03169052565b5061010081015161b7466101008401826001600160a01b03169052565b60006103c0820190508251805183526020810151602084015260408101516040840152606081015160608401526080810151608084015260a081015160a084015260c081015160c084015260e081015160e084015261010081015161d4746101008501826001600160a01b03169052565b5061012081015161d4916101208501826001600160a01b03169052565b5061014081015161014084015261016081015161016084015250602083015161d4be61018084018261d31d565b5060408381015180516001600160a01b03166102a085015260208101516102c0850152908101516102e0840152606080820151610300850152608082015161032085015260a082015161034085015260c082015161036085015260e090910151610380840152909201516103a09091015290565b6000806040838503121561d54557600080fd5b823561d5508161c89a565b9150602083013561d14d8161c89a565b61016081016117b8828461cde5565b60008060006060848603121561d58457600080fd5b833561d58f8161c89a565b95602085013595506040909401359392505050565b60408152600061d5b7604083018561ca8c565b90508260208301529392505050565b80516139da8161c89a565b600082601f83011261d5e257600080fd5b815160208301600061d5f661cff48461cfa7565b905082815285838301111561d60a57600080fd5b61d30183602083018461c8db565b80516139da8161c974565b6000610280828403121561d63657600080fd5b61d63e61ced4565b905061d6498261d5c6565b815261d6576020830161d5c6565b602082015261d6686040830161d5c6565b6040820152606082015167ffffffffffffffff81111561d68757600080fd5b61d6938482850161d5d1565b6060830152506080828101519082015260a0808301519082015260c0808301519082015260e08083015190820152610100808301519082015261012080830151908201526101408083015190820152610160808301519082015261d6fa610180830161d5c6565b6101808201526101a082810151908201526101c080830151908201526101e08083015190820152610200808301519082015261022082015167ffffffffffffffff81111561d74757600080fd5b61d7538482850161d5d1565b6102208301525061d767610240830161d618565b6102408201526102609182015191810191909152919050565b6000806040838503121561d79357600080fd5b825167ffffffffffffffff81111561d7aa57600080fd5b61d7b68582860161d623565b602094909401519395939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156117b8576117b861d7c7565b600181811c9082168061d81d57607f821691505b60208210810361d856577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561b74657806000526020600020601f840160051c8101602085101561d8835750805b601f840160051c820191505b81811015612e33576000815560010161d88f565b815167ffffffffffffffff81111561d8bd5761d8bd61cea5565b61d8d18161d8cb845461d809565b8461d85c565b6020601f82116001811461d908576000831561d8ed5750848201515b600184901b600019600386901b1c198216175b855550612e33565b600084815260208120601f198516915b8281101561d938578785015182556020948501946001909201910161d918565b508482101561d9565786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60c08152600061d97860c083018961ca8c565b905086602083015285604083015284606083015261d999608083018561ca51565b61b44d60a083018461ca51565b805180151581146139da57600080fd5b60008060006060848603121561d9cb57600080fd5b835167ffffffffffffffff81111561d9e257600080fd5b61d9ee8682870161d623565b6020860151909450925061bf9e90506040850161d9a6565b60808152600061da19608083018761ca8c565b905084602083015283604083015261d301606083018461ca51565b60006020828403121561da4657600080fd5b815167ffffffffffffffff81111561da5d57600080fd5b61be448482850161d623565b818103818111156117b8576117b861d7c7565b6001815b600184111561dab75780850481111561da9b5761da9b61d7c7565b600184161561daa957908102905b60019390931c92800261da80565b935093915050565b60008261dace575060016117b8565b8161dadb575060006117b8565b816001811461daf1576002811461dafb5761db17565b60019150506117b8565b60ff84111561db0c5761db0c61d7c7565b50506001821b6117b8565b5060208310610133831016604e8410600b841016171561db3a575081810a6117b8565b61db47600019848461da7c565b806000190482111561db5b5761db5b61d7c7565b029392505050565b60006121f0838361dabf565b60008060006060848603121561db8457600080fd5b5050815160208301516040909301519094929350919050565b60006020828403121561dbaf57600080fd5b5051919050565b60006020828403121561dbc857600080fd5b6121f08261d9a6565b6000815461dbde8161d809565b80855260018216801561dbf8576001811461dc145761dc4b565b60ff1983166020870152602082151560051b870101935061dc4b565b84600052602060002060005b8381101561dc425781546020828a01015260018201915060208101905061dc20565b87016020019450505b50505092915050565b6000604082016040835280855480835260608501915060608160051b860101925086600052602060002060005b8281101561dcf6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08786030184526001600160a01b038254168552600182015460208601526060604086015261dcde606086016002840161dbd1565b9450602093909301926003919091019060010161dc81565b50505050828103602084015261d301818561d201565b82518152602080840151818301526040808501518184015260608086015181850152845160808501529184015160a084015283015160c083015282015160e082015261010081016121f0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815461dd948161d809565b60018216801561ddab576001811461ddc05761dc4b565b60ff198316865281151582028601935061dc4b565b84600052602060002060005b8381101561dde85781548882015260019091019060200161ddcc565b505050939093019392505050565b60006121f0828461dd87565b80820281158282048414176117b8576117b861d7c7565b6001600160a01b038416815260606020820152600061de3b606083018561dbd1565b828103604084015261d27f818561c8ff565b6001600160a01b03861681526001600160a01b03851660208201526001600160a01b038416604082015260a06060820152600061de8d60a083018561c8ff565b90506001600160a01b03831660808301529695505050505050565b60408152600061debb604083018561ca8c565b90506121f0602083018461ca51565b60006060828403121561dedc57600080fd5b6040516060810167ffffffffffffffff8111828210171561deff5761deff61cea5565b60409081528351825260208085015190830152928301519281019290925250919050565b600061012082840312801561df3757600080fd5b5060405160009060a0810167ffffffffffffffff8111828210171561df5e5761df5e61cea5565b6040908152845182526020808601519083015284810151908201819052915061df8a856060860161deca565b606082015261df9c8560c0860161deca565b6080820152949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261dfe75761dfe761dfa9565b500490565b6000600019820361dfff5761dfff61d7c7565b5060010190565b6001600160a01b0383168152606060208201526000606082015260806040820152600061be44608083018461c8ff565b81810361e041575050565b61e04b825461d809565b67ffffffffffffffff81111561e0635761e06361cea5565b61e0718161d8cb845461d809565b6000601f82116001811461e0a3576000831561d8ed575081850154600184901b600019600386901b1c1982161761d900565b600085815260209020601f19841690600086815260209020845b8381101561e0dd578286015482556001958601959091019060200161e0bd565b508583101561e0fb5781850154600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000845161e11d81846020890161c8db565b84519083019061e13181836020890161c8db565b845191019061e14481836020880161c8db565b0195945050505050565b828152604081016121f0602083018461ca51565b60008261e1715761e17161dfa9565b500690565b60ff81811683821601908111156117b8576117b861d7c7565b6000845161e1a181846020890161c8db565b84519083019061e1b581836020890161c8db565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169301928352505060140192915050565b6001600160a01b03861681526001600160a01b038516602082015283604082015260a06060820152600061de8d60a083018561c8ff56fe608060405234801561001057600080fd5b5060405161062a38038061062a83398101604081905261002f916101af565b806001600160a01b031663f5be34896040518163ffffffff1660e01b8152600401602060405180830381865afa15801561006d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061009191906102a4565b83111561009d57600080fd5b600b80546001600160a01b038088166001600160a01b031992831617909255600c805492871692909116919091179055600d8390556040516100e39083906020016102bd565b604051602081830303815290604052600990816101009190610373565b508160405160200161011291906102bd565b604051602081830303815290604052600a908161012f9190610373565b5050600f80546001600160a01b031916331790555061043192505050565b6001600160a01b038116811461016257600080fd5b50565b80516101708161014d565b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101a657818101518382015260200161018e565b50506000910152565b600080600080600060a086880312156101c757600080fd5b85516101d28161014d565b60208701519095506101e38161014d565b6040870151606088015191955093506001600160401b0381111561020657600080fd5b8601601f8101881361021757600080fd5b80516001600160401b0381111561023057610230610175565b604051601f8201601f19908116603f011681016001600160401b038111828210171561025e5761025e610175565b6040528181528282016020018a101561027657600080fd5b61028782602083016020860161018b565b935061029891505060808701610165565b90509295509295909350565b6000602082840312156102b657600080fd5b5051919050565b644c4e544e2d60d81b8152600082516102dd81600585016020870161018b565b9190910160050192915050565b600181811c908216806102fe57607f821691505b60208210810361031e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561036e57806000526020600020601f840160051c8101602085101561034b5750805b601f840160051c820191505b8181101561036b5760008155600101610357565b50505b505050565b81516001600160401b0381111561038c5761038c610175565b6103a08161039a84546102ea565b84610324565b6020601f8211600181146103d457600083156103bc5750848201515b600019600385901b1c1916600184901b17845561036b565b600084815260208120601f198516915b8281101561040457878501518255602094850194600190920191016103e4565b50848210156104225786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6101ea806104406000396000f3fe6080604052366100315761002f610014610038565b73ffffffffffffffffffffffffffffffffffffffff16610154565b005b61002f6100145b600080600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634c1f1c776040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100cc9190610177565b905073ffffffffffffffffffffffffffffffffffffffff811661014f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6c6971756964206c6f67696320636f6e7472616374206e6f7420736574000000604482015260640160405180910390fd5b919050565b3660008037600080366000845af43d6000803e80610171573d6000fd5b503d6000f35b60006020828403121561018957600080fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146101ad57600080fd5b939250505056fea26469706673582212208d728fda0cd0f5597ff980eda213a5c80dad8f60140987d564b00bb38bb2a2d664736f6c634300081e0033a26469706673582212200a8e034bf404a46769aef386f270538e41b324ff72f6e6797dc672a99e02c77164736f6c634300081e00336080604052348015600f57600080fd5b50600f80546001600160a01b03191633179055611fc7806100316000396000f3fe6080604052600436106101dc5760003560e01c806359355736116101025780639dc29fac11610095578063bf99b73e11610064578063bf99b73e1461057d578063d768d5781461059d578063dd62ed3e146105bd578063f5be3489146105dd576101e3565b80639dc29fac14610515578063a0ce552d14610535578063a9059cbb14610548578063bd96102f14610568576101e3565b80637eee288d116100d15780637eee288d146104a057806384955c88146104c0578063949813b8146104e057806395d89b4114610500576101e3565b8063593557361461042b578063708e91e51461044b57806370a082311461046b57806372c819631461048b576101e3565b806323b872dd1161017a5780633b19e84a116101495780633b19e84a146103c35780633b80e355146103e15780633e4eb36c146103f657806340c10f191461040b576101e3565b806323b872dd14610352578063282d3fdf14610372578063313ce56714610392578063372500ab146103ae576101e3565b806318160ddd116101b657806318160ddd146102e3578063187cf4d71461030657806319fac8fd1461031b5780631eeffad01461033d576101e3565b806306fdde0314610256578063095ea7b3146102815780631195e07e146102b1576101e3565b366101e357005b60405162461bcd60e51b815260206004820152602860248201527f66616c6c6261636b206e6f7420696d706c656d656e74656420666f72204c697160448201527f7569644c6f67696300000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b34801561026257600080fd5b5061026b6105f2565b6040516102789190611c17565b60405180910390f35b34801561028d57600080fd5b506102a161029c366004611c9a565b610684565b6040519015158152602001610278565b3480156102bd57600080fd5b50600b546001600160a01b03165b6040516001600160a01b039091168152602001610278565b3480156102ef57600080fd5b506102f86106ab565b604051908152602001610278565b34801561031257600080fd5b506102f8610705565b34801561032757600080fd5b5061033b610336366004611cc4565b610714565b005b34801561034957600080fd5b506102f86107ad565b34801561035e57600080fd5b506102a161036d366004611cdd565b610807565b34801561037e57600080fd5b5061033b61038d366004611c9a565b610930565b34801561039e57600080fd5b5060405160128152602001610278565b3480156103ba57600080fd5b5061033b6109cf565b3480156103cf57600080fd5b50600c546001600160a01b03166102cb565b3480156103ed57600080fd5b506102f8600981565b34801561040257600080fd5b506102f8610a9c565b34801561041757600080fd5b5061033b610426366004611c9a565b610af6565b34801561043757600080fd5b506102f8610446366004611d1a565b610bd3565b34801561045757600080fd5b5061033b610466366004611cdd565b610c46565b34801561047757600080fd5b506102f8610486366004611d1a565b610d71565b34801561049757600080fd5b506102f8600481565b3480156104ac57600080fd5b5061033b6104bb366004611c9a565b610de0565b3480156104cc57600080fd5b506102f86104db366004611d1a565b610f2b565b3480156104ec57600080fd5b506102f86104fb366004611d1a565b610fad565b34801561050c57600080fd5b5061026b611066565b34801561052157600080fd5b5061033b610530366004611c9a565b611075565b6102f8610543366004611cc4565b611145565b34801561055457600080fd5b506102a1610563366004611c9a565b6113a2565b34801561057457600080fd5b5061033b61140c565b34801561058957600080fd5b506102a1610598366004611c9a565b611548565b3480156105a957600080fd5b506102f86105b8366004611d35565b61155d565b3480156105c957600080fd5b506102f86105d8366004611d35565b6115dc565b3480156105e957600080fd5b506102f861165b565b60606009805461060190611d68565b80601f016020809104026020016040519081016040528092919081815260200182805461062d90611d68565b801561067a5780601f1061064f5761010080835404028352916020019161067a565b820191906000526020600020905b81548152906001019060200180831161065d57829003601f168201915b5050505050905090565b600061068e611667565b6106993384846116be565b5060016106a560008055565b92915050565b600080546001036106fe5760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e6379206465746563746564000000604482015260640161024d565b5060055490565b6107116009600a611f0d565b81565b61071c611667565b600f546001600160a01b0316331461079c5760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e7472616374000000000000000000000000000000000000000000000000606482015260840161024d565b600d8190556107aa60008055565b50565b600080546001036108005760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e6379206465746563746564000000604482015260640161024d565b50600e5490565b6000610811611667565b6001600160a01b0384166000908152600360209081526040808320338452909152902054828110156108ab5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000606482015260840161024d565b6108bf85336108ba8685611f19565b6116be565b6108c98584611817565b6108d384846118ff565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161091891815260200190565b60405180910390a350506000805560015b9392505050565b610938611667565b600f546001600160a01b031633146109b85760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e7472616374000000000000000000000000000000000000000000000000606482015260840161024d565b6109c28282611953565b6109cb60008055565b5050565b6109d7611667565b60006109e233611a1e565b3360008181526006602052604080822082905551929350916108fc90849084818181858888f193505050503d8060008114610a39576040519150601f19603f3d011682016040523d82523d6000602084013e610a3e565b606091505b5050905080610a8f5760405162461bcd60e51b815260206004820152601260248201527f4661696c656420746f2073656e642041544e0000000000000000000000000000604482015260640161024d565b5050610a9a60008055565b565b60008054600103610aef5760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e6379206465746563746564000000604482015260640161024d565b50600d5490565b610afe611667565b600f546001600160a01b03163314610b7e5760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e7472616374000000000000000000000000000000000000000000000000606482015260840161024d565b610b8882826118ff565b6040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a36109cb60008055565b60008054600103610c265760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e6379206465746563746564000000604482015260640161024d565b506001600160a01b0381166000908152600260205260409020545b919050565b610c4e611667565b600f546001600160a01b03163314610cce5760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e7472616374000000000000000000000000000000000000000000000000606482015260840161024d565b6001600160a01b0380841660009081526004602090815260408083209386168352929052205481811015610d445760405162461bcd60e51b815260206004820152601860248201527f616d6f756e74206578636565647320616c6c6f77616e63650000000000000000604482015260640161024d565b610d588484610d538585611f19565b611aaf565b610d628483611953565b50610d6c60008055565b505050565b60008054600103610dc45760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e6379206465746563746564000000604482015260640161024d565b506001600160a01b031660009081526001602052604090205490565b610de8611667565b600f546001600160a01b03163314610e685760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e7472616374000000000000000000000000000000000000000000000000606482015260840161024d565b6001600160a01b038216600090815260026020526040902054811115610ef65760405162461bcd60e51b815260206004820152602360248201527f63616e277420756e6c6f636b206d6f72652066756e6473207468616e206c6f6360448201527f6b65640000000000000000000000000000000000000000000000000000000000606482015260840161024d565b6001600160a01b03821660009081526002602052604081208054839290610f1e908490611f19565b9091555050600080555050565b60008054600103610f7e5760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e6379206465746563746564000000604482015260640161024d565b6001600160a01b0382166000908152600260209081526040808320546001909252909120546106a59190611f19565b600080546001036110005760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e6379206465746563746564000000604482015260640161024d565b6001600160a01b03821660009081526001602090815260408083205460085460079093529083205490929161103791849190611bb4565b6001600160a01b03851660009081526006602052604090205490915061105e908290611f2c565b949350505050565b6060600a805461060190611d68565b61107d611667565b600f546001600160a01b031633146110fd5760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e7472616374000000000000000000000000000000000000000000000000606482015260840161024d565b6111078282611817565b6040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610bc2565b600061114f611667565b600f546001600160a01b031633146111cf5760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e7472616374000000000000000000000000000000000000000000000000606482015260840161024d565b3460006111db82611bf1565b90508015611272576111ed8183611f19565b600c546040519193506000916001600160a01b03909116906108fc90849084818181858888f193505050503d8060008114611244576040519150601f19603f3d011682016040523d82523d6000602084013e611249565b606091505b50909150508015156000036112705781600e600082825461126a9190611f2c565b90915550505b505b600061127d85611bf1565b9050841561132857600f54600b546001600160a01b039182169163f7fcc5109116836112a9818a611f19565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b03909316600484015260248301919091526044820152606401600060405180830381600087803b15801561130f57600080fd5b505af1158015611323573d6000803e3d6000fd5b505050505b60055460009061133a6009600a611f0d565b6113449086611f3f565b61134e9190611f56565b90508060085461135e9190611f2c565b600855600061136f6009600a611f0d565b60055461137c9084611f3f565b6113869190611f56565b90506113928185611f2c565b95505050505050610c4160008055565b60006113ac611667565b6113b63383611817565b6113c083836118ff565b6040518281526001600160a01b0384169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35060016106a560008055565b611414611667565b600c546001600160a01b031633146114945760405162461bcd60e51b815260206004820152602260248201527f6f6e6c792074726561737572792063616e20636c61696d20686973207265776160448201527f7264000000000000000000000000000000000000000000000000000000000000606482015260840161024d565b600e8054600091829055600c546040519192916001600160a01b03909116906108fc90849084818181858888f193505050503d80600081146114f2576040519150601f19603f3d011682016040523d82523d6000602084013e6114f7565b606091505b5050905080610a8f5760405162461bcd60e51b815260206004820152601260248201527f6661696c656420746f2073656e642041544e0000000000000000000000000000604482015260640161024d565b6000611552611667565b610699338484611aaf565b600080546001036115b05760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e6379206465746563746564000000604482015260640161024d565b506001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b6000805460010361162f5760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e6379206465746563746564000000604482015260640161024d565b506001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6107116004600a611f0d565b600054156116b75760405162461bcd60e51b815260206004820152601360248201527f7265656e7472616e637920646574656374656400000000000000000000000000604482015260640161024d565b6001600055565b6001600160a01b0383166117395760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161024d565b6001600160a01b0382166117b55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161024d565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b61182082611a1e565b506001600160a01b0382166000908152600160209081526040808320546002909252909120546118509082611f19565b82111561189f5760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e7420756e6c6f636b65642066756e64730000000000604482015260640161024d565b6118a98282611f19565b6001600160a01b0384166000908152600160205260409020558082036118e3576001600160a01b0383166000908152600760205260408120555b81600560008282546118f59190611f19565b9091555050505050565b61190882611a1e565b506001600160a01b03821660009081526001602052604081208054839290611931908490611f2c565b92505081905550806005600082825461194a9190611f2c565b90915550505050565b6001600160a01b038216600090815260026020908152604080832054600190925290912054829161198391611f19565b10156119f65760405162461bcd60e51b8152602060048201526024808201527f63616e2774206c6f636b206d6f72652066756e6473207468616e20617661696c60448201527f61626c6500000000000000000000000000000000000000000000000000000000606482015260840161024d565b6001600160a01b0382166000908152600260205260408120805483929061194a908490611f2c565b6001600160a01b03811660009081526001602090815260408083205460085460079093529083205490918391611a55918491611bb4565b6001600160a01b038516600090815260066020526040902054909150611a7c908290611f2c565b6001600160a01b039094166000908152600660209081526040808320879055600854600790925290912055509192915050565b6001600160a01b038316611b055760405162461bcd60e51b815260206004820152601d60248201527f617070726f76652066726f6d20746865207a65726f2061646472657373000000604482015260640161024d565b6001600160a01b038216611b5b5760405162461bcd60e51b815260206004820152601b60248201527f617070726f766520746f20746865207a65726f20616464726573730000000000604482015260640161024d565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f03530f06053c088596fe8c12632b52218b0685204ad1b757662178f87e27713b910161180a565b600083600003611bc657506000610929565b611bd26009600a611f0d565b84611bdd8486611f19565b611be79190611f3f565b61105e9190611f56565b600080611c006004600a611f0d565b600d54611c0d9085611f3f565b6109299190611f56565b602081526000825180602084015260005b81811015611c455760208186018101516040868401015201611c28565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b80356001600160a01b0381168114610c4157600080fd5b60008060408385031215611cad57600080fd5b611cb683611c83565b946020939093013593505050565b600060208284031215611cd657600080fd5b5035919050565b600080600060608486031215611cf257600080fd5b611cfb84611c83565b9250611d0960208501611c83565b929592945050506040919091013590565b600060208284031215611d2c57600080fd5b61092982611c83565b60008060408385031215611d4857600080fd5b611d5183611c83565b9150611d5f60208401611c83565b90509250929050565b600181811c90821680611d7c57607f821691505b602082108103611db5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6001815b6001841115611e2557808504811115611e0957611e09611dbb565b6001841615611e1757908102905b60019390931c928002611dee565b935093915050565b600082611e3c575060016106a5565b81611e49575060006106a5565b8160018114611e5f5760028114611e6957611e85565b60019150506106a5565b60ff841115611e7a57611e7a611dbb565b50506001821b6106a5565b5060208310610133831016604e8410600b8410161715611ea8575081810a6106a5565b611ed37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484611dea565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115611f0557611f05611dbb565b029392505050565b60006109298383611e2d565b818103818111156106a5576106a5611dbb565b808201808211156106a5576106a5611dbb565b80820281158282048414176106a5576106a5611dbb565b600082611f8c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea26469706673582212202e08fcbfd722b59cca665e879605bc4bdbfd8c28a62d67bda5c45754671844a064736f6c634300081e00336080604052348015600f57600080fd5b50610f2c8061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c806399ac2d481161005057806399ac2d48146100a8578063a00f313f146100c9578063d0c66054146100eb57600080fd5b80630273a3ee1461006c57806341b6cb0f14610095575b600080fd5b61007f61007a3660046108fc565b610101565b60405161008c9190610b9a565b60405180910390f35b61007f6100a3366004610bb4565b61011c565b6100bb6100b6366004610c15565b610139565b60405161008c929190610c5a565b6100dc6100d7366004610c7c565b610157565b60405161008c93929190610cf6565b6100f361021a565b60405190815260200161008c565b610109610558565b610113838361022d565b50815b92915050565b610124610558565b61013085858585610266565b50929392505050565b610141610558565b60008061014e85856102a9565b94959350505050565b61015f610558565b60008061016e6004600a610e72565b88106101ea5760008961012001518a60c001518b60a001516101909190610e7e565b61019a9190610e7e565b600060a08c018190526101008c018190526101208c0181905260c08c01526101e08b01805191925082916101cf908390610e7e565b9052506101dc8a8661022d565b89935091506001905061020e565b60006101f68a8a6102a9565b90506102048a898989610266565b8993509150600090505b96509650969350505050565b60006102286004600a610e72565b905090565b6000610200830152610240820181600581111561024c5761024c6109ae565b9081600581111561025f5761025f6109ae565b9052505050565b6102708284610e7e565b610200850152610240840181600581111561028d5761028d6109ae565b908160058111156102a0576102a06109ae565b90525050505050565b60006102b76004600a610e72565b8210610349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f63616e6e6f7420736c617368203130302520776974686f7574206a61696c626f60448201527f756e64696e670000000000000000000000000000000000000000000000000000606482015260840160405180910390fd5b60008361012001518460c001518560a001516103659190610e7e565b61036f9190610e7e565b9050600061037f6004600a610e72565b6103898386610e91565b6103939190610ea8565b9050600081905080866101200151106103c5578086610120018181516103b99190610ee3565b905250600090506103e0565b6101208601516103d59082610ee3565b600061012088015290505b801561045d578086610100015110610428578086610100018181516104059190610ee3565b90525060a08601805182919061041c908390610ee3565b9052506000905061045d565b6101008601516104389082610ee3565b90508561010001518660a0018181516104519190610ee3565b90525060006101008701525b600081118015610480575060008660a001518760c0015161047e9190610e7e565b115b1561052c5760008660a001518760c0015161049b9190610e7e565b60c08801516104aa9084610e91565b6104b49190610ea8565b905060008760a001518860c001516104cc9190610e7e565b60a08901516104db9085610e91565b6104e59190610ea8565b9050818860c0018181516104f99190610ee3565b90525060a088018051829190610510908390610ee3565b90525061051d8183610e7e565b6105279084610ee3565b925050505b6105368183610ee3565b915081866101e00181815161054b9190610e7e565b9052509095945050505050565b604051806102800160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001606081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000600581111561064d5761064d6109ae565b8152602001600081525090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610280810167ffffffffffffffff811182821017156106ad576106ad61065a565b60405290565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d757600080fd5b919050565b600082601f8301126106ed57600080fd5b81356020830160008067ffffffffffffffff84111561070e5761070e61065a565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff8211171561075b5761075b61065a565b60405283815290508082840187101561077357600080fd5b838360208301376000602085830101528094505050505092915050565b8035600681106106d757600080fd5b600061028082840312156107b257600080fd5b6107ba610689565b90506107c5826106b3565b81526107d3602083016106b3565b60208201526107e4604083016106b3565b6040820152606082013567ffffffffffffffff81111561080357600080fd5b61080f848285016106dc565b6060830152506080828101359082015260a0808301359082015260c0808301359082015260e08083013590820152610100808301359082015261012080830135908201526101408083013590820152610160808301359082015261087661018083016106b3565b6101808201526101a082810135908201526101c080830135908201526101e08083013590820152610200808301359082015261022082013567ffffffffffffffff8111156108c357600080fd5b6108cf848285016106dc565b610220830152506108e36102408301610790565b6102408201526102609182013591810191909152919050565b6000806040838503121561090f57600080fd5b823567ffffffffffffffff81111561092657600080fd5b6109328582860161079f565b92505061094160208401610790565b90509250929050565b6000815180845260005b8181101561097057602081850181015186830182015201610954565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60068110610a14577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b805173ffffffffffffffffffffffffffffffffffffffff16825260006020820151610a5b602085018273ffffffffffffffffffffffffffffffffffffffff169052565b506040820151610a83604085018273ffffffffffffffffffffffffffffffffffffffff169052565b5060608201516102806060850152610a9f61028085018261094a565b90506080830151608085015260a083015160a085015260c083015160c085015260e083015160e0850152610100830151610100850152610120830151610120850152610140830151610140850152610160830151610160850152610180830151610b2261018086018273ffffffffffffffffffffffffffffffffffffffff169052565b506101a08301516101a08501526101c08301516101c08501526101e08301516101e0850152610200830151610200850152610220830151848203610220860152610b6c828261094a565b915050610240830151610b836102408601826109dd565b506102608301516102608501528091505092915050565b602081526000610bad6020830184610a18565b9392505050565b60008060008060808587031215610bca57600080fd5b843567ffffffffffffffff811115610be157600080fd5b610bed8782880161079f565b9450506020850135925060408501359150610c0a60608601610790565b905092959194509250565b60008060408385031215610c2857600080fd5b823567ffffffffffffffff811115610c3f57600080fd5b610c4b8582860161079f565b95602094909401359450505050565b604081526000610c6d6040830185610a18565b90508260208301529392505050565b60008060008060008060c08789031215610c9557600080fd5b863567ffffffffffffffff811115610cac57600080fd5b610cb889828a0161079f565b965050602087013594506040870135935060608701359250610cdc60808801610790565b9150610cea60a08801610790565b90509295509295509295565b606081526000610d096060830186610a18565b602083019490945250901515604090910152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6001815b6001841115610d8a57808504811115610d6e57610d6e610d20565b6001841615610d7c57908102905b60019390931c928002610d53565b935093915050565b600082610da157506001610116565b81610dae57506000610116565b8160018114610dc45760028114610dce57610dea565b6001915050610116565b60ff841115610ddf57610ddf610d20565b50506001821b610116565b5060208310610133831016604e8410600b8410161715610e0d575081810a610116565b610e387fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610d4f565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610e6a57610e6a610d20565b029392505050565b6000610bad8383610d92565b8082018082111561011657610116610d20565b808202811582820484141761011657610116610d20565b600082610ede577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8181038181111561011657610116610d2056fea264697066735822122094b63cb287eec1d615ac4c3b6cdb0502ed9bc162a3a43447562d39ff178b014b64736f6c634300081e0033608060405234801561001057600080fd5b5060405161062a38038061062a83398101604081905261002f916101af565b806001600160a01b031663f5be34896040518163ffffffff1660e01b8152600401602060405180830381865afa15801561006d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061009191906102a4565b83111561009d57600080fd5b600b80546001600160a01b038088166001600160a01b031992831617909255600c805492871692909116919091179055600d8390556040516100e39083906020016102bd565b604051602081830303815290604052600990816101009190610373565b508160405160200161011291906102bd565b604051602081830303815290604052600a908161012f9190610373565b5050600f80546001600160a01b031916331790555061043192505050565b6001600160a01b038116811461016257600080fd5b50565b80516101708161014d565b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101a657818101518382015260200161018e565b50506000910152565b600080600080600060a086880312156101c757600080fd5b85516101d28161014d565b60208701519095506101e38161014d565b6040870151606088015191955093506001600160401b0381111561020657600080fd5b8601601f8101881361021757600080fd5b80516001600160401b0381111561023057610230610175565b604051601f8201601f19908116603f011681016001600160401b038111828210171561025e5761025e610175565b6040528181528282016020018a101561027657600080fd5b61028782602083016020860161018b565b935061029891505060808701610165565b90509295509295909350565b6000602082840312156102b657600080fd5b5051919050565b644c4e544e2d60d81b8152600082516102dd81600585016020870161018b565b9190910160050192915050565b600181811c908216806102fe57607f821691505b60208210810361031e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561036e57806000526020600020601f840160051c8101602085101561034b5750805b601f840160051c820191505b8181101561036b5760008155600101610357565b50505b505050565b81516001600160401b0381111561038c5761038c610175565b6103a08161039a84546102ea565b84610324565b6020601f8211600181146103d457600083156103bc5750848201515b600019600385901b1c1916600184901b17845561036b565b600084815260208120601f198516915b8281101561040457878501518255602094850194600190920191016103e4565b50848210156104225786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6101ea806104406000396000f3fe6080604052366100315761002f610014610038565b73ffffffffffffffffffffffffffffffffffffffff16610154565b005b61002f6100145b600080600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634c1f1c776040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100cc9190610177565b905073ffffffffffffffffffffffffffffffffffffffff811661014f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6c6971756964206c6f67696320636f6e7472616374206e6f7420736574000000604482015260640160405180910390fd5b919050565b3660008037600080366000845af43d6000803e80610171573d6000fd5b503d6000f35b60006020828403121561018957600080fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146101ad57600080fd5b939250505056fea26469706673582212208d728fda0cd0f5597ff980eda213a5c80dad8f60140987d564b00bb38bb2a2d664736f6c634300081e0033")

var AutonityTestAbi, _ = abi.JSON(strings.NewReader(`[
   {
      "inputs" : [
         {
            "components" : [
               {
                  "internalType" : "address payable",
                  "name" : "treasury",
                  "type" : "address"
               },
               {
                  "internalType" : "address",
                  "name" : "nodeAddress",
                  "type" : "address"
               },
               {
                  "internalType" : "address",
                  "name" : "oracleAddress",
                  "type" : "address"
               },
               {
                  "internalType" : "string",
                  "name" : "enode",
                  "type" : "string"
               },
               {
                  "internalType" : "uint256",
                  "name" : "commissionRate",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "bondedStake",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "unbondingStake",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "unbondingShares",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "selfBondedStake",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "selfUnbondingStake",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "selfUnbondingShares",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "selfUnbondingStakeLocked",
                  "type" : "uint256"
               },
               {
                  "internalType" : "contract ILiquid",
                  "name" : "liquidStateContract",
                  "type" : "address"
               },
               {
                  "internalType" : "uint256",
                  "name" : "liquidSupply",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "registrationBlock",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "totalSlashed",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "jailReleaseBlock",
                  "type" : "uint256"
               },
               {
                  "internalType" : "bytes",
                  "name" : "consensusKey",
                  "type" : "bytes"
               },
               {
                  "internalType" : "enum IAutonity.ValidatorState",
                  "name" : "state",
                  "type" : "uint8"
               },
               {
                  "internalType" : "uint256",
                  "name" : "conversionRatio",
                  "type" : "uint256"
               }
            ],
            "internalType" : "struct IAutonity.Validator[]",
            "name" : "_validators",
            "type" : "tuple[]"
         },
         {
            "components" : [
               {
                  "components" : [
                     {
                        "internalType" : "uint256",
                        "name" : "treasuryFee",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "minBaseFee",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "delegationRate",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "unbondingPeriod",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "initialInflationReserve",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "withholdingThreshold",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "proposerRewardRate",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "oracleRewardRate",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "address payable",
                        "name" : "withheldRewardsPool",
                        "type" : "address"
                     },
                     {
                        "internalType" : "address payable",
                        "name" : "treasuryAccount",
                        "type" : "address"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "baseFeeChangeDenominator",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "elasticityMultiplier",
                        "type" : "uint256"
                     }
                  ],
                  "internalType" : "struct IAutonity.Policy",
                  "name" : "policy",
                  "type" : "tuple"
               },
               {
                  "components" : [
                     {
                        "internalType" : "contract IAccountability",
                        "name" : "accountabilityContract",
                        "type" : "address"
                     },
                     {
                        "internalType" : "contract IOracle",
                        "name" : "oracleContract",
                        "type" : "address"
                     },
                     {
                        "internalType" : "contract IACU",
                        "name" : "acuContract",
                        "type" : "address"
                     },
                     {
                        "internalType" : "contract ISupplyControl",
                        "name" : "supplyControlContract",
                        "type" : "address"
                     },
                     {
                        "internalType" : "contract IStabilization",
                        "name" : "stabilizationContract",
                        "type" : "address"
                     },
                     {
                        "internalType" : "contract IUpgradeManager",
                        "name" : "upgradeManagerContract",
                        "type" : "address"
                     },
                     {
                        "internalType" : "contract IInflationController",
                        "name" : "inflationControllerContract",
                        "type" : "address"
                     },
                     {
                        "internalType" : "contract IOmissionAccountability",
                        "name" : "omissionAccountabilityContract",
                        "type" : "address"
                     },
                     {
                        "internalType" : "contract IAuctioneer",
                        "name" : "auctioneerContract",
                        "type" : "address"
                     }
                  ],
                  "internalType" : "struct IAutonity.Contracts",
                  "name" : "contracts",
                  "type" : "tuple"
               },
               {
                  "components" : [
                     {
                        "internalType" : "address",
                        "name" : "operatorAccount",
                        "type" : "address"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "epochPeriod",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "blockPeriod",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "committeeSize",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "maxScheduleDuration",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "gasLimit",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "gasLimitBoundDivisor",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "clusteringThreshold",
                        "type" : "uint256"
                     }
                  ],
                  "internalType" : "struct IAutonity.Protocol",
                  "name" : "protocol",
                  "type" : "tuple"
               },
               {
                  "internalType" : "uint256",
                  "name" : "contractVersion",
                  "type" : "uint256"
               }
            ],
            "internalType" : "struct IAutonity.Config",
            "name" : "_config",
            "type" : "tuple"
         }
      ],
      "stateMutability" : "nonpayable",
      "type" : "constructor"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "indexed" : true,
            "internalType" : "address",
            "name" : "treasury",
            "type" : "address"
         },
         {
            "indexed" : true,
            "internalType" : "address",
            "name" : "addr",
            "type" : "address"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "effectiveBlock",
            "type" : "uint256"
         }
      ],
      "name" : "ActivatedValidator",
      "type" : "event"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "indexed" : true,
            "internalType" : "address",
            "name" : "owner",
            "type" : "address"
         },
         {
            "indexed" : true,
            "internalType" : "address",
            "name" : "spender",
            "type" : "address"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "value",
            "type" : "uint256"
         }
      ],
      "name" : "Approval",
      "type" : "event"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "indexed" : true,
            "internalType" : "address",
            "name" : "_owner",
            "type" : "address"
         },
         {
            "indexed" : true,
            "internalType" : "address",
            "name" : "_caller",
            "type" : "address"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "_value",
            "type" : "uint256"
         }
      ],
      "name" : "BondingApproval",
      "type" : "event"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "indexed" : true,
            "internalType" : "address",
            "name" : "validator",
            "type" : "address"
         },
         {
            "indexed" : true,
            "internalType" : "address",
            "name" : "delegator",
            "type" : "address"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "amount",
            "type" : "uint256"
         },
         {
            "indexed" : false,
            "internalType" : "enum IAutonity.ValidatorState",
            "name" : "state",
            "type" : "uint8"
         }
      ],
      "name" : "BondingRejected",
      "type" : "event"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "indexed" : true,
            "internalType" : "address",
            "name" : "addr",
            "type" : "address"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "amount",
            "type" : "uint256"
         }
      ],
      "name" : "BurnedStake",
      "type" : "event"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "indexed" : false,
            "internalType" : "address",
            "name" : "to",
            "type" : "address"
         },
         {
            "indexed" : false,
            "internalType" : "string",
            "name" : "methodSignature",
            "type" : "string"
         },
         {
            "indexed" : false,
            "internalType" : "bytes",
            "name" : "returnData",
            "type" : "bytes"
         }
      ],
      "name" : "CallFailed",
      "type" : "event"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "indexed" : true,
            "internalType" : "address",
            "name" : "validator",
            "type" : "address"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "rate",
            "type" : "uint256"
         }
      ],
      "name" : "CommissionRateChange",
      "type" : "event"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "indexed" : false,
            "internalType" : "string",
            "name" : "name",
            "type" : "string"
         },
         {
            "indexed" : false,
            "internalType" : "address",
            "name" : "oldValue",
            "type" : "address"
         },
         {
            "indexed" : false,
            "internalType" : "address",
            "name" : "newValue",
            "type" : "address"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "appliesAtHeight",
            "type" : "uint256"
         }
      ],
      "name" : "ConfigUpdateAddress",
      "type" : "event"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "indexed" : false,
            "internalType" : "string",
            "name" : "name",
            "type" : "string"
         },
         {
            "indexed" : false,
            "internalType" : "bool",
            "name" : "oldValue",
            "type" : "bool"
         },
         {
            "indexed" : false,
            "internalType" : "bool",
            "name" : "newValue",
            "type" : "bool"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "appliesAtHeight",
            "type" : "uint256"
         }
      ],
      "name" : "ConfigUpdateBool",
      "type" : "event"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "indexed" : false,
            "internalType" : "string",
            "name" : "name",
            "type" : "string"
         },
         {
            "indexed" : false,
            "internalType" : "int256",
            "name" : "oldValue",
            "type" : "int256"
         },
         {
            "indexed" : false,
            "internalType" : "int256",
            "name" : "newValue",
            "type" : "int256"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "appliesAtHeight",
            "type" : "uint256"
         }
      ],
      "name" : "ConfigUpdateInt",
      "type" : "event"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "indexed" : false,
            "internalType" : "string",
            "name" : "name",
            "type" : "string"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "oldValue",
            "type" : "uint256"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "newValue",
            "type" : "uint256"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "appliesAtHeight",
            "type" : "uint256"
         }
      ],
      "name" : "ConfigUpdateUint",
      "type" : "event"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "components" : [
               {
                  "internalType" : "uint256",
                  "name" : "minBaseFee",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "baseFeeChangeDenominator",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "elasticityMultiplier",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "gasLimitBoundDivisor",
                  "type" : "uint256"
               }
            ],
            "indexed" : false,
            "internalType" : "struct IAutonity.Eip1559",
            "name" : "oldParams",
            "type" : "tuple"
         },
         {
            "components" : [
               {
                  "internalType" : "uint256",
                  "name" : "minBaseFee",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "baseFeeChangeDenominator",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "elasticityMultiplier",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "gasLimitBoundDivisor",
                  "type" : "uint256"
               }
            ],
            "indexed" : false,
            "internalType" : "struct IAutonity.Eip1559",
            "name" : "newParams",
            "type" : "tuple"
         }
      ],
      "name" : "Eip1559ParamsUpdate",
      "type" : "event"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "indexed" : false,
            "internalType" : "address",
            "name" : "validator",
            "type" : "address"
         },
         {
            "indexed" : false,
            "internalType" : "string",
            "name" : "oldEnode",
            "type" : "string"
         },
         {
            "indexed" : false,
            "internalType" : "string",
            "name" : "newEnode",
            "type" : "string"
         }
      ],
      "name" : "EnodeUpdate",
      "type" : "event"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "period",
            "type" : "uint256"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "appliedAtBlock",
            "type" : "uint256"
         }
      ],
      "name" : "EpochPeriodUpdated",
      "type" : "event"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "indexed" : true,
            "internalType" : "address",
            "name" : "addr",
            "type" : "address"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "amount",
            "type" : "uint256"
         }
      ],
      "name" : "MintedStake",
      "type" : "event"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "indexed" : true,
            "internalType" : "address",
            "name" : "validator",
            "type" : "address"
         },
         {
            "indexed" : true,
            "internalType" : "address",
            "name" : "delegator",
            "type" : "address"
         },
         {
            "indexed" : true,
            "internalType" : "address",
            "name" : "caller",
            "type" : "address"
         },
         {
            "indexed" : false,
            "internalType" : "bool",
            "name" : "selfBonded",
            "type" : "bool"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "amount",
            "type" : "uint256"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "headBondingID",
            "type" : "uint256"
         }
      ],
      "name" : "NewBondingRequest",
      "type" : "event"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "epoch",
            "type" : "uint256"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "inflationReserve",
            "type" : "uint256"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "stakeCirculating",
            "type" : "uint256"
         }
      ],
      "name" : "NewEpoch",
      "type" : "event"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "indexed" : true,
            "internalType" : "address",
            "name" : "scheduleVault",
            "type" : "address"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "amount",
            "type" : "uint256"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "start",
            "type" : "uint256"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "totalDuration",
            "type" : "uint256"
         }
      ],
      "name" : "NewSchedule",
      "type" : "event"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "indexed" : true,
            "internalType" : "address",
            "name" : "validator",
            "type" : "address"
         },
         {
            "indexed" : true,
            "internalType" : "address",
            "name" : "delegator",
            "type" : "address"
         },
         {
            "indexed" : true,
            "internalType" : "address",
            "name" : "caller",
            "type" : "address"
         },
         {
            "indexed" : false,
            "internalType" : "bool",
            "name" : "selfBonded",
            "type" : "bool"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "amount",
            "type" : "uint256"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "headUnbondingID",
            "type" : "uint256"
         }
      ],
      "name" : "NewUnbondingRequest",
      "type" : "event"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "indexed" : true,
            "internalType" : "address",
            "name" : "treasury",
            "type" : "address"
         },
         {
            "indexed" : true,
            "internalType" : "address",
            "name" : "addr",
            "type" : "address"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "effectiveBlock",
            "type" : "uint256"
         }
      ],
      "name" : "PausedValidator",
      "type" : "event"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "indexed" : false,
            "internalType" : "address",
            "name" : "treasury",
            "type" : "address"
         },
         {
            "indexed" : false,
            "internalType" : "address",
            "name" : "addr",
            "type" : "address"
         },
         {
            "indexed" : false,
            "internalType" : "address",
            "name" : "oracleAddress",
            "type" : "address"
         },
         {
            "indexed" : false,
            "internalType" : "string",
            "name" : "enode",
            "type" : "string"
         },
         {
            "indexed" : false,
            "internalType" : "address",
            "name" : "liquidStateContract",
            "type" : "address"
         }
      ],
      "name" : "RegisteredValidator",
      "type" : "event"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "indexed" : true,
            "internalType" : "address",
            "name" : "addr",
            "type" : "address"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "atnSelfAmount",
            "type" : "uint256"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "atnDelegatedAmount",
            "type" : "uint256"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "ntnSelfAmount",
            "type" : "uint256"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "ntnDelegatedAmount",
            "type" : "uint256"
         }
      ],
      "name" : "Rewarded",
      "type" : "event"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "indexed" : true,
            "internalType" : "address",
            "name" : "from",
            "type" : "address"
         },
         {
            "indexed" : true,
            "internalType" : "address",
            "name" : "to",
            "type" : "address"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "value",
            "type" : "uint256"
         }
      ],
      "name" : "Transfer",
      "type" : "event"
   },
   {
      "stateMutability" : "payable",
      "type" : "fallback"
   },
   {
      "inputs" : [],
      "name" : "STANDARD_DECIMALS",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "STANDARD_SCALE_FACTOR",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "_address",
            "type" : "address"
         }
      ],
      "name" : "activateValidator",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "owner",
            "type" : "address"
         },
         {
            "internalType" : "address",
            "name" : "spender",
            "type" : "address"
         }
      ],
      "name" : "allowance",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "applyNewCommissionRates",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "applyStakingOperations",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "spender",
            "type" : "address"
         },
         {
            "internalType" : "uint256",
            "name" : "amount",
            "type" : "uint256"
         }
      ],
      "name" : "approve",
      "outputs" : [
         {
            "internalType" : "bool",
            "name" : "",
            "type" : "bool"
         }
      ],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "_caller",
            "type" : "address"
         },
         {
            "internalType" : "uint256",
            "name" : "_amount",
            "type" : "uint256"
         }
      ],
      "name" : "approveBonding",
      "outputs" : [
         {
            "internalType" : "bool",
            "name" : "",
            "type" : "bool"
         }
      ],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "_validator",
            "type" : "address"
         },
         {
            "internalType" : "uint256",
            "name" : "_selfBond",
            "type" : "uint256"
         },
         {
            "internalType" : "uint256",
            "name" : "_delegated",
            "type" : "uint256"
         }
      ],
      "name" : "autobond",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "_addr",
            "type" : "address"
         }
      ],
      "name" : "balanceOf",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "_validator",
            "type" : "address"
         },
         {
            "internalType" : "uint256",
            "name" : "_amount",
            "type" : "uint256"
         }
      ],
      "name" : "bond",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "_account",
            "type" : "address"
         },
         {
            "internalType" : "address",
            "name" : "_validator",
            "type" : "address"
         },
         {
            "internalType" : "uint256",
            "name" : "_amount",
            "type" : "uint256"
         }
      ],
      "name" : "bondFrom",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "_owner",
            "type" : "address"
         },
         {
            "internalType" : "address",
            "name" : "_caller",
            "type" : "address"
         }
      ],
      "name" : "bondingAllowance",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "_addr",
            "type" : "address"
         },
         {
            "internalType" : "uint256",
            "name" : "_amount",
            "type" : "uint256"
         }
      ],
      "name" : "burn",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "_validator",
            "type" : "address"
         },
         {
            "internalType" : "uint256",
            "name" : "_rate",
            "type" : "uint256"
         }
      ],
      "name" : "changeCommissionRate",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "circulatingSupply",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "completeContractUpgrade",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "computeCommittee",
      "outputs" : [
         {
            "internalType" : "address[]",
            "name" : "",
            "type" : "address[]"
         },
         {
            "internalType" : "address[]",
            "name" : "",
            "type" : "address[]"
         },
         {
            "internalType" : "address[]",
            "name" : "",
            "type" : "address[]"
         }
      ],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "_scheduleVault",
            "type" : "address"
         },
         {
            "internalType" : "uint256",
            "name" : "_amount",
            "type" : "uint256"
         },
         {
            "internalType" : "uint256",
            "name" : "_startTime",
            "type" : "uint256"
         },
         {
            "internalType" : "uint256",
            "name" : "_totalDuration",
            "type" : "uint256"
         }
      ],
      "name" : "createSchedule",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "decimals",
      "outputs" : [
         {
            "internalType" : "uint8",
            "name" : "",
            "type" : "uint8"
         }
      ],
      "stateMutability" : "pure",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "finalize",
      "outputs" : [
         {
            "components" : [
               {
                  "internalType" : "bool",
                  "name" : "contractUpgradeReady",
                  "type" : "bool"
               },
               {
                  "internalType" : "bool",
                  "name" : "epochEnded",
                  "type" : "bool"
               },
               {
                  "components" : [
                     {
                        "components" : [
                           {
                              "internalType" : "address",
                              "name" : "addr",
                              "type" : "address"
                           },
                           {
                              "internalType" : "uint256",
                              "name" : "votingPower",
                              "type" : "uint256"
                           },
                           {
                              "internalType" : "bytes",
                              "name" : "consensusKey",
                              "type" : "bytes"
                           }
                        ],
                        "internalType" : "struct IAutonity.CommitteeMember[]",
                        "name" : "committee",
                        "type" : "tuple[]"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "previousEpochBlock",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "epochBlock",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "nextEpochBlock",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "omissionDelta",
                        "type" : "uint256"
                     },
                     {
                        "components" : [
                           {
                              "internalType" : "uint256",
                              "name" : "minBaseFee",
                              "type" : "uint256"
                           },
                           {
                              "internalType" : "uint256",
                              "name" : "baseFeeChangeDenominator",
                              "type" : "uint256"
                           },
                           {
                              "internalType" : "uint256",
                              "name" : "elasticityMultiplier",
                              "type" : "uint256"
                           },
                           {
                              "internalType" : "uint256",
                              "name" : "gasLimitBoundDivisor",
                              "type" : "uint256"
                           }
                        ],
                        "internalType" : "struct IAutonity.Eip1559",
                        "name" : "eip1559",
                        "type" : "tuple"
                     }
                  ],
                  "internalType" : "struct IAutonity.EpochInfo",
                  "name" : "epoch",
                  "type" : "tuple"
               },
               {
                  "components" : [
                     {
                        "internalType" : "uint256",
                        "name" : "epochPeriod",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "blockPeriod",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "gasLimit",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "clusteringThreshold",
                        "type" : "uint256"
                     },
                     {
                        "components" : [
                           {
                              "internalType" : "uint256",
                              "name" : "range",
                              "type" : "uint256"
                           },
                           {
                              "internalType" : "uint256",
                              "name" : "delta",
                              "type" : "uint256"
                           },
                           {
                              "internalType" : "uint256",
                              "name" : "gracePeriod",
                              "type" : "uint256"
                           }
                        ],
                        "internalType" : "struct IAutonity.Accountability",
                        "name" : "accountability",
                        "type" : "tuple"
                     },
                     {
                        "components" : [
                           {
                              "internalType" : "uint256",
                              "name" : "minBaseFee",
                              "type" : "uint256"
                           },
                           {
                              "internalType" : "uint256",
                              "name" : "baseFeeChangeDenominator",
                              "type" : "uint256"
                           },
                           {
                              "internalType" : "uint256",
                              "name" : "elasticityMultiplier",
                              "type" : "uint256"
                           },
                           {
                              "internalType" : "uint256",
                              "name" : "gasLimitBoundDivisor",
                              "type" : "uint256"
                           }
                        ],
                        "internalType" : "struct IAutonity.Eip1559",
                        "name" : "eip1559",
                        "type" : "tuple"
                     }
                  ],
                  "internalType" : "struct IAutonity.ClientAwareConfig",
                  "name" : "config",
                  "type" : "tuple"
               }
            ],
            "internalType" : "struct Autonity.FinalizeResult",
            "name" : "",
            "type" : "tuple"
         }
      ],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "uint256",
            "name" : "_omissionDelta",
            "type" : "uint256"
         }
      ],
      "name" : "finalizeInitialization",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getBlockPeriod",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "uint256",
            "name" : "_id",
            "type" : "uint256"
         }
      ],
      "name" : "getBondingRequest",
      "outputs" : [
         {
            "components" : [
               {
                  "internalType" : "address payable",
                  "name" : "delegator",
                  "type" : "address"
               },
               {
                  "internalType" : "address",
                  "name" : "delegatee",
                  "type" : "address"
               },
               {
                  "internalType" : "uint256",
                  "name" : "amount",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "requestBlock",
                  "type" : "uint256"
               }
            ],
            "internalType" : "struct IAutonity.BondingRequest",
            "name" : "",
            "type" : "tuple"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "uint256",
            "name" : "_id",
            "type" : "uint256"
         }
      ],
      "name" : "getBondingRequestByID",
      "outputs" : [
         {
            "components" : [
               {
                  "internalType" : "address payable",
                  "name" : "delegator",
                  "type" : "address"
               },
               {
                  "internalType" : "address",
                  "name" : "delegatee",
                  "type" : "address"
               },
               {
                  "internalType" : "uint256",
                  "name" : "amount",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "requestBlock",
                  "type" : "uint256"
               }
            ],
            "internalType" : "struct IAutonity.BondingRequest",
            "name" : "",
            "type" : "tuple"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getClientConfig",
      "outputs" : [
         {
            "components" : [
               {
                  "internalType" : "uint256",
                  "name" : "epochPeriod",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "blockPeriod",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "gasLimit",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "clusteringThreshold",
                  "type" : "uint256"
               },
               {
                  "components" : [
                     {
                        "internalType" : "uint256",
                        "name" : "range",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "delta",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "gracePeriod",
                        "type" : "uint256"
                     }
                  ],
                  "internalType" : "struct IAutonity.Accountability",
                  "name" : "accountability",
                  "type" : "tuple"
               },
               {
                  "components" : [
                     {
                        "internalType" : "uint256",
                        "name" : "minBaseFee",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "baseFeeChangeDenominator",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "elasticityMultiplier",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "gasLimitBoundDivisor",
                        "type" : "uint256"
                     }
                  ],
                  "internalType" : "struct IAutonity.Eip1559",
                  "name" : "eip1559",
                  "type" : "tuple"
               }
            ],
            "internalType" : "struct IAutonity.ClientAwareConfig",
            "name" : "",
            "type" : "tuple"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getCommittee",
      "outputs" : [
         {
            "components" : [
               {
                  "internalType" : "address",
                  "name" : "addr",
                  "type" : "address"
               },
               {
                  "internalType" : "uint256",
                  "name" : "votingPower",
                  "type" : "uint256"
               },
               {
                  "internalType" : "bytes",
                  "name" : "consensusKey",
                  "type" : "bytes"
               }
            ],
            "internalType" : "struct IAutonity.CommitteeMember[]",
            "name" : "",
            "type" : "tuple[]"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getCommitteeEnodes",
      "outputs" : [
         {
            "internalType" : "string[]",
            "name" : "",
            "type" : "string[]"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getCommitteeSlot",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getConfig",
      "outputs" : [
         {
            "components" : [
               {
                  "components" : [
                     {
                        "internalType" : "uint256",
                        "name" : "treasuryFee",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "minBaseFee",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "delegationRate",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "unbondingPeriod",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "initialInflationReserve",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "withholdingThreshold",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "proposerRewardRate",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "oracleRewardRate",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "address payable",
                        "name" : "withheldRewardsPool",
                        "type" : "address"
                     },
                     {
                        "internalType" : "address payable",
                        "name" : "treasuryAccount",
                        "type" : "address"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "baseFeeChangeDenominator",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "elasticityMultiplier",
                        "type" : "uint256"
                     }
                  ],
                  "internalType" : "struct IAutonity.Policy",
                  "name" : "policy",
                  "type" : "tuple"
               },
               {
                  "components" : [
                     {
                        "internalType" : "contract IAccountability",
                        "name" : "accountabilityContract",
                        "type" : "address"
                     },
                     {
                        "internalType" : "contract IOracle",
                        "name" : "oracleContract",
                        "type" : "address"
                     },
                     {
                        "internalType" : "contract IACU",
                        "name" : "acuContract",
                        "type" : "address"
                     },
                     {
                        "internalType" : "contract ISupplyControl",
                        "name" : "supplyControlContract",
                        "type" : "address"
                     },
                     {
                        "internalType" : "contract IStabilization",
                        "name" : "stabilizationContract",
                        "type" : "address"
                     },
                     {
                        "internalType" : "contract IUpgradeManager",
                        "name" : "upgradeManagerContract",
                        "type" : "address"
                     },
                     {
                        "internalType" : "contract IInflationController",
                        "name" : "inflationControllerContract",
                        "type" : "address"
                     },
                     {
                        "internalType" : "contract IOmissionAccountability",
                        "name" : "omissionAccountabilityContract",
                        "type" : "address"
                     },
                     {
                        "internalType" : "contract IAuctioneer",
                        "name" : "auctioneerContract",
                        "type" : "address"
                     }
                  ],
                  "internalType" : "struct IAutonity.Contracts",
                  "name" : "contracts",
                  "type" : "tuple"
               },
               {
                  "components" : [
                     {
                        "internalType" : "address",
                        "name" : "operatorAccount",
                        "type" : "address"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "epochPeriod",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "blockPeriod",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "committeeSize",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "maxScheduleDuration",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "gasLimit",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "gasLimitBoundDivisor",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "clusteringThreshold",
                        "type" : "uint256"
                     }
                  ],
                  "internalType" : "struct IAutonity.Protocol",
                  "name" : "protocol",
                  "type" : "tuple"
               },
               {
                  "internalType" : "uint256",
                  "name" : "contractVersion",
                  "type" : "uint256"
               }
            ],
            "internalType" : "struct IAutonity.Config",
            "name" : "",
            "type" : "tuple"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getCurrentCommitteeSize",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getCurrentEpochPeriod",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "uint256",
            "name" : "_height",
            "type" : "uint256"
         }
      ],
      "name" : "getEpochByHeight",
      "outputs" : [
         {
            "components" : [
               {
                  "components" : [
                     {
                        "internalType" : "address",
                        "name" : "addr",
                        "type" : "address"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "votingPower",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "bytes",
                        "name" : "consensusKey",
                        "type" : "bytes"
                     }
                  ],
                  "internalType" : "struct IAutonity.CommitteeMember[]",
                  "name" : "committee",
                  "type" : "tuple[]"
               },
               {
                  "internalType" : "uint256",
                  "name" : "previousEpochBlock",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "epochBlock",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "nextEpochBlock",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "omissionDelta",
                  "type" : "uint256"
               },
               {
                  "components" : [
                     {
                        "internalType" : "uint256",
                        "name" : "minBaseFee",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "baseFeeChangeDenominator",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "elasticityMultiplier",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "gasLimitBoundDivisor",
                        "type" : "uint256"
                     }
                  ],
                  "internalType" : "struct IAutonity.Eip1559",
                  "name" : "eip1559",
                  "type" : "tuple"
               }
            ],
            "internalType" : "struct IAutonity.EpochInfo",
            "name" : "",
            "type" : "tuple"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "uint256",
            "name" : "_block",
            "type" : "uint256"
         }
      ],
      "name" : "getEpochFromBlock",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getEpochID",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getEpochInfo",
      "outputs" : [
         {
            "components" : [
               {
                  "components" : [
                     {
                        "internalType" : "address",
                        "name" : "addr",
                        "type" : "address"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "votingPower",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "bytes",
                        "name" : "consensusKey",
                        "type" : "bytes"
                     }
                  ],
                  "internalType" : "struct IAutonity.CommitteeMember[]",
                  "name" : "committee",
                  "type" : "tuple[]"
               },
               {
                  "internalType" : "uint256",
                  "name" : "previousEpochBlock",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "epochBlock",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "nextEpochBlock",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "omissionDelta",
                  "type" : "uint256"
               },
               {
                  "components" : [
                     {
                        "internalType" : "uint256",
                        "name" : "minBaseFee",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "baseFeeChangeDenominator",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "elasticityMultiplier",
                        "type" : "uint256"
                     },
                     {
                        "internalType" : "uint256",
                        "name" : "gasLimitBoundDivisor",
                        "type" : "uint256"
                     }
                  ],
                  "internalType" : "struct IAutonity.Eip1559",
                  "name" : "eip1559",
                  "type" : "tuple"
               }
            ],
            "internalType" : "struct IAutonity.EpochInfo",
            "name" : "",
            "type" : "tuple"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getEpochPeriod",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getEpochTotalBondedStake",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getHeadBondingID",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getHeadUnbondingID",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getInflationReserve",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getLastEpochBlock",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getLastEpochTime",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getLastUnlockedUnbonding",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getLiquidLogicContract",
      "outputs" : [
         {
            "internalType" : "address",
            "name" : "",
            "type" : "address"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getMaxCommitteeSize",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getMaxScheduleDuration",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getMinimumBaseFee",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getNewContract",
      "outputs" : [
         {
            "internalType" : "bytes",
            "name" : "",
            "type" : "bytes"
         },
         {
            "internalType" : "string",
            "name" : "",
            "type" : "string"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getNextEpochBlock",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getOperator",
      "outputs" : [
         {
            "internalType" : "address",
            "name" : "",
            "type" : "address"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getOracle",
      "outputs" : [
         {
            "internalType" : "address",
            "name" : "",
            "type" : "address"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "_vault",
            "type" : "address"
         },
         {
            "internalType" : "uint256",
            "name" : "_id",
            "type" : "uint256"
         }
      ],
      "name" : "getSchedule",
      "outputs" : [
         {
            "components" : [
               {
                  "internalType" : "uint256",
                  "name" : "totalAmount",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "unlockedAmount",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "start",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "totalDuration",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "lastUnlockTime",
                  "type" : "uint256"
               }
            ],
            "internalType" : "struct IScheduleController.Schedule",
            "name" : "",
            "type" : "tuple"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getSlasher",
      "outputs" : [
         {
            "internalType" : "address",
            "name" : "",
            "type" : "address"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getTailBondingID",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "_vault",
            "type" : "address"
         }
      ],
      "name" : "getTotalSchedules",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getTreasuryAccount",
      "outputs" : [
         {
            "internalType" : "address",
            "name" : "",
            "type" : "address"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getTreasuryFee",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getUnbondingPeriod",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "uint256",
            "name" : "_id",
            "type" : "uint256"
         }
      ],
      "name" : "getUnbondingRequest",
      "outputs" : [
         {
            "components" : [
               {
                  "internalType" : "address payable",
                  "name" : "delegator",
                  "type" : "address"
               },
               {
                  "internalType" : "address",
                  "name" : "delegatee",
                  "type" : "address"
               },
               {
                  "internalType" : "uint256",
                  "name" : "amount",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "unbondingShare",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "requestBlock",
                  "type" : "uint256"
               },
               {
                  "internalType" : "bool",
                  "name" : "unlocked",
                  "type" : "bool"
               },
               {
                  "internalType" : "bool",
                  "name" : "released",
                  "type" : "bool"
               },
               {
                  "internalType" : "bool",
                  "name" : "selfDelegation",
                  "type" : "bool"
               }
            ],
            "internalType" : "struct IAutonity.UnbondingRequest",
            "name" : "",
            "type" : "tuple"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "uint256",
            "name" : "_id",
            "type" : "uint256"
         }
      ],
      "name" : "getUnbondingRequestByID",
      "outputs" : [
         {
            "components" : [
               {
                  "internalType" : "address payable",
                  "name" : "delegator",
                  "type" : "address"
               },
               {
                  "internalType" : "address",
                  "name" : "delegatee",
                  "type" : "address"
               },
               {
                  "internalType" : "uint256",
                  "name" : "amount",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "unbondingShare",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "requestBlock",
                  "type" : "uint256"
               },
               {
                  "internalType" : "bool",
                  "name" : "unlocked",
                  "type" : "bool"
               },
               {
                  "internalType" : "bool",
                  "name" : "released",
                  "type" : "bool"
               },
               {
                  "internalType" : "bool",
                  "name" : "selfDelegation",
                  "type" : "bool"
               }
            ],
            "internalType" : "struct IAutonity.UnbondingRequest",
            "name" : "",
            "type" : "tuple"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "uint256",
            "name" : "_unbondingID",
            "type" : "uint256"
         }
      ],
      "name" : "getUnbondingShare",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "_addr",
            "type" : "address"
         }
      ],
      "name" : "getValidator",
      "outputs" : [
         {
            "components" : [
               {
                  "internalType" : "address payable",
                  "name" : "treasury",
                  "type" : "address"
               },
               {
                  "internalType" : "address",
                  "name" : "nodeAddress",
                  "type" : "address"
               },
               {
                  "internalType" : "address",
                  "name" : "oracleAddress",
                  "type" : "address"
               },
               {
                  "internalType" : "string",
                  "name" : "enode",
                  "type" : "string"
               },
               {
                  "internalType" : "uint256",
                  "name" : "commissionRate",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "bondedStake",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "unbondingStake",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "unbondingShares",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "selfBondedStake",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "selfUnbondingStake",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "selfUnbondingShares",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "selfUnbondingStakeLocked",
                  "type" : "uint256"
               },
               {
                  "internalType" : "contract ILiquid",
                  "name" : "liquidStateContract",
                  "type" : "address"
               },
               {
                  "internalType" : "uint256",
                  "name" : "liquidSupply",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "registrationBlock",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "totalSlashed",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "jailReleaseBlock",
                  "type" : "uint256"
               },
               {
                  "internalType" : "bytes",
                  "name" : "consensusKey",
                  "type" : "bytes"
               },
               {
                  "internalType" : "enum IAutonity.ValidatorState",
                  "name" : "state",
                  "type" : "uint8"
               },
               {
                  "internalType" : "uint256",
                  "name" : "conversionRatio",
                  "type" : "uint256"
               }
            ],
            "internalType" : "struct IAutonity.Validator",
            "name" : "",
            "type" : "tuple"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "_addr",
            "type" : "address"
         }
      ],
      "name" : "getValidatorState",
      "outputs" : [
         {
            "internalType" : "enum IAutonity.ValidatorState",
            "name" : "",
            "type" : "uint8"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getValidators",
      "outputs" : [
         {
            "internalType" : "address[]",
            "name" : "",
            "type" : "address[]"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getVersion",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "uint256",
            "name" : "_unbondingID",
            "type" : "uint256"
         }
      ],
      "name" : "isUnbondingReleased",
      "outputs" : [
         {
            "internalType" : "bool",
            "name" : "",
            "type" : "bool"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "_nodeAddress",
            "type" : "address"
         },
         {
            "internalType" : "uint256",
            "name" : "_jailtime",
            "type" : "uint256"
         },
         {
            "internalType" : "enum IAutonity.ValidatorState",
            "name" : "_newJailedState",
            "type" : "uint8"
         }
      ],
      "name" : "jail",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "_nodeAddress",
            "type" : "address"
         },
         {
            "internalType" : "enum IAutonity.ValidatorState",
            "name" : "_newJailboundState",
            "type" : "uint8"
         }
      ],
      "name" : "jailbound",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "_addr",
            "type" : "address"
         },
         {
            "internalType" : "uint256",
            "name" : "_amount",
            "type" : "uint256"
         }
      ],
      "name" : "mint",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "name",
      "outputs" : [
         {
            "internalType" : "string",
            "name" : "",
            "type" : "string"
         }
      ],
      "stateMutability" : "pure",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "_address",
            "type" : "address"
         }
      ],
      "name" : "pauseValidator",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "string",
            "name" : "_enode",
            "type" : "string"
         },
         {
            "internalType" : "address",
            "name" : "_oracleAddress",
            "type" : "address"
         },
         {
            "internalType" : "bytes",
            "name" : "_consensusKey",
            "type" : "bytes"
         },
         {
            "internalType" : "bytes",
            "name" : "_signatures",
            "type" : "bytes"
         }
      ],
      "name" : "registerValidator",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "resetContractUpgrade",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "contract IAccountability",
            "name" : "_address",
            "type" : "address"
         }
      ],
      "name" : "setAccountabilityContract",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "_address",
            "type" : "address"
         }
      ],
      "name" : "setAcuContract",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "_address",
            "type" : "address"
         }
      ],
      "name" : "setAuctioneerContract",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "uint256",
            "name" : "_threshold",
            "type" : "uint256"
         }
      ],
      "name" : "setClusteringThreshold",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "uint256",
            "name" : "_size",
            "type" : "uint256"
         }
      ],
      "name" : "setCommitteeSize",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "components" : [
               {
                  "internalType" : "uint256",
                  "name" : "minBaseFee",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "baseFeeChangeDenominator",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "elasticityMultiplier",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "gasLimitBoundDivisor",
                  "type" : "uint256"
               }
            ],
            "internalType" : "struct IAutonity.Eip1559",
            "name" : "_params",
            "type" : "tuple"
         }
      ],
      "name" : "setEip1559Params",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "uint256",
            "name" : "_period",
            "type" : "uint256"
         }
      ],
      "name" : "setEpochPeriod",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "uint256",
            "name" : "_gasLimit",
            "type" : "uint256"
         }
      ],
      "name" : "setGasLimit",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "contract IInflationController",
            "name" : "_address",
            "type" : "address"
         }
      ],
      "name" : "setInflationControllerContract",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "uint256",
            "name" : "_height",
            "type" : "uint256"
         }
      ],
      "name" : "setLastFinalizedBlock",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "_contract",
            "type" : "address"
         }
      ],
      "name" : "setLiquidLogicContract",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "uint256",
            "name" : "_newMaxDuration",
            "type" : "uint256"
         }
      ],
      "name" : "setMaxScheduleDuration",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "contract IOmissionAccountability",
            "name" : "_address",
            "type" : "address"
         }
      ],
      "name" : "setOmissionAccountabilityContract",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "_account",
            "type" : "address"
         }
      ],
      "name" : "setOperatorAccount",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address payable",
            "name" : "_address",
            "type" : "address"
         }
      ],
      "name" : "setOracleContract",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "uint256",
            "name" : "_oracleRewardRate",
            "type" : "uint256"
         }
      ],
      "name" : "setOracleRewardRate",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "uint256",
            "name" : "_proposerRewardRate",
            "type" : "uint256"
         }
      ],
      "name" : "setProposerRewardRate",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "_slasher",
            "type" : "address"
         }
      ],
      "name" : "setSlasher",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "_address",
            "type" : "address"
         }
      ],
      "name" : "setStabilizationContract",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "_address",
            "type" : "address"
         }
      ],
      "name" : "setSupplyControlContract",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address payable",
            "name" : "_account",
            "type" : "address"
         }
      ],
      "name" : "setTreasuryAccount",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "uint256",
            "name" : "_treasuryFee",
            "type" : "uint256"
         }
      ],
      "name" : "setTreasuryFee",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "uint256",
            "name" : "_period",
            "type" : "uint256"
         }
      ],
      "name" : "setUnbondingPeriod",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "contract UpgradeManager",
            "name" : "_address",
            "type" : "address"
         }
      ],
      "name" : "setUpgradeManagerContract",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address payable",
            "name" : "_pool",
            "type" : "address"
         }
      ],
      "name" : "setWithheldRewardsPool",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "uint256",
            "name" : "_withholdingThreshold",
            "type" : "uint256"
         }
      ],
      "name" : "setWithholdingThreshold",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "_nodeAddress",
            "type" : "address"
         },
         {
            "internalType" : "uint256",
            "name" : "_slashingRate",
            "type" : "uint256"
         }
      ],
      "name" : "slash",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "slashingAmount",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "_nodeAddress",
            "type" : "address"
         },
         {
            "internalType" : "uint256",
            "name" : "_slashingRate",
            "type" : "uint256"
         },
         {
            "internalType" : "uint256",
            "name" : "_jailtime",
            "type" : "uint256"
         },
         {
            "internalType" : "enum IAutonity.ValidatorState",
            "name" : "_newJailedState",
            "type" : "uint8"
         },
         {
            "internalType" : "enum IAutonity.ValidatorState",
            "name" : "_newJailboundState",
            "type" : "uint8"
         }
      ],
      "name" : "slashAndJail",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "slashingAmount",
            "type" : "uint256"
         },
         {
            "internalType" : "uint256",
            "name" : "jailReleaseBlock",
            "type" : "uint256"
         },
         {
            "internalType" : "bool",
            "name" : "isJailbound",
            "type" : "bool"
         }
      ],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "symbol",
      "outputs" : [
         {
            "internalType" : "string",
            "name" : "",
            "type" : "string"
         }
      ],
      "stateMutability" : "pure",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "testComputeCommittee",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "totalSupply",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "_recipient",
            "type" : "address"
         },
         {
            "internalType" : "uint256",
            "name" : "_amount",
            "type" : "uint256"
         }
      ],
      "name" : "transfer",
      "outputs" : [
         {
            "internalType" : "bool",
            "name" : "",
            "type" : "bool"
         }
      ],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "_sender",
            "type" : "address"
         },
         {
            "internalType" : "address",
            "name" : "_recipient",
            "type" : "address"
         },
         {
            "internalType" : "uint256",
            "name" : "_amount",
            "type" : "uint256"
         }
      ],
      "name" : "transferFrom",
      "outputs" : [
         {
            "internalType" : "bool",
            "name" : "",
            "type" : "bool"
         }
      ],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "_validator",
            "type" : "address"
         },
         {
            "internalType" : "uint256",
            "name" : "_amount",
            "type" : "uint256"
         }
      ],
      "name" : "unbond",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "_account",
            "type" : "address"
         },
         {
            "internalType" : "address",
            "name" : "_validator",
            "type" : "address"
         },
         {
            "internalType" : "uint256",
            "name" : "_amount",
            "type" : "uint256"
         }
      ],
      "name" : "unbondFrom",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "_nodeAddress",
            "type" : "address"
         },
         {
            "internalType" : "string",
            "name" : "_enode",
            "type" : "string"
         }
      ],
      "name" : "updateEnode",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "bytes",
            "name" : "_bytecode",
            "type" : "bytes"
         },
         {
            "internalType" : "string",
            "name" : "_abi",
            "type" : "string"
         }
      ],
      "name" : "upgradeContract",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "stateMutability" : "payable",
      "type" : "receive"
   }
]
`))
