diff --git a/artifacts/contracts/CunaFinanceBsc.sol/CunaFinanceBsc.json b/artifacts/contracts/CunaFinanceBsc.sol/CunaFinanceBsc.json index 9d7de32..cdcba62 100644 --- a/artifacts/contracts/CunaFinanceBsc.sol/CunaFinanceBsc.json +++ b/artifacts/contracts/CunaFinanceBsc.sol/CunaFinanceBsc.json @@ -1388,6 +1388,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "highestRatio", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "initialize", @@ -1580,57 +1593,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "address", - "name": "targetAddress", - "type": "address" - } - ], - "name": "searchMarketplaceHistory", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "listTime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "saleTime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "origValue", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "saleValue", - "type": "uint256" - }, - { - "internalType": "address", - "name": "seller", - "type": "address" - }, - { - "internalType": "address", - "name": "buyer", - "type": "address" - } - ], - "internalType": "struct CunaFinanceBsc.MarketplaceHistory[]", - "name": "", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -1853,6 +1815,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_highestRatio", + "type": "uint256" + } + ], + "name": "updateHighestRatio", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -2171,8 +2146,8 @@ "type": "function" } ], - "bytecode": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000d6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000735760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d35780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b615fc280620000e66000396000f3fe608060405234801561001057600080fd5b50600436106103635760003560e01c8062159da614610368578063013745181461038e578063022914a7146103c45780630519da32146103f7578063092c7610146104005780630a84096a146104205780630a910a6d146104335780630c7d63861461043c57806313baee5b14610446578063173825d9146104665780631764303d146104795780631aefa2d11461048c5780631eb9e53e1461049f5780632ded58aa146104b25780632e46fed8146104bb5780633ba8396e146104e45780633c92f98d146105075780633f35e7221461052957806343a32f891461053c57806343c7c011146105b7578063441a4175146105ca5780634a61f1e5146105eb57806351e624721461060b57806351f6cf2f1461061e578063549e61d31461063f5780635811622714610652578063592d1dd11461066557806361d1080b1461068557806362cd6a091461068d57806367a74ddc146106a45780636ef569a5146106b75780637065cb48146106c057806374d1c8e3146106d357806375060a0b146106e65780637a0c6dc0146107065780637bc221ac146107265780637e6d99261461073957806380ca0ecf146107625780638129fc1c1461077557806382b756811461077d57806384e8520a14610790578063853e0df2146107b05780638939d787146107c35780638f82818f146107cc5780639437e32e146107ec578063953d16bf146107ff57806396fd111a146108125780639cb6f556146108325780639f3a676c14610845578063a0d4675814610891578063aaf4b04d146108b1578063ac97b417146108c4578063b6c3dc4c146108d7578063b92a349f146108f7578063bc0bc6ba1461090a578063bd84477d1461092a578063bed9757e14610992578063c0c07d17146109b3578063c2676603146109c6578063c32d3ae2146109ce578063c6b61e4c14610a01578063c7b530b014610a71578063cc573a9114610a91578063ce13d09014610acd578063ce3432c314610ae0578063cfcf331914610b00578063d532bdfe14610b13578063da1b436414610b26578063e88f8e6614610b46578063eacdc5ff14610b59578063eb44e0a314610b62578063ef5d9ae814610b75578063f2bb563014610b95578063fe2f50d014610ba8578063fee6018c14610bb1578063ffecf51614610bc4575b600080fd5b61037b610376366004615500565b610bd7565b6040519081526020015b60405180910390f35b6103b761039c366004615500565b6004602052600090815260409020546001600160a01b031681565b6040516103859190615522565b6103e76103d2366004615500565b60006020819052908152604090205460ff1681565b6040519015158152602001610385565b61037b60075481565b61037b61040e366004615500565b60066020526000908152604090205481565b61037b61042e366004615536565b610c71565b61037b60125481565b610444610da9565b005b61037b610454366004615500565b600c6020526000908152604090205481565b610444610474366004615500565b610f6f565b6104446104873660046155a4565b611060565b61044461049a3660046155e5565b61129e565b61037b6104ad366004615500565b6112d2565b61037b60115481565b61037b6104c9366004615500565b6001600160a01b03166000908152601c602052604090205490565b6103e76104f2366004615500565b60016020526000908152604090205460ff1681565b61051a6105153660046155a4565b611316565b60405161038593929190615639565b610444610537366004615536565b611507565b61058861054a366004615536565b60146020908152600092835260408084209091529082529020805460018201546002830154600390930154919290916001600160a01b039091169084565b604051610385949392919093845260208401929092526001600160a01b03166040830152606082015260800190565b6104446105c5366004615500565b61157c565b6105dd6105d83660046155e5565b6118ea565b60405161038592919061566f565b61037b6105f9366004615500565b60186020526000908152604090205481565b6104446106193660046155e5565b611922565b61063161062c366004615536565b611956565b604051610385929190615688565b61044461064d366004615696565b611992565b610444610660366004615701565b611cff565b61037b610673366004615500565b60056020526000908152604090205481565b601b5461037b565b610695611f69565b6040516103859392919061574f565b6104446106b23660046157f1565b612190565b61037b60165481565b6104446106ce366004615500565b6121ed565b6104446106e1366004615824565b6122bf565b61037b6106f4366004615500565b600a6020526000908152604090205481565b610719610714366004615500565b6124a2565b604051610385919061588f565b61037b610734366004615500565b612589565b61037b610747366004615500565b6001600160a01b031660009081526017602052604090205490565b61037b610770366004615536565b61275d565b610444612869565b61044461078b3660046155e5565b612a91565b61037b61079e366004615500565b600d6020526000908152604090205481565b6104446107be3660046155e5565b612b23565b61037b60135481565b61037b6107da366004615500565b60176020526000908152604090205481565b6104446107fa36600461593d565b612ba1565b61044461080d3660046155e5565b612be8565b610825610820366004615701565b612ed6565b60405161038591906159cf565b6104446108403660046155e5565b613075565b6108586108533660046155e5565b613304565b6040805196875260208701959095529385019290925260608401526001600160a01b0390811660808401521660a082015260c001610385565b6108a461089f366004615536565b613357565b6040516103859190615a1d565b6104446108bf3660046155e5565b6133bb565b6104446108d23660046155e5565b613441565b6108ea6108e5366004615536565b613833565b6040516103859190615a57565b610444610905366004615a65565b613945565b61091d6109183660046155e5565b613ae6565b6040516103859190615a98565b61093d610938366004615536565b613b8a565b604080519a8b5260208b0199909952978901969096526060880194909452608087019290925260a086015260c08501526001600160a01b031660e0840152151561010083015261012082015261014001610385565b6109a56109a0366004615536565b613c08565b604051610385929190615aa6565b6104446109c1366004615acb565b613dae565b6103e761037b565b6109e16109dc366004615500565b613f39565b604080519485526020850193909352918301526060820152608001610385565b610a44610a0f3660046155e5565b600b60205260009081526040902080546001820154600283015460038401546004850154600590950154939492939192909186565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610385565b610a84610a7f366004615500565b613f8d565b6040516103859190615afd565b610aa4610a9f366004615536565b614022565b604080519485526020850193909352918301526001600160a01b03166060820152608001610385565b610444610adb3660046155e5565b614071565b610af3610aee366004615500565b6140a5565b6040516103859190615b3f565b610af3610b0e366004615701565b614365565b610444610b213660046155a4565b6144eb565b61037b610b34366004615500565b600e6020526000908152604090205481565b61051a610b54366004615500565b614724565b61037b60105481565b610444610b70366004615536565b6148fc565b61037b610b83366004615500565b601c6020526000908152604090205481565b610444610ba3366004615701565b614e70565b61037b60155481565b610444610bbf366004615bb9565b614f2a565b610444610bd2366004615500565b6150f1565b600080610be3836112d2565b6001600160a01b0384166000908152600e6020526040902054909150805b601054811015610c69578215610c57576000818152600b602052604081206004015461271090610c319086615c2f565b610c3b9190615c46565b9050610c478186615c68565b9450610c538185615c7b565b9350505b80610c6181615c8e565b915050610c01565b505050919050565b6001600160a01b0382166000908152600260205260408120805482919084908110610c9e57610c9e615ca7565b906000526020600020906009020190506000816006015442610cc09190615c7b565b60078301549091506001600160a01b03166000805b6001600160a01b038316600090815260036020526040902054811015610d9c576001600160a01b0383166000908152600360205260408120805483908110610d1f57610d1f615ca7565b6000918252602082206002909102018054600182015460088a015492945090929091606490610d5090600a90615c2f565b610d5a9190615c46565b9050828810610d8757612710610d708383615c2f565b610d7a9190615c46565b610d849087615c68565b95505b5050505080610d9590615c8e565b9050610cd5565b5093505050505b92915050565b610db161516d565b6000610dbc33610bd7565b905060008111610de75760405162461bcd60e51b8152600401610dde90615cbd565b60405180910390fd5b336000908152600c602052604081208054839290610e06908490615c7b565b925050819055508060116000828254610e1f9190615c7b565b9091555050601054336000908152600e6020908152604080832093909355601c90529081208054839290610e54908490615c68565b909155505060088054906000610e6983615c8e565b9091555050336000908152600f6020908152604091829020825160808101845260085481529182018490526007549092820190610ea69042615c68565b8152600080516020615f0d833981519152602091820181905283546001808201865560009586528386208551600490930201918255848401519082015560408401516002820155606090930151600390930180546001600160a01b0319166001600160a01b0390941693909317909255908252600a9052600080516020615ead8339815191528054839290610f3c908490615c68565b90915550506040518181523390600080516020615ecd8339815191529060200160405180910390a250610f6d6151a3565b565b3360009081526020819052604090205460ff16610f9e5760405162461bcd60e51b8152600401610dde90615ce7565b6001600160a01b03811660009081526020819052604090205460ff16610ff25760405162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b6044820152606401610dde565b336001600160a01b0382160361103f5760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb329039b2b63360711b6044820152606401610dde565b6001600160a01b03166000908152602081905260409020805460ff19169055565b61106861516d565b6000805b8281101561121757600084848381811061108857611088615ca7565b336000908152600260209081526040909120549102929092013592505081106110b15750611205565b3360009081526002602052604081208054839081106110d2576110d2615ca7565b9060005260206000209060090201905060006110ee3384610c71565b9050816004015481101561110457505050611205565b60008260040154826111169190615c7b565b9050806000036111295750505050611205565b8083600401600082825461113d9190615c68565b9091555061114d90508187615c68565b336000908152600f6020526040908190208151608081019092529197508061117887620f4240615c68565b8152602001838152602001600754426111919190615c68565b8152600080516020615f0d833981519152602091820152825460018082018555600094855293829020835160049092020190815590820151928101929092556040810151600283015560600151600390910180546001600160a01b0319166001600160a01b03909216919091179055505050505b8061120f81615c8e565b91505061106c565b50801561129157600080516020615f0d8339815191526000908152600a602052600080516020615ead8339815191528054839290611256908490615c68565b909155505060405181815233907f4e69fdc49495bcab2b4375781457ba16653a90eb4ffb6588351bdc39071433e29060200160405180910390a25b5061129a6151a3565b5050565b3360009081526020819052604090205460ff166112cd5760405162461bcd60e51b8152600401610dde90615ce7565b601655565b6001600160a01b0381166000908152600c6020908152604080832054601890925282205480821161130457600061130e565b61130e8183615c7b565b949350505050565b606080600083806001600160401b0381111561133457611334615d0f565b60405190808252806020026020018201604052801561135d578160200160208202803683370190505b509350806001600160401b0381111561137857611378615d0f565b6040519080825280602002602001820160405280156113a1578160200160208202803683370190505b50925060005b818110156114fe5760008787838181106113c3576113c3615ca7565b90506020020160208101906113d89190615500565b6001600160a01b038116600090815260066020526040902054875191925090819088908590811061140b5761140b615ca7565b6020908102919091018101919091526001600160a01b03808416600090815260049283905260408082205490516302c68be360e31b815291939216916316345f189161145991879101615522565b602060405180830381865afa158015611476573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149a9190615d25565b90506000670de0b6b3a76400006114b18484615c2f565b6114bb9190615c46565b9050808886815181106114d0576114d0615ca7565b60209081029190910101526114e58188615c68565b96505050505080806114f690615c8e565b9150506113a7565b50509250925092565b3360009081526020819052604090205460ff166115365760405162461bcd60e51b8152600401610dde90615ce7565b61154a6001600160a01b03831633836151b4565b6040518181526001600160a01b038316903390600080516020615f4d8339815191529060200160405180910390a35050565b61158461516d565b6000805b3360009081526002602052604090205481101561168f573360009081526002602052604081208054839081106115c0576115c0615ca7565b6000918252602090912060099091020160078101549091506001600160a01b0385811691161480156115fe57506007810154600160a01b900460ff16155b1561167c57600061160f338461275d565b9050816003015481111561167a57600082600301548261162f9190615c7b565b905061163b8186615c68565b9450808360030160008282546116519190615c68565b909155505082546003840154106116785760078301805460ff60a01b1916600160a01b1790555b505b505b508061168781615c8e565b915050611588565b50600081116116b05760405162461bcd60e51b8152600401610dde90615cbd565b33600090815260056020526040902054156117bd576001600160a01b0380831660009081526004602081905260408083205490516302c68be360e31b81529293670de0b6b3a764000093869392909116916316345f189161171391899101615522565b602060405180830381865afa158015611730573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117549190615d25565b61175e9190615c2f565b6117689190615c46565b33600090815260056020526040902054909150811061179657336000908152600560205260408120556117bb565b33600090815260056020526040812080548392906117b5908490615c7b565b90915550505b505b6001600160a01b038216600090815260066020526040812080548392906117e5908490615c7b565b9091555050336000908152600f60205260408082208151608081019092526009805491938392919061181683615c8e565b919050558152602001838152602001600754426118339190615c68565b81526001600160a01b0385811660209283018190528454600180820187556000968752848720865160049093020191825585850151908201556040808601516002830155606090950151600390910180546001600160a01b03191691909316179091558352600a9052812080548392906118ae908490615c68565b90915550506040513390600080516020615eed833981519152906118d6908490600090615688565b60405180910390a2506118e76151a3565b50565b601981815481106118fa57600080fd5b6000918252602090912060029091020180546001909101546001600160a01b03909116915082565b3360009081526020819052604090205460ff166119515760405162461bcd60e51b8152600401610dde90615ce7565b601555565b6003602052816000526040600020818154811061197257600080fd5b600091825260209091206002909102018054600190910154909250905082565b3360009081526001602052604090205460ff166119c15760405162461bcd60e51b8152600401610dde90615ce7565b828114611a085760405162461bcd60e51b8152602060048201526015602482015274082e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d605b1b6044820152606401610dde565b82611a445760405162461bcd60e51b815260206004820152600c60248201526b456d7074792061727261797360a01b6044820152606401610dde565b60005b83811015611cf8576000858583818110611a6357611a63615ca7565b9050602002016020810190611a789190615500565b6001600160a01b031603611a9e5760405162461bcd60e51b8152600401610dde90615d3e565b6000838383818110611ab257611ab2615ca7565b9050602002013511611ad65760405162461bcd60e51b8152600401610dde90615d67565b828282818110611ae857611ae8615ca7565b90506020020135600c6000878785818110611b0557611b05615ca7565b9050602002016020810190611b1a9190615500565b6001600160a01b03166001600160a01b0316815260200190815260200160002054601154611b489190615c7b565b611b529190615c68565b601155600d6000868684818110611b6b57611b6b615ca7565b9050602002016020810190611b809190615500565b6001600160a01b03166001600160a01b0316815260200190815260200160002054600003611c0757828282818110611bba57611bba615ca7565b90506020020135600d6000878785818110611bd757611bd7615ca7565b9050602002016020810190611bec9190615500565b6001600160a01b031681526020810191909152604001600020555b828282818110611c1957611c19615ca7565b90506020020135600c6000878785818110611c3657611c36615ca7565b9050602002016020810190611c4b9190615500565b6001600160a01b03168152602081019190915260400160002055848482818110611c7757611c77615ca7565b9050602002016020810190611c8c9190615500565b6001600160a01b03167fec7e3594982826a1f90c8fc76513357b83a691b7f4e38b8be04f3d40f9b15839848484818110611cc857611cc8615ca7565b90506020020135604051611cde91815260200190565b60405180910390a280611cf081615c8e565b915050611a47565b5050505050565b611d0761516d565b60008211611d475760405162461bcd60e51b815260206004820152600d60248201526c496e76616c69642076616c756560981b6044820152606401610dde565b60008111611d675760405162461bcd60e51b8152600401610dde90615d8f565b601554821015611daf5760405162461bcd60e51b815260206004820152601360248201527256616c75652062656c6f77206d696e696d756d60681b6044820152606401610dde565b6000611dba336112d2565b905080831115611ddc5760405162461bcd60e51b8152600401610dde90615dbb565b60088054906000611dec83615c8e565b90915550506008543360009081526018602052604081208054869290611e13908490615c68565b909155505060408051608081018252858152602080820186815233838501818152426060860190815260008381526014865287812089825286528781209651875593516001808801919091559151600280880180546001600160a01b039384166001600160a01b03199182161790915592516003909801979097558751808901909852928752938601878152601980548084018255948190529651939095027f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c969581018054949093169390941692909217905591517f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9696909101559054611f189190615c7b565b336000818152601a6020908152604080832086845290915290819020929092559051600080516020615f2d83398151915290611f579086908590615688565b60405180910390a2505061129a6151a3565b60195460609081908190806001600160401b03811115611f8b57611f8b615d0f565b604051908082528060200260200182016040528015611fb4578160200160208202803683370190505b509350806001600160401b03811115611fcf57611fcf615d0f565b604051908082528060200260200182016040528015611ff8578160200160208202803683370190505b509250806001600160401b0381111561201357612013615d0f565b60405190808252806020026020018201604052801561204c57816020015b6120396153f5565b8152602001906001900390816120315790505b50915060005b818110156121895760006019828154811061206f5761206f615ca7565b60009182526020918290206040805180820190915260029092020180546001600160a01b03168083526001909101549282019290925287519092508790849081106120bc576120bc615ca7565b60200260200101906001600160a01b031690816001600160a01b03168152505080602001518583815181106120f3576120f3615ca7565b60209081029190910181019190915281516001600160a01b039081166000908152601483526040808220858501518352845290819020815160808101835281548152600182015494810194909452600281015490921690830152600301546060820152845185908490811061216a5761216a615ca7565b602002602001018190525050808061218190615c8e565b915050612052565b5050909192565b3360009081526020819052604090205460ff166121bf5760405162461bcd60e51b8152600401610dde90615ce7565b6001600160a01b03918216600090815260046020526040902080546001600160a01b03191691909216179055565b3360009081526020819052604090205460ff1661221c5760405162461bcd60e51b8152600401610dde90615ce7565b6001600160a01b0381166122425760405162461bcd60e51b8152600401610dde90615d3e565b6001600160a01b03811660009081526020819052604090205460ff161561229b5760405162461bcd60e51b815260206004820152600d60248201526c20b63932b0b23c9037bbb732b960991b6044820152606401610dde565b6001600160a01b03166000908152602081905260409020805460ff19166001179055565b3360009081526001602052604090205460ff166122ee5760405162461bcd60e51b8152600401610dde90615ce7565b60026000896001600160a01b03166001600160a01b031681526020019081526020016000206040518061014001604052808981526020018881526020018781526020016000815260200160008152602001848152602001838152602001866001600160a01b03168152602001600015158152602001858152509080600181540180825580915050600190039060005260206000209060090201600090919091909150600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506101008201518160070160146101000a81548160ff0219169083151502179055506101208201518160080155505082600560008a6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546124669190615c68565b90915550506001600160a01b03841660009081526006602052604081208054899290612493908490615c68565b90915550505050505050505050565b6001600160a01b0381166000908152600260209081526040808320805482518185028101850190935280835260609492939192909184015b8282101561257e57600084815260209081902060408051610140810182526009860290920180548352600180820154848601526002820154928401929092526003810154606084015260048101546080840152600581015460a0840152600681015460c084015260078101546001600160a01b03811660e0850152600160a01b900460ff1615156101008401526008015461012083015290835290920191016124da565b505050509050919050565b6001600160a01b038116600090815260026020526040812054815b81811015612756576001600160a01b03841660009081526002602052604081208054839081106125d6576125d6615ca7565b600091825260209182902060408051610140810182526009909302909101805483526001810154938301939093526002830154908201526003820154606082015260048201546080820152600582015460a0820152600682015460c082015260078201546001600160a01b03811660e083015260ff600160a01b909104161515610100820181905260089092015461012082015291506127435760e0810180516001600160a01b03908116600090815260046020819052604080832054945190516302c68be360e31b81529294909316926316345f18926126b79201615522565b602060405180830381865afa1580156126d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f89190615d25565b90506000826060015183600001516127109190615c7b565b90506000670de0b6b3a76400006127278385615c2f565b6127319190615c46565b905061273d8188615c68565b96505050505b508061274e81615c8e565b9150506125a4565b5050919050565b6001600160a01b038216600090815260026020526040812080548291908490811061278a5761278a615ca7565b9060005260206000209060090201905060008160060154426127ac9190615c7b565b60078301549091506001600160a01b03166000805b6001600160a01b038316600090815260036020526040902054811015610d9c576001600160a01b038316600090815260036020526040812080548390811061280b5761280b615ca7565b6000918252602090912060029091020180546001820154919250908187106128555787546127109061283e908390615c2f565b6128489190615c46565b6128529086615c68565b94505b5050508061286290615c8e565b90506127c1565b6000612873615211565b805490915060ff600160401b82041615906001600160401b031660008115801561289a5750825b90506000826001600160401b031660011480156128b65750303b155b9050811580156128c4575080155b156128e25760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b0319166001178555831561290b57845460ff60401b1916600160401b1785555b61291361523a565b3360009081526020818152604082208054600160ff1991821681179092557f4cfa3c6903140891ecff713e237b1f1746362568dfb5e8e9bc37719e4f37e0c580548216831790557f3e1f9e6abae6b647fdc3c5896ef1871ceb3c98e9e72852da3f17d161a860f76c80548216831790557f3517cbb3edfcef55b3b32be7021bc73ef070f4a8bad0d4b389b96924cf17b7418054821683179055738a9281ecece9b599c2f42d829c3d0d8e74b7083e84527f968a1791ad31618c63b086103baa804af57c3ca0efa33a191010fbb7741579fc80549091169091179055600c905269021e19e0c9bab24000007f649cbac87391465cfe24c65b052f0edf3b8486f136e0b91262d76d1f34d7826b8190556011805491929091612a34908490615c68565b90915550506201fa4060075560646013558315611cf857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b3360009081526020819052604090205460ff16612ac05760405162461bcd60e51b8152600401610dde90615ce7565b60008111612b1e5760405162461bcd60e51b815260206004820152602560248201527f4d61782070657263656e74616765206d75737420626520677265617465722074604482015264068616e20360dc1b6064820152608401610dde565b601355565b3360009081526020819052604090205460ff16612b525760405162461bcd60e51b8152600401610dde90615ce7565b612b6b600080516020615f0d83398151915233836151b4565b604051818152600080516020615f0d833981519152903390600080516020615f4d8339815191529060200160405180910390a350565b3360009081526001602052604090205460ff16612bd05760405162461bcd60e51b8152600401610dde90615ce7565b612be086868686868642426122bf565b505050505050565b33600090815260146020908152604080832084845290915290208054612c205760405162461bcd60e51b8152600401610dde90615deb565b60028101546001600160a01b03163314612c4c5760405162461bcd60e51b8152600401610dde90615e16565b805460165460009061271090612c629084615c2f565b612c6c9190615c46565b33600090815260186020526040812080549293508492909190612c90908490615c7b565b90915550508015612cd957336000908152600c602052604081208054839290612cba908490615c7b565b925050819055508060116000828254612cd39190615c7b565b90915550505b8015612d2357336001600160a01b03167f4725a4d4de9bff212d0885095e27515072f73f427df55e52f37f241321ef88f98286604051612d1a929190615688565b60405180910390a25b336000818152601460209081526040808320888452825280832083815560018082018590556002820180546001600160a01b03191690556003909101849055938352601a82528083208884529091528120546019549092612d8391615c7b565b9050808214612e4457600060198281548110612da157612da1615ca7565b60009182526020918290206040805180820190915260029092020180546001600160a01b03168252600101549181019190915260198054919250829185908110612ded57612ded615ca7565b6000918252602080832084516002939093020180546001600160a01b0319166001600160a01b03938416178155938101516001909401939093558351168152601a8252604080822093830151825292909152208290555b6019805480612e5557612e55615e3e565b600082815260208082206002600019949094019384020180546001600160a01b03191681556001018290559190925533808352601a825260408084208a855283528084209390935591518881527f73d12dec3eb3b445b6c9feb2fd559ba7c852c525bc1e59d8f7ff760c55df041d91015b60405180910390a2505050505050565b606081831115612f185760405162461bcd60e51b815260206004820152600d60248201526c496e76616c69642072616e676560981b6044820152606401610dde565b6010548210612f5f5760405162461bcd60e51b8152602060048201526013602482015272115b9908195c1bd8da081b9bdd08199bdd5b99606a1b6044820152606401610dde565b6000612f6b8484615c7b565b612f76906001615c68565b90506000816001600160401b03811115612f9257612f92615d0f565b604051908082528060200260200182016040528015612fcb57816020015b612fb8615426565b815260200190600190039081612fb05790505b50905060005b8281101561306c57600b6000612fe78389615c68565b81526020019081526020016000206040518060c0016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820154815260200160058201548152505082828151811061304e5761304e615ca7565b6020026020010181905250808061306490615c8e565b915050612fd1565b50949350505050565b61307d61516d565b6000811161309d5760405162461bcd60e51b8152600401610dde90615d67565b6000601254116130e65760405162461bcd60e51b81526020600482015260146024820152734275796f7574206e6f7420617661696c61626c6560601b6044820152606401610dde565b60006130f1336112d2565b9050808211156131135760405162461bcd60e51b8152600401610dde90615dbb565b612710613122826109c4615c2f565b61312c9190615c46565b82101561316c5760405162461bcd60e51b815260206004820152600e60248201526d416d6f756e7420746f6f206c6f7760901b6044820152606401610dde565b60006127106012548461317f9190615c2f565b6131899190615c46565b336000908152600c60205260408120805492935085929091906131ad908490615c7b565b9250508190555082601160008282546131c69190615c7b565b9091555050336000908152601c6020526040812080548392906131ea908490615c68565b9091555050600880549060006131ff83615c8e565b9091555050336000908152600f602090815260409182902082516080810184526008548152918201849052600754909282019061323c9042615c68565b8152600080516020615f0d833981519152602091820181905283546001808201865560009586528386208551600490930201918255848401519082015560408401516002820155606090930151600390930180546001600160a01b0319166001600160a01b0390941693909317909255908252600a9052600080516020615ead83398151915280548392906132d2908490615c68565b90915550506040518181523390600080516020615ecd8339815191529060200160405180910390a250506118e76151a3565b601b818154811061331457600080fd5b6000918252602090912060069091020180546001820154600283015460038401546004850154600590950154939550919390926001600160a01b03918216911686565b61335f6153f5565b506001600160a01b03918216600090815260146020908152604080832093835292815290829020825160808101845281548152600182015492810192909252600281015490931691810191909152600390910154606082015290565b3360009081526020819052604090205460ff166133ea5760405162461bcd60e51b8152600401610dde90615ce7565b61271081111561343c5760405162461bcd60e51b815260206004820152601d60248201527f50657263656e746167652063616e6e6f742065786365656420313030250000006044820152606401610dde565b601255565b61344961516d565b33600090815260026020526040902054811061349f5760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840eccae6e8d2dcce40d2dcc8caf605b1b6044820152606401610dde565b3360009081526002602052604081208054839081106134c0576134c0615ca7565b906000526020600020906009020190508060070160149054906101000a900460ff16156135225760405162461bcd60e51b815260206004820152601060248201526f56657374696e6720636f6d706c65746560801b6044820152606401610dde565b600061352e338461275d565b9050816003015481101561357b5760405162461bcd60e51b8152602060048201526014602482015273125b9d985b1a590818db185a5b48185b5bdd5b9d60621b6044820152606401610dde565b600082600301548261358d9190615c7b565b9050600081116135af5760405162461bcd60e51b8152600401610dde90615cbd565b808360030160008282546135c39190615c68565b909155505082546003840154106135ea5760078301805460ff60a01b1916600160a01b1790555b33600090815260056020526040902054156136fb5760078301546001600160a01b0390811660008181526004602081905260408083205490516302c68be360e31b81529294670de0b6b3a764000094879492909116926316345f1892613651929101615522565b602060405180830381865afa15801561366e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136929190615d25565b61369c9190615c2f565b6136a69190615c46565b3360009081526005602052604090205490915081106136d457336000908152600560205260408120556136f9565b33600090815260056020526040812080548392906136f3908490615c7b565b90915550505b505b60078301546001600160a01b031660009081526006602052604081208054839290613727908490615c7b565b9091555050336000908152600f60205260408082208151608081019092526009805491938392919061375883615c8e565b919050558152602001838152602001600754426137759190615c68565b81526007860180546001600160a01b039081166020938401528454600180820187556000968752848720865160049093020191825585850151908201556040808601516002830155606090950151600390910180546001600160a01b0319169183169190911790559054168352600a9052812080548392906137f8908490615c68565b90915550506040513390600080516020615eed83398151915290613820908490600090615688565b60405180910390a25050506118e76151a3565b613867604051806080016040528060008152602001600081526020016000815260200160006001600160a01b031681525090565b6001600160a01b0383166000908152600f60205260408120905b815481101561392c578382828154811061389d5761389d615ca7565b9060005260206000209060040201600001540361391a578181815481106138c6576138c6615ca7565b6000918252602091829020604080516080810182526004909302909101805483526001810154938301939093526002830154908201526003909101546001600160a01b031660608201529250610da3915050565b8061392481615c8e565b915050613881565b5060405162461bcd60e51b8152600401610dde90615e54565b3360009081526020819052604090205460ff166139745760405162461bcd60e51b8152600401610dde90615ce7565b6001600160a01b03831661399a5760405162461bcd60e51b8152600401610dde90615e7d565b6000811180156139ac57506127108111155b6139ed5760405162461bcd60e51b8152602060048201526012602482015271496e76616c69642070657263656e7461676560701b6044820152606401610dde565b6001600160a01b0383166000908152600360205260408120613a0e9161545c565b6000825b612710821015613aab5782612710613a2a8285615c68565b1115613a3f57613a3c83612710615c7b565b90505b6001600160a01b0386166000908152600360209081526040808320815180830190925285825281830185815281546001818101845592865293909420915160029093029091019182559151910155613a978184615c68565b9250613aa38583615c68565b915050613a12565b6040516001600160a01b038616907fde4b6ccc38b84f88129403b65a309f9b1c41d4c316bc2118d7614e449b9d4c4590600090a25050505050565b613aee615426565b6010548210613b315760405162461bcd60e51b815260206004820152600f60248201526e115c1bd8da081b9bdd08199bdd5b99608a1b6044820152606401610dde565b506000908152600b6020908152604091829020825160c08101845281548152600182015492810192909252600281015492820192909252600382015460608201526004820154608082015260059091015460a082015290565b60026020528160005260406000208181548110613ba657600080fd5b6000918252602090912060099091020180546001820154600283015460038401546004850154600586015460068701546007880154600890980154969950949750929591949093916001600160a01b03811691600160a01b90910460ff16908a565b6001600160a01b038216600090815260026020526040812080546060928392909185908110613c3957613c39615ca7565b600091825260208083206007600990930201918201546001600160a01b03168084526003909152604083205491935091816001600160401b03811115613c8157613c81615d0f565b604051908082528060200260200182016040528015613caa578160200160208202803683370190505b5090506000826001600160401b03811115613cc757613cc7615d0f565b604051908082528060200260200182016040528015613cf0578160200160208202803683370190505b50905060005b83811015613d9d576001600160a01b0385166000908152600360205260408120805483908110613d2857613d28615ca7565b9060005260206000209060020201905080600001548760060154613d4c9190615c68565b848381518110613d5e57613d5e615ca7565b6020026020010181815250508060010154838381518110613d8157613d81615ca7565b602090810291909101015250613d9681615c8e565b9050613cf6565b5090955093505050505b9250929050565b3360009081526020819052604090205460ff16613ddd5760405162461bcd60e51b8152600401610dde90615ce7565b60105460009015613e26576000600b60006001601054613dfd9190615c7b565b81526020019081526020016000209050613e228584836001015484600201548861524a565b9150505b601354811115613e715760405162461bcd60e51b81526020600482015260166024820152750aadcd8dec6d640e0cae4c6cadce8c2ceca40d0d2ced60531b6044820152606401610dde565b6040805160c08101825286815260208082018781526011548385019081526060808501898152608086018881524260a08801908152601080546000908152600b89528a90209851895595516001890155935160028801559051600387015551600486015590516005909401939093555483518881529182018590529281018690527feadbedb993dfca23e4c79bf4fa5fe531c2e0e926258fabb8445e8bc5c472780f910160405180910390a260108054906000613f2d83615c8e565b91905055505050505050565b6000806000806000613f4a86610bd7565b90506000613f57876112d2565b6001600160a01b03979097166000908152600c6020908152604080832054600d9092529091205490989297965094509092505050565b6001600160a01b0381166000908152600f60209081526040808320805482518185028101850190935280835260609492939192909184015b8282101561257e57600084815260209081902060408051608081018252600486029092018054835260018082015484860152600282015492840192909252600301546001600160a01b031660608301529083529092019101613fc5565b600f602052816000526040600020818154811061403e57600080fd5b6000918252602090912060049091020180546001820154600283015460039093015491945092506001600160a01b031684565b3360009081526020819052604090205460ff166140a05760405162461bcd60e51b8152600401610dde90615ce7565b600755565b60606001600160a01b0382166140cd5760405162461bcd60e51b8152600401610dde90615d3e565b6000805b601b5481101561417d57836001600160a01b0316601b82815481106140f8576140f8615ca7565b60009182526020909120600460069092020101546001600160a01b031614806141585750836001600160a01b0316601b828154811061413957614139615ca7565b60009182526020909120600560069092020101546001600160a01b0316145b1561416b578161416781615c8e565b9250505b8061417581615c8e565b9150506140d1565b50806000036141bf5760408051600080825260208201909252906141b7565b6141a461547d565b81526020019060019003908161419c5790505b509392505050565b6000816001600160401b038111156141d9576141d9615d0f565b60405190808252806020026020018201604052801561421257816020015b6141ff61547d565b8152602001906001900390816141f75790505b5090506000805b601b5481101561435b57856001600160a01b0316601b828154811061424057614240615ca7565b60009182526020909120600460069092020101546001600160a01b031614806142a05750856001600160a01b0316601b828154811061428157614281615ca7565b60009182526020909120600560069092020101546001600160a01b0316145b1561434957601b81815481106142b8576142b8615ca7565b60009182526020918290206040805160c0810182526006909302909101805483526001810154938301939093526002830154908201526003820154606082015260048201546001600160a01b03908116608083015260059092015490911660a0820152835184908490811061432f5761432f615ca7565b6020026020010181905250818061434590615c8e565b9250505b8061435381615c8e565b915050614219565b5090949350505050565b601b5460609083106143b55760405162461bcd60e51b8152602060048201526019602482015278537461727420696e646578206f7574206f6620626f756e647360381b6044820152606401610dde565b60006143c18385615c68565b601b549091508111156143d35750601b545b60006143df8583615c7b565b6001600160401b038111156143f6576143f6615d0f565b60405190808252806020026020018201604052801561442f57816020015b61441c61547d565b8152602001906001900390816144145790505b509050845b8281101561306c57601b818154811061444f5761444f615ca7565b60009182526020918290206040805160c0810182526006909302909101805483526001810154938301939093526002830154908201526003820154606082015260048201546001600160a01b03908116608083015260059092015490911660a0820152826144bd8884615c7b565b815181106144cd576144cd615ca7565b602002602001018190525080806144e390615c8e565b915050614434565b6144f361516d565b336000908152600f6020526040902080546145465760405162461bcd60e51b81526020600482015260136024820152724e6f207374616b657320617661696c61626c6560681b6044820152606401610dde565b8161458b5760405162461bcd60e51b8152602060048201526015602482015274139bc81cdd185ad94812511cc81c1c9bdd9a591959605a1b6044820152606401610dde565b60005b8281101561471a5760008484838181106145aa576145aa615ca7565b9050602002013590506000805b84548110156146e75760008582815481106145d4576145d4615ca7565b906000526020600020906004020190508381600001541480156145fb575060008160010154115b156146d45780600201544210156146435760405162461bcd60e51b815260206004820152600c60248201526b14dd185ad9481b1bd8dad95960a21b6044820152606401610dde565b60018101805460038301546000928390556001600160a01b0316808352600a6020526040832080549293919284929061467d908490615c7b565b9091555061469790506001600160a01b03821633846151b4565b336001600160a01b0316600080516020615f6d83398151915283886040516146c0929190615688565b60405180910390a2600194505050506146e7565b50806146df81615c8e565b9150506145b7565b50806147055760405162461bcd60e51b8152600401610dde90615e54565b5050808061471290615c8e565b91505061458e565b505061129a6151a3565b606080600080614733856112d2565b6001600160a01b0386166000908152600e60205260408120546010549293509161475e908390615c7b565b90508060000361478f5750506040805160008082526020820181815282840190935290955090935091506148f59050565b806001600160401b038111156147a7576147a7615d0f565b6040519080825280602002602001820160405280156147d0578160200160208202803683370190505b509550806001600160401b038111156147eb576147eb615d0f565b604051908082528060200260200182016040528015614814578160200160208202803683370190505b50945060005b818110156148f057600061482e8285615c68565b90508088838151811061484357614843615ca7565b602090810291909101015284156148bc576000818152600b6020526040812060040154612710906148749088615c2f565b61487e9190615c46565b90508088848151811061489357614893615ca7565b60209081029190910101526148a88188615c68565b96506148b48187615c7b565b9550506148dd565b60008783815181106148d0576148d0615ca7565b6020026020010181815250505b50806148e881615c8e565b91505061481a565b505050505b9193909250565b61490461516d565b6001600160a01b0382166000908152601460209081526040808320848452909152902080546149455760405162461bcd60e51b8152600401610dde90615deb565b336001600160a01b038416036149965760405162461bcd60e51b815260206004820152601660248201527543616e6e6f7420627579206f776e206c697374696e6760501b6044820152606401610dde565b80546001820154600383015460008284116149b25760006149bc565b6149bc8385615c7b565b90506000846149cd83612710615c2f565b6149d79190615c46565b905060006127106149e88380615c2f565b6149f29190615c46565b90506000612710614a038389615c2f565b614a0d9190615c46565b90506000614a1b8289615c7b565b9050614a37600080516020615f0d833981519152338d8a6152e3565b6001600160a01b038b166000908152600c6020526040812080548a9290614a5f908490615c7b565b9091555050336000908152600c602052604081208054839290614a83908490615c68565b90915550506001600160a01b038b16600090815260186020526040812080548a9290614ab0908490615c7b565b9091555050336000908152600d602052604081208054839290614ad4908490615c68565b925050819055508160116000828254614aed9190615c7b565b90915550506001600160a01b038b1660009081526017602052604081208054899290614b1a908490615c68565b92505081905550601b6040518060c001604052808881526020014281526020018a81526020018981526020018d6001600160a01b03168152602001336001600160a01b031681525090806001815401808255809150506001900390600052602060002090600602016000909190919091506000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060a08201518160050160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505050601460008c6001600160a01b03166001600160a01b0316815260200190815260200160002060008b815260200190815260200160002060008082016000905560018201600090556002820160006101000a8154906001600160a01b030219169055600382016000905550506000601a60008d6001600160a01b03166001600160a01b0316815260200190815260200160002060008c815260200190815260200160002054905060006001601980549050614cc99190615c7b565b9050808214614d8a57600060198281548110614ce757614ce7615ca7565b60009182526020918290206040805180820190915260029092020180546001600160a01b03168252600101549181019190915260198054919250829185908110614d3357614d33615ca7565b6000918252602080832084516002939093020180546001600160a01b0319166001600160a01b03938416178155938101516001909401939093558351168152601a8252604080822093830151825292909152208290555b6019805480614d9b57614d9b615e3e565b6001900381819060005260206000209060020201600080820160006101000a8154906001600160a01b030219169055600182016000905550509055601a60008e6001600160a01b03166001600160a01b0316815260200190815260200160002060008d815260200190815260200160002060009055336001600160a01b03168d6001600160a01b03167f7bb39d095b04a9986ed34adf14d74c33294d0a9e807f02bf634d532507422eba8b8f604051614e55929190615688565b60405180910390a3505050505050505050505061129a6151a3565b33600090815260146020908152604080832085845290915290208054614ea85760405162461bcd60e51b8152600401610dde90615deb565b60028101546001600160a01b03163314614ed45760405162461bcd60e51b8152600401610dde90615e16565b60008211614ef45760405162461bcd60e51b8152600401610dde90615d8f565b600181018290556040513390600080516020615f2d83398151915290614f1d9085908790615688565b60405180910390a2505050565b3360009081526001602052604090205460ff16614f595760405162461bcd60e51b8152600401610dde90615ce7565b6001600160a01b038516614fa65760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642075736572206164647265737360601b6044820152606401610dde565b60008411614fc65760405162461bcd60e51b8152600401610dde90615d67565b6001600160a01b038216614fec5760405162461bcd60e51b8152600401610dde90615e7d565b60088054906000614ffc83615c8e565b919050555060008161501057600854615020565b60085461502090620f4240615c68565b6001600160a01b038781166000908152600f6020908152604080832081516080810183528681528084018c81528184018c81528b881660608401818152855460018082018855968a52888a209551600490910290950194855592519484019490945551600283015551600390910180546001600160a01b0319169190961617909455928252600a9052908120805492935087929091906150c1908490615c68565b92505081905550856001600160a01b0316600080516020615f6d8339815191528683604051612ec6929190615688565b3360009081526020819052604090205460ff166151205760405162461bcd60e51b8152600401610dde90615ce7565b6001600160a01b0381166151465760405162461bcd60e51b8152600401610dde90615d3e565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6000615177615322565b80549091506001190161519d57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60006151ad615322565b6001905550565b61520c83846001600160a01b031663a9059cbb85856040516024016151da92919061566f565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050615346565b505050565b6000807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610da3565b6152426153ae565b610f6d6153d3565b6000821580615257575084155b15615264575060006152da565b60008561527388612710615c2f565b61527d9190615c46565b905060008461528e87612710615c2f565b6152989190615c46565b90508082116152ac576000925050506152da565b60006152b88284615c7b565b905060006127106152c98784615c2f565b6152d39190615c46565b9450505050505b95945050505050565b6040516001600160a01b03848116602483015283811660448301526064820183905261531c9186918216906323b872dd906084016151da565b50505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0090565b600080602060008451602086016000885af180615369576040513d6000823e3d81fd5b50506000513d9150811561538157806001141561538e565b6001600160a01b0384163b155b1561531c5783604051635274afe760e01b8152600401610dde9190615522565b6153b66153db565b610f6d57604051631afcd79f60e31b815260040160405180910390fd5b6151a36153ae565b60006153e5615211565b54600160401b900460ff16919050565b6040518060800160405280600081526020016000815260200160006001600160a01b03168152602001600081525090565b6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b50805460008255600202906000526020600020908101906118e791906154c5565b6040518060c001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b5b808211156154e057600080825560018201556002016154c6565b5090565b80356001600160a01b03811681146154fb57600080fd5b919050565b60006020828403121561551257600080fd5b61551b826154e4565b9392505050565b6001600160a01b0391909116815260200190565b6000806040838503121561554957600080fd5b615552836154e4565b946020939093013593505050565b60008083601f84011261557257600080fd5b5081356001600160401b0381111561558957600080fd5b6020830191508360208260051b8501011115613da757600080fd5b600080602083850312156155b757600080fd5b82356001600160401b038111156155cd57600080fd5b6155d985828601615560565b90969095509350505050565b6000602082840312156155f757600080fd5b5035919050565b600081518084526020808501945080840160005b8381101561562e57815187529582019590820190600101615612565b509495945050505050565b60608152600061564c60608301866155fe565b828103602084015261565e81866155fe565b915050826040830152949350505050565b6001600160a01b03929092168252602082015260400190565b918252602082015260400190565b600080600080604085870312156156ac57600080fd5b84356001600160401b03808211156156c357600080fd5b6156cf88838901615560565b909650945060208701359150808211156156e857600080fd5b506156f587828801615560565b95989497509550505050565b6000806040838503121561571457600080fd5b50508035926020909101359150565b80518252602080820151908301526040808201516001600160a01b031690830152606090810151910152565b60608082528451908201819052600090608090818401906020808901855b838110156157925781516001600160a01b03168552938201939082019060010161576d565b5050858303818701526157a583896155fe565b868103604088015287518082528289019450908201925060005b818110156157e2576157d2848651615723565b93820193928501926001016157bf565b50919998505050505050505050565b6000806040838503121561580457600080fd5b61580d836154e4565b915061581b602084016154e4565b90509250929050565b600080600080600080600080610100898b03121561584157600080fd5b61584a896154e4565b975060208901359650604089013595506060890135945061586d60808a016154e4565b979a969950949793969560a0850135955060c08501359460e001359350915050565b602080825282518282018190526000919060409081850190868401855b828110156159305781518051855286810151878601528581015186860152606080820151908601526080808201519086015260a0808201519086015260c0808201519086015260e0808201516001600160a01b03169086015261010080820151151590860152610120908101519085015261014090930192908501906001016158ac565b5091979650505050505050565b60008060008060008060c0878903121561595657600080fd5b61595f876154e4565b9550602087013594506040870135935060608701359250615982608088016154e4565b915060a087013590509295509295509295565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a08301525050565b6020808252825182820181905260009190848201906040850190845b81811015615a11576159fe838551615995565b9284019260c092909201916001016159eb565b50909695505050505050565b60808101610da38284615723565b8051825260208082015190830152604080820151908301526060908101516001600160a01b0316910152565b60808101610da38284615a2b565b600080600060608486031215615a7a57600080fd5b615a83846154e4565b95602085013595506040909401359392505050565b60c08101610da38284615995565b604081526000615ab960408301856155fe565b82810360208401526152da81856155fe565b60008060008060808587031215615ae157600080fd5b5050823594602084013594506040840135936060013592509050565b6020808252825182820181905260009190848201906040850190845b81811015615a1157615b2c838551615a2b565b9284019260809290920191600101615b19565b602080825282518282018190526000919060409081850190868401855b828110156159305781518051855286810151878601528581015186860152606080820151908601526080808201516001600160a01b039081169187019190915260a091820151169085015260c09093019290850190600101615b5c565b600080600080600060a08688031215615bd157600080fd5b615bda866154e4565b94506020860135935060408601359250615bf6606087016154e4565b915060808601358015158114615c0b57600080fd5b809150509295509295909350565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610da357610da3615c19565b600082615c6357634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610da357610da3615c19565b81810381811115610da357610da3615c19565b600060018201615ca057615ca0615c19565b5060010190565b634e487b7160e01b600052603260045260246000fd5b60208082526010908201526f4e6f7468696e6720746f20636c61696d60801b604082015260600190565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b634e487b7160e01b600052604160045260246000fd5b600060208284031215615d3757600080fd5b5051919050565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b6020808252600e908201526d125b9d985b1a5908185b5bdd5b9d60921b604082015260600190565b602080825260129082015271496e76616c69642073616c6520707269636560701b604082015260600190565b602080825260169082015275496e73756666696369656e74206e6574207374616b6560501b604082015260600190565b602080825260119082015270131a5cdd1a5b99c81b9bdd08199bdd5b99607a1b604082015260600190565b6020808252600e908201526d2737ba103a34329039b2b63632b960911b604082015260600190565b634e487b7160e01b600052603160045260246000fd5b6020808252600f908201526e14dd185ad9481b9bdd08199bdd5b99608a1b604082015260600190565b602080825260159082015274496e76616c696420746f6b656e206164647265737360581b60408201526060019056feb0775d57c3eeb070f58d410e36e9ff396813a5d76997d9a91bdf10f0798296f0a65a8b4f7f65a1063243d7f7e9e4da00ff767599acf21549ef2548a45d1695ae4a94c2c356e29a6583071e731bdacf2ca56565ba5efebcff6936eb7923b5172100000000000000000000000055d398326f99059ff775485246999027b31979558e79b7ba8dab5ebfa59b9c6af1743c3ef14863680b3cc5ac837f8d636f76031ca92ff919b850e4909ab2261d907ef955f11bc1716733a6cbece38d163a69af8a933735aa8de6d7547d0126171b2f31b9c34dd00f3ecd4be85a0ba047db4fafefa264697066735822122007efb43aed75f6b5e9e37a23a04240f92d34e3d002adea820a224131d6231f5864736f6c63430008140033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103635760003560e01c8062159da614610368578063013745181461038e578063022914a7146103c45780630519da32146103f7578063092c7610146104005780630a84096a146104205780630a910a6d146104335780630c7d63861461043c57806313baee5b14610446578063173825d9146104665780631764303d146104795780631aefa2d11461048c5780631eb9e53e1461049f5780632ded58aa146104b25780632e46fed8146104bb5780633ba8396e146104e45780633c92f98d146105075780633f35e7221461052957806343a32f891461053c57806343c7c011146105b7578063441a4175146105ca5780634a61f1e5146105eb57806351e624721461060b57806351f6cf2f1461061e578063549e61d31461063f5780635811622714610652578063592d1dd11461066557806361d1080b1461068557806362cd6a091461068d57806367a74ddc146106a45780636ef569a5146106b75780637065cb48146106c057806374d1c8e3146106d357806375060a0b146106e65780637a0c6dc0146107065780637bc221ac146107265780637e6d99261461073957806380ca0ecf146107625780638129fc1c1461077557806382b756811461077d57806384e8520a14610790578063853e0df2146107b05780638939d787146107c35780638f82818f146107cc5780639437e32e146107ec578063953d16bf146107ff57806396fd111a146108125780639cb6f556146108325780639f3a676c14610845578063a0d4675814610891578063aaf4b04d146108b1578063ac97b417146108c4578063b6c3dc4c146108d7578063b92a349f146108f7578063bc0bc6ba1461090a578063bd84477d1461092a578063bed9757e14610992578063c0c07d17146109b3578063c2676603146109c6578063c32d3ae2146109ce578063c6b61e4c14610a01578063c7b530b014610a71578063cc573a9114610a91578063ce13d09014610acd578063ce3432c314610ae0578063cfcf331914610b00578063d532bdfe14610b13578063da1b436414610b26578063e88f8e6614610b46578063eacdc5ff14610b59578063eb44e0a314610b62578063ef5d9ae814610b75578063f2bb563014610b95578063fe2f50d014610ba8578063fee6018c14610bb1578063ffecf51614610bc4575b600080fd5b61037b610376366004615500565b610bd7565b6040519081526020015b60405180910390f35b6103b761039c366004615500565b6004602052600090815260409020546001600160a01b031681565b6040516103859190615522565b6103e76103d2366004615500565b60006020819052908152604090205460ff1681565b6040519015158152602001610385565b61037b60075481565b61037b61040e366004615500565b60066020526000908152604090205481565b61037b61042e366004615536565b610c71565b61037b60125481565b610444610da9565b005b61037b610454366004615500565b600c6020526000908152604090205481565b610444610474366004615500565b610f6f565b6104446104873660046155a4565b611060565b61044461049a3660046155e5565b61129e565b61037b6104ad366004615500565b6112d2565b61037b60115481565b61037b6104c9366004615500565b6001600160a01b03166000908152601c602052604090205490565b6103e76104f2366004615500565b60016020526000908152604090205460ff1681565b61051a6105153660046155a4565b611316565b60405161038593929190615639565b610444610537366004615536565b611507565b61058861054a366004615536565b60146020908152600092835260408084209091529082529020805460018201546002830154600390930154919290916001600160a01b039091169084565b604051610385949392919093845260208401929092526001600160a01b03166040830152606082015260800190565b6104446105c5366004615500565b61157c565b6105dd6105d83660046155e5565b6118ea565b60405161038592919061566f565b61037b6105f9366004615500565b60186020526000908152604090205481565b6104446106193660046155e5565b611922565b61063161062c366004615536565b611956565b604051610385929190615688565b61044461064d366004615696565b611992565b610444610660366004615701565b611cff565b61037b610673366004615500565b60056020526000908152604090205481565b601b5461037b565b610695611f69565b6040516103859392919061574f565b6104446106b23660046157f1565b612190565b61037b60165481565b6104446106ce366004615500565b6121ed565b6104446106e1366004615824565b6122bf565b61037b6106f4366004615500565b600a6020526000908152604090205481565b610719610714366004615500565b6124a2565b604051610385919061588f565b61037b610734366004615500565b612589565b61037b610747366004615500565b6001600160a01b031660009081526017602052604090205490565b61037b610770366004615536565b61275d565b610444612869565b61044461078b3660046155e5565b612a91565b61037b61079e366004615500565b600d6020526000908152604090205481565b6104446107be3660046155e5565b612b23565b61037b60135481565b61037b6107da366004615500565b60176020526000908152604090205481565b6104446107fa36600461593d565b612ba1565b61044461080d3660046155e5565b612be8565b610825610820366004615701565b612ed6565b60405161038591906159cf565b6104446108403660046155e5565b613075565b6108586108533660046155e5565b613304565b6040805196875260208701959095529385019290925260608401526001600160a01b0390811660808401521660a082015260c001610385565b6108a461089f366004615536565b613357565b6040516103859190615a1d565b6104446108bf3660046155e5565b6133bb565b6104446108d23660046155e5565b613441565b6108ea6108e5366004615536565b613833565b6040516103859190615a57565b610444610905366004615a65565b613945565b61091d6109183660046155e5565b613ae6565b6040516103859190615a98565b61093d610938366004615536565b613b8a565b604080519a8b5260208b0199909952978901969096526060880194909452608087019290925260a086015260c08501526001600160a01b031660e0840152151561010083015261012082015261014001610385565b6109a56109a0366004615536565b613c08565b604051610385929190615aa6565b6104446109c1366004615acb565b613dae565b6103e761037b565b6109e16109dc366004615500565b613f39565b604080519485526020850193909352918301526060820152608001610385565b610a44610a0f3660046155e5565b600b60205260009081526040902080546001820154600283015460038401546004850154600590950154939492939192909186565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610385565b610a84610a7f366004615500565b613f8d565b6040516103859190615afd565b610aa4610a9f366004615536565b614022565b604080519485526020850193909352918301526001600160a01b03166060820152608001610385565b610444610adb3660046155e5565b614071565b610af3610aee366004615500565b6140a5565b6040516103859190615b3f565b610af3610b0e366004615701565b614365565b610444610b213660046155a4565b6144eb565b61037b610b34366004615500565b600e6020526000908152604090205481565b61051a610b54366004615500565b614724565b61037b60105481565b610444610b70366004615536565b6148fc565b61037b610b83366004615500565b601c6020526000908152604090205481565b610444610ba3366004615701565b614e70565b61037b60155481565b610444610bbf366004615bb9565b614f2a565b610444610bd2366004615500565b6150f1565b600080610be3836112d2565b6001600160a01b0384166000908152600e6020526040902054909150805b601054811015610c69578215610c57576000818152600b602052604081206004015461271090610c319086615c2f565b610c3b9190615c46565b9050610c478186615c68565b9450610c538185615c7b565b9350505b80610c6181615c8e565b915050610c01565b505050919050565b6001600160a01b0382166000908152600260205260408120805482919084908110610c9e57610c9e615ca7565b906000526020600020906009020190506000816006015442610cc09190615c7b565b60078301549091506001600160a01b03166000805b6001600160a01b038316600090815260036020526040902054811015610d9c576001600160a01b0383166000908152600360205260408120805483908110610d1f57610d1f615ca7565b6000918252602082206002909102018054600182015460088a015492945090929091606490610d5090600a90615c2f565b610d5a9190615c46565b9050828810610d8757612710610d708383615c2f565b610d7a9190615c46565b610d849087615c68565b95505b5050505080610d9590615c8e565b9050610cd5565b5093505050505b92915050565b610db161516d565b6000610dbc33610bd7565b905060008111610de75760405162461bcd60e51b8152600401610dde90615cbd565b60405180910390fd5b336000908152600c602052604081208054839290610e06908490615c7b565b925050819055508060116000828254610e1f9190615c7b565b9091555050601054336000908152600e6020908152604080832093909355601c90529081208054839290610e54908490615c68565b909155505060088054906000610e6983615c8e565b9091555050336000908152600f6020908152604091829020825160808101845260085481529182018490526007549092820190610ea69042615c68565b8152600080516020615f0d833981519152602091820181905283546001808201865560009586528386208551600490930201918255848401519082015560408401516002820155606090930151600390930180546001600160a01b0319166001600160a01b0390941693909317909255908252600a9052600080516020615ead8339815191528054839290610f3c908490615c68565b90915550506040518181523390600080516020615ecd8339815191529060200160405180910390a250610f6d6151a3565b565b3360009081526020819052604090205460ff16610f9e5760405162461bcd60e51b8152600401610dde90615ce7565b6001600160a01b03811660009081526020819052604090205460ff16610ff25760405162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b6044820152606401610dde565b336001600160a01b0382160361103f5760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb329039b2b63360711b6044820152606401610dde565b6001600160a01b03166000908152602081905260409020805460ff19169055565b61106861516d565b6000805b8281101561121757600084848381811061108857611088615ca7565b336000908152600260209081526040909120549102929092013592505081106110b15750611205565b3360009081526002602052604081208054839081106110d2576110d2615ca7565b9060005260206000209060090201905060006110ee3384610c71565b9050816004015481101561110457505050611205565b60008260040154826111169190615c7b565b9050806000036111295750505050611205565b8083600401600082825461113d9190615c68565b9091555061114d90508187615c68565b336000908152600f6020526040908190208151608081019092529197508061117887620f4240615c68565b8152602001838152602001600754426111919190615c68565b8152600080516020615f0d833981519152602091820152825460018082018555600094855293829020835160049092020190815590820151928101929092556040810151600283015560600151600390910180546001600160a01b0319166001600160a01b03909216919091179055505050505b8061120f81615c8e565b91505061106c565b50801561129157600080516020615f0d8339815191526000908152600a602052600080516020615ead8339815191528054839290611256908490615c68565b909155505060405181815233907f4e69fdc49495bcab2b4375781457ba16653a90eb4ffb6588351bdc39071433e29060200160405180910390a25b5061129a6151a3565b5050565b3360009081526020819052604090205460ff166112cd5760405162461bcd60e51b8152600401610dde90615ce7565b601655565b6001600160a01b0381166000908152600c6020908152604080832054601890925282205480821161130457600061130e565b61130e8183615c7b565b949350505050565b606080600083806001600160401b0381111561133457611334615d0f565b60405190808252806020026020018201604052801561135d578160200160208202803683370190505b509350806001600160401b0381111561137857611378615d0f565b6040519080825280602002602001820160405280156113a1578160200160208202803683370190505b50925060005b818110156114fe5760008787838181106113c3576113c3615ca7565b90506020020160208101906113d89190615500565b6001600160a01b038116600090815260066020526040902054875191925090819088908590811061140b5761140b615ca7565b6020908102919091018101919091526001600160a01b03808416600090815260049283905260408082205490516302c68be360e31b815291939216916316345f189161145991879101615522565b602060405180830381865afa158015611476573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149a9190615d25565b90506000670de0b6b3a76400006114b18484615c2f565b6114bb9190615c46565b9050808886815181106114d0576114d0615ca7565b60209081029190910101526114e58188615c68565b96505050505080806114f690615c8e565b9150506113a7565b50509250925092565b3360009081526020819052604090205460ff166115365760405162461bcd60e51b8152600401610dde90615ce7565b61154a6001600160a01b03831633836151b4565b6040518181526001600160a01b038316903390600080516020615f4d8339815191529060200160405180910390a35050565b61158461516d565b6000805b3360009081526002602052604090205481101561168f573360009081526002602052604081208054839081106115c0576115c0615ca7565b6000918252602090912060099091020160078101549091506001600160a01b0385811691161480156115fe57506007810154600160a01b900460ff16155b1561167c57600061160f338461275d565b9050816003015481111561167a57600082600301548261162f9190615c7b565b905061163b8186615c68565b9450808360030160008282546116519190615c68565b909155505082546003840154106116785760078301805460ff60a01b1916600160a01b1790555b505b505b508061168781615c8e565b915050611588565b50600081116116b05760405162461bcd60e51b8152600401610dde90615cbd565b33600090815260056020526040902054156117bd576001600160a01b0380831660009081526004602081905260408083205490516302c68be360e31b81529293670de0b6b3a764000093869392909116916316345f189161171391899101615522565b602060405180830381865afa158015611730573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117549190615d25565b61175e9190615c2f565b6117689190615c46565b33600090815260056020526040902054909150811061179657336000908152600560205260408120556117bb565b33600090815260056020526040812080548392906117b5908490615c7b565b90915550505b505b6001600160a01b038216600090815260066020526040812080548392906117e5908490615c7b565b9091555050336000908152600f60205260408082208151608081019092526009805491938392919061181683615c8e565b919050558152602001838152602001600754426118339190615c68565b81526001600160a01b0385811660209283018190528454600180820187556000968752848720865160049093020191825585850151908201556040808601516002830155606090950151600390910180546001600160a01b03191691909316179091558352600a9052812080548392906118ae908490615c68565b90915550506040513390600080516020615eed833981519152906118d6908490600090615688565b60405180910390a2506118e76151a3565b50565b601981815481106118fa57600080fd5b6000918252602090912060029091020180546001909101546001600160a01b03909116915082565b3360009081526020819052604090205460ff166119515760405162461bcd60e51b8152600401610dde90615ce7565b601555565b6003602052816000526040600020818154811061197257600080fd5b600091825260209091206002909102018054600190910154909250905082565b3360009081526001602052604090205460ff166119c15760405162461bcd60e51b8152600401610dde90615ce7565b828114611a085760405162461bcd60e51b8152602060048201526015602482015274082e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d605b1b6044820152606401610dde565b82611a445760405162461bcd60e51b815260206004820152600c60248201526b456d7074792061727261797360a01b6044820152606401610dde565b60005b83811015611cf8576000858583818110611a6357611a63615ca7565b9050602002016020810190611a789190615500565b6001600160a01b031603611a9e5760405162461bcd60e51b8152600401610dde90615d3e565b6000838383818110611ab257611ab2615ca7565b9050602002013511611ad65760405162461bcd60e51b8152600401610dde90615d67565b828282818110611ae857611ae8615ca7565b90506020020135600c6000878785818110611b0557611b05615ca7565b9050602002016020810190611b1a9190615500565b6001600160a01b03166001600160a01b0316815260200190815260200160002054601154611b489190615c7b565b611b529190615c68565b601155600d6000868684818110611b6b57611b6b615ca7565b9050602002016020810190611b809190615500565b6001600160a01b03166001600160a01b0316815260200190815260200160002054600003611c0757828282818110611bba57611bba615ca7565b90506020020135600d6000878785818110611bd757611bd7615ca7565b9050602002016020810190611bec9190615500565b6001600160a01b031681526020810191909152604001600020555b828282818110611c1957611c19615ca7565b90506020020135600c6000878785818110611c3657611c36615ca7565b9050602002016020810190611c4b9190615500565b6001600160a01b03168152602081019190915260400160002055848482818110611c7757611c77615ca7565b9050602002016020810190611c8c9190615500565b6001600160a01b03167fec7e3594982826a1f90c8fc76513357b83a691b7f4e38b8be04f3d40f9b15839848484818110611cc857611cc8615ca7565b90506020020135604051611cde91815260200190565b60405180910390a280611cf081615c8e565b915050611a47565b5050505050565b611d0761516d565b60008211611d475760405162461bcd60e51b815260206004820152600d60248201526c496e76616c69642076616c756560981b6044820152606401610dde565b60008111611d675760405162461bcd60e51b8152600401610dde90615d8f565b601554821015611daf5760405162461bcd60e51b815260206004820152601360248201527256616c75652062656c6f77206d696e696d756d60681b6044820152606401610dde565b6000611dba336112d2565b905080831115611ddc5760405162461bcd60e51b8152600401610dde90615dbb565b60088054906000611dec83615c8e565b90915550506008543360009081526018602052604081208054869290611e13908490615c68565b909155505060408051608081018252858152602080820186815233838501818152426060860190815260008381526014865287812089825286528781209651875593516001808801919091559151600280880180546001600160a01b039384166001600160a01b03199182161790915592516003909801979097558751808901909852928752938601878152601980548084018255948190529651939095027f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c969581018054949093169390941692909217905591517f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9696909101559054611f189190615c7b565b336000818152601a6020908152604080832086845290915290819020929092559051600080516020615f2d83398151915290611f579086908590615688565b60405180910390a2505061129a6151a3565b60195460609081908190806001600160401b03811115611f8b57611f8b615d0f565b604051908082528060200260200182016040528015611fb4578160200160208202803683370190505b509350806001600160401b03811115611fcf57611fcf615d0f565b604051908082528060200260200182016040528015611ff8578160200160208202803683370190505b509250806001600160401b0381111561201357612013615d0f565b60405190808252806020026020018201604052801561204c57816020015b6120396153f5565b8152602001906001900390816120315790505b50915060005b818110156121895760006019828154811061206f5761206f615ca7565b60009182526020918290206040805180820190915260029092020180546001600160a01b03168083526001909101549282019290925287519092508790849081106120bc576120bc615ca7565b60200260200101906001600160a01b031690816001600160a01b03168152505080602001518583815181106120f3576120f3615ca7565b60209081029190910181019190915281516001600160a01b039081166000908152601483526040808220858501518352845290819020815160808101835281548152600182015494810194909452600281015490921690830152600301546060820152845185908490811061216a5761216a615ca7565b602002602001018190525050808061218190615c8e565b915050612052565b5050909192565b3360009081526020819052604090205460ff166121bf5760405162461bcd60e51b8152600401610dde90615ce7565b6001600160a01b03918216600090815260046020526040902080546001600160a01b03191691909216179055565b3360009081526020819052604090205460ff1661221c5760405162461bcd60e51b8152600401610dde90615ce7565b6001600160a01b0381166122425760405162461bcd60e51b8152600401610dde90615d3e565b6001600160a01b03811660009081526020819052604090205460ff161561229b5760405162461bcd60e51b815260206004820152600d60248201526c20b63932b0b23c9037bbb732b960991b6044820152606401610dde565b6001600160a01b03166000908152602081905260409020805460ff19166001179055565b3360009081526001602052604090205460ff166122ee5760405162461bcd60e51b8152600401610dde90615ce7565b60026000896001600160a01b03166001600160a01b031681526020019081526020016000206040518061014001604052808981526020018881526020018781526020016000815260200160008152602001848152602001838152602001866001600160a01b03168152602001600015158152602001858152509080600181540180825580915050600190039060005260206000209060090201600090919091909150600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506101008201518160070160146101000a81548160ff0219169083151502179055506101208201518160080155505082600560008a6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546124669190615c68565b90915550506001600160a01b03841660009081526006602052604081208054899290612493908490615c68565b90915550505050505050505050565b6001600160a01b0381166000908152600260209081526040808320805482518185028101850190935280835260609492939192909184015b8282101561257e57600084815260209081902060408051610140810182526009860290920180548352600180820154848601526002820154928401929092526003810154606084015260048101546080840152600581015460a0840152600681015460c084015260078101546001600160a01b03811660e0850152600160a01b900460ff1615156101008401526008015461012083015290835290920191016124da565b505050509050919050565b6001600160a01b038116600090815260026020526040812054815b81811015612756576001600160a01b03841660009081526002602052604081208054839081106125d6576125d6615ca7565b600091825260209182902060408051610140810182526009909302909101805483526001810154938301939093526002830154908201526003820154606082015260048201546080820152600582015460a0820152600682015460c082015260078201546001600160a01b03811660e083015260ff600160a01b909104161515610100820181905260089092015461012082015291506127435760e0810180516001600160a01b03908116600090815260046020819052604080832054945190516302c68be360e31b81529294909316926316345f18926126b79201615522565b602060405180830381865afa1580156126d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f89190615d25565b90506000826060015183600001516127109190615c7b565b90506000670de0b6b3a76400006127278385615c2f565b6127319190615c46565b905061273d8188615c68565b96505050505b508061274e81615c8e565b9150506125a4565b5050919050565b6001600160a01b038216600090815260026020526040812080548291908490811061278a5761278a615ca7565b9060005260206000209060090201905060008160060154426127ac9190615c7b565b60078301549091506001600160a01b03166000805b6001600160a01b038316600090815260036020526040902054811015610d9c576001600160a01b038316600090815260036020526040812080548390811061280b5761280b615ca7565b6000918252602090912060029091020180546001820154919250908187106128555787546127109061283e908390615c2f565b6128489190615c46565b6128529086615c68565b94505b5050508061286290615c8e565b90506127c1565b6000612873615211565b805490915060ff600160401b82041615906001600160401b031660008115801561289a5750825b90506000826001600160401b031660011480156128b65750303b155b9050811580156128c4575080155b156128e25760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b0319166001178555831561290b57845460ff60401b1916600160401b1785555b61291361523a565b3360009081526020818152604082208054600160ff1991821681179092557f4cfa3c6903140891ecff713e237b1f1746362568dfb5e8e9bc37719e4f37e0c580548216831790557f3e1f9e6abae6b647fdc3c5896ef1871ceb3c98e9e72852da3f17d161a860f76c80548216831790557f3517cbb3edfcef55b3b32be7021bc73ef070f4a8bad0d4b389b96924cf17b7418054821683179055738a9281ecece9b599c2f42d829c3d0d8e74b7083e84527f968a1791ad31618c63b086103baa804af57c3ca0efa33a191010fbb7741579fc80549091169091179055600c905269021e19e0c9bab24000007f649cbac87391465cfe24c65b052f0edf3b8486f136e0b91262d76d1f34d7826b8190556011805491929091612a34908490615c68565b90915550506201fa4060075560646013558315611cf857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b3360009081526020819052604090205460ff16612ac05760405162461bcd60e51b8152600401610dde90615ce7565b60008111612b1e5760405162461bcd60e51b815260206004820152602560248201527f4d61782070657263656e74616765206d75737420626520677265617465722074604482015264068616e20360dc1b6064820152608401610dde565b601355565b3360009081526020819052604090205460ff16612b525760405162461bcd60e51b8152600401610dde90615ce7565b612b6b600080516020615f0d83398151915233836151b4565b604051818152600080516020615f0d833981519152903390600080516020615f4d8339815191529060200160405180910390a350565b3360009081526001602052604090205460ff16612bd05760405162461bcd60e51b8152600401610dde90615ce7565b612be086868686868642426122bf565b505050505050565b33600090815260146020908152604080832084845290915290208054612c205760405162461bcd60e51b8152600401610dde90615deb565b60028101546001600160a01b03163314612c4c5760405162461bcd60e51b8152600401610dde90615e16565b805460165460009061271090612c629084615c2f565b612c6c9190615c46565b33600090815260186020526040812080549293508492909190612c90908490615c7b565b90915550508015612cd957336000908152600c602052604081208054839290612cba908490615c7b565b925050819055508060116000828254612cd39190615c7b565b90915550505b8015612d2357336001600160a01b03167f4725a4d4de9bff212d0885095e27515072f73f427df55e52f37f241321ef88f98286604051612d1a929190615688565b60405180910390a25b336000818152601460209081526040808320888452825280832083815560018082018590556002820180546001600160a01b03191690556003909101849055938352601a82528083208884529091528120546019549092612d8391615c7b565b9050808214612e4457600060198281548110612da157612da1615ca7565b60009182526020918290206040805180820190915260029092020180546001600160a01b03168252600101549181019190915260198054919250829185908110612ded57612ded615ca7565b6000918252602080832084516002939093020180546001600160a01b0319166001600160a01b03938416178155938101516001909401939093558351168152601a8252604080822093830151825292909152208290555b6019805480612e5557612e55615e3e565b600082815260208082206002600019949094019384020180546001600160a01b03191681556001018290559190925533808352601a825260408084208a855283528084209390935591518881527f73d12dec3eb3b445b6c9feb2fd559ba7c852c525bc1e59d8f7ff760c55df041d91015b60405180910390a2505050505050565b606081831115612f185760405162461bcd60e51b815260206004820152600d60248201526c496e76616c69642072616e676560981b6044820152606401610dde565b6010548210612f5f5760405162461bcd60e51b8152602060048201526013602482015272115b9908195c1bd8da081b9bdd08199bdd5b99606a1b6044820152606401610dde565b6000612f6b8484615c7b565b612f76906001615c68565b90506000816001600160401b03811115612f9257612f92615d0f565b604051908082528060200260200182016040528015612fcb57816020015b612fb8615426565b815260200190600190039081612fb05790505b50905060005b8281101561306c57600b6000612fe78389615c68565b81526020019081526020016000206040518060c0016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820154815260200160058201548152505082828151811061304e5761304e615ca7565b6020026020010181905250808061306490615c8e565b915050612fd1565b50949350505050565b61307d61516d565b6000811161309d5760405162461bcd60e51b8152600401610dde90615d67565b6000601254116130e65760405162461bcd60e51b81526020600482015260146024820152734275796f7574206e6f7420617661696c61626c6560601b6044820152606401610dde565b60006130f1336112d2565b9050808211156131135760405162461bcd60e51b8152600401610dde90615dbb565b612710613122826109c4615c2f565b61312c9190615c46565b82101561316c5760405162461bcd60e51b815260206004820152600e60248201526d416d6f756e7420746f6f206c6f7760901b6044820152606401610dde565b60006127106012548461317f9190615c2f565b6131899190615c46565b336000908152600c60205260408120805492935085929091906131ad908490615c7b565b9250508190555082601160008282546131c69190615c7b565b9091555050336000908152601c6020526040812080548392906131ea908490615c68565b9091555050600880549060006131ff83615c8e565b9091555050336000908152600f602090815260409182902082516080810184526008548152918201849052600754909282019061323c9042615c68565b8152600080516020615f0d833981519152602091820181905283546001808201865560009586528386208551600490930201918255848401519082015560408401516002820155606090930151600390930180546001600160a01b0319166001600160a01b0390941693909317909255908252600a9052600080516020615ead83398151915280548392906132d2908490615c68565b90915550506040518181523390600080516020615ecd8339815191529060200160405180910390a250506118e76151a3565b601b818154811061331457600080fd5b6000918252602090912060069091020180546001820154600283015460038401546004850154600590950154939550919390926001600160a01b03918216911686565b61335f6153f5565b506001600160a01b03918216600090815260146020908152604080832093835292815290829020825160808101845281548152600182015492810192909252600281015490931691810191909152600390910154606082015290565b3360009081526020819052604090205460ff166133ea5760405162461bcd60e51b8152600401610dde90615ce7565b61271081111561343c5760405162461bcd60e51b815260206004820152601d60248201527f50657263656e746167652063616e6e6f742065786365656420313030250000006044820152606401610dde565b601255565b61344961516d565b33600090815260026020526040902054811061349f5760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840eccae6e8d2dcce40d2dcc8caf605b1b6044820152606401610dde565b3360009081526002602052604081208054839081106134c0576134c0615ca7565b906000526020600020906009020190508060070160149054906101000a900460ff16156135225760405162461bcd60e51b815260206004820152601060248201526f56657374696e6720636f6d706c65746560801b6044820152606401610dde565b600061352e338461275d565b9050816003015481101561357b5760405162461bcd60e51b8152602060048201526014602482015273125b9d985b1a590818db185a5b48185b5bdd5b9d60621b6044820152606401610dde565b600082600301548261358d9190615c7b565b9050600081116135af5760405162461bcd60e51b8152600401610dde90615cbd565b808360030160008282546135c39190615c68565b909155505082546003840154106135ea5760078301805460ff60a01b1916600160a01b1790555b33600090815260056020526040902054156136fb5760078301546001600160a01b0390811660008181526004602081905260408083205490516302c68be360e31b81529294670de0b6b3a764000094879492909116926316345f1892613651929101615522565b602060405180830381865afa15801561366e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136929190615d25565b61369c9190615c2f565b6136a69190615c46565b3360009081526005602052604090205490915081106136d457336000908152600560205260408120556136f9565b33600090815260056020526040812080548392906136f3908490615c7b565b90915550505b505b60078301546001600160a01b031660009081526006602052604081208054839290613727908490615c7b565b9091555050336000908152600f60205260408082208151608081019092526009805491938392919061375883615c8e565b919050558152602001838152602001600754426137759190615c68565b81526007860180546001600160a01b039081166020938401528454600180820187556000968752848720865160049093020191825585850151908201556040808601516002830155606090950151600390910180546001600160a01b0319169183169190911790559054168352600a9052812080548392906137f8908490615c68565b90915550506040513390600080516020615eed83398151915290613820908490600090615688565b60405180910390a25050506118e76151a3565b613867604051806080016040528060008152602001600081526020016000815260200160006001600160a01b031681525090565b6001600160a01b0383166000908152600f60205260408120905b815481101561392c578382828154811061389d5761389d615ca7565b9060005260206000209060040201600001540361391a578181815481106138c6576138c6615ca7565b6000918252602091829020604080516080810182526004909302909101805483526001810154938301939093526002830154908201526003909101546001600160a01b031660608201529250610da3915050565b8061392481615c8e565b915050613881565b5060405162461bcd60e51b8152600401610dde90615e54565b3360009081526020819052604090205460ff166139745760405162461bcd60e51b8152600401610dde90615ce7565b6001600160a01b03831661399a5760405162461bcd60e51b8152600401610dde90615e7d565b6000811180156139ac57506127108111155b6139ed5760405162461bcd60e51b8152602060048201526012602482015271496e76616c69642070657263656e7461676560701b6044820152606401610dde565b6001600160a01b0383166000908152600360205260408120613a0e9161545c565b6000825b612710821015613aab5782612710613a2a8285615c68565b1115613a3f57613a3c83612710615c7b565b90505b6001600160a01b0386166000908152600360209081526040808320815180830190925285825281830185815281546001818101845592865293909420915160029093029091019182559151910155613a978184615c68565b9250613aa38583615c68565b915050613a12565b6040516001600160a01b038616907fde4b6ccc38b84f88129403b65a309f9b1c41d4c316bc2118d7614e449b9d4c4590600090a25050505050565b613aee615426565b6010548210613b315760405162461bcd60e51b815260206004820152600f60248201526e115c1bd8da081b9bdd08199bdd5b99608a1b6044820152606401610dde565b506000908152600b6020908152604091829020825160c08101845281548152600182015492810192909252600281015492820192909252600382015460608201526004820154608082015260059091015460a082015290565b60026020528160005260406000208181548110613ba657600080fd5b6000918252602090912060099091020180546001820154600283015460038401546004850154600586015460068701546007880154600890980154969950949750929591949093916001600160a01b03811691600160a01b90910460ff16908a565b6001600160a01b038216600090815260026020526040812080546060928392909185908110613c3957613c39615ca7565b600091825260208083206007600990930201918201546001600160a01b03168084526003909152604083205491935091816001600160401b03811115613c8157613c81615d0f565b604051908082528060200260200182016040528015613caa578160200160208202803683370190505b5090506000826001600160401b03811115613cc757613cc7615d0f565b604051908082528060200260200182016040528015613cf0578160200160208202803683370190505b50905060005b83811015613d9d576001600160a01b0385166000908152600360205260408120805483908110613d2857613d28615ca7565b9060005260206000209060020201905080600001548760060154613d4c9190615c68565b848381518110613d5e57613d5e615ca7565b6020026020010181815250508060010154838381518110613d8157613d81615ca7565b602090810291909101015250613d9681615c8e565b9050613cf6565b5090955093505050505b9250929050565b3360009081526020819052604090205460ff16613ddd5760405162461bcd60e51b8152600401610dde90615ce7565b60105460009015613e26576000600b60006001601054613dfd9190615c7b565b81526020019081526020016000209050613e228584836001015484600201548861524a565b9150505b601354811115613e715760405162461bcd60e51b81526020600482015260166024820152750aadcd8dec6d640e0cae4c6cadce8c2ceca40d0d2ced60531b6044820152606401610dde565b6040805160c08101825286815260208082018781526011548385019081526060808501898152608086018881524260a08801908152601080546000908152600b89528a90209851895595516001890155935160028801559051600387015551600486015590516005909401939093555483518881529182018590529281018690527feadbedb993dfca23e4c79bf4fa5fe531c2e0e926258fabb8445e8bc5c472780f910160405180910390a260108054906000613f2d83615c8e565b91905055505050505050565b6000806000806000613f4a86610bd7565b90506000613f57876112d2565b6001600160a01b03979097166000908152600c6020908152604080832054600d9092529091205490989297965094509092505050565b6001600160a01b0381166000908152600f60209081526040808320805482518185028101850190935280835260609492939192909184015b8282101561257e57600084815260209081902060408051608081018252600486029092018054835260018082015484860152600282015492840192909252600301546001600160a01b031660608301529083529092019101613fc5565b600f602052816000526040600020818154811061403e57600080fd5b6000918252602090912060049091020180546001820154600283015460039093015491945092506001600160a01b031684565b3360009081526020819052604090205460ff166140a05760405162461bcd60e51b8152600401610dde90615ce7565b600755565b60606001600160a01b0382166140cd5760405162461bcd60e51b8152600401610dde90615d3e565b6000805b601b5481101561417d57836001600160a01b0316601b82815481106140f8576140f8615ca7565b60009182526020909120600460069092020101546001600160a01b031614806141585750836001600160a01b0316601b828154811061413957614139615ca7565b60009182526020909120600560069092020101546001600160a01b0316145b1561416b578161416781615c8e565b9250505b8061417581615c8e565b9150506140d1565b50806000036141bf5760408051600080825260208201909252906141b7565b6141a461547d565b81526020019060019003908161419c5790505b509392505050565b6000816001600160401b038111156141d9576141d9615d0f565b60405190808252806020026020018201604052801561421257816020015b6141ff61547d565b8152602001906001900390816141f75790505b5090506000805b601b5481101561435b57856001600160a01b0316601b828154811061424057614240615ca7565b60009182526020909120600460069092020101546001600160a01b031614806142a05750856001600160a01b0316601b828154811061428157614281615ca7565b60009182526020909120600560069092020101546001600160a01b0316145b1561434957601b81815481106142b8576142b8615ca7565b60009182526020918290206040805160c0810182526006909302909101805483526001810154938301939093526002830154908201526003820154606082015260048201546001600160a01b03908116608083015260059092015490911660a0820152835184908490811061432f5761432f615ca7565b6020026020010181905250818061434590615c8e565b9250505b8061435381615c8e565b915050614219565b5090949350505050565b601b5460609083106143b55760405162461bcd60e51b8152602060048201526019602482015278537461727420696e646578206f7574206f6620626f756e647360381b6044820152606401610dde565b60006143c18385615c68565b601b549091508111156143d35750601b545b60006143df8583615c7b565b6001600160401b038111156143f6576143f6615d0f565b60405190808252806020026020018201604052801561442f57816020015b61441c61547d565b8152602001906001900390816144145790505b509050845b8281101561306c57601b818154811061444f5761444f615ca7565b60009182526020918290206040805160c0810182526006909302909101805483526001810154938301939093526002830154908201526003820154606082015260048201546001600160a01b03908116608083015260059092015490911660a0820152826144bd8884615c7b565b815181106144cd576144cd615ca7565b602002602001018190525080806144e390615c8e565b915050614434565b6144f361516d565b336000908152600f6020526040902080546145465760405162461bcd60e51b81526020600482015260136024820152724e6f207374616b657320617661696c61626c6560681b6044820152606401610dde565b8161458b5760405162461bcd60e51b8152602060048201526015602482015274139bc81cdd185ad94812511cc81c1c9bdd9a591959605a1b6044820152606401610dde565b60005b8281101561471a5760008484838181106145aa576145aa615ca7565b9050602002013590506000805b84548110156146e75760008582815481106145d4576145d4615ca7565b906000526020600020906004020190508381600001541480156145fb575060008160010154115b156146d45780600201544210156146435760405162461bcd60e51b815260206004820152600c60248201526b14dd185ad9481b1bd8dad95960a21b6044820152606401610dde565b60018101805460038301546000928390556001600160a01b0316808352600a6020526040832080549293919284929061467d908490615c7b565b9091555061469790506001600160a01b03821633846151b4565b336001600160a01b0316600080516020615f6d83398151915283886040516146c0929190615688565b60405180910390a2600194505050506146e7565b50806146df81615c8e565b9150506145b7565b50806147055760405162461bcd60e51b8152600401610dde90615e54565b5050808061471290615c8e565b91505061458e565b505061129a6151a3565b606080600080614733856112d2565b6001600160a01b0386166000908152600e60205260408120546010549293509161475e908390615c7b565b90508060000361478f5750506040805160008082526020820181815282840190935290955090935091506148f59050565b806001600160401b038111156147a7576147a7615d0f565b6040519080825280602002602001820160405280156147d0578160200160208202803683370190505b509550806001600160401b038111156147eb576147eb615d0f565b604051908082528060200260200182016040528015614814578160200160208202803683370190505b50945060005b818110156148f057600061482e8285615c68565b90508088838151811061484357614843615ca7565b602090810291909101015284156148bc576000818152600b6020526040812060040154612710906148749088615c2f565b61487e9190615c46565b90508088848151811061489357614893615ca7565b60209081029190910101526148a88188615c68565b96506148b48187615c7b565b9550506148dd565b60008783815181106148d0576148d0615ca7565b6020026020010181815250505b50806148e881615c8e565b91505061481a565b505050505b9193909250565b61490461516d565b6001600160a01b0382166000908152601460209081526040808320848452909152902080546149455760405162461bcd60e51b8152600401610dde90615deb565b336001600160a01b038416036149965760405162461bcd60e51b815260206004820152601660248201527543616e6e6f7420627579206f776e206c697374696e6760501b6044820152606401610dde565b80546001820154600383015460008284116149b25760006149bc565b6149bc8385615c7b565b90506000846149cd83612710615c2f565b6149d79190615c46565b905060006127106149e88380615c2f565b6149f29190615c46565b90506000612710614a038389615c2f565b614a0d9190615c46565b90506000614a1b8289615c7b565b9050614a37600080516020615f0d833981519152338d8a6152e3565b6001600160a01b038b166000908152600c6020526040812080548a9290614a5f908490615c7b565b9091555050336000908152600c602052604081208054839290614a83908490615c68565b90915550506001600160a01b038b16600090815260186020526040812080548a9290614ab0908490615c7b565b9091555050336000908152600d602052604081208054839290614ad4908490615c68565b925050819055508160116000828254614aed9190615c7b565b90915550506001600160a01b038b1660009081526017602052604081208054899290614b1a908490615c68565b92505081905550601b6040518060c001604052808881526020014281526020018a81526020018981526020018d6001600160a01b03168152602001336001600160a01b031681525090806001815401808255809150506001900390600052602060002090600602016000909190919091506000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060a08201518160050160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505050601460008c6001600160a01b03166001600160a01b0316815260200190815260200160002060008b815260200190815260200160002060008082016000905560018201600090556002820160006101000a8154906001600160a01b030219169055600382016000905550506000601a60008d6001600160a01b03166001600160a01b0316815260200190815260200160002060008c815260200190815260200160002054905060006001601980549050614cc99190615c7b565b9050808214614d8a57600060198281548110614ce757614ce7615ca7565b60009182526020918290206040805180820190915260029092020180546001600160a01b03168252600101549181019190915260198054919250829185908110614d3357614d33615ca7565b6000918252602080832084516002939093020180546001600160a01b0319166001600160a01b03938416178155938101516001909401939093558351168152601a8252604080822093830151825292909152208290555b6019805480614d9b57614d9b615e3e565b6001900381819060005260206000209060020201600080820160006101000a8154906001600160a01b030219169055600182016000905550509055601a60008e6001600160a01b03166001600160a01b0316815260200190815260200160002060008d815260200190815260200160002060009055336001600160a01b03168d6001600160a01b03167f7bb39d095b04a9986ed34adf14d74c33294d0a9e807f02bf634d532507422eba8b8f604051614e55929190615688565b60405180910390a3505050505050505050505061129a6151a3565b33600090815260146020908152604080832085845290915290208054614ea85760405162461bcd60e51b8152600401610dde90615deb565b60028101546001600160a01b03163314614ed45760405162461bcd60e51b8152600401610dde90615e16565b60008211614ef45760405162461bcd60e51b8152600401610dde90615d8f565b600181018290556040513390600080516020615f2d83398151915290614f1d9085908790615688565b60405180910390a2505050565b3360009081526001602052604090205460ff16614f595760405162461bcd60e51b8152600401610dde90615ce7565b6001600160a01b038516614fa65760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642075736572206164647265737360601b6044820152606401610dde565b60008411614fc65760405162461bcd60e51b8152600401610dde90615d67565b6001600160a01b038216614fec5760405162461bcd60e51b8152600401610dde90615e7d565b60088054906000614ffc83615c8e565b919050555060008161501057600854615020565b60085461502090620f4240615c68565b6001600160a01b038781166000908152600f6020908152604080832081516080810183528681528084018c81528184018c81528b881660608401818152855460018082018855968a52888a209551600490910290950194855592519484019490945551600283015551600390910180546001600160a01b0319169190961617909455928252600a9052908120805492935087929091906150c1908490615c68565b92505081905550856001600160a01b0316600080516020615f6d8339815191528683604051612ec6929190615688565b3360009081526020819052604090205460ff166151205760405162461bcd60e51b8152600401610dde90615ce7565b6001600160a01b0381166151465760405162461bcd60e51b8152600401610dde90615d3e565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6000615177615322565b80549091506001190161519d57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60006151ad615322565b6001905550565b61520c83846001600160a01b031663a9059cbb85856040516024016151da92919061566f565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050615346565b505050565b6000807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610da3565b6152426153ae565b610f6d6153d3565b6000821580615257575084155b15615264575060006152da565b60008561527388612710615c2f565b61527d9190615c46565b905060008461528e87612710615c2f565b6152989190615c46565b90508082116152ac576000925050506152da565b60006152b88284615c7b565b905060006127106152c98784615c2f565b6152d39190615c46565b9450505050505b95945050505050565b6040516001600160a01b03848116602483015283811660448301526064820183905261531c9186918216906323b872dd906084016151da565b50505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0090565b600080602060008451602086016000885af180615369576040513d6000823e3d81fd5b50506000513d9150811561538157806001141561538e565b6001600160a01b0384163b155b1561531c5783604051635274afe760e01b8152600401610dde9190615522565b6153b66153db565b610f6d57604051631afcd79f60e31b815260040160405180910390fd5b6151a36153ae565b60006153e5615211565b54600160401b900460ff16919050565b6040518060800160405280600081526020016000815260200160006001600160a01b03168152602001600081525090565b6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b50805460008255600202906000526020600020908101906118e791906154c5565b6040518060c001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b5b808211156154e057600080825560018201556002016154c6565b5090565b80356001600160a01b03811681146154fb57600080fd5b919050565b60006020828403121561551257600080fd5b61551b826154e4565b9392505050565b6001600160a01b0391909116815260200190565b6000806040838503121561554957600080fd5b615552836154e4565b946020939093013593505050565b60008083601f84011261557257600080fd5b5081356001600160401b0381111561558957600080fd5b6020830191508360208260051b8501011115613da757600080fd5b600080602083850312156155b757600080fd5b82356001600160401b038111156155cd57600080fd5b6155d985828601615560565b90969095509350505050565b6000602082840312156155f757600080fd5b5035919050565b600081518084526020808501945080840160005b8381101561562e57815187529582019590820190600101615612565b509495945050505050565b60608152600061564c60608301866155fe565b828103602084015261565e81866155fe565b915050826040830152949350505050565b6001600160a01b03929092168252602082015260400190565b918252602082015260400190565b600080600080604085870312156156ac57600080fd5b84356001600160401b03808211156156c357600080fd5b6156cf88838901615560565b909650945060208701359150808211156156e857600080fd5b506156f587828801615560565b95989497509550505050565b6000806040838503121561571457600080fd5b50508035926020909101359150565b80518252602080820151908301526040808201516001600160a01b031690830152606090810151910152565b60608082528451908201819052600090608090818401906020808901855b838110156157925781516001600160a01b03168552938201939082019060010161576d565b5050858303818701526157a583896155fe565b868103604088015287518082528289019450908201925060005b818110156157e2576157d2848651615723565b93820193928501926001016157bf565b50919998505050505050505050565b6000806040838503121561580457600080fd5b61580d836154e4565b915061581b602084016154e4565b90509250929050565b600080600080600080600080610100898b03121561584157600080fd5b61584a896154e4565b975060208901359650604089013595506060890135945061586d60808a016154e4565b979a969950949793969560a0850135955060c08501359460e001359350915050565b602080825282518282018190526000919060409081850190868401855b828110156159305781518051855286810151878601528581015186860152606080820151908601526080808201519086015260a0808201519086015260c0808201519086015260e0808201516001600160a01b03169086015261010080820151151590860152610120908101519085015261014090930192908501906001016158ac565b5091979650505050505050565b60008060008060008060c0878903121561595657600080fd5b61595f876154e4565b9550602087013594506040870135935060608701359250615982608088016154e4565b915060a087013590509295509295509295565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a08301525050565b6020808252825182820181905260009190848201906040850190845b81811015615a11576159fe838551615995565b9284019260c092909201916001016159eb565b50909695505050505050565b60808101610da38284615723565b8051825260208082015190830152604080820151908301526060908101516001600160a01b0316910152565b60808101610da38284615a2b565b600080600060608486031215615a7a57600080fd5b615a83846154e4565b95602085013595506040909401359392505050565b60c08101610da38284615995565b604081526000615ab960408301856155fe565b82810360208401526152da81856155fe565b60008060008060808587031215615ae157600080fd5b5050823594602084013594506040840135936060013592509050565b6020808252825182820181905260009190848201906040850190845b81811015615a1157615b2c838551615a2b565b9284019260809290920191600101615b19565b602080825282518282018190526000919060409081850190868401855b828110156159305781518051855286810151878601528581015186860152606080820151908601526080808201516001600160a01b039081169187019190915260a091820151169085015260c09093019290850190600101615b5c565b600080600080600060a08688031215615bd157600080fd5b615bda866154e4565b94506020860135935060408601359250615bf6606087016154e4565b915060808601358015158114615c0b57600080fd5b809150509295509295909350565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610da357610da3615c19565b600082615c6357634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610da357610da3615c19565b81810381811115610da357610da3615c19565b600060018201615ca057615ca0615c19565b5060010190565b634e487b7160e01b600052603260045260246000fd5b60208082526010908201526f4e6f7468696e6720746f20636c61696d60801b604082015260600190565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b634e487b7160e01b600052604160045260246000fd5b600060208284031215615d3757600080fd5b5051919050565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b6020808252600e908201526d125b9d985b1a5908185b5bdd5b9d60921b604082015260600190565b602080825260129082015271496e76616c69642073616c6520707269636560701b604082015260600190565b602080825260169082015275496e73756666696369656e74206e6574207374616b6560501b604082015260600190565b602080825260119082015270131a5cdd1a5b99c81b9bdd08199bdd5b99607a1b604082015260600190565b6020808252600e908201526d2737ba103a34329039b2b63632b960911b604082015260600190565b634e487b7160e01b600052603160045260246000fd5b6020808252600f908201526e14dd185ad9481b9bdd08199bdd5b99608a1b604082015260600190565b602080825260159082015274496e76616c696420746f6b656e206164647265737360581b60408201526060019056feb0775d57c3eeb070f58d410e36e9ff396813a5d76997d9a91bdf10f0798296f0a65a8b4f7f65a1063243d7f7e9e4da00ff767599acf21549ef2548a45d1695ae4a94c2c356e29a6583071e731bdacf2ca56565ba5efebcff6936eb7923b5172100000000000000000000000055d398326f99059ff775485246999027b31979558e79b7ba8dab5ebfa59b9c6af1743c3ef14863680b3cc5ac837f8d636f76031ca92ff919b850e4909ab2261d907ef955f11bc1716733a6cbece38d163a69af8a933735aa8de6d7547d0126171b2f31b9c34dd00f3ecd4be85a0ba047db4fafefa264697066735822122007efb43aed75f6b5e9e37a23a04240f92d34e3d002adea820a224131d6231f5864736f6c63430008140033", + "bytecode": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000d6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000735760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d35780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b615d8480620000e66000396000f3fe608060405234801561001057600080fd5b506004361061036e5760003560e01c8062159da6146103735780630137451814610399578063022914a7146103cf5780630519da3214610402578063092c76101461040b5780630a84096a1461042b5780630a910a6d1461043e5780630c7d63861461044757806313baee5b14610451578063173825d9146104715780631764303d146104845780631aefa2d1146104975780631eb9e53e146104aa5780632ded58aa146104bd5780632e46fed8146104c65780633ba8396e146104ef5780633c92f98d146105125780633e4bc6bc146105345780633f35e7221461053d57806343a32f891461055057806343c7c011146105cb578063441a4175146105de5780634a61f1e5146105ff57806351e624721461061f57806351f6cf2f14610632578063549e61d3146106535780635811622714610666578063592d1dd11461067957806361d1080b1461069957806362cd6a09146106a157806367a74ddc146106b85780636ef569a5146106cb5780637065cb48146106d457806374d1c8e3146106e757806375060a0b146106fa5780637a0c6dc01461071a5780637bc221ac1461073a5780637e6d99261461074d57806380259e691461077657806380ca0ecf146107895780638129fc1c1461079c57806382b75681146107a457806384e8520a146107b7578063853e0df2146107d75780638939d787146107ea5780638f82818f146107f35780639437e32e14610813578063953d16bf1461082657806396fd111a146108395780639cb6f556146108595780639f3a676c1461086c578063a0d46758146108b8578063aaf4b04d146108d8578063ac97b417146108eb578063b6c3dc4c146108fe578063b92a349f1461091e578063bc0bc6ba14610931578063bd84477d14610951578063bed9757e146109b9578063c0c07d17146109da578063c2676603146109ed578063c32d3ae2146109f5578063c6b61e4c14610a28578063c7b530b014610a98578063cc573a9114610ab8578063ce13d09014610af4578063cfcf331914610b07578063d532bdfe14610b27578063da1b436414610b3a578063e88f8e6614610b5a578063eacdc5ff14610b6d578063eb44e0a314610b76578063ef5d9ae814610b89578063f2bb563014610ba9578063fe2f50d014610bbc578063fee6018c14610bc5578063ffecf51614610bd8575b600080fd5b6103866103813660046152c2565b610beb565b6040519081526020015b60405180910390f35b6103c26103a73660046152c2565b6004602052600090815260409020546001600160a01b031681565b60405161039091906152e4565b6103f26103dd3660046152c2565b60006020819052908152604090205460ff1681565b6040519015158152602001610390565b61038660075481565b6103866104193660046152c2565b60066020526000908152604090205481565b6103866104393660046152f8565b610c85565b61038660125481565b61044f610dbd565b005b61038661045f3660046152c2565b600c6020526000908152604090205481565b61044f61047f3660046152c2565b610f83565b61044f610492366004615366565b611074565b61044f6104a53660046153a7565b6112b2565b6103866104b83660046152c2565b6112e6565b61038660115481565b6103866104d43660046152c2565b6001600160a01b03166000908152601c602052604090205490565b6103f26104fd3660046152c2565b60016020526000908152604090205460ff1681565b610525610520366004615366565b61132a565b604051610390939291906153fb565b610386601d5481565b61044f61054b3660046152f8565b61151b565b61059c61055e3660046152f8565b60146020908152600092835260408084209091529082529020805460018201546002830154600390930154919290916001600160a01b039091169084565b604051610390949392919093845260208401929092526001600160a01b03166040830152606082015260800190565b61044f6105d93660046152c2565b611590565b6105f16105ec3660046153a7565b6118fe565b604051610390929190615431565b61038661060d3660046152c2565b60186020526000908152604090205481565b61044f61062d3660046153a7565b611936565b6106456106403660046152f8565b61196a565b60405161039092919061544a565b61044f610661366004615458565b6119a6565b61044f6106743660046154c3565b611d13565b6103866106873660046152c2565b60056020526000908152604090205481565b601b54610386565b6106a9611f7d565b60405161039093929190615511565b61044f6106c63660046155b3565b6121a4565b61038660165481565b61044f6106e23660046152c2565b612201565b61044f6106f53660046155e6565b6122d3565b6103866107083660046152c2565b600a6020526000908152604090205481565b61072d6107283660046152c2565b6124b6565b6040516103909190615651565b6103866107483660046152c2565b61259d565b61038661075b3660046152c2565b6001600160a01b031660009081526017602052604090205490565b61044f6107843660046153a7565b612771565b6103866107973660046152f8565b6127a5565b61044f6128b1565b61044f6107b23660046153a7565b612ad9565b6103866107c53660046152c2565b600d6020526000908152604090205481565b61044f6107e53660046153a7565b612b6b565b61038660135481565b6103866108013660046152c2565b60176020526000908152604090205481565b61044f6108213660046156ff565b612be9565b61044f6108343660046153a7565b612c30565b61084c6108473660046154c3565b612f1e565b6040516103909190615791565b61044f6108673660046153a7565b6130bd565b61087f61087a3660046153a7565b61334c565b6040805196875260208701959095529385019290925260608401526001600160a01b0390811660808401521660a082015260c001610390565b6108cb6108c63660046152f8565b61339f565b60405161039091906157df565b61044f6108e63660046153a7565b613403565b61044f6108f93660046153a7565b613489565b61091161090c3660046152f8565b61387b565b6040516103909190615819565b61044f61092c366004615827565b61398d565b61094461093f3660046153a7565b613b2e565b604051610390919061585a565b61096461095f3660046152f8565b613bd2565b604080519a8b5260208b0199909952978901969096526060880194909452608087019290925260a086015260c08501526001600160a01b031660e0840152151561010083015261012082015261014001610390565b6109cc6109c73660046152f8565b613c50565b604051610390929190615868565b61044f6109e836600461588d565b613df6565b6103e7610386565b610a08610a033660046152c2565b613fb0565b604080519485526020850193909352918301526060820152608001610390565b610a6b610a363660046153a7565b600b60205260009081526040902080546001820154600283015460038401546004850154600590950154939492939192909186565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610390565b610aab610aa63660046152c2565b614004565b60405161039091906158bf565b610acb610ac63660046152f8565b614099565b604080519485526020850193909352918301526001600160a01b03166060820152608001610390565b61044f610b023660046153a7565b6140e8565b610b1a610b153660046154c3565b61411c565b6040516103909190615901565b61044f610b35366004615366565b6142e5565b610386610b483660046152c2565b600e6020526000908152604090205481565b610525610b683660046152c2565b61451e565b61038660105481565b61044f610b843660046152f8565b6146f6565b610386610b973660046152c2565b601c6020526000908152604090205481565b61044f610bb73660046154c3565b614c6a565b61038660155481565b61044f610bd336600461597b565b614d24565b61044f610be63660046152c2565b614eeb565b600080610bf7836112e6565b6001600160a01b0384166000908152600e6020526040902054909150805b601054811015610c7d578215610c6b576000818152600b602052604081206004015461271090610c4590866159f1565b610c4f9190615a08565b9050610c5b8186615a2a565b9450610c678185615a3d565b9350505b80610c7581615a50565b915050610c15565b505050919050565b6001600160a01b0382166000908152600260205260408120805482919084908110610cb257610cb2615a69565b906000526020600020906009020190506000816006015442610cd49190615a3d565b60078301549091506001600160a01b03166000805b6001600160a01b038316600090815260036020526040902054811015610db0576001600160a01b0383166000908152600360205260408120805483908110610d3357610d33615a69565b6000918252602082206002909102018054600182015460088a015492945090929091606490610d6490600a906159f1565b610d6e9190615a08565b9050828810610d9b57612710610d8483836159f1565b610d8e9190615a08565b610d989087615a2a565b95505b5050505080610da990615a50565b9050610ce9565b5093505050505b92915050565b610dc5614f67565b6000610dd033610beb565b905060008111610dfb5760405162461bcd60e51b8152600401610df290615a7f565b60405180910390fd5b336000908152600c602052604081208054839290610e1a908490615a3d565b925050819055508060116000828254610e339190615a3d565b9091555050601054336000908152600e6020908152604080832093909355601c90529081208054839290610e68908490615a2a565b909155505060088054906000610e7d83615a50565b9091555050336000908152600f6020908152604091829020825160808101845260085481529182018490526007549092820190610eba9042615a2a565b8152600080516020615ccf833981519152602091820181905283546001808201865560009586528386208551600490930201918255848401519082015560408401516002820155606090930151600390930180546001600160a01b0319166001600160a01b0390941693909317909255908252600a9052600080516020615c6f8339815191528054839290610f50908490615a2a565b90915550506040518181523390600080516020615c8f8339815191529060200160405180910390a250610f81614f9d565b565b3360009081526020819052604090205460ff16610fb25760405162461bcd60e51b8152600401610df290615aa9565b6001600160a01b03811660009081526020819052604090205460ff166110065760405162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b6044820152606401610df2565b336001600160a01b038216036110535760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb329039b2b63360711b6044820152606401610df2565b6001600160a01b03166000908152602081905260409020805460ff19169055565b61107c614f67565b6000805b8281101561122b57600084848381811061109c5761109c615a69565b336000908152600260209081526040909120549102929092013592505081106110c55750611219565b3360009081526002602052604081208054839081106110e6576110e6615a69565b9060005260206000209060090201905060006111023384610c85565b9050816004015481101561111857505050611219565b600082600401548261112a9190615a3d565b90508060000361113d5750505050611219565b808360040160008282546111519190615a2a565b9091555061116190508187615a2a565b336000908152600f6020526040908190208151608081019092529197508061118c87620f4240615a2a565b8152602001838152602001600754426111a59190615a2a565b8152600080516020615ccf833981519152602091820152825460018082018555600094855293829020835160049092020190815590820151928101929092556040810151600283015560600151600390910180546001600160a01b0319166001600160a01b03909216919091179055505050505b8061122381615a50565b915050611080565b5080156112a557600080516020615ccf8339815191526000908152600a602052600080516020615c6f833981519152805483929061126a908490615a2a565b909155505060405181815233907f4e69fdc49495bcab2b4375781457ba16653a90eb4ffb6588351bdc39071433e29060200160405180910390a25b506112ae614f9d565b5050565b3360009081526020819052604090205460ff166112e15760405162461bcd60e51b8152600401610df290615aa9565b601655565b6001600160a01b0381166000908152600c60209081526040808320546018909252822054808211611318576000611322565b6113228183615a3d565b949350505050565b606080600083806001600160401b0381111561134857611348615ad1565b604051908082528060200260200182016040528015611371578160200160208202803683370190505b509350806001600160401b0381111561138c5761138c615ad1565b6040519080825280602002602001820160405280156113b5578160200160208202803683370190505b50925060005b818110156115125760008787838181106113d7576113d7615a69565b90506020020160208101906113ec91906152c2565b6001600160a01b038116600090815260066020526040902054875191925090819088908590811061141f5761141f615a69565b6020908102919091018101919091526001600160a01b03808416600090815260049283905260408082205490516302c68be360e31b815291939216916316345f189161146d918791016152e4565b602060405180830381865afa15801561148a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ae9190615ae7565b90506000670de0b6b3a76400006114c584846159f1565b6114cf9190615a08565b9050808886815181106114e4576114e4615a69565b60209081029190910101526114f98188615a2a565b965050505050808061150a90615a50565b9150506113bb565b50509250925092565b3360009081526020819052604090205460ff1661154a5760405162461bcd60e51b8152600401610df290615aa9565b61155e6001600160a01b0383163383614fae565b6040518181526001600160a01b038316903390600080516020615d0f8339815191529060200160405180910390a35050565b611598614f67565b6000805b336000908152600260205260409020548110156116a3573360009081526002602052604081208054839081106115d4576115d4615a69565b6000918252602090912060099091020160078101549091506001600160a01b03858116911614801561161257506007810154600160a01b900460ff16155b1561169057600061162333846127a5565b9050816003015481111561168e5760008260030154826116439190615a3d565b905061164f8186615a2a565b9450808360030160008282546116659190615a2a565b9091555050825460038401541061168c5760078301805460ff60a01b1916600160a01b1790555b505b505b508061169b81615a50565b91505061159c565b50600081116116c45760405162461bcd60e51b8152600401610df290615a7f565b33600090815260056020526040902054156117d1576001600160a01b0380831660009081526004602081905260408083205490516302c68be360e31b81529293670de0b6b3a764000093869392909116916316345f1891611727918991016152e4565b602060405180830381865afa158015611744573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117689190615ae7565b61177291906159f1565b61177c9190615a08565b3360009081526005602052604090205490915081106117aa57336000908152600560205260408120556117cf565b33600090815260056020526040812080548392906117c9908490615a3d565b90915550505b505b6001600160a01b038216600090815260066020526040812080548392906117f9908490615a3d565b9091555050336000908152600f60205260408082208151608081019092526009805491938392919061182a83615a50565b919050558152602001838152602001600754426118479190615a2a565b81526001600160a01b0385811660209283018190528454600180820187556000968752848720865160049093020191825585850151908201556040808601516002830155606090950151600390910180546001600160a01b03191691909316179091558352600a9052812080548392906118c2908490615a2a565b90915550506040513390600080516020615caf833981519152906118ea90849060009061544a565b60405180910390a2506118fb614f9d565b50565b6019818154811061190e57600080fd5b6000918252602090912060029091020180546001909101546001600160a01b03909116915082565b3360009081526020819052604090205460ff166119655760405162461bcd60e51b8152600401610df290615aa9565b601555565b6003602052816000526040600020818154811061198657600080fd5b600091825260209091206002909102018054600190910154909250905082565b3360009081526001602052604090205460ff166119d55760405162461bcd60e51b8152600401610df290615aa9565b828114611a1c5760405162461bcd60e51b8152602060048201526015602482015274082e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d605b1b6044820152606401610df2565b82611a585760405162461bcd60e51b815260206004820152600c60248201526b456d7074792061727261797360a01b6044820152606401610df2565b60005b83811015611d0c576000858583818110611a7757611a77615a69565b9050602002016020810190611a8c91906152c2565b6001600160a01b031603611ab25760405162461bcd60e51b8152600401610df290615b00565b6000838383818110611ac657611ac6615a69565b9050602002013511611aea5760405162461bcd60e51b8152600401610df290615b29565b828282818110611afc57611afc615a69565b90506020020135600c6000878785818110611b1957611b19615a69565b9050602002016020810190611b2e91906152c2565b6001600160a01b03166001600160a01b0316815260200190815260200160002054601154611b5c9190615a3d565b611b669190615a2a565b601155600d6000868684818110611b7f57611b7f615a69565b9050602002016020810190611b9491906152c2565b6001600160a01b03166001600160a01b0316815260200190815260200160002054600003611c1b57828282818110611bce57611bce615a69565b90506020020135600d6000878785818110611beb57611beb615a69565b9050602002016020810190611c0091906152c2565b6001600160a01b031681526020810191909152604001600020555b828282818110611c2d57611c2d615a69565b90506020020135600c6000878785818110611c4a57611c4a615a69565b9050602002016020810190611c5f91906152c2565b6001600160a01b03168152602081019190915260400160002055848482818110611c8b57611c8b615a69565b9050602002016020810190611ca091906152c2565b6001600160a01b03167fec7e3594982826a1f90c8fc76513357b83a691b7f4e38b8be04f3d40f9b15839848484818110611cdc57611cdc615a69565b90506020020135604051611cf291815260200190565b60405180910390a280611d0481615a50565b915050611a5b565b5050505050565b611d1b614f67565b60008211611d5b5760405162461bcd60e51b815260206004820152600d60248201526c496e76616c69642076616c756560981b6044820152606401610df2565b60008111611d7b5760405162461bcd60e51b8152600401610df290615b51565b601554821015611dc35760405162461bcd60e51b815260206004820152601360248201527256616c75652062656c6f77206d696e696d756d60681b6044820152606401610df2565b6000611dce336112e6565b905080831115611df05760405162461bcd60e51b8152600401610df290615b7d565b60088054906000611e0083615a50565b90915550506008543360009081526018602052604081208054869290611e27908490615a2a565b909155505060408051608081018252858152602080820186815233838501818152426060860190815260008381526014865287812089825286528781209651875593516001808801919091559151600280880180546001600160a01b039384166001600160a01b03199182161790915592516003909801979097558751808901909852928752938601878152601980548084018255948190529651939095027f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c969581018054949093169390941692909217905591517f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9696909101559054611f2c9190615a3d565b336000818152601a6020908152604080832086845290915290819020929092559051600080516020615cef83398151915290611f6b908690859061544a565b60405180910390a250506112ae614f9d565b60195460609081908190806001600160401b03811115611f9f57611f9f615ad1565b604051908082528060200260200182016040528015611fc8578160200160208202803683370190505b509350806001600160401b03811115611fe357611fe3615ad1565b60405190808252806020026020018201604052801561200c578160200160208202803683370190505b509250806001600160401b0381111561202757612027615ad1565b60405190808252806020026020018201604052801561206057816020015b61204d615204565b8152602001906001900390816120455790505b50915060005b8181101561219d5760006019828154811061208357612083615a69565b60009182526020918290206040805180820190915260029092020180546001600160a01b03168083526001909101549282019290925287519092508790849081106120d0576120d0615a69565b60200260200101906001600160a01b031690816001600160a01b031681525050806020015185838151811061210757612107615a69565b60209081029190910181019190915281516001600160a01b039081166000908152601483526040808220858501518352845290819020815160808101835281548152600182015494810194909452600281015490921690830152600301546060820152845185908490811061217e5761217e615a69565b602002602001018190525050808061219590615a50565b915050612066565b5050909192565b3360009081526020819052604090205460ff166121d35760405162461bcd60e51b8152600401610df290615aa9565b6001600160a01b03918216600090815260046020526040902080546001600160a01b03191691909216179055565b3360009081526020819052604090205460ff166122305760405162461bcd60e51b8152600401610df290615aa9565b6001600160a01b0381166122565760405162461bcd60e51b8152600401610df290615b00565b6001600160a01b03811660009081526020819052604090205460ff16156122af5760405162461bcd60e51b815260206004820152600d60248201526c20b63932b0b23c9037bbb732b960991b6044820152606401610df2565b6001600160a01b03166000908152602081905260409020805460ff19166001179055565b3360009081526001602052604090205460ff166123025760405162461bcd60e51b8152600401610df290615aa9565b60026000896001600160a01b03166001600160a01b031681526020019081526020016000206040518061014001604052808981526020018881526020018781526020016000815260200160008152602001848152602001838152602001866001600160a01b03168152602001600015158152602001858152509080600181540180825580915050600190039060005260206000209060090201600090919091909150600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506101008201518160070160146101000a81548160ff0219169083151502179055506101208201518160080155505082600560008a6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461247a9190615a2a565b90915550506001600160a01b038416600090815260066020526040812080548992906124a7908490615a2a565b90915550505050505050505050565b6001600160a01b0381166000908152600260209081526040808320805482518185028101850190935280835260609492939192909184015b8282101561259257600084815260209081902060408051610140810182526009860290920180548352600180820154848601526002820154928401929092526003810154606084015260048101546080840152600581015460a0840152600681015460c084015260078101546001600160a01b03811660e0850152600160a01b900460ff1615156101008401526008015461012083015290835290920191016124ee565b505050509050919050565b6001600160a01b038116600090815260026020526040812054815b8181101561276a576001600160a01b03841660009081526002602052604081208054839081106125ea576125ea615a69565b600091825260209182902060408051610140810182526009909302909101805483526001810154938301939093526002830154908201526003820154606082015260048201546080820152600582015460a0820152600682015460c082015260078201546001600160a01b03811660e083015260ff600160a01b909104161515610100820181905260089092015461012082015291506127575760e0810180516001600160a01b03908116600090815260046020819052604080832054945190516302c68be360e31b81529294909316926316345f18926126cb92016152e4565b602060405180830381865afa1580156126e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061270c9190615ae7565b90506000826060015183600001516127249190615a3d565b90506000670de0b6b3a764000061273b83856159f1565b6127459190615a08565b90506127518188615a2a565b96505050505b508061276281615a50565b9150506125b8565b5050919050565b3360009081526020819052604090205460ff166127a05760405162461bcd60e51b8152600401610df290615aa9565b601d55565b6001600160a01b03821660009081526002602052604081208054829190849081106127d2576127d2615a69565b9060005260206000209060090201905060008160060154426127f49190615a3d565b60078301549091506001600160a01b03166000805b6001600160a01b038316600090815260036020526040902054811015610db0576001600160a01b038316600090815260036020526040812080548390811061285357612853615a69565b60009182526020909120600290910201805460018201549192509081871061289d578754612710906128869083906159f1565b6128909190615a08565b61289a9086615a2a565b94505b505050806128aa90615a50565b9050612809565b60006128bb61500b565b805490915060ff600160401b82041615906001600160401b03166000811580156128e25750825b90506000826001600160401b031660011480156128fe5750303b155b90508115801561290c575080155b1561292a5760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b0319166001178555831561295357845460ff60401b1916600160401b1785555b61295b615034565b3360009081526020818152604082208054600160ff1991821681179092557f4cfa3c6903140891ecff713e237b1f1746362568dfb5e8e9bc37719e4f37e0c580548216831790557f3e1f9e6abae6b647fdc3c5896ef1871ceb3c98e9e72852da3f17d161a860f76c80548216831790557f3517cbb3edfcef55b3b32be7021bc73ef070f4a8bad0d4b389b96924cf17b7418054821683179055738a9281ecece9b599c2f42d829c3d0d8e74b7083e84527f968a1791ad31618c63b086103baa804af57c3ca0efa33a191010fbb7741579fc80549091169091179055600c905269021e19e0c9bab24000007f649cbac87391465cfe24c65b052f0edf3b8486f136e0b91262d76d1f34d7826b8190556011805491929091612a7c908490615a2a565b90915550506201fa4060075560646013558315611d0c57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b3360009081526020819052604090205460ff16612b085760405162461bcd60e51b8152600401610df290615aa9565b60008111612b665760405162461bcd60e51b815260206004820152602560248201527f4d61782070657263656e74616765206d75737420626520677265617465722074604482015264068616e20360dc1b6064820152608401610df2565b601355565b3360009081526020819052604090205460ff16612b9a5760405162461bcd60e51b8152600401610df290615aa9565b612bb3600080516020615ccf8339815191523383614fae565b604051818152600080516020615ccf833981519152903390600080516020615d0f8339815191529060200160405180910390a350565b3360009081526001602052604090205460ff16612c185760405162461bcd60e51b8152600401610df290615aa9565b612c2886868686868642426122d3565b505050505050565b33600090815260146020908152604080832084845290915290208054612c685760405162461bcd60e51b8152600401610df290615bad565b60028101546001600160a01b03163314612c945760405162461bcd60e51b8152600401610df290615bd8565b805460165460009061271090612caa90846159f1565b612cb49190615a08565b33600090815260186020526040812080549293508492909190612cd8908490615a3d565b90915550508015612d2157336000908152600c602052604081208054839290612d02908490615a3d565b925050819055508060116000828254612d1b9190615a3d565b90915550505b8015612d6b57336001600160a01b03167f4725a4d4de9bff212d0885095e27515072f73f427df55e52f37f241321ef88f98286604051612d6292919061544a565b60405180910390a25b336000818152601460209081526040808320888452825280832083815560018082018590556002820180546001600160a01b03191690556003909101849055938352601a82528083208884529091528120546019549092612dcb91615a3d565b9050808214612e8c57600060198281548110612de957612de9615a69565b60009182526020918290206040805180820190915260029092020180546001600160a01b03168252600101549181019190915260198054919250829185908110612e3557612e35615a69565b6000918252602080832084516002939093020180546001600160a01b0319166001600160a01b03938416178155938101516001909401939093558351168152601a8252604080822093830151825292909152208290555b6019805480612e9d57612e9d615c00565b600082815260208082206002600019949094019384020180546001600160a01b03191681556001018290559190925533808352601a825260408084208a855283528084209390935591518881527f73d12dec3eb3b445b6c9feb2fd559ba7c852c525bc1e59d8f7ff760c55df041d91015b60405180910390a2505050505050565b606081831115612f605760405162461bcd60e51b815260206004820152600d60248201526c496e76616c69642072616e676560981b6044820152606401610df2565b6010548210612fa75760405162461bcd60e51b8152602060048201526013602482015272115b9908195c1bd8da081b9bdd08199bdd5b99606a1b6044820152606401610df2565b6000612fb38484615a3d565b612fbe906001615a2a565b90506000816001600160401b03811115612fda57612fda615ad1565b60405190808252806020026020018201604052801561301357816020015b613000615235565b815260200190600190039081612ff85790505b50905060005b828110156130b457600b600061302f8389615a2a565b81526020019081526020016000206040518060c0016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820154815260200160058201548152505082828151811061309657613096615a69565b602002602001018190525080806130ac90615a50565b915050613019565b50949350505050565b6130c5614f67565b600081116130e55760405162461bcd60e51b8152600401610df290615b29565b60006012541161312e5760405162461bcd60e51b81526020600482015260146024820152734275796f7574206e6f7420617661696c61626c6560601b6044820152606401610df2565b6000613139336112e6565b90508082111561315b5760405162461bcd60e51b8152600401610df290615b7d565b61271061316a826109c46159f1565b6131749190615a08565b8210156131b45760405162461bcd60e51b815260206004820152600e60248201526d416d6f756e7420746f6f206c6f7760901b6044820152606401610df2565b6000612710601254846131c791906159f1565b6131d19190615a08565b336000908152600c60205260408120805492935085929091906131f5908490615a3d565b92505081905550826011600082825461320e9190615a3d565b9091555050336000908152601c602052604081208054839290613232908490615a2a565b90915550506008805490600061324783615a50565b9091555050336000908152600f60209081526040918290208251608081018452600854815291820184905260075490928201906132849042615a2a565b8152600080516020615ccf833981519152602091820181905283546001808201865560009586528386208551600490930201918255848401519082015560408401516002820155606090930151600390930180546001600160a01b0319166001600160a01b0390941693909317909255908252600a9052600080516020615c6f833981519152805483929061331a908490615a2a565b90915550506040518181523390600080516020615c8f8339815191529060200160405180910390a250506118fb614f9d565b601b818154811061335c57600080fd5b6000918252602090912060069091020180546001820154600283015460038401546004850154600590950154939550919390926001600160a01b03918216911686565b6133a7615204565b506001600160a01b03918216600090815260146020908152604080832093835292815290829020825160808101845281548152600182015492810192909252600281015490931691810191909152600390910154606082015290565b3360009081526020819052604090205460ff166134325760405162461bcd60e51b8152600401610df290615aa9565b6127108111156134845760405162461bcd60e51b815260206004820152601d60248201527f50657263656e746167652063616e6e6f742065786365656420313030250000006044820152606401610df2565b601255565b613491614f67565b3360009081526002602052604090205481106134e75760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840eccae6e8d2dcce40d2dcc8caf605b1b6044820152606401610df2565b33600090815260026020526040812080548390811061350857613508615a69565b906000526020600020906009020190508060070160149054906101000a900460ff161561356a5760405162461bcd60e51b815260206004820152601060248201526f56657374696e6720636f6d706c65746560801b6044820152606401610df2565b600061357633846127a5565b905081600301548110156135c35760405162461bcd60e51b8152602060048201526014602482015273125b9d985b1a590818db185a5b48185b5bdd5b9d60621b6044820152606401610df2565b60008260030154826135d59190615a3d565b9050600081116135f75760405162461bcd60e51b8152600401610df290615a7f565b8083600301600082825461360b9190615a2a565b909155505082546003840154106136325760078301805460ff60a01b1916600160a01b1790555b33600090815260056020526040902054156137435760078301546001600160a01b0390811660008181526004602081905260408083205490516302c68be360e31b81529294670de0b6b3a764000094879492909116926316345f18926136999291016152e4565b602060405180830381865afa1580156136b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136da9190615ae7565b6136e491906159f1565b6136ee9190615a08565b33600090815260056020526040902054909150811061371c5733600090815260056020526040812055613741565b336000908152600560205260408120805483929061373b908490615a3d565b90915550505b505b60078301546001600160a01b03166000908152600660205260408120805483929061376f908490615a3d565b9091555050336000908152600f6020526040808220815160808101909252600980549193839291906137a083615a50565b919050558152602001838152602001600754426137bd9190615a2a565b81526007860180546001600160a01b039081166020938401528454600180820187556000968752848720865160049093020191825585850151908201556040808601516002830155606090950151600390910180546001600160a01b0319169183169190911790559054168352600a905281208054839290613840908490615a2a565b90915550506040513390600080516020615caf8339815191529061386890849060009061544a565b60405180910390a25050506118fb614f9d565b6138af604051806080016040528060008152602001600081526020016000815260200160006001600160a01b031681525090565b6001600160a01b0383166000908152600f60205260408120905b815481101561397457838282815481106138e5576138e5615a69565b906000526020600020906004020160000154036139625781818154811061390e5761390e615a69565b6000918252602091829020604080516080810182526004909302909101805483526001810154938301939093526002830154908201526003909101546001600160a01b031660608201529250610db7915050565b8061396c81615a50565b9150506138c9565b5060405162461bcd60e51b8152600401610df290615c16565b3360009081526020819052604090205460ff166139bc5760405162461bcd60e51b8152600401610df290615aa9565b6001600160a01b0383166139e25760405162461bcd60e51b8152600401610df290615c3f565b6000811180156139f457506127108111155b613a355760405162461bcd60e51b8152602060048201526012602482015271496e76616c69642070657263656e7461676560701b6044820152606401610df2565b6001600160a01b0383166000908152600360205260408120613a569161526b565b6000825b612710821015613af35782612710613a728285615a2a565b1115613a8757613a8483612710615a3d565b90505b6001600160a01b0386166000908152600360209081526040808320815180830190925285825281830185815281546001818101845592865293909420915160029093029091019182559151910155613adf8184615a2a565b9250613aeb8583615a2a565b915050613a5a565b6040516001600160a01b038616907fde4b6ccc38b84f88129403b65a309f9b1c41d4c316bc2118d7614e449b9d4c4590600090a25050505050565b613b36615235565b6010548210613b795760405162461bcd60e51b815260206004820152600f60248201526e115c1bd8da081b9bdd08199bdd5b99608a1b6044820152606401610df2565b506000908152600b6020908152604091829020825160c08101845281548152600182015492810192909252600281015492820192909252600382015460608201526004820154608082015260059091015460a082015290565b60026020528160005260406000208181548110613bee57600080fd5b6000918252602090912060099091020180546001820154600283015460038401546004850154600586015460068701546007880154600890980154969950949750929591949093916001600160a01b03811691600160a01b90910460ff16908a565b6001600160a01b038216600090815260026020526040812080546060928392909185908110613c8157613c81615a69565b600091825260208083206007600990930201918201546001600160a01b03168084526003909152604083205491935091816001600160401b03811115613cc957613cc9615ad1565b604051908082528060200260200182016040528015613cf2578160200160208202803683370190505b5090506000826001600160401b03811115613d0f57613d0f615ad1565b604051908082528060200260200182016040528015613d38578160200160208202803683370190505b50905060005b83811015613de5576001600160a01b0385166000908152600360205260408120805483908110613d7057613d70615a69565b9060005260206000209060020201905080600001548760060154613d949190615a2a565b848381518110613da657613da6615a69565b6020026020010181815250508060010154838381518110613dc957613dc9615a69565b602090810291909101015250613dde81615a50565b9050613d3e565b5090955093505050505b9250929050565b3360009081526020819052604090205460ff16613e255760405162461bcd60e51b8152600401610df290615aa9565b60008115613e5a57600082613e3c866127106159f1565b613e469190615a08565b9050601d54811115613e5857601d8190555b505b60105415613ea0576000600b60006001601054613e779190615a3d565b81526020019081526020016000209050613e9c85848360010154846002015488615044565b9150505b601354811115613eeb5760405162461bcd60e51b81526020600482015260166024820152750aadcd8dec6d640e0cae4c6cadce8c2ceca40d0d2ced60531b6044820152606401610df2565b6040805160c08101825286815260208082018781528284018681526060808501898152608086018881524260a08801908152601080546000908152600b89528a90209851895595516001890155935160028801559051600387015551600486015590516005909401939093555483518881529182018590529281018690527feadbedb993dfca23e4c79bf4fa5fe531c2e0e926258fabb8445e8bc5c472780f910160405180910390a260108054906000613fa483615a50565b91905055505050505050565b6000806000806000613fc186610beb565b90506000613fce876112e6565b6001600160a01b03979097166000908152600c6020908152604080832054600d9092529091205490989297965094509092505050565b6001600160a01b0381166000908152600f60209081526040808320805482518185028101850190935280835260609492939192909184015b8282101561259257600084815260209081902060408051608081018252600486029092018054835260018082015484860152600282015492840192909252600301546001600160a01b03166060830152908352909201910161403c565b600f60205281600052604060002081815481106140b557600080fd5b6000918252602090912060049091020180546001820154600283015460039093015491945092506001600160a01b031684565b3360009081526020819052604090205460ff166141175760405162461bcd60e51b8152600401610df290615aa9565b600755565b601b54606090831061416c5760405162461bcd60e51b8152602060048201526019602482015278537461727420696e646578206f7574206f6620626f756e647360381b6044820152606401610df2565b60006141788385615a2a565b601b5490915081111561418a5750601b545b60006141968583615a3d565b6001600160401b038111156141ad576141ad615ad1565b60405190808252806020026020018201604052801561422957816020015b6142166040518060c001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b8152602001906001900390816141cb5790505b509050845b828110156130b457601b818154811061424957614249615a69565b60009182526020918290206040805160c0810182526006909302909101805483526001810154938301939093526002830154908201526003820154606082015260048201546001600160a01b03908116608083015260059092015490911660a0820152826142b78884615a3d565b815181106142c7576142c7615a69565b602002602001018190525080806142dd90615a50565b91505061422e565b6142ed614f67565b336000908152600f6020526040902080546143405760405162461bcd60e51b81526020600482015260136024820152724e6f207374616b657320617661696c61626c6560681b6044820152606401610df2565b816143855760405162461bcd60e51b8152602060048201526015602482015274139bc81cdd185ad94812511cc81c1c9bdd9a591959605a1b6044820152606401610df2565b60005b828110156145145760008484838181106143a4576143a4615a69565b9050602002013590506000805b84548110156144e15760008582815481106143ce576143ce615a69565b906000526020600020906004020190508381600001541480156143f5575060008160010154115b156144ce57806002015442101561443d5760405162461bcd60e51b815260206004820152600c60248201526b14dd185ad9481b1bd8dad95960a21b6044820152606401610df2565b60018101805460038301546000928390556001600160a01b0316808352600a60205260408320805492939192849290614477908490615a3d565b9091555061449190506001600160a01b0382163384614fae565b336001600160a01b0316600080516020615d2f83398151915283886040516144ba92919061544a565b60405180910390a2600194505050506144e1565b50806144d981615a50565b9150506143b1565b50806144ff5760405162461bcd60e51b8152600401610df290615c16565b5050808061450c90615a50565b915050614388565b50506112ae614f9d565b60608060008061452d856112e6565b6001600160a01b0386166000908152600e602052604081205460105492935091614558908390615a3d565b9050806000036145895750506040805160008082526020820181815282840190935290955090935091506146ef9050565b806001600160401b038111156145a1576145a1615ad1565b6040519080825280602002602001820160405280156145ca578160200160208202803683370190505b509550806001600160401b038111156145e5576145e5615ad1565b60405190808252806020026020018201604052801561460e578160200160208202803683370190505b50945060005b818110156146ea5760006146288285615a2a565b90508088838151811061463d5761463d615a69565b602090810291909101015284156146b6576000818152600b60205260408120600401546127109061466e90886159f1565b6146789190615a08565b90508088848151811061468d5761468d615a69565b60209081029190910101526146a28188615a2a565b96506146ae8187615a3d565b9550506146d7565b60008783815181106146ca576146ca615a69565b6020026020010181815250505b50806146e281615a50565b915050614614565b505050505b9193909250565b6146fe614f67565b6001600160a01b03821660009081526014602090815260408083208484529091529020805461473f5760405162461bcd60e51b8152600401610df290615bad565b336001600160a01b038416036147905760405162461bcd60e51b815260206004820152601660248201527543616e6e6f7420627579206f776e206c697374696e6760501b6044820152606401610df2565b80546001820154600383015460008284116147ac5760006147b6565b6147b68385615a3d565b90506000846147c7836127106159f1565b6147d19190615a08565b905060006127106147e283806159f1565b6147ec9190615a08565b905060006127106147fd83896159f1565b6148079190615a08565b905060006148158289615a3d565b9050614831600080516020615ccf833981519152338d8a6150f2565b6001600160a01b038b166000908152600c6020526040812080548a9290614859908490615a3d565b9091555050336000908152600c60205260408120805483929061487d908490615a2a565b90915550506001600160a01b038b16600090815260186020526040812080548a92906148aa908490615a3d565b9091555050336000908152600d6020526040812080548392906148ce908490615a2a565b9250508190555081601160008282546148e79190615a3d565b90915550506001600160a01b038b1660009081526017602052604081208054899290614914908490615a2a565b92505081905550601b6040518060c001604052808881526020014281526020018a81526020018981526020018d6001600160a01b03168152602001336001600160a01b031681525090806001815401808255809150506001900390600052602060002090600602016000909190919091506000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060a08201518160050160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505050601460008c6001600160a01b03166001600160a01b0316815260200190815260200160002060008b815260200190815260200160002060008082016000905560018201600090556002820160006101000a8154906001600160a01b030219169055600382016000905550506000601a60008d6001600160a01b03166001600160a01b0316815260200190815260200160002060008c815260200190815260200160002054905060006001601980549050614ac39190615a3d565b9050808214614b8457600060198281548110614ae157614ae1615a69565b60009182526020918290206040805180820190915260029092020180546001600160a01b03168252600101549181019190915260198054919250829185908110614b2d57614b2d615a69565b6000918252602080832084516002939093020180546001600160a01b0319166001600160a01b03938416178155938101516001909401939093558351168152601a8252604080822093830151825292909152208290555b6019805480614b9557614b95615c00565b6001900381819060005260206000209060020201600080820160006101000a8154906001600160a01b030219169055600182016000905550509055601a60008e6001600160a01b03166001600160a01b0316815260200190815260200160002060008d815260200190815260200160002060009055336001600160a01b03168d6001600160a01b03167f7bb39d095b04a9986ed34adf14d74c33294d0a9e807f02bf634d532507422eba8b8f604051614c4f92919061544a565b60405180910390a350505050505050505050506112ae614f9d565b33600090815260146020908152604080832085845290915290208054614ca25760405162461bcd60e51b8152600401610df290615bad565b60028101546001600160a01b03163314614cce5760405162461bcd60e51b8152600401610df290615bd8565b60008211614cee5760405162461bcd60e51b8152600401610df290615b51565b600181018290556040513390600080516020615cef83398151915290614d17908590879061544a565b60405180910390a2505050565b3360009081526001602052604090205460ff16614d535760405162461bcd60e51b8152600401610df290615aa9565b6001600160a01b038516614da05760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642075736572206164647265737360601b6044820152606401610df2565b60008411614dc05760405162461bcd60e51b8152600401610df290615b29565b6001600160a01b038216614de65760405162461bcd60e51b8152600401610df290615c3f565b60088054906000614df683615a50565b9190505550600081614e0a57600854614e1a565b600854614e1a90620f4240615a2a565b6001600160a01b038781166000908152600f6020908152604080832081516080810183528681528084018c81528184018c81528b881660608401818152855460018082018855968a52888a209551600490910290950194855592519484019490945551600283015551600390910180546001600160a01b0319169190961617909455928252600a905290812080549293508792909190614ebb908490615a2a565b92505081905550856001600160a01b0316600080516020615d2f8339815191528683604051612f0e92919061544a565b3360009081526020819052604090205460ff16614f1a5760405162461bcd60e51b8152600401610df290615aa9565b6001600160a01b038116614f405760405162461bcd60e51b8152600401610df290615b00565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6000614f71615131565b805490915060011901614f9757604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b6000614fa7615131565b6001905550565b61500683846001600160a01b031663a9059cbb8585604051602401614fd4929190615431565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050615155565b505050565b6000807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610db7565b61503c6151bd565b610f816151e2565b6000821580615051575084155b1561505e575060006150e9565b60008561506d886127106159f1565b6150779190615a08565b9050600084615088876127106159f1565b6150929190615a08565b9050601d548210156150a9576000925050506150e9565b8082116150bb576000925050506150e9565b60006150c78284615a3d565b905060006127106150d887846159f1565b6150e29190615a08565b9450505050505b95945050505050565b6040516001600160a01b03848116602483015283811660448301526064820183905261512b9186918216906323b872dd90608401614fd4565b50505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0090565b600080602060008451602086016000885af180615178576040513d6000823e3d81fd5b50506000513d9150811561519057806001141561519d565b6001600160a01b0384163b155b1561512b5783604051635274afe760e01b8152600401610df291906152e4565b6151c56151ea565b610f8157604051631afcd79f60e31b815260040160405180910390fd5b614f9d6151bd565b60006151f461500b565b54600160401b900460ff16919050565b6040518060800160405280600081526020016000815260200160006001600160a01b03168152602001600081525090565b6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b50805460008255600202906000526020600020908101906118fb91905b808211156152a25760008082556001820155600201615288565b5090565b80356001600160a01b03811681146152bd57600080fd5b919050565b6000602082840312156152d457600080fd5b6152dd826152a6565b9392505050565b6001600160a01b0391909116815260200190565b6000806040838503121561530b57600080fd5b615314836152a6565b946020939093013593505050565b60008083601f84011261533457600080fd5b5081356001600160401b0381111561534b57600080fd5b6020830191508360208260051b8501011115613def57600080fd5b6000806020838503121561537957600080fd5b82356001600160401b0381111561538f57600080fd5b61539b85828601615322565b90969095509350505050565b6000602082840312156153b957600080fd5b5035919050565b600081518084526020808501945080840160005b838110156153f0578151875295820195908201906001016153d4565b509495945050505050565b60608152600061540e60608301866153c0565b828103602084015261542081866153c0565b915050826040830152949350505050565b6001600160a01b03929092168252602082015260400190565b918252602082015260400190565b6000806000806040858703121561546e57600080fd5b84356001600160401b038082111561548557600080fd5b61549188838901615322565b909650945060208701359150808211156154aa57600080fd5b506154b787828801615322565b95989497509550505050565b600080604083850312156154d657600080fd5b50508035926020909101359150565b80518252602080820151908301526040808201516001600160a01b031690830152606090810151910152565b60608082528451908201819052600090608090818401906020808901855b838110156155545781516001600160a01b03168552938201939082019060010161552f565b50508583038187015261556783896153c0565b868103604088015287518082528289019450908201925060005b818110156155a4576155948486516154e5565b9382019392850192600101615581565b50919998505050505050505050565b600080604083850312156155c657600080fd5b6155cf836152a6565b91506155dd602084016152a6565b90509250929050565b600080600080600080600080610100898b03121561560357600080fd5b61560c896152a6565b975060208901359650604089013595506060890135945061562f60808a016152a6565b979a969950949793969560a0850135955060c08501359460e001359350915050565b602080825282518282018190526000919060409081850190868401855b828110156156f25781518051855286810151878601528581015186860152606080820151908601526080808201519086015260a0808201519086015260c0808201519086015260e0808201516001600160a01b031690860152610100808201511515908601526101209081015190850152610140909301929085019060010161566e565b5091979650505050505050565b60008060008060008060c0878903121561571857600080fd5b615721876152a6565b9550602087013594506040870135935060608701359250615744608088016152a6565b915060a087013590509295509295509295565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a08301525050565b6020808252825182820181905260009190848201906040850190845b818110156157d3576157c0838551615757565b9284019260c092909201916001016157ad565b50909695505050505050565b60808101610db782846154e5565b8051825260208082015190830152604080820151908301526060908101516001600160a01b0316910152565b60808101610db782846157ed565b60008060006060848603121561583c57600080fd5b615845846152a6565b95602085013595506040909401359392505050565b60c08101610db78284615757565b60408152600061587b60408301856153c0565b82810360208401526150e981856153c0565b600080600080608085870312156158a357600080fd5b5050823594602084013594506040840135936060013592509050565b6020808252825182820181905260009190848201906040850190845b818110156157d3576158ee8385516157ed565b92840192608092909201916001016158db565b602080825282518282018190526000919060409081850190868401855b828110156156f25781518051855286810151878601528581015186860152606080820151908601526080808201516001600160a01b039081169187019190915260a091820151169085015260c0909301929085019060010161591e565b600080600080600060a0868803121561599357600080fd5b61599c866152a6565b945060208601359350604086013592506159b8606087016152a6565b9150608086013580151581146159cd57600080fd5b809150509295509295909350565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610db757610db76159db565b600082615a2557634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610db757610db76159db565b81810381811115610db757610db76159db565b600060018201615a6257615a626159db565b5060010190565b634e487b7160e01b600052603260045260246000fd5b60208082526010908201526f4e6f7468696e6720746f20636c61696d60801b604082015260600190565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b634e487b7160e01b600052604160045260246000fd5b600060208284031215615af957600080fd5b5051919050565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b6020808252600e908201526d125b9d985b1a5908185b5bdd5b9d60921b604082015260600190565b602080825260129082015271496e76616c69642073616c6520707269636560701b604082015260600190565b602080825260169082015275496e73756666696369656e74206e6574207374616b6560501b604082015260600190565b602080825260119082015270131a5cdd1a5b99c81b9bdd08199bdd5b99607a1b604082015260600190565b6020808252600e908201526d2737ba103a34329039b2b63632b960911b604082015260600190565b634e487b7160e01b600052603160045260246000fd5b6020808252600f908201526e14dd185ad9481b9bdd08199bdd5b99608a1b604082015260600190565b602080825260159082015274496e76616c696420746f6b656e206164647265737360581b60408201526060019056feb0775d57c3eeb070f58d410e36e9ff396813a5d76997d9a91bdf10f0798296f0a65a8b4f7f65a1063243d7f7e9e4da00ff767599acf21549ef2548a45d1695ae4a94c2c356e29a6583071e731bdacf2ca56565ba5efebcff6936eb7923b5172100000000000000000000000055d398326f99059ff775485246999027b31979558e79b7ba8dab5ebfa59b9c6af1743c3ef14863680b3cc5ac837f8d636f76031ca92ff919b850e4909ab2261d907ef955f11bc1716733a6cbece38d163a69af8a933735aa8de6d7547d0126171b2f31b9c34dd00f3ecd4be85a0ba047db4fafefa2646970667358221220c8b39bc364af48f03e5e506c54c206562f38e806902f8ca765430d8cbb08f93d64736f6c63430008140033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061036e5760003560e01c8062159da6146103735780630137451814610399578063022914a7146103cf5780630519da3214610402578063092c76101461040b5780630a84096a1461042b5780630a910a6d1461043e5780630c7d63861461044757806313baee5b14610451578063173825d9146104715780631764303d146104845780631aefa2d1146104975780631eb9e53e146104aa5780632ded58aa146104bd5780632e46fed8146104c65780633ba8396e146104ef5780633c92f98d146105125780633e4bc6bc146105345780633f35e7221461053d57806343a32f891461055057806343c7c011146105cb578063441a4175146105de5780634a61f1e5146105ff57806351e624721461061f57806351f6cf2f14610632578063549e61d3146106535780635811622714610666578063592d1dd11461067957806361d1080b1461069957806362cd6a09146106a157806367a74ddc146106b85780636ef569a5146106cb5780637065cb48146106d457806374d1c8e3146106e757806375060a0b146106fa5780637a0c6dc01461071a5780637bc221ac1461073a5780637e6d99261461074d57806380259e691461077657806380ca0ecf146107895780638129fc1c1461079c57806382b75681146107a457806384e8520a146107b7578063853e0df2146107d75780638939d787146107ea5780638f82818f146107f35780639437e32e14610813578063953d16bf1461082657806396fd111a146108395780639cb6f556146108595780639f3a676c1461086c578063a0d46758146108b8578063aaf4b04d146108d8578063ac97b417146108eb578063b6c3dc4c146108fe578063b92a349f1461091e578063bc0bc6ba14610931578063bd84477d14610951578063bed9757e146109b9578063c0c07d17146109da578063c2676603146109ed578063c32d3ae2146109f5578063c6b61e4c14610a28578063c7b530b014610a98578063cc573a9114610ab8578063ce13d09014610af4578063cfcf331914610b07578063d532bdfe14610b27578063da1b436414610b3a578063e88f8e6614610b5a578063eacdc5ff14610b6d578063eb44e0a314610b76578063ef5d9ae814610b89578063f2bb563014610ba9578063fe2f50d014610bbc578063fee6018c14610bc5578063ffecf51614610bd8575b600080fd5b6103866103813660046152c2565b610beb565b6040519081526020015b60405180910390f35b6103c26103a73660046152c2565b6004602052600090815260409020546001600160a01b031681565b60405161039091906152e4565b6103f26103dd3660046152c2565b60006020819052908152604090205460ff1681565b6040519015158152602001610390565b61038660075481565b6103866104193660046152c2565b60066020526000908152604090205481565b6103866104393660046152f8565b610c85565b61038660125481565b61044f610dbd565b005b61038661045f3660046152c2565b600c6020526000908152604090205481565b61044f61047f3660046152c2565b610f83565b61044f610492366004615366565b611074565b61044f6104a53660046153a7565b6112b2565b6103866104b83660046152c2565b6112e6565b61038660115481565b6103866104d43660046152c2565b6001600160a01b03166000908152601c602052604090205490565b6103f26104fd3660046152c2565b60016020526000908152604090205460ff1681565b610525610520366004615366565b61132a565b604051610390939291906153fb565b610386601d5481565b61044f61054b3660046152f8565b61151b565b61059c61055e3660046152f8565b60146020908152600092835260408084209091529082529020805460018201546002830154600390930154919290916001600160a01b039091169084565b604051610390949392919093845260208401929092526001600160a01b03166040830152606082015260800190565b61044f6105d93660046152c2565b611590565b6105f16105ec3660046153a7565b6118fe565b604051610390929190615431565b61038661060d3660046152c2565b60186020526000908152604090205481565b61044f61062d3660046153a7565b611936565b6106456106403660046152f8565b61196a565b60405161039092919061544a565b61044f610661366004615458565b6119a6565b61044f6106743660046154c3565b611d13565b6103866106873660046152c2565b60056020526000908152604090205481565b601b54610386565b6106a9611f7d565b60405161039093929190615511565b61044f6106c63660046155b3565b6121a4565b61038660165481565b61044f6106e23660046152c2565b612201565b61044f6106f53660046155e6565b6122d3565b6103866107083660046152c2565b600a6020526000908152604090205481565b61072d6107283660046152c2565b6124b6565b6040516103909190615651565b6103866107483660046152c2565b61259d565b61038661075b3660046152c2565b6001600160a01b031660009081526017602052604090205490565b61044f6107843660046153a7565b612771565b6103866107973660046152f8565b6127a5565b61044f6128b1565b61044f6107b23660046153a7565b612ad9565b6103866107c53660046152c2565b600d6020526000908152604090205481565b61044f6107e53660046153a7565b612b6b565b61038660135481565b6103866108013660046152c2565b60176020526000908152604090205481565b61044f6108213660046156ff565b612be9565b61044f6108343660046153a7565b612c30565b61084c6108473660046154c3565b612f1e565b6040516103909190615791565b61044f6108673660046153a7565b6130bd565b61087f61087a3660046153a7565b61334c565b6040805196875260208701959095529385019290925260608401526001600160a01b0390811660808401521660a082015260c001610390565b6108cb6108c63660046152f8565b61339f565b60405161039091906157df565b61044f6108e63660046153a7565b613403565b61044f6108f93660046153a7565b613489565b61091161090c3660046152f8565b61387b565b6040516103909190615819565b61044f61092c366004615827565b61398d565b61094461093f3660046153a7565b613b2e565b604051610390919061585a565b61096461095f3660046152f8565b613bd2565b604080519a8b5260208b0199909952978901969096526060880194909452608087019290925260a086015260c08501526001600160a01b031660e0840152151561010083015261012082015261014001610390565b6109cc6109c73660046152f8565b613c50565b604051610390929190615868565b61044f6109e836600461588d565b613df6565b6103e7610386565b610a08610a033660046152c2565b613fb0565b604080519485526020850193909352918301526060820152608001610390565b610a6b610a363660046153a7565b600b60205260009081526040902080546001820154600283015460038401546004850154600590950154939492939192909186565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610390565b610aab610aa63660046152c2565b614004565b60405161039091906158bf565b610acb610ac63660046152f8565b614099565b604080519485526020850193909352918301526001600160a01b03166060820152608001610390565b61044f610b023660046153a7565b6140e8565b610b1a610b153660046154c3565b61411c565b6040516103909190615901565b61044f610b35366004615366565b6142e5565b610386610b483660046152c2565b600e6020526000908152604090205481565b610525610b683660046152c2565b61451e565b61038660105481565b61044f610b843660046152f8565b6146f6565b610386610b973660046152c2565b601c6020526000908152604090205481565b61044f610bb73660046154c3565b614c6a565b61038660155481565b61044f610bd336600461597b565b614d24565b61044f610be63660046152c2565b614eeb565b600080610bf7836112e6565b6001600160a01b0384166000908152600e6020526040902054909150805b601054811015610c7d578215610c6b576000818152600b602052604081206004015461271090610c4590866159f1565b610c4f9190615a08565b9050610c5b8186615a2a565b9450610c678185615a3d565b9350505b80610c7581615a50565b915050610c15565b505050919050565b6001600160a01b0382166000908152600260205260408120805482919084908110610cb257610cb2615a69565b906000526020600020906009020190506000816006015442610cd49190615a3d565b60078301549091506001600160a01b03166000805b6001600160a01b038316600090815260036020526040902054811015610db0576001600160a01b0383166000908152600360205260408120805483908110610d3357610d33615a69565b6000918252602082206002909102018054600182015460088a015492945090929091606490610d6490600a906159f1565b610d6e9190615a08565b9050828810610d9b57612710610d8483836159f1565b610d8e9190615a08565b610d989087615a2a565b95505b5050505080610da990615a50565b9050610ce9565b5093505050505b92915050565b610dc5614f67565b6000610dd033610beb565b905060008111610dfb5760405162461bcd60e51b8152600401610df290615a7f565b60405180910390fd5b336000908152600c602052604081208054839290610e1a908490615a3d565b925050819055508060116000828254610e339190615a3d565b9091555050601054336000908152600e6020908152604080832093909355601c90529081208054839290610e68908490615a2a565b909155505060088054906000610e7d83615a50565b9091555050336000908152600f6020908152604091829020825160808101845260085481529182018490526007549092820190610eba9042615a2a565b8152600080516020615ccf833981519152602091820181905283546001808201865560009586528386208551600490930201918255848401519082015560408401516002820155606090930151600390930180546001600160a01b0319166001600160a01b0390941693909317909255908252600a9052600080516020615c6f8339815191528054839290610f50908490615a2a565b90915550506040518181523390600080516020615c8f8339815191529060200160405180910390a250610f81614f9d565b565b3360009081526020819052604090205460ff16610fb25760405162461bcd60e51b8152600401610df290615aa9565b6001600160a01b03811660009081526020819052604090205460ff166110065760405162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b6044820152606401610df2565b336001600160a01b038216036110535760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb329039b2b63360711b6044820152606401610df2565b6001600160a01b03166000908152602081905260409020805460ff19169055565b61107c614f67565b6000805b8281101561122b57600084848381811061109c5761109c615a69565b336000908152600260209081526040909120549102929092013592505081106110c55750611219565b3360009081526002602052604081208054839081106110e6576110e6615a69565b9060005260206000209060090201905060006111023384610c85565b9050816004015481101561111857505050611219565b600082600401548261112a9190615a3d565b90508060000361113d5750505050611219565b808360040160008282546111519190615a2a565b9091555061116190508187615a2a565b336000908152600f6020526040908190208151608081019092529197508061118c87620f4240615a2a565b8152602001838152602001600754426111a59190615a2a565b8152600080516020615ccf833981519152602091820152825460018082018555600094855293829020835160049092020190815590820151928101929092556040810151600283015560600151600390910180546001600160a01b0319166001600160a01b03909216919091179055505050505b8061122381615a50565b915050611080565b5080156112a557600080516020615ccf8339815191526000908152600a602052600080516020615c6f833981519152805483929061126a908490615a2a565b909155505060405181815233907f4e69fdc49495bcab2b4375781457ba16653a90eb4ffb6588351bdc39071433e29060200160405180910390a25b506112ae614f9d565b5050565b3360009081526020819052604090205460ff166112e15760405162461bcd60e51b8152600401610df290615aa9565b601655565b6001600160a01b0381166000908152600c60209081526040808320546018909252822054808211611318576000611322565b6113228183615a3d565b949350505050565b606080600083806001600160401b0381111561134857611348615ad1565b604051908082528060200260200182016040528015611371578160200160208202803683370190505b509350806001600160401b0381111561138c5761138c615ad1565b6040519080825280602002602001820160405280156113b5578160200160208202803683370190505b50925060005b818110156115125760008787838181106113d7576113d7615a69565b90506020020160208101906113ec91906152c2565b6001600160a01b038116600090815260066020526040902054875191925090819088908590811061141f5761141f615a69565b6020908102919091018101919091526001600160a01b03808416600090815260049283905260408082205490516302c68be360e31b815291939216916316345f189161146d918791016152e4565b602060405180830381865afa15801561148a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ae9190615ae7565b90506000670de0b6b3a76400006114c584846159f1565b6114cf9190615a08565b9050808886815181106114e4576114e4615a69565b60209081029190910101526114f98188615a2a565b965050505050808061150a90615a50565b9150506113bb565b50509250925092565b3360009081526020819052604090205460ff1661154a5760405162461bcd60e51b8152600401610df290615aa9565b61155e6001600160a01b0383163383614fae565b6040518181526001600160a01b038316903390600080516020615d0f8339815191529060200160405180910390a35050565b611598614f67565b6000805b336000908152600260205260409020548110156116a3573360009081526002602052604081208054839081106115d4576115d4615a69565b6000918252602090912060099091020160078101549091506001600160a01b03858116911614801561161257506007810154600160a01b900460ff16155b1561169057600061162333846127a5565b9050816003015481111561168e5760008260030154826116439190615a3d565b905061164f8186615a2a565b9450808360030160008282546116659190615a2a565b9091555050825460038401541061168c5760078301805460ff60a01b1916600160a01b1790555b505b505b508061169b81615a50565b91505061159c565b50600081116116c45760405162461bcd60e51b8152600401610df290615a7f565b33600090815260056020526040902054156117d1576001600160a01b0380831660009081526004602081905260408083205490516302c68be360e31b81529293670de0b6b3a764000093869392909116916316345f1891611727918991016152e4565b602060405180830381865afa158015611744573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117689190615ae7565b61177291906159f1565b61177c9190615a08565b3360009081526005602052604090205490915081106117aa57336000908152600560205260408120556117cf565b33600090815260056020526040812080548392906117c9908490615a3d565b90915550505b505b6001600160a01b038216600090815260066020526040812080548392906117f9908490615a3d565b9091555050336000908152600f60205260408082208151608081019092526009805491938392919061182a83615a50565b919050558152602001838152602001600754426118479190615a2a565b81526001600160a01b0385811660209283018190528454600180820187556000968752848720865160049093020191825585850151908201556040808601516002830155606090950151600390910180546001600160a01b03191691909316179091558352600a9052812080548392906118c2908490615a2a565b90915550506040513390600080516020615caf833981519152906118ea90849060009061544a565b60405180910390a2506118fb614f9d565b50565b6019818154811061190e57600080fd5b6000918252602090912060029091020180546001909101546001600160a01b03909116915082565b3360009081526020819052604090205460ff166119655760405162461bcd60e51b8152600401610df290615aa9565b601555565b6003602052816000526040600020818154811061198657600080fd5b600091825260209091206002909102018054600190910154909250905082565b3360009081526001602052604090205460ff166119d55760405162461bcd60e51b8152600401610df290615aa9565b828114611a1c5760405162461bcd60e51b8152602060048201526015602482015274082e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d605b1b6044820152606401610df2565b82611a585760405162461bcd60e51b815260206004820152600c60248201526b456d7074792061727261797360a01b6044820152606401610df2565b60005b83811015611d0c576000858583818110611a7757611a77615a69565b9050602002016020810190611a8c91906152c2565b6001600160a01b031603611ab25760405162461bcd60e51b8152600401610df290615b00565b6000838383818110611ac657611ac6615a69565b9050602002013511611aea5760405162461bcd60e51b8152600401610df290615b29565b828282818110611afc57611afc615a69565b90506020020135600c6000878785818110611b1957611b19615a69565b9050602002016020810190611b2e91906152c2565b6001600160a01b03166001600160a01b0316815260200190815260200160002054601154611b5c9190615a3d565b611b669190615a2a565b601155600d6000868684818110611b7f57611b7f615a69565b9050602002016020810190611b9491906152c2565b6001600160a01b03166001600160a01b0316815260200190815260200160002054600003611c1b57828282818110611bce57611bce615a69565b90506020020135600d6000878785818110611beb57611beb615a69565b9050602002016020810190611c0091906152c2565b6001600160a01b031681526020810191909152604001600020555b828282818110611c2d57611c2d615a69565b90506020020135600c6000878785818110611c4a57611c4a615a69565b9050602002016020810190611c5f91906152c2565b6001600160a01b03168152602081019190915260400160002055848482818110611c8b57611c8b615a69565b9050602002016020810190611ca091906152c2565b6001600160a01b03167fec7e3594982826a1f90c8fc76513357b83a691b7f4e38b8be04f3d40f9b15839848484818110611cdc57611cdc615a69565b90506020020135604051611cf291815260200190565b60405180910390a280611d0481615a50565b915050611a5b565b5050505050565b611d1b614f67565b60008211611d5b5760405162461bcd60e51b815260206004820152600d60248201526c496e76616c69642076616c756560981b6044820152606401610df2565b60008111611d7b5760405162461bcd60e51b8152600401610df290615b51565b601554821015611dc35760405162461bcd60e51b815260206004820152601360248201527256616c75652062656c6f77206d696e696d756d60681b6044820152606401610df2565b6000611dce336112e6565b905080831115611df05760405162461bcd60e51b8152600401610df290615b7d565b60088054906000611e0083615a50565b90915550506008543360009081526018602052604081208054869290611e27908490615a2a565b909155505060408051608081018252858152602080820186815233838501818152426060860190815260008381526014865287812089825286528781209651875593516001808801919091559151600280880180546001600160a01b039384166001600160a01b03199182161790915592516003909801979097558751808901909852928752938601878152601980548084018255948190529651939095027f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c969581018054949093169390941692909217905591517f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9696909101559054611f2c9190615a3d565b336000818152601a6020908152604080832086845290915290819020929092559051600080516020615cef83398151915290611f6b908690859061544a565b60405180910390a250506112ae614f9d565b60195460609081908190806001600160401b03811115611f9f57611f9f615ad1565b604051908082528060200260200182016040528015611fc8578160200160208202803683370190505b509350806001600160401b03811115611fe357611fe3615ad1565b60405190808252806020026020018201604052801561200c578160200160208202803683370190505b509250806001600160401b0381111561202757612027615ad1565b60405190808252806020026020018201604052801561206057816020015b61204d615204565b8152602001906001900390816120455790505b50915060005b8181101561219d5760006019828154811061208357612083615a69565b60009182526020918290206040805180820190915260029092020180546001600160a01b03168083526001909101549282019290925287519092508790849081106120d0576120d0615a69565b60200260200101906001600160a01b031690816001600160a01b031681525050806020015185838151811061210757612107615a69565b60209081029190910181019190915281516001600160a01b039081166000908152601483526040808220858501518352845290819020815160808101835281548152600182015494810194909452600281015490921690830152600301546060820152845185908490811061217e5761217e615a69565b602002602001018190525050808061219590615a50565b915050612066565b5050909192565b3360009081526020819052604090205460ff166121d35760405162461bcd60e51b8152600401610df290615aa9565b6001600160a01b03918216600090815260046020526040902080546001600160a01b03191691909216179055565b3360009081526020819052604090205460ff166122305760405162461bcd60e51b8152600401610df290615aa9565b6001600160a01b0381166122565760405162461bcd60e51b8152600401610df290615b00565b6001600160a01b03811660009081526020819052604090205460ff16156122af5760405162461bcd60e51b815260206004820152600d60248201526c20b63932b0b23c9037bbb732b960991b6044820152606401610df2565b6001600160a01b03166000908152602081905260409020805460ff19166001179055565b3360009081526001602052604090205460ff166123025760405162461bcd60e51b8152600401610df290615aa9565b60026000896001600160a01b03166001600160a01b031681526020019081526020016000206040518061014001604052808981526020018881526020018781526020016000815260200160008152602001848152602001838152602001866001600160a01b03168152602001600015158152602001858152509080600181540180825580915050600190039060005260206000209060090201600090919091909150600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506101008201518160070160146101000a81548160ff0219169083151502179055506101208201518160080155505082600560008a6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461247a9190615a2a565b90915550506001600160a01b038416600090815260066020526040812080548992906124a7908490615a2a565b90915550505050505050505050565b6001600160a01b0381166000908152600260209081526040808320805482518185028101850190935280835260609492939192909184015b8282101561259257600084815260209081902060408051610140810182526009860290920180548352600180820154848601526002820154928401929092526003810154606084015260048101546080840152600581015460a0840152600681015460c084015260078101546001600160a01b03811660e0850152600160a01b900460ff1615156101008401526008015461012083015290835290920191016124ee565b505050509050919050565b6001600160a01b038116600090815260026020526040812054815b8181101561276a576001600160a01b03841660009081526002602052604081208054839081106125ea576125ea615a69565b600091825260209182902060408051610140810182526009909302909101805483526001810154938301939093526002830154908201526003820154606082015260048201546080820152600582015460a0820152600682015460c082015260078201546001600160a01b03811660e083015260ff600160a01b909104161515610100820181905260089092015461012082015291506127575760e0810180516001600160a01b03908116600090815260046020819052604080832054945190516302c68be360e31b81529294909316926316345f18926126cb92016152e4565b602060405180830381865afa1580156126e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061270c9190615ae7565b90506000826060015183600001516127249190615a3d565b90506000670de0b6b3a764000061273b83856159f1565b6127459190615a08565b90506127518188615a2a565b96505050505b508061276281615a50565b9150506125b8565b5050919050565b3360009081526020819052604090205460ff166127a05760405162461bcd60e51b8152600401610df290615aa9565b601d55565b6001600160a01b03821660009081526002602052604081208054829190849081106127d2576127d2615a69565b9060005260206000209060090201905060008160060154426127f49190615a3d565b60078301549091506001600160a01b03166000805b6001600160a01b038316600090815260036020526040902054811015610db0576001600160a01b038316600090815260036020526040812080548390811061285357612853615a69565b60009182526020909120600290910201805460018201549192509081871061289d578754612710906128869083906159f1565b6128909190615a08565b61289a9086615a2a565b94505b505050806128aa90615a50565b9050612809565b60006128bb61500b565b805490915060ff600160401b82041615906001600160401b03166000811580156128e25750825b90506000826001600160401b031660011480156128fe5750303b155b90508115801561290c575080155b1561292a5760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b0319166001178555831561295357845460ff60401b1916600160401b1785555b61295b615034565b3360009081526020818152604082208054600160ff1991821681179092557f4cfa3c6903140891ecff713e237b1f1746362568dfb5e8e9bc37719e4f37e0c580548216831790557f3e1f9e6abae6b647fdc3c5896ef1871ceb3c98e9e72852da3f17d161a860f76c80548216831790557f3517cbb3edfcef55b3b32be7021bc73ef070f4a8bad0d4b389b96924cf17b7418054821683179055738a9281ecece9b599c2f42d829c3d0d8e74b7083e84527f968a1791ad31618c63b086103baa804af57c3ca0efa33a191010fbb7741579fc80549091169091179055600c905269021e19e0c9bab24000007f649cbac87391465cfe24c65b052f0edf3b8486f136e0b91262d76d1f34d7826b8190556011805491929091612a7c908490615a2a565b90915550506201fa4060075560646013558315611d0c57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b3360009081526020819052604090205460ff16612b085760405162461bcd60e51b8152600401610df290615aa9565b60008111612b665760405162461bcd60e51b815260206004820152602560248201527f4d61782070657263656e74616765206d75737420626520677265617465722074604482015264068616e20360dc1b6064820152608401610df2565b601355565b3360009081526020819052604090205460ff16612b9a5760405162461bcd60e51b8152600401610df290615aa9565b612bb3600080516020615ccf8339815191523383614fae565b604051818152600080516020615ccf833981519152903390600080516020615d0f8339815191529060200160405180910390a350565b3360009081526001602052604090205460ff16612c185760405162461bcd60e51b8152600401610df290615aa9565b612c2886868686868642426122d3565b505050505050565b33600090815260146020908152604080832084845290915290208054612c685760405162461bcd60e51b8152600401610df290615bad565b60028101546001600160a01b03163314612c945760405162461bcd60e51b8152600401610df290615bd8565b805460165460009061271090612caa90846159f1565b612cb49190615a08565b33600090815260186020526040812080549293508492909190612cd8908490615a3d565b90915550508015612d2157336000908152600c602052604081208054839290612d02908490615a3d565b925050819055508060116000828254612d1b9190615a3d565b90915550505b8015612d6b57336001600160a01b03167f4725a4d4de9bff212d0885095e27515072f73f427df55e52f37f241321ef88f98286604051612d6292919061544a565b60405180910390a25b336000818152601460209081526040808320888452825280832083815560018082018590556002820180546001600160a01b03191690556003909101849055938352601a82528083208884529091528120546019549092612dcb91615a3d565b9050808214612e8c57600060198281548110612de957612de9615a69565b60009182526020918290206040805180820190915260029092020180546001600160a01b03168252600101549181019190915260198054919250829185908110612e3557612e35615a69565b6000918252602080832084516002939093020180546001600160a01b0319166001600160a01b03938416178155938101516001909401939093558351168152601a8252604080822093830151825292909152208290555b6019805480612e9d57612e9d615c00565b600082815260208082206002600019949094019384020180546001600160a01b03191681556001018290559190925533808352601a825260408084208a855283528084209390935591518881527f73d12dec3eb3b445b6c9feb2fd559ba7c852c525bc1e59d8f7ff760c55df041d91015b60405180910390a2505050505050565b606081831115612f605760405162461bcd60e51b815260206004820152600d60248201526c496e76616c69642072616e676560981b6044820152606401610df2565b6010548210612fa75760405162461bcd60e51b8152602060048201526013602482015272115b9908195c1bd8da081b9bdd08199bdd5b99606a1b6044820152606401610df2565b6000612fb38484615a3d565b612fbe906001615a2a565b90506000816001600160401b03811115612fda57612fda615ad1565b60405190808252806020026020018201604052801561301357816020015b613000615235565b815260200190600190039081612ff85790505b50905060005b828110156130b457600b600061302f8389615a2a565b81526020019081526020016000206040518060c0016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820154815260200160058201548152505082828151811061309657613096615a69565b602002602001018190525080806130ac90615a50565b915050613019565b50949350505050565b6130c5614f67565b600081116130e55760405162461bcd60e51b8152600401610df290615b29565b60006012541161312e5760405162461bcd60e51b81526020600482015260146024820152734275796f7574206e6f7420617661696c61626c6560601b6044820152606401610df2565b6000613139336112e6565b90508082111561315b5760405162461bcd60e51b8152600401610df290615b7d565b61271061316a826109c46159f1565b6131749190615a08565b8210156131b45760405162461bcd60e51b815260206004820152600e60248201526d416d6f756e7420746f6f206c6f7760901b6044820152606401610df2565b6000612710601254846131c791906159f1565b6131d19190615a08565b336000908152600c60205260408120805492935085929091906131f5908490615a3d565b92505081905550826011600082825461320e9190615a3d565b9091555050336000908152601c602052604081208054839290613232908490615a2a565b90915550506008805490600061324783615a50565b9091555050336000908152600f60209081526040918290208251608081018452600854815291820184905260075490928201906132849042615a2a565b8152600080516020615ccf833981519152602091820181905283546001808201865560009586528386208551600490930201918255848401519082015560408401516002820155606090930151600390930180546001600160a01b0319166001600160a01b0390941693909317909255908252600a9052600080516020615c6f833981519152805483929061331a908490615a2a565b90915550506040518181523390600080516020615c8f8339815191529060200160405180910390a250506118fb614f9d565b601b818154811061335c57600080fd5b6000918252602090912060069091020180546001820154600283015460038401546004850154600590950154939550919390926001600160a01b03918216911686565b6133a7615204565b506001600160a01b03918216600090815260146020908152604080832093835292815290829020825160808101845281548152600182015492810192909252600281015490931691810191909152600390910154606082015290565b3360009081526020819052604090205460ff166134325760405162461bcd60e51b8152600401610df290615aa9565b6127108111156134845760405162461bcd60e51b815260206004820152601d60248201527f50657263656e746167652063616e6e6f742065786365656420313030250000006044820152606401610df2565b601255565b613491614f67565b3360009081526002602052604090205481106134e75760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840eccae6e8d2dcce40d2dcc8caf605b1b6044820152606401610df2565b33600090815260026020526040812080548390811061350857613508615a69565b906000526020600020906009020190508060070160149054906101000a900460ff161561356a5760405162461bcd60e51b815260206004820152601060248201526f56657374696e6720636f6d706c65746560801b6044820152606401610df2565b600061357633846127a5565b905081600301548110156135c35760405162461bcd60e51b8152602060048201526014602482015273125b9d985b1a590818db185a5b48185b5bdd5b9d60621b6044820152606401610df2565b60008260030154826135d59190615a3d565b9050600081116135f75760405162461bcd60e51b8152600401610df290615a7f565b8083600301600082825461360b9190615a2a565b909155505082546003840154106136325760078301805460ff60a01b1916600160a01b1790555b33600090815260056020526040902054156137435760078301546001600160a01b0390811660008181526004602081905260408083205490516302c68be360e31b81529294670de0b6b3a764000094879492909116926316345f18926136999291016152e4565b602060405180830381865afa1580156136b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136da9190615ae7565b6136e491906159f1565b6136ee9190615a08565b33600090815260056020526040902054909150811061371c5733600090815260056020526040812055613741565b336000908152600560205260408120805483929061373b908490615a3d565b90915550505b505b60078301546001600160a01b03166000908152600660205260408120805483929061376f908490615a3d565b9091555050336000908152600f6020526040808220815160808101909252600980549193839291906137a083615a50565b919050558152602001838152602001600754426137bd9190615a2a565b81526007860180546001600160a01b039081166020938401528454600180820187556000968752848720865160049093020191825585850151908201556040808601516002830155606090950151600390910180546001600160a01b0319169183169190911790559054168352600a905281208054839290613840908490615a2a565b90915550506040513390600080516020615caf8339815191529061386890849060009061544a565b60405180910390a25050506118fb614f9d565b6138af604051806080016040528060008152602001600081526020016000815260200160006001600160a01b031681525090565b6001600160a01b0383166000908152600f60205260408120905b815481101561397457838282815481106138e5576138e5615a69565b906000526020600020906004020160000154036139625781818154811061390e5761390e615a69565b6000918252602091829020604080516080810182526004909302909101805483526001810154938301939093526002830154908201526003909101546001600160a01b031660608201529250610db7915050565b8061396c81615a50565b9150506138c9565b5060405162461bcd60e51b8152600401610df290615c16565b3360009081526020819052604090205460ff166139bc5760405162461bcd60e51b8152600401610df290615aa9565b6001600160a01b0383166139e25760405162461bcd60e51b8152600401610df290615c3f565b6000811180156139f457506127108111155b613a355760405162461bcd60e51b8152602060048201526012602482015271496e76616c69642070657263656e7461676560701b6044820152606401610df2565b6001600160a01b0383166000908152600360205260408120613a569161526b565b6000825b612710821015613af35782612710613a728285615a2a565b1115613a8757613a8483612710615a3d565b90505b6001600160a01b0386166000908152600360209081526040808320815180830190925285825281830185815281546001818101845592865293909420915160029093029091019182559151910155613adf8184615a2a565b9250613aeb8583615a2a565b915050613a5a565b6040516001600160a01b038616907fde4b6ccc38b84f88129403b65a309f9b1c41d4c316bc2118d7614e449b9d4c4590600090a25050505050565b613b36615235565b6010548210613b795760405162461bcd60e51b815260206004820152600f60248201526e115c1bd8da081b9bdd08199bdd5b99608a1b6044820152606401610df2565b506000908152600b6020908152604091829020825160c08101845281548152600182015492810192909252600281015492820192909252600382015460608201526004820154608082015260059091015460a082015290565b60026020528160005260406000208181548110613bee57600080fd5b6000918252602090912060099091020180546001820154600283015460038401546004850154600586015460068701546007880154600890980154969950949750929591949093916001600160a01b03811691600160a01b90910460ff16908a565b6001600160a01b038216600090815260026020526040812080546060928392909185908110613c8157613c81615a69565b600091825260208083206007600990930201918201546001600160a01b03168084526003909152604083205491935091816001600160401b03811115613cc957613cc9615ad1565b604051908082528060200260200182016040528015613cf2578160200160208202803683370190505b5090506000826001600160401b03811115613d0f57613d0f615ad1565b604051908082528060200260200182016040528015613d38578160200160208202803683370190505b50905060005b83811015613de5576001600160a01b0385166000908152600360205260408120805483908110613d7057613d70615a69565b9060005260206000209060020201905080600001548760060154613d949190615a2a565b848381518110613da657613da6615a69565b6020026020010181815250508060010154838381518110613dc957613dc9615a69565b602090810291909101015250613dde81615a50565b9050613d3e565b5090955093505050505b9250929050565b3360009081526020819052604090205460ff16613e255760405162461bcd60e51b8152600401610df290615aa9565b60008115613e5a57600082613e3c866127106159f1565b613e469190615a08565b9050601d54811115613e5857601d8190555b505b60105415613ea0576000600b60006001601054613e779190615a3d565b81526020019081526020016000209050613e9c85848360010154846002015488615044565b9150505b601354811115613eeb5760405162461bcd60e51b81526020600482015260166024820152750aadcd8dec6d640e0cae4c6cadce8c2ceca40d0d2ced60531b6044820152606401610df2565b6040805160c08101825286815260208082018781528284018681526060808501898152608086018881524260a08801908152601080546000908152600b89528a90209851895595516001890155935160028801559051600387015551600486015590516005909401939093555483518881529182018590529281018690527feadbedb993dfca23e4c79bf4fa5fe531c2e0e926258fabb8445e8bc5c472780f910160405180910390a260108054906000613fa483615a50565b91905055505050505050565b6000806000806000613fc186610beb565b90506000613fce876112e6565b6001600160a01b03979097166000908152600c6020908152604080832054600d9092529091205490989297965094509092505050565b6001600160a01b0381166000908152600f60209081526040808320805482518185028101850190935280835260609492939192909184015b8282101561259257600084815260209081902060408051608081018252600486029092018054835260018082015484860152600282015492840192909252600301546001600160a01b03166060830152908352909201910161403c565b600f60205281600052604060002081815481106140b557600080fd5b6000918252602090912060049091020180546001820154600283015460039093015491945092506001600160a01b031684565b3360009081526020819052604090205460ff166141175760405162461bcd60e51b8152600401610df290615aa9565b600755565b601b54606090831061416c5760405162461bcd60e51b8152602060048201526019602482015278537461727420696e646578206f7574206f6620626f756e647360381b6044820152606401610df2565b60006141788385615a2a565b601b5490915081111561418a5750601b545b60006141968583615a3d565b6001600160401b038111156141ad576141ad615ad1565b60405190808252806020026020018201604052801561422957816020015b6142166040518060c001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b8152602001906001900390816141cb5790505b509050845b828110156130b457601b818154811061424957614249615a69565b60009182526020918290206040805160c0810182526006909302909101805483526001810154938301939093526002830154908201526003820154606082015260048201546001600160a01b03908116608083015260059092015490911660a0820152826142b78884615a3d565b815181106142c7576142c7615a69565b602002602001018190525080806142dd90615a50565b91505061422e565b6142ed614f67565b336000908152600f6020526040902080546143405760405162461bcd60e51b81526020600482015260136024820152724e6f207374616b657320617661696c61626c6560681b6044820152606401610df2565b816143855760405162461bcd60e51b8152602060048201526015602482015274139bc81cdd185ad94812511cc81c1c9bdd9a591959605a1b6044820152606401610df2565b60005b828110156145145760008484838181106143a4576143a4615a69565b9050602002013590506000805b84548110156144e15760008582815481106143ce576143ce615a69565b906000526020600020906004020190508381600001541480156143f5575060008160010154115b156144ce57806002015442101561443d5760405162461bcd60e51b815260206004820152600c60248201526b14dd185ad9481b1bd8dad95960a21b6044820152606401610df2565b60018101805460038301546000928390556001600160a01b0316808352600a60205260408320805492939192849290614477908490615a3d565b9091555061449190506001600160a01b0382163384614fae565b336001600160a01b0316600080516020615d2f83398151915283886040516144ba92919061544a565b60405180910390a2600194505050506144e1565b50806144d981615a50565b9150506143b1565b50806144ff5760405162461bcd60e51b8152600401610df290615c16565b5050808061450c90615a50565b915050614388565b50506112ae614f9d565b60608060008061452d856112e6565b6001600160a01b0386166000908152600e602052604081205460105492935091614558908390615a3d565b9050806000036145895750506040805160008082526020820181815282840190935290955090935091506146ef9050565b806001600160401b038111156145a1576145a1615ad1565b6040519080825280602002602001820160405280156145ca578160200160208202803683370190505b509550806001600160401b038111156145e5576145e5615ad1565b60405190808252806020026020018201604052801561460e578160200160208202803683370190505b50945060005b818110156146ea5760006146288285615a2a565b90508088838151811061463d5761463d615a69565b602090810291909101015284156146b6576000818152600b60205260408120600401546127109061466e90886159f1565b6146789190615a08565b90508088848151811061468d5761468d615a69565b60209081029190910101526146a28188615a2a565b96506146ae8187615a3d565b9550506146d7565b60008783815181106146ca576146ca615a69565b6020026020010181815250505b50806146e281615a50565b915050614614565b505050505b9193909250565b6146fe614f67565b6001600160a01b03821660009081526014602090815260408083208484529091529020805461473f5760405162461bcd60e51b8152600401610df290615bad565b336001600160a01b038416036147905760405162461bcd60e51b815260206004820152601660248201527543616e6e6f7420627579206f776e206c697374696e6760501b6044820152606401610df2565b80546001820154600383015460008284116147ac5760006147b6565b6147b68385615a3d565b90506000846147c7836127106159f1565b6147d19190615a08565b905060006127106147e283806159f1565b6147ec9190615a08565b905060006127106147fd83896159f1565b6148079190615a08565b905060006148158289615a3d565b9050614831600080516020615ccf833981519152338d8a6150f2565b6001600160a01b038b166000908152600c6020526040812080548a9290614859908490615a3d565b9091555050336000908152600c60205260408120805483929061487d908490615a2a565b90915550506001600160a01b038b16600090815260186020526040812080548a92906148aa908490615a3d565b9091555050336000908152600d6020526040812080548392906148ce908490615a2a565b9250508190555081601160008282546148e79190615a3d565b90915550506001600160a01b038b1660009081526017602052604081208054899290614914908490615a2a565b92505081905550601b6040518060c001604052808881526020014281526020018a81526020018981526020018d6001600160a01b03168152602001336001600160a01b031681525090806001815401808255809150506001900390600052602060002090600602016000909190919091506000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060a08201518160050160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505050601460008c6001600160a01b03166001600160a01b0316815260200190815260200160002060008b815260200190815260200160002060008082016000905560018201600090556002820160006101000a8154906001600160a01b030219169055600382016000905550506000601a60008d6001600160a01b03166001600160a01b0316815260200190815260200160002060008c815260200190815260200160002054905060006001601980549050614ac39190615a3d565b9050808214614b8457600060198281548110614ae157614ae1615a69565b60009182526020918290206040805180820190915260029092020180546001600160a01b03168252600101549181019190915260198054919250829185908110614b2d57614b2d615a69565b6000918252602080832084516002939093020180546001600160a01b0319166001600160a01b03938416178155938101516001909401939093558351168152601a8252604080822093830151825292909152208290555b6019805480614b9557614b95615c00565b6001900381819060005260206000209060020201600080820160006101000a8154906001600160a01b030219169055600182016000905550509055601a60008e6001600160a01b03166001600160a01b0316815260200190815260200160002060008d815260200190815260200160002060009055336001600160a01b03168d6001600160a01b03167f7bb39d095b04a9986ed34adf14d74c33294d0a9e807f02bf634d532507422eba8b8f604051614c4f92919061544a565b60405180910390a350505050505050505050506112ae614f9d565b33600090815260146020908152604080832085845290915290208054614ca25760405162461bcd60e51b8152600401610df290615bad565b60028101546001600160a01b03163314614cce5760405162461bcd60e51b8152600401610df290615bd8565b60008211614cee5760405162461bcd60e51b8152600401610df290615b51565b600181018290556040513390600080516020615cef83398151915290614d17908590879061544a565b60405180910390a2505050565b3360009081526001602052604090205460ff16614d535760405162461bcd60e51b8152600401610df290615aa9565b6001600160a01b038516614da05760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642075736572206164647265737360601b6044820152606401610df2565b60008411614dc05760405162461bcd60e51b8152600401610df290615b29565b6001600160a01b038216614de65760405162461bcd60e51b8152600401610df290615c3f565b60088054906000614df683615a50565b9190505550600081614e0a57600854614e1a565b600854614e1a90620f4240615a2a565b6001600160a01b038781166000908152600f6020908152604080832081516080810183528681528084018c81528184018c81528b881660608401818152855460018082018855968a52888a209551600490910290950194855592519484019490945551600283015551600390910180546001600160a01b0319169190961617909455928252600a905290812080549293508792909190614ebb908490615a2a565b92505081905550856001600160a01b0316600080516020615d2f8339815191528683604051612f0e92919061544a565b3360009081526020819052604090205460ff16614f1a5760405162461bcd60e51b8152600401610df290615aa9565b6001600160a01b038116614f405760405162461bcd60e51b8152600401610df290615b00565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6000614f71615131565b805490915060011901614f9757604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b6000614fa7615131565b6001905550565b61500683846001600160a01b031663a9059cbb8585604051602401614fd4929190615431565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050615155565b505050565b6000807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610db7565b61503c6151bd565b610f816151e2565b6000821580615051575084155b1561505e575060006150e9565b60008561506d886127106159f1565b6150779190615a08565b9050600084615088876127106159f1565b6150929190615a08565b9050601d548210156150a9576000925050506150e9565b8082116150bb576000925050506150e9565b60006150c78284615a3d565b905060006127106150d887846159f1565b6150e29190615a08565b9450505050505b95945050505050565b6040516001600160a01b03848116602483015283811660448301526064820183905261512b9186918216906323b872dd90608401614fd4565b50505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0090565b600080602060008451602086016000885af180615178576040513d6000823e3d81fd5b50506000513d9150811561519057806001141561519d565b6001600160a01b0384163b155b1561512b5783604051635274afe760e01b8152600401610df291906152e4565b6151c56151ea565b610f8157604051631afcd79f60e31b815260040160405180910390fd5b614f9d6151bd565b60006151f461500b565b54600160401b900460ff16919050565b6040518060800160405280600081526020016000815260200160006001600160a01b03168152602001600081525090565b6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b50805460008255600202906000526020600020908101906118fb91905b808211156152a25760008082556001820155600201615288565b5090565b80356001600160a01b03811681146152bd57600080fd5b919050565b6000602082840312156152d457600080fd5b6152dd826152a6565b9392505050565b6001600160a01b0391909116815260200190565b6000806040838503121561530b57600080fd5b615314836152a6565b946020939093013593505050565b60008083601f84011261533457600080fd5b5081356001600160401b0381111561534b57600080fd5b6020830191508360208260051b8501011115613def57600080fd5b6000806020838503121561537957600080fd5b82356001600160401b0381111561538f57600080fd5b61539b85828601615322565b90969095509350505050565b6000602082840312156153b957600080fd5b5035919050565b600081518084526020808501945080840160005b838110156153f0578151875295820195908201906001016153d4565b509495945050505050565b60608152600061540e60608301866153c0565b828103602084015261542081866153c0565b915050826040830152949350505050565b6001600160a01b03929092168252602082015260400190565b918252602082015260400190565b6000806000806040858703121561546e57600080fd5b84356001600160401b038082111561548557600080fd5b61549188838901615322565b909650945060208701359150808211156154aa57600080fd5b506154b787828801615322565b95989497509550505050565b600080604083850312156154d657600080fd5b50508035926020909101359150565b80518252602080820151908301526040808201516001600160a01b031690830152606090810151910152565b60608082528451908201819052600090608090818401906020808901855b838110156155545781516001600160a01b03168552938201939082019060010161552f565b50508583038187015261556783896153c0565b868103604088015287518082528289019450908201925060005b818110156155a4576155948486516154e5565b9382019392850192600101615581565b50919998505050505050505050565b600080604083850312156155c657600080fd5b6155cf836152a6565b91506155dd602084016152a6565b90509250929050565b600080600080600080600080610100898b03121561560357600080fd5b61560c896152a6565b975060208901359650604089013595506060890135945061562f60808a016152a6565b979a969950949793969560a0850135955060c08501359460e001359350915050565b602080825282518282018190526000919060409081850190868401855b828110156156f25781518051855286810151878601528581015186860152606080820151908601526080808201519086015260a0808201519086015260c0808201519086015260e0808201516001600160a01b031690860152610100808201511515908601526101209081015190850152610140909301929085019060010161566e565b5091979650505050505050565b60008060008060008060c0878903121561571857600080fd5b615721876152a6565b9550602087013594506040870135935060608701359250615744608088016152a6565b915060a087013590509295509295509295565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a08301525050565b6020808252825182820181905260009190848201906040850190845b818110156157d3576157c0838551615757565b9284019260c092909201916001016157ad565b50909695505050505050565b60808101610db782846154e5565b8051825260208082015190830152604080820151908301526060908101516001600160a01b0316910152565b60808101610db782846157ed565b60008060006060848603121561583c57600080fd5b615845846152a6565b95602085013595506040909401359392505050565b60c08101610db78284615757565b60408152600061587b60408301856153c0565b82810360208401526150e981856153c0565b600080600080608085870312156158a357600080fd5b5050823594602084013594506040840135936060013592509050565b6020808252825182820181905260009190848201906040850190845b818110156157d3576158ee8385516157ed565b92840192608092909201916001016158db565b602080825282518282018190526000919060409081850190868401855b828110156156f25781518051855286810151878601528581015186860152606080820151908601526080808201516001600160a01b039081169187019190915260a091820151169085015260c0909301929085019060010161591e565b600080600080600060a0868803121561599357600080fd5b61599c866152a6565b945060208601359350604086013592506159b8606087016152a6565b9150608086013580151581146159cd57600080fd5b809150509295509295909350565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610db757610db76159db565b600082615a2557634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610db757610db76159db565b81810381811115610db757610db76159db565b600060018201615a6257615a626159db565b5060010190565b634e487b7160e01b600052603260045260246000fd5b60208082526010908201526f4e6f7468696e6720746f20636c61696d60801b604082015260600190565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b634e487b7160e01b600052604160045260246000fd5b600060208284031215615af957600080fd5b5051919050565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b6020808252600e908201526d125b9d985b1a5908185b5bdd5b9d60921b604082015260600190565b602080825260129082015271496e76616c69642073616c6520707269636560701b604082015260600190565b602080825260169082015275496e73756666696369656e74206e6574207374616b6560501b604082015260600190565b602080825260119082015270131a5cdd1a5b99c81b9bdd08199bdd5b99607a1b604082015260600190565b6020808252600e908201526d2737ba103a34329039b2b63632b960911b604082015260600190565b634e487b7160e01b600052603160045260246000fd5b6020808252600f908201526e14dd185ad9481b9bdd08199bdd5b99608a1b604082015260600190565b602080825260159082015274496e76616c696420746f6b656e206164647265737360581b60408201526060019056feb0775d57c3eeb070f58d410e36e9ff396813a5d76997d9a91bdf10f0798296f0a65a8b4f7f65a1063243d7f7e9e4da00ff767599acf21549ef2548a45d1695ae4a94c2c356e29a6583071e731bdacf2ca56565ba5efebcff6936eb7923b5172100000000000000000000000055d398326f99059ff775485246999027b31979558e79b7ba8dab5ebfa59b9c6af1743c3ef14863680b3cc5ac837f8d636f76031ca92ff919b850e4909ab2261d907ef955f11bc1716733a6cbece38d163a69af8a933735aa8de6d7547d0126171b2f31b9c34dd00f3ecd4be85a0ba047db4fafefa2646970667358221220c8b39bc364af48f03e5e506c54c206562f38e806902f8ca765430d8cbb08f93d64736f6c63430008140033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/CunaFinanceBsc.sol b/contracts/CunaFinanceBsc.sol index f96aa9f..949b348 100644 --- a/contracts/CunaFinanceBsc.sol +++ b/contracts/CunaFinanceBsc.sol @@ -114,6 +114,7 @@ contract CunaFinanceBsc is Initializable, ReentrancyGuardUpgradeable { mapping(address => mapping(uint256 => uint256)) private sellStakeKeyIndex; // Track position in keys array MarketplaceHistory[] public marketplaceHistory; // Complete history of all transactions mapping(address => uint256) public totalClaimed; // Track total amount claimed and sent to withdrawStakes per user + uint256 public highestRatio; // Track the highest TVL/liability ratio ever achieved (scaled by 10000) // Events event VestingClaimed(address indexed user, uint256 amount, uint256 bonus); @@ -196,6 +197,10 @@ contract CunaFinanceBsc is Initializable, ReentrancyGuardUpgradeable { maxUnlockPercentage = _maxPercentage; } + function updateHighestRatio(uint256 _highestRatio) external onlyOwner { + highestRatio = _highestRatio; + } + function withdrawFromVestingPool(address _token, uint256 _amount) external onlyOwner { IERC20(_token).safeTransfer(msg.sender, _amount); emit FundsWithdrawn(msg.sender, _token, _amount); @@ -300,29 +305,34 @@ contract CunaFinanceBsc is Initializable, ReentrancyGuardUpgradeable { /// @notice Internal function to calculate unlock percentage based on TVL/liability ratio improvement /// @dev Formula: (current_tvl / current_liability) - (last_tvl / last_liability) * payback_percent function calculateUnlockPercentage( - uint256 currentTvl, + uint256 currentTvl, uint256 currentLiability, - uint256 lastTvl, + uint256 lastTvl, uint256 lastLiability, uint256 paybackPercent - ) internal pure returns (uint256) { - + ) internal view returns (uint256) { + if (lastLiability == 0 || currentLiability == 0) { return 0; // Safety check } - + // Calculate ratios (scaled by 10000 for precision) uint256 currentRatio = (currentTvl * 10000) / currentLiability; uint256 lastRatio = (lastTvl * 10000) / lastLiability; - + + // Check if current ratio is below the highest ratio ever achieved + if (currentRatio < highestRatio) { + return 0; // No unlock if we're below historical high + } + if (currentRatio <= lastRatio) { return 0; // No unlock if ratio didn't improve } - + // Ratio improvement * payback percentage uint256 ratioImprovement = currentRatio - lastRatio; uint256 unlockPercentage = (ratioImprovement * paybackPercent) / 10000; - + return unlockPercentage; } @@ -332,11 +342,19 @@ contract CunaFinanceBsc is Initializable, ReentrancyGuardUpgradeable { /// @param _paybackPercent Percentage multiplier for unlock calculation (scaled by 10000) function endEpoch(uint256 estDaysRemaining, uint256 currentTreasuryTvl, uint256 _paybackPercent, uint256 _currentLiability) external onlyOwner { uint256 unlockPercentage = 0; - + + // Calculate current ratio and update highest ratio if necessary + if (_currentLiability > 0) { + uint256 currentRatio = (currentTreasuryTvl * 10000) / _currentLiability; + if (currentRatio > highestRatio) { + highestRatio = currentRatio; + } + } + if (currentEpochId > 0) { // Get previous epoch data Epoch storage lastEpoch = epochs[currentEpochId - 1]; - + unlockPercentage = calculateUnlockPercentage( currentTreasuryTvl, _currentLiability, @@ -345,20 +363,20 @@ contract CunaFinanceBsc is Initializable, ReentrancyGuardUpgradeable { _paybackPercent ); } - + // Check that unlock percentage doesn't exceed maximum require(unlockPercentage <= maxUnlockPercentage, "Unlock percentage high"); - + // Create new epoch entry epochs[currentEpochId] = Epoch({ estDaysRemaining: estDaysRemaining, currentTreasuryTvl: currentTreasuryTvl, - totalLiability: totalBigStakes, + totalLiability: _currentLiability, paybackPercent: _paybackPercent, unlockPercentage: unlockPercentage, timestamp: block.timestamp }); - + emit EpochEnded(currentEpochId, currentTreasuryTvl, unlockPercentage, _paybackPercent); currentEpochId++; } @@ -1241,39 +1259,39 @@ contract CunaFinanceBsc is Initializable, ReentrancyGuardUpgradeable { return totalClaimed[user]; } - /// @notice Search marketplace history for stakes where address was seller or buyer - /// @param targetAddress The address to search for as seller or buyer - /// @return Array of MarketplaceHistory structs where address was involved - function searchMarketplaceHistory(address targetAddress) external view returns (MarketplaceHistory[] memory) { - require(targetAddress != address(0), "Invalid address"); - - // Count matches first to size the result array properly - uint256 matchCount = 0; - for (uint256 i = 0; i < marketplaceHistory.length; i++) { - if (marketplaceHistory[i].seller == targetAddress || marketplaceHistory[i].buyer == targetAddress) { - matchCount++; - } - } - - // Return empty array if no matches - if (matchCount == 0) { - return new MarketplaceHistory[](0); - } - - // Create result array with exact size needed - MarketplaceHistory[] memory result = new MarketplaceHistory[](matchCount); - uint256 resultIndex = 0; - - // Populate result array - for (uint256 i = 0; i < marketplaceHistory.length; i++) { - if (marketplaceHistory[i].seller == targetAddress || marketplaceHistory[i].buyer == targetAddress) { - result[resultIndex] = marketplaceHistory[i]; - resultIndex++; - } - } - - return result; - } + // /// @notice Search marketplace history for stakes where address was seller or buyer + // /// @param targetAddress The address to search for as seller or buyer + // /// @return Array of MarketplaceHistory structs where address was involved + // function searchMarketplaceHistory(address targetAddress) external view returns (MarketplaceHistory[] memory) { + // require(targetAddress != address(0), "Invalid address"); + + // // Count matches first to size the result array properly + // uint256 matchCount = 0; + // for (uint256 i = 0; i < marketplaceHistory.length; i++) { + // if (marketplaceHistory[i].seller == targetAddress || marketplaceHistory[i].buyer == targetAddress) { + // matchCount++; + // } + // } + + // // Return empty array if no matches + // if (matchCount == 0) { + // return new MarketplaceHistory[](0); + // } + + // // Create result array with exact size needed + // MarketplaceHistory[] memory result = new MarketplaceHistory[](matchCount); + // uint256 resultIndex = 0; + + // // Populate result array + // for (uint256 i = 0; i < marketplaceHistory.length; i++) { + // if (marketplaceHistory[i].seller == targetAddress || marketplaceHistory[i].buyer == targetAddress) { + // result[resultIndex] = marketplaceHistory[i]; + // resultIndex++; + // } + // } + + // return result; + // } /// @notice Test function for upgrade verification /// @return Returns a constant value to verify upgrade worked